Mit kell megtalálni?
- Megosztott / gyenge hitelesítő adatok gépek között
- Elavult csomagok, EOL disztribúciók
- Zombi gépek, gazdátlan fiókok
- Szolgáltatás-függőségek a leállítás-tervezéshez
A specifikáció a szerződés, a dokumentum a kód — az ember dönt, az AI végrehajt. Egy módszertan — házépítés-hasonlattal, valódi példával, és azzal, hogy hogyan épül így egy alkalmazás lépésről lépésre — nem kódot írunk, a kód csak eszköz.
Document = Code · 11 axióma — alaptörvény · 4 szereplő · 2 kapu · TdD — teszt-vezérelt · EARS-követelmények · git · kis diff · pipeline-forge · entity-forge · ~500 Linux VM — valós rendszer
Az SdD lánc nem absztrakció. Mindenki el tud képzelni egy házépítést — és azt is, mi történik tervrajz nélkül. Nézzük végig ugyanazzal a négy emberi szereplővel, mint a módszertan — a tervrajztól a beköltözésig.
| Mozzanat — élőben | SdD lépés | Ki cselekszik |
|---|---|---|
| A család: „3 hálószoba, déli kert, 140M Ft keret" | szándék | Megrendelő ember (BA) |
| Az építész engedélyezési tervet rajzol (statika, alaprajz, szabvány) | spec (SDD/BRD) | Építész ember (BA/architekt) |
| Kiviteli terv + ütemterv + anyaglista | terv → feladatok | Építész + AI ember + AI |
| A terv előre rögzíti a mércét: C25/30 beton — és a betonozáskor próbakockát vesznek belőle | teszt (TdD) a mérce előbb van, mint a fal | Építész + Kivitelező ember + AI |
| A brigád a terv szerint falaz/betonoz — nem improvizál | kód / kivitelezés | Kivitelező AI |
| A brigád ellenőrzi: vízszintben a fal, köt-e a beton | gépi ellenőrzés (még nem a kapu) | Kivitelező AI |
| A műszaki ellenőr összeveti a megépült házat a tervvel és a szabvánnyal | verifikáció „jól építettük meg?" | Műszaki ellenőr ember |
| A hatóság kiadja a használatbavételi (lakhatási) engedélyt — jogszabály és szabvány szerint, a megrendelőtől függetlenül | megfelelőségi kapu „szabad-e egyáltalán használatba venni?" | Hatóság ember (független) |
| A család átveszi: azt kaptuk-e, amire szükségünk volt? | validáció / átvétel „a jót építettük meg?" | Megrendelő ember (QA) |
| A család beköltözik; rossz a konyha → új igény az építészhez | használat → új szándék | Lakó ember (végfelhasználó) |
Három ember, három kérdés — ezért nem helyettesíti egymást: a műszaki ellenőr a terv szerinti kivitelezést nézi (verifikáció), a hatóság a jogszabályt és a szabványt (megfelelőség — nálunk: biztonsági review, audit-hook, CI-szabály), a család pedig azt, hogy ez volt-e az, amire szüksége volt (validáció). A hatóság kiadhatja az engedélyt egy olyan házra is, amiben a család nem szeret lakni.
Az ellenpélda — „vibe építkezés": a brigád tervrajz nélkül kezd falazni („majd menet közben kialakul"). A ház áll… amíg jön az első statikai teher. Senki nem tudja miért áll úgy — mert a ház maga az egyetlen dokumentáció; a bontás az egyetlen „refaktor".
A tervrajz a szerződés — de fölötte ott a szabvány: a platform 11 axiómája, az alaptörvény.
Linux VM
hypervisor host (6 VMware + 4 Hyper-V)
disztribúció-család (CentOS 4–8, OEL 4–9, Debian, SUSE…)
EOL rendszer · technikai adósság
infra.vm_config), azt tükrözi az opentofu-vm-create repóba, és a CI hajtja végre a vSphere felé — az infra-forge maga sosem provisionál, és vCenter-jelszót sem lát.basic-configuration-all kézi CI-job-ja futtatja a VM-en, operátori PAT-tal — és újraindítja a gépet. Az infra-forge csak olvassa a kívánt állapotot: az OPS-sync_base_config naponta (0 6 * * *) beolvassa a hu.admin.infra/basic_configuration repót infra.base_config draft sorokba, amiket a /base-config emberi kapu aktivál — ez lesz a drift-összehasonlítás alapja. Ami befagyott, az az infra-forge-cd — az Ansible provisioning ága —, nem maga az Ansible.A kérdés nem az volt, hogy tud-e segíteni az AI — hanem hogy hogyan tartjuk szabályozott keretek között, miközben a fejlesztést is rá bízzuk. Erre a válasz a Spec-driven Development.
A házon: A telek, amin 20 év alatt toldás toldásra épült — terv nélkül; ma senki nem tudja biztosan, melyik fal tartó. · SdD-ben: Itt kezdődik a lánc: felmérés és szándék (
brief.md) — mielőtt bárki tervet rajzolna.
01 — mit és miért (ember)
02 — requirements (EARS) (ember + AI)
03 — design — a „hogyan" (ember + AI)
04 — tasks — függőségi lánc (AI)
05 · TdD · RED — a kikötés kódra fordítva — a kód előtt (ember + AI)
06 · TdD · GREEN — a kivitelezés — kód, amíg a teszt zöld nem lesz (AI)
07 — build · teljes tesztfutás · review (AI + ember)
08 — átvétel — „a jót építettük?" (ember (QA))
09 — az alkalmazás üzemel — és az első hiányból új szándék lesz (ember (végfelhasználó))
Az ember dönt, az AI végrehajt. Az 05–06 lépéspár a TdD: a teszt előbb születik, mint a kód — róla külön dia lesz. A lánc két emberi kapuval zárul (A9): Verifikáció (a review emberi része) + Validáció (a QA-átvétel) — pontosan a ház: a műszaki ellenőr azt nézi, a terv szerint épült-e meg, a család azt, hogy azt kapta-e, amire szüksége volt. A 09 pedig zárja a kört: a ház nem a kulcsátadásnál ér véget — a család beköltözik, és amit ott hiányol, az lesz a következő szándék. A termék az üzemelő alkalmazás, nem a beolvasztott kód.
Egy nem-triviális feature spec-mappája — hat fájl, minden réteg egy, az irány fentről lefelé. A brief.md (2026-07-13 óta) és a tests.md (2026-09-09 óta) minden új specnél kötelező — az infra/library tiernél is; a korábbi specek grandfatherelve maradnak, ezért látsz a repóban régebbi, ötfájlos mappákat is.
docs/specs/<feature>/
├── brief.md # BRD — miért / kinek / siker
├── requirements.md # SRS — MIT · EARS (U/E/S/X/O)
├── design.md # SDD — HOGYAN · enforcement-térkép
├── tasks.md # a munka + bizonyíték · checklist
├── tests.md # TdD — a kikötés, ami bukni tud, a kód ELŐTT
└── audit.md # adverz review · findings + kockázat
G1 → E5 → T6. docs/specs/fleet-collection/ (belső GitLab) — requirements · design · tasks · audit. Ez egy grandfatherelt, a mandátumoknál korábbi spec, ezért nincs benne brief.md és tests.md; a fenti hatfájlos alak az új specek szerződése.# U — Ubiquitous (mindig igaz)
U1 [x] the collector shall replace every sensitive field with a {{type:hash}} marker before any write to infra.*
U2 [x] original sensitive values shall live only in secrets.*, AES-GCM encrypted
U3 [x] each host shall yield OS · users+sudo · services · packages · network in one transaction
# E — Event-driven (When …)
E1 [x] When the schedule fires (0 */6), ops_fleet_cycle shall run pre-collect → collect, in order
# a drift-láb 2026-09-09 óta kikapcsolva (befagyasztott cél-repó)
E2 [x] When durable state is unchanged, content_hash shall stay identical (no new SCD2 version)
# X — Unwanted (If … then …)
X1 [x] If infra_ai queries secrets.*, then the DB shall deny access
# O — Optional (Where … enabled)
O1 [~] Where SMTP is set, notify_fleet_collect shall email a summary; else soft-fail
A státuszjel az SSOT: [x] verifikált · [~] részleges · [ ] nyitott. Ez a „MIT"; a design.md a „HOGYAN".
A házon: család (szándék) → építész (engedélyezési terv) → kiviteli terv → próbakocka a betonozáskor → brigád → műszaki ellenőr → a család átveszi → beköltözés. · SdD-ben: 01 → 02–03 → 04 → 05 TdD → 06 → 07 → 08 → 09 — ugyanaz a kilenc lépés, ugyanazokkal a kapukkal.
Nagy nyelvi modell — egy modelltípus a sok közül (van beágyazó-, rerank-, látómodell is). Szövegből szöveget jósol. A súlyai nem változnak attól, hogy beszélgetsz vele — magától nem szerez új tudást; amit tud, az a tanítás + amit most a kontextusába tettek.
A szöveg „atomja" (~¾ szó). Minden bemenet és kimenet tokenekben mérődik — és tokenekben kerül pénzbe.
Amit a modell egyszerre lát — és semmi mást. Nem végtelen: néhány száz oldalnyi szöveg fér bele, a repónk ennek a sokszorosa. Ami nincs benne, az a modell számára nem létezik — hiába van a repóban. A session végén kiürül — de nem a tudás vész el, hanem a munkamemória: a következő session a repóból, a szabályfájlokból és a memóriából újraépíti.
A teljes bemenet: feladat + szabályok + kontextus. A „prompt engineering" valójában kontextus-szerkesztés.
1 — feladat + betöltött szabályok
2 — lépésekre bontás
3 — fájl · shell · DB
4 — eredmény vissza a kontextusba
5 — amíg a cél nem teljesül
6 — build · teszt · jelentés
Az agent négy arca — ki irányítja a lépéseket?
LLM + eszközök + ciklus (a fenti hat lépés). Nem csak válaszol: fájlt ír, parancsot futtat, tesztet indít.
Nálunk: egy Claude Code session.
A lépések sorrendjét az ember rögzíti előre; az AI a lépéseken belül dolgozik. Kiszámítható, ismételhető.
Nálunk: az SdD lánc és a Markdown-pipeline-ok.
Több agent, szétosztott szerepekkel, párhuzamosan — mindegyik a saját, kisebb kontextusával. Egy koordinátor fogja össze.
Nálunk: fork-ok — a tasks.md független feladatait párhuzamosan implementálják, mindegyik a saját ágán, a saját bukó tesztjével (TdD); a végén kód-, DB-, UI- és biztonsági reviewer egyszerre.
Egy célt kap, és maga dönti el a lépéseket — lépésenkénti emberi jóváhagyás nélkül, amíg a cél nem teljesül.
De honnan tudja, hogy teljesült? A TdD-tesztből: a piros → zöld a megállási feltétel. Teszt nélkül az autonómia csak magabiztos találgatás.
Nálunk: olvasni önállóan — minden írás kapun megy át (A6).
Az LLM statisztikai szövegjósló: a súlyai nem változnak a beszélgetéstől, és amit az aktuális kontextus vagy az eszközei nem hoztak be, arra abban a lépésben nem tud támaszkodni — csak újrakombinál, és magabiztosan téved. (Friss tényhez az agent jut hozzá: fájlt olvas, DB-t kérdez, eszközt hív.) A context window ráadásul véges — nem fér bele a rendszer, tehát minden session választ, mit olvas be. Ezért tesszük a tudást dokumentumokba, amit minden session újratölt: az aranyhal-memóriájú agentnek a repo a memóriája. A modell felejt — a platform nem. Mint a Memento hőse: nincs hosszú távú memóriája, minden nap emlékek nélkül kezdődik — ezért mindent leír (cetli, polaroid, tetoválás), és abból rakja össze, hol tart. Minden session egy ilyen új nap.
Hogyan olvassa az AI a repót? — a szabály-hierarchia
betöltés: session start — all_rules_for_claude.md + 00_axioms.md — csak a L1 kerül be kényszeredetten
betöltés: session start — infra-forge-specifikus delták, státusz, tiltások
betöltés: session start — hooks · skills · memory · MCP konfiguráció
igény szerint · RAG — amit a feladat megkíván — az agent olvassa be, vagy vektortárból keres vissza
Mi az LLM valójában? — és miért következik belőle az SdD
Következő-token-jóslás: tanult mintázat-folytatás, nem megértés. A magabiztos hang nem igazság-garancia.
→ ezért SdD: a kimenetet verifikálni kell — a leforduló kód még nem működő funkció.
A tréningadatán és a kontextuson túl nem hoz új tudást; a meglévőből viszont új kombinációt állít elő. Nem felfedez — újrarendez.
→ ezért SdD: az üzleti igazságot (szabály, döntés, scope) neked kell megadnod — dokumentumként.
A temperature azt állítja, milyen messze merészkedik a legvalószínűbb úttól. A tiszta véletlen zaj; a hasznos újdonság meglepő ÉS koherens.
→ ezért SdD: a spec és a szabályok a koherencia-korlát — bennük szabad, kívül kontrollált.
Terminálban futó agent. Olvassa a repót, szerkeszt, buildel, commitol — a projekt szabályfájljai szerint.
Új viselkedést nem „promptolgatással" érünk el, hanem a szabályfájl módosításával — ami diffelhető, review-zható, és minden jövőbeli session örökli.
A házon: A brigád minden reggel emlékezet nélkül érkezik: a tervrajzból és az építési naplóból tudja, hol tart. · SdD-ben: A spec, a szabályok és a git log az AI memóriája; a context window az aznapi munkaasztal.
Nem IDE-plugin és nem varázsdoboz: egy terminál, egy munkaterület-gyökér, és mellette egymás mellett a repók. Aki Eclipse-ben workspace-t használt, annak ez ismerős — a különbség az, hogy itt a szabályok is a munkaterületen laknak, nem a wikiben.
development-platform/ # a munkaterület gyökere
├── CLAUDE.md # a platform szerződése — minden session betölti
├── docs/
│ ├── 00_axioms.md # L1 — a 11 axióma
│ ├── rules/ # L2 — DB · BE · FE · security · deploy
│ └── specs/<feature>/ # a specifikációk
├── .claude/ # hooks · skills · MCP · memory
│ # ── a GitLab projektek, egymás mellett ──
├── infra-forge/ # IT cockpit — VM-ek, fleet-leltár
├── opentofu-vm-create/ # VM-létrehozás OpenTofu-val
├── vcenter-collector/ # vCenter-adatgyűjtés
├── infra-forge-cd/ # Ansible-ág — lezárva
├── jiramntr/ # JIRA adattárház
├── admin-knowledge/ # IT tudástár
├── iier-tudastar/ # IIER tudástár
├── kovacs-muhely/ # a tudástárak betöltője (RAG)
└── iiriki/ # IIER wiki
.properties a szerveren..env_<HOST>), titkosított vault-ban.A lényeg egy mondatban: a repo a fejlesztői környezet. Ami nincs a repóban — szabály, döntés, konfiguráció, tudás — az a felejtő agent számára nem létezik. Ezért kerül minden fájlba, és ezért lesz minden fájl diffelhető.
| Eddig | Most | Miért jobb az AI-nak |
|---|---|---|
| Eclipse / IntelliJ workspace | development-platform/ munkaterület + terminál |
Az agent fájlokat és parancsokat lát, nem ablakokat. |
| Confluence-oldal a konvenciókról | CLAUDE.md + docs/rules/ |
Verziózott, diffelhető, és a session tényleg beolvassa. |
config.properties a szerveren |
env-profil + vault | Nincs „a teszten működött" — a profil a gépé, nem a kódé. |
| Jenkins-job leírás a fejekben | pipeline .md a repóban |
Az orchestráció is adat, nem szóbeli hagyomány. |
| „Kérdezd meg Zolit" | spec-mappa + RAG-visszakeresés | A tudás nem megy szabadságra. |
A házon: Az építési terület: a tervtár, a szabványok és a szomszéd épületek egy telken. · SdD-ben: A szabályok és a specek ugyanott laknak, ahol a kód — munka közben olvashatók, nem egy távoli wikiben.
A git nálunk nem divat, hanem a módszertan hordozója. Ha az AI írja a kód nagy részét, akkor az egyetlen dolog, amit az ember végig kézben tart, a változás — és a git pontosan azt teszi olvashatóvá, felülvizsgálhatóvá és visszavonhatóvá.
SVN-ben az ág szervezési döntés volt, és fájt. Gitben egy ág egy kísérlet: az AI-t ráengeded, megnézed, és vagy bejön, vagy eldobod. Az eldobás nulla költségű — ettől mersz kísérletezni.
Nem a kész terméket nézed át, hanem egy kicsi, indokolt változást. Egy néhány tucat soros diffet még érdemben át lehet nézni; egy több száz soros változásnál a review könnyen csak jóváhagyássá válik. A kettő között nem a figyelem vész el, hanem a kapu maga.
Ki, mit, mikor, és melyik spec alapján. Az AI-val végzett munka auditálhatósága nem külön rendszer — a git log maga az. (Mindjárt látunk egy idővonalat pontosan ebből.)
Vibe codingnál a git csak mentés. Spec-driven fejlesztésnél a git a kontrollpont. Az ember nem minden sort ír — de minden sort átenged. Ez a különbség, és a git teszi elvégezhetővé.
És itt a fogás: az AI-nak nincs fáradtságjelzése. Nem érzi, hogy nagy a diff — boldogan ír 2000 sort egy kérésre. Az ember viszont fárad, és a fáradt review pecsételéssé válik. Ezért a diff méretét előre, a specben és a taskokban kell korlátozni, nem utólag a review-n. A kis diff nem stílus — ez tartja életben az emberi kaput (A10).
main-ről, saját commitot, saját MR-t.git add -p — csak az első javítás sorait stage-eled, a többi git stash vagy külön commit.git switch main && git pull
git switch -c fix/masodik-hiba
# javítás → commit → külön MR
A kapu a review: ha a diff a követelményen kívüli fájlt vagy sort érint, az MR visszamegy — „vágd ketté". Cserébe mindkét javítás külön visszavonható, és a git bisect egyetlen okra mutat.
Java-hasonlat: ez ugyanaz a fegyelem, amit a jó commit-kultúrától mindig is vártunk — csak most nem opcionális. Amíg ember gépelt, a diff magától kicsi maradt, mert lassan nőtt. Egy gép mellett a méret korlátját szándékosan kell odatenni.
| SVN | git | A lényegi különbség |
|---|---|---|
svn checkout |
git clone |
A teljes történetet kapod meg, nem egy pillanatképet — offline is nézheted. |
svn update |
git pull |
Két lépés egyben: letöltés + beolvasztás. A letöltés önmagában ártalmatlan. |
svn commit |
git commit → git push |
Kettéválik. A commit helyi és ingyenes — nyugodtan commitolsz tízszer, mielőtt bárki látja. |
svn copy (branch) |
git switch -c |
Másodperc, nem szerveroldali másolás. Ezért lehet minden feladat külön ágon. |
| — (nincs igazi megfelelője) | merge request (MR) |
A review formális kapu a beolvasztás előtt — a céges GitLabon ez az MR. Ez az A9 verifikációs kapuja. |
Egy szokás, amit érdemes átvenni: a commit-üzenet mondja meg, melyik követelményt teljesíti (
feat(fleet): E2 — content_hash stabil, ha nincs változás). Így a git history és a spec összeolvasható — és az AI is meg tudja mondani, hol tart a munka.
A házon: Egyszerre egy fal, amit a műszaki ellenőr még végig tud nézni; a tegnapi naplóbejegyzést nem radírozzák ki. · SdD-ben: Kis diff = egy review-egység; minden lépés a saját próbakockájával (TdD-teszt) megy be.
Tizenegy, projekt- és technológia-független alapelv — nálunk kőbe vésve, nem javaslat: ugyanazok az axiómák Go-ban vagy Rustban, PostgreSQL-en vagy Oracle-ön.
„Ha egy szabály ütközik egy axiómával, az axióma nyer, és a szabály a hibás."
A tervrajz a szerződés — de fölötte az alaptörvény.
Fontos: ez a mi saját megoldásunk, nem szabvány és nem iparági előírás — bevált gyakorlatokból összeállított házirend. Kötelező ránk, itt, ebben a platformban; aki átveszi, a sajátját írja meg. A módszer (spec-first, teszt-first, kis diff, emberi kapuk) az általános — ez a tizenegy mondat már a mi megfogalmazásunk.
A1 · Egy igazság! — SSOT. Minden tény egy helyen — no hardcode, no duplication; entity spec, pipeline .md, LOV az authoritative source; a többi generálódik vagy hivatkozza. → s10b ↗
A2 · A dokumentum a kód! — Doc=Code..md spec = source of truth ÉS futtatható/generátor input. Két forma: (1) SDD spec → generated code (entity spec → DDL+CRUD); (2) pf-pipeline .md = maga a futtatható — nem generál kódot, hanem közvetlenül fut. Ha spec és kód eltér → spec nyer, a kód regenerálódik.
A3 · Ne égess be! — Never hardcode. Identity + env from env vars or fail-loud — no magic defaults, no baked-in literals; capability-based, not name-based.
A4 · Általános motor, logika a specben! — Generic engine, logic in specs. Két spec-típus, különböző szerep: SDD spec = tervrajz a fejlesztéshez (design, requirements, tasks); pf-pipeline spec = futtatható operatív logika (a motor értelmezi futásidőben). Négy motor (pipeline-forge, entity-forge, GoBI, datagrid) — ötödik nincs; extend via adapters / features / catalog entries, never fork.
A5 · Felülről lefelé! — DB→BE→FE→AI. DB first (entity spec → tárolt funkciók, no inline DML) → thin BE → generated FE → AI-felület legvégül (skill · MCP · persona, generálva); sosem kézzel, amit feljebb spec birtokol. → s10c ↗
A6 · AI orchestrál, ember kapuzik! — AI = orchestrator, human = control. Adapters, MCP tools, tárolt funkciók = AI's hands, built by humans; AI wields them; reads autonomous within policy; writes gated by human (MR / hash-reveal / admin-grant) or rule (hooks, RLS, RBAC); agent can never self-escalate.
A7 · Markdownul és angolul! — Markdown + English. Logic lives in readable docs, not hidden in compiled code; infra naming in English, business domain in Hungarian — AI-native format.
A8 · Előbb a tervrajz, előbb a teszt! — Spec-first + test-first; SDD + BRD + TdD. Intent → EARS requirements → design.md → tasks → tests → code; spec folder committed before first implementation file, and each requirement's test committed red before its code. Hard gate — no exceptions.
A9 · Kész = kétszer emberi kapu! — Done = human gate × 2. Verification (built it right? — build/test/smoke + code review) + Validation (right thing? — QA acceptance + perf); compile ≠ done.
A10 · A legkisebb diff! — Smallest diff; scope discipline. Blast radius is real (~16 sibling repos via replace); smallest diff = unit of safety, review, revert. Bug fix stays a bug fix.
A11 · Javasolj, aztán az ember dönt! — Propose, then human decides. Human owns what/how/where + env; AI owns lexicon + construction — proposes, asks, never silently self-solves. Complementary co-work.
A házon: Az építési szabványok — minden házra érvényesek, és a terv fölött állnak. · SdD-ben: Az axiómák a spec fölötti alaptörvény: ha ütköznek, az axióma nyer.
| Szint | Mi | Metafora | Ki írja | Példa |
|---|---|---|---|---|
| 1 — Axiómák | 11 alapelv, a miért | alaptörvény — erkölcsi szerződés | ember | A1–A11 |
| 2 — Platform / technikai | cross-project hogyan | a fizika törvényei — egyetemes, adott | ember | DB→BE→FE; nincs string-ből épített HTML; csak tokenek |
| 3 — Projekt | per-projekt specifikum | projekt-szabály — a projekt saját döntése (CLAUDE.md + .claude/rules) |
ember (a projekt gazdája) | infra-forge: pszeudonimizálás tárolás előtt; SCD2 a snapshotokon; pgx/v5 |
A kontroll itt él (A6): mind a három szintet ember írja; az AI olvassa és betartja, de SOHA nem írja a saját szabályait. A fizika adott — senki nem választotta; a projekt-szabályt emberek döntik el az adott projektre. Ez az L2→L3 ugrás: a „given law"-tól a „human-chosen rule"-ig — ott, ahol az emberi kontroll lakik.
A fizikát nem lehet kicselezni — ha megsérted, nem áll össze a rendszer, ahogy a rosszul rakott fal leesik. De hogy egy adott projektben mi a szabály, azt az ember rögzíti, nem a természet. A kivitelező (AI) betartja; nem ő írja.
A házon: szabvány → építéstechnológia → ennek a háznak a terve. · SdD-ben: L1 axióma → L2 platform-szabály → L3 projekt-szabály és spec.
A tézis: az AI nem rövidítés a gondolkodás megspórolására, hanem erősítő a jó kontextusra. Rossz alapra rakva gyorsan termel — rosszat is.
A kontextus nyelve — miért angolul írjuk a specet és a szabályt?
Egy angol szó átlagosan ~5 karakter, egy token nagyjából 4 — így egy angol szó jellemzően egy-másfél token, sokszor egészben benne van a szótárban. A magyar toldalékol: egy szó több ragot hordoz, ritkábban szerepel egészben, ezért több darabra esik szét. Ugyanaz a tartalom magyarul érezhetően több token — ez kétszeresen fáj: drágább, és kevesebb fér a véges context windowba. (A pontos szorzó modellenként más; érdemes a saját specjeinken megmérni, mielőtt számot mondunk.)
A szabály, a spec, a kód és a hibaüzenet ugyanazokat a szavakat használja — nincs mit összepárosítani. Két nyelven ugyanaz a fogalom kétféleképp íródik le, és a visszakeresés is, a review is ezen a résen szivárog el. A cél nem az angol, hanem hogy egy fogalomnak egy neve legyen (A1).
Kulcsszó, azonosító, könyvtár-dokumentáció, hibaüzenet, git-szótár — mind angol. Ha a spec magyar, minden mondat mögé fordítási réteg kerül, és a jelentés ott szivárog el. Egy nyelven tartva nincs mit félrefordítani.
De nem mindent angolul — a vágás éles (A7): az infrastruktúra és az orchestráció beszél angolul (szabályok, EARS-kikötések, kódbeli azonosítók, commit-üzenetek), az üzleti tartomány marad magyarul (a domén fogalmai, a felhasználónak szóló szövegek, ez a diasor is). A BA nem lesz angol nyelvű követelményíró: a szakterületi szó magyar marad, csak a kikötés váza angol.
A házon: Szilárd híd vs. kártyavár: alap és statika nélkül a gyorsan felhúzott fal az első tehernél leomlik. · SdD-ben: A kontextus (spec + szabály) az alap — az AI erősítő, nem rövidítés; a TdD-teszt a statikai számítás.
Egy prompt, akár „vibe" szinten: mit akarunk és miért. Az AI ebből briefet és követelmény-vázlatot ír.
kimenet brief.md · requirements.md — az ember javítja és elfogadja
A vázlatból generált spec-mappa: SDD terv, EARS-kikötések, és minden kikötéshez a TdD-teszt leírása.
kimenet design · tasks · tests.md — commitolva, mielőtt kód születik (A8)
Az AI a kódot három szint szerint írja: axióma (alaptörvény) → platform-szabály → a spec. Nem improvizál, nem bővít.
kimenet kis diff — egy feladat, egy commit, visszakövethető a kikötésig (A10)
A 2. lépésben a teszt leírása (tests.md) születik; a 3. lépés első commitja maga a teszt-kód (ember + AI írja) — lefut, és piros. A kód akkor kész, ha ugyanaz a teszt zöldre vált — nem akkor, ha lefordul.
kimenet bizonyított „kész" — gépi ellenőrzés, aztán a két emberi kapu (A9)
1 · EMBER — prompt / vibe → brief
2 · AI — EARS + terv + teszt-leírás
🔒 GATE — ember jóváhagy, commit
3 · EMBER + AI — teszt: ember + AI · kód: AI — axióma · szabály · spec szerint
4 · AI — build · teszt · smoke
🔒 GATE — verifikáció · validáció
A csavar: a prompt csak a kiindulópont, nem a módszer. A „vibe" az első lépésben helyénvaló — utána a spec veszi át, és a teszt dönti el, mikor van kész. Az ember a két kapunál irányít (A6).
A házon: szándék → engedélyezési terv + a próbakocka előírása → kivitelezés → a kocka eltörik: bírja? · SdD-ben: brief → spec +
tests.md→ kód → TdD: piros → zöld.
Egyetlen utasítás → egyetlen válasz; az AI megáll, és a következő promptra vár.
infra-forge
Excel-leltár → DB — vSphere discover · CSV/seed → infra.machine
A megfelelő kontextus a prompt köré: spec, séma, szabály, minta.
infra-forge
DB → BE → FE generálás — entity spec → entitygen/lovgen → stored function → HTMX
Az agent köré épített környezet: eszközök, jogok, és a kontroll-kapuk.
infra-forge Emberi kapuk — GitLab-MR · hash-reveal · admin-grant
Felfedez · cselekszik · ellenőriz · ismétel — egy stabil cél felé, önállóan.
infra-forge
AI-önkontroll — a megcélzott hurok: manifest → CI futtatja → ops_validate_deployment 0–100 → drift esetén újraépít. A remediációs ág ma áll (2026-09-09).
DISCOVER — collect → SCD2 artefakt
DISCOVER — AI elemzés → findings
ACT — OpenTofu tfvars / base-config manifest tervezet
🔒 GATE — GitLab MR — ember jóváhagy
ACT → VERIFY — CI alkalmazza · validációs pont 0–100
REPEAT — pont ≥ küszöb → lezár · drift → újraépít
A csavar: a hurok teljes — de az emberi kapu benne van. Az AI tervez, a GitLab CI alkalmaz, az ember jóváhagy (A6). Ez nem „az ember kilép a hurokból", hanem kapuvezérelt autonómia.
Ugyanaz a pipeline fut az alkalmazásban és az AI kezében: egy logika, két hívó.
Az ember tartja a kapukat (MR / hash-reveal / admin-grant). Az agent principal sosem ad magának jogot, sosem old fel titkot.
Ezért él a logika olvasható dokumentumban (pipeline, spec, szabály) — ez a miért a Document=Code mögött.
RÉGI — az ember orchestrál, az AI egy-egy részfeladatot old meg
ÚJ — az AI vezényli a folyamatot, az ember a kapuknál dönt
A házon: A brigád dolgozik, a tulajdonos és az ellenőr a kapuknál áll; a darut a brigád és a gépész is használja. · SdD-ben: Az AI végzi a lépéseket, az ember tartja a kapukat — a motornak két hívója van: az alkalmazás és az AI.
Ez a pipelines/ops_dep_extract.md — minden éjjel 04:00-kor magától lefutó, élő pipeline: a flotta pillanatképeiből kiszámolja a szolgáltatás-függőségeket (DNS · NFS · LDAP · SMTP) → naplóz → átszinkronizálja a függőségi gráfot → lezár. Egyetlen Markdown-fájl, nincs mellette kód. Váltsd a nézetet — ugyanaz a fájl mind a három.
Ugyanaz a fájl: az ember olvassa (DOC), a git diffeli (RAW), a bin/pf futtatja (PIPELINE) — ez az A2 (Document = Code).
# ops_dep_extract — nightly service-dependency edge extraction
> **What it does**
> Derives service dependency edges from current snapshot data by calling
> `infra.dep_extract_from_snapshots(jsonb)` — DNS, NFS, LDAP and SMTP edges.
> Idempotent. **No LLM required.** Pure SQL over `machine_snapshot`.
## Pipeline
```yaml
name: ops_dep_extract
trigger: cron
schedule: "0 4 * * *"
tenant: _infra
```
## Step: Extract Dependencies — db_query
**`${config.tenant}`, never the bare form** — an unresolved reference renders
as a literal `{{…}}` rather than failing. The function then filtered on a
tenant that does not exist, upserted nothing, and reported success:
27 green nightly runs in the fortnight to 2026-08-28, zero edges written.
```yaml
config:
query: |
SELECT infra.dep_extract_from_snapshots(
jsonb_build_object('tenant', '${config.tenant}')) AS result
output_key: run_result
on_error: Log Run Failure
```
## Step: Log Result — log
… on_success: Sync Graph Store
## Step: Sync Graph Store — pipeline
```yaml
config:
file: "${INFRA_FORGE_ROOT}/pipelines/OPS-graph_sync.md"
critical: false
on_success: Done
```
## Step: Log Run Failure — log
Reachable ONLY via the `on_error` jump above — never by falling through.
## Step: Done — log
ops_dep_extract — éjszakai szolgáltatás-függőség kinyerés
What it does — a friss gép-pillanatképekből (
machine_snapshot) SQL-lel levezeti, melyik gép melyiktől függ: DNS, NFS, LDAP, SMTP. Idempotens; nincs benne LLM.
## Pipeline
name: ops_dep_extract
schedule: "0 4 * * *" # minden éjjel 04:00
tenant: _infra
## Step: Extract Dependencies — db_query
Egy tárolt funkció számol (A5). A próza őrzi a tanulságot: egy rosszul írt tenant-hivatkozás miatt 27 zöld éjszakai futás egyetlen élt sem írt — a fájl ma is elmondja, miért ${config.tenant} a helyes alak.
## Step: Log Result — log
Siker esetén átugrik a hibanaplózón (on_success).
## Step: Sync Graph Store — pipeline
Beláncolja az OPS-graph_sync-et (9 lépés) — a függőségi gráf oldal ebből dolgozik. critical: false: ha elhasal, a kinyerés megmarad.
## Step: Log Run Failure — log
Csak hibaágon érhető el (on_error) — soha nem „esik bele" a sikeres futás.
## Step: Done — log
A közös végpont, ahová mindkét ág érkezik.
Amit csak a motor lát: öt lépés, mindegyik a saját típusával — és két ág. A RAW ezt szövegként mutatta, a DOC prózaként — itt végrehajtási terv.
1 · db_query — infra.dep_extract_from_snapshots() · hibánál → 4
2 · log — siker → 3
3 · pipeline — → OPS-graph_sync (9 lépés) · critical: false · → 5
4 · log — on_error célpont — sikeres futásnál kimarad
5 · log — mindkét ág itt ér véget
| name | schedule | tenant | trigger |
|---|---|---|---|
ops_dep_extract |
0 4 * * * |
_infra |
cron + kézi (pf-ui) |
# élő napló — pfworker-infra, éles szerver, 2026-09-23
04:00:38.541 pipeline start name=ops_dep_extract steps=5
04:00:38.710 step done Extract Dependencies success 168 ms
04:00:38.710 step done Log Result success
04:00:38.718 pipeline start name=ops_graph_sync steps=9
04:00:38.899 pipeline done ops_graph_sync success source_edges=53
04:00:38.900 step done Sync Graph Store success 188 ms
04:00:38.901 step done Done success
04:00:38.901 pipeline done ops_dep_extract success steps_run=4 359 ms
steps_run=4, nem 5 — a hibaág sikeres éjszakán kimarad, és ezt a fájl mondja meg, nem egy kód mélyén rejlő
if. A tanulság is a futtatható fájlban él: a 27 zöld, de üres futás története ott áll a lépés fölött, ahol a következő szerkesztő (ember vagy AI) biztosan elolvassa. A dokumentum és a kód nem tud elcsúszni egymástól, mert ugyanaz a fájl (A2).
Egy forrás, négy fogyasztó — ezért Markdown
| Szempont | Miért a Markdown nyer |
|---|---|
| Ember (DOC) | Prózában olvasható, fejlécekkel strukturált — a nem-kódoló is érti a folyamatot. |
| Git (RAW) | Soralapú diff: egy szabályváltozás 5 sorban review-zható, a history audit trail. |
| LLM (RAW) | Prompt-natív: frontmatter + próza + kódblokk veszteség nélkül kerül a kontextusba. |
| Motor (PIPELINE) | Nincs recompile: egy lépés vagy szabály módosítása szövegszerkesztés, nem build-deploy ciklus. |
Ha a tudás csak a kódban él, három olvasója van: a fordító, a szerző — és senki más.
A .md egyszerre a specifikáció ÉS a futtatható / generátor-bemenet. Nincs külön dokumentáció, ami elavulhatna.
A forrásfában nincs csupasz .sql. Minden kézi SQL markdown: frontmatter + a miért próza + egyetlen ````sql` blokk. A generált DDL specekből születik.
Pehelysúlyú, sima-szöveges jelölőnyelv (CommonMark szabvány). Néhány jel az egész: # fejléc, - lista, | tábla |, **félkövér**, kódblokk. Olvasható nyersen és renderelve is.
A #…###### hierarchia adja a szerkezetet — a RAG fejezetenként darabol (chunk-by-chapter), így a modell célzottan a releváns szakaszt kapja vissza, nem az egész fájlt.
1) YAML frontmatter — metaadat (név, sorrend, függőség, schedule).
2) Próza — a miért.
3) Egy vagy több fenced blokk — a futtatható tartalom (sql / yaml / lépések).
A fenti ops_dep_extract.md pontosan így épül fel: frontmatter (név, ütemezés, tenant) + próza (a miért) + ## Step: szakaszok (a futtatható lépések). Az ember a prózát olvassa, a git a diffet, az LLM az egészet — a motor pedig a lépéseket futtatja, sorban.
A házon: A tervrajz nem utólagos leírás — a brigád ebből épít, és ha a fal eltér tőle, a falat bontják. · SdD-ben: Document = Code: ugyanaz a fájl a spec, a dokumentáció és a futtatható.
infra.*-ban él — egy helyen, egy verzió.md) → DDL → tárolt függvény → RLS — a CRUD-lánc generált (bin/ef-cli); az üzleti függvények kézzel írt .md-k (70 db)lov.*) = SSOT minden legördülő értékhezpipelines/*.md — a fájl törlése = a képesség törlése.md spec egyszerre az igazságforrás és a generátor/futtatható bemenetentities/IF-*.md) = a séma hiteles forrása — nem az adatbázisskills/*.md) = az AI képességkatalógusának hiteles forrásaA házon: Egy hiteles tervrajz a helyszínen — nem kettő, és nem a brigád fejében. · SdD-ben: A1 + A2: egy igazságforrás, és az maga a futtatható.
Adatmodell → vékony backend → ahol lehet, generált frontend → AI-felület. Soha ne írj kézzel olyat, amit feljebb egy spec már meghatároz. A négy réteg együtt az alkalmazás.
.md) → DDL + tárolt függvényeknow(), UUID PK-k.md)pgx/v5 + pgxpool direktbencmd/agent route → internal/ → tárolt fnui/pages/ + ui/pages/gen/ + GoBI bi/**/*.md.mdskills/*.md + pipelines/*.mdOldd meg ott, ahol él — az adat a DB-ben él
1 · ELŐSZÖR — halmazművelet, tárolt függvény, index
2 · MÉRÉS — helyes eredmény és teljesítmény — mérve
3 · HA NEM — lassú vagy drága → a szomszéd rétegben (BE)
4 · RÖGZÍTÉS — design.md: mi bukott el, miért itt lett
Mi hová tartozik: DB — szűrés, rendezés, összesítés · BE — transzport, auth, session · FE — megjelenítés · AI — a tierek elérése, nem a logikájuk. Ha a munka a BE-be kerül, az adatot akkor is csak tárolt függvényen át érjük el: a hely mozdulhat, a hozzáférés módja nem. Az invariáns: az igény változik → az entitásspec vagy a pipeline-fájl változik → a generált kód frissül. Nem fordítva.
A házon: Alap → falak → tető → berendezés; senki nem a tetővel kezdi. · SdD-ben: DB → BE → FE → AI — felülről lefelé, a spec szerint.
Két dolog, egy rövidítés — ne keverd össze. A módszertan az SdD = Spec-driven Development (szándék → spec → terv → kód → verifikáció → validáció — lásd a korábbi diát). Ezen a dián viszont SDD = Software Design Description (IEEE 1016-2009 — inaktív-fenntartott státuszú szabvány, nálunk referencia-modellként használva): egy konkrét dokumentumtípus, a technikai tervrajz. A módszertan írja elő, hogy ilyen blueprint készüljön — a kettő nem ugyanaz, csak a betűszó esik egybe.
SdD ⊃ { SDD, BRD (+EARS), TdD } — a módszertan a keret; alatta a két tervrajz (az EARS a BRD kikötés-nyelve, nem külön dokumentum) és a bizonyíték. Az alábbi három csempe ezt a hármat bontja ki.
Szabvány: IEEE 1016-2009.
A technikai tervrajz: architektúra, adatmodellek, interfészek, komponens-viselkedés — a híd az üzleti igény és a kód között.
forrás: IEEE Std 1016
Szabvány: ISO/IEC/IEEE 29148.
Az üzleti tervrajz: célok, scope, üzleti követelmények — mit érjen el a rendszer (a hogyan előtt). Workflow-k, adatáramlás, compliance; nagy szervezetnél több száz oldal, gyakran ellentmondásokkal.
forrás: ISO/IEC/IEEE 29148
Nem harmadik tervrajz — a tervrajz bizonyítéka. A blueprint megmondja, mit jelent a „kész"; a teszt megmutatja, hogy az. Az EARS-kikötés gépi fele.
forrás: Beck, TdD by Example
| Blueprint / bizonyíték | Nálunk ez a szerep… |
|---|---|
| SDD | BRAINSTORM.md · ARCHITECTURE.md · invariants/design.md — a HTML-tükör és a Confluence-oldal csak megjelenítés; szerkeszteni mindig a .md-t kell |
| BRD | EARS requirements · compliance riport-spec-ek · workflow pipeline-ok — az üzleti szabály tesztelhető kikötésként él, a fordítása determinisztikus (codegen, nem hallucináció) |
| TdD | *_test.go · TestE2_… — a bukó teszt commitolva a kód ELŐTT — az EARS-kikötés végrehajtható alakja: a „kész" nem vélemény, hanem futtatható. Ez zárja a kört a két tervrajz és a valóság között. |
Ebből a szemszögből a módszertan lényege: a blueprint nem a fejlesztés mellékterméke, hanem az üzemanyaga — az AI miatt végre megéri jó tervdokumentumot írni, mert van, aki garantáltan és minden alkalommal elolvassa.
Az ötrétegű dokumentumtérkép — minden réteg egy valós fájl
| Réteg | Dokumentum | Hogyan használd fejlesztés közben |
|---|---|---|
| szabályok | docs/00_axioms.md · CLAUDE.md · .claude/rules | Session-startkor automatikusan betöltődik — a „munkaszerződés". Új szabály = ide írod, nem a kódba kommenteled. |
| tervek | BRAINSTORM.md → SCENARIO.md → ROADMAP.md | A brainstormingtól a jövőképig — a .md a forrás. A HTML csak megjelenítés: szerkesztés után a /regen-html (scripts/regen_brainstorm_html.sh) generálja újra; hook nem futtatja, és kézzel sosem szerkesztjük. |
| specifikációk | docs/specs/fleet-collection/requirements.md · entities/IF-.md · lov/.md | Az igazság forrása. Mező hozzáadása = spec szerkesztés + regenerálás, soha nem kézi DDL. Követelmények EARS-formában. Az entity-forge generátorai (bin/ef-cli): entity — entities/*.md → DDL + CRUD tárolt függvények + RLS + ## SEED sorok, és a lista-oldal (ui/pages/gen/) + GoBI riport (bi/queries/) · infra-forge: 65 lov — lov/*.md → LOV-táblák + értékek · infra-forge: 23 rule — logic/BR-*.md → üzleti szabályok SQL-ben · itt még nem használt seed — seed/*.md → kezdő adatok · itt még nem használt xsd — XSD-séma → entities/*.md + lov/*.md · itt még nem használt batch · validate · diff — mind egyben · előellenőrzés · összevetés az élő DB-vel (csak olvas) |
| futtathatók | pipelines/ops_dep_extract.md · database//.md · skills/.md · sidebar//*.md | A fájl MAGA a futtatható artefaktum: bin/pf futtatja; a sidebar startupkor DB-be szinkronizálódik. |
| tükrök | docs/*.html · Confluence-oldal · Jira-komment | Csak megjelenítés — nézetek az embereknek; a repó az igazság, a tükör csak visszaadja. A HTML a forrás-MD-ből regenerálódik; a Confluence-oldal (pl. az IT állapot-oldal) és a Jira-komment a mért állapotot mondja el ott, ahol a kollégák olvassák. Sosem a tükrön javítunk: a forrás változik, a tükör frissül. |
Az irány mindig felülről lefelé: szabály → terv → spec → futtatható artefaktum → tükör (HTML, Confluence, Jira). Lefelé sosem írunk kézzel olyat, amit feljebb spec birtokol.
Easy Approach to Requirements Syntax — Alistair Mavin, Rolls-Royce. Nem szabvány-bürokrácia: öt mondatsablon, ami a „legyen gyors és felhasználóbarát" típusú kívánságot olyan kikötéssé alakítja, amit egy gép is el tud dönteni. Ez a BA legfontosabb új eszköze.
Nem önálló tervrajz: az EARS a BRD (követelmény-réteg) mondattana — nálunk a requirements.md-ben él, és onnan hivatkozza a design, a task és a teszt.→ s4 ↗
| Kód | Minta | Sablon | A Vishy-házon és ugyanaz a minta a szoftverben |
|---|---|---|---|
| U | Ubiquitous mindig igaz | The <system> shall <response> |
A ház minden külső falának hőátbocsátása legfeljebb 0,24 W/m²K. A rendszer minden jelszót csak titkosítva tárol. |
| E | Event-driven esemény hatására | When <trigger>, the <system> shall <response> |
Amikor a beton eléri a 28. napot, a próbakocka nyomószilárdsága legalább C25/30. Amikor a vevő elküldi a rendelést, a rendszer 2 másodpercen belül visszaigazolja. |
| S | State-driven amíg egy állapot tart | While <state>, the <system> shall <response> |
Amíg fagy van, a brigád nem betonoz — a munka áll, a terv nem változik. Amíg a fiók zárolva van, a rendszer nem enged belépést. |
| X | Unwanted a nem kívánt eset | If <trigger>, then the <system> shall <response> |
Ha a statikus nem hagyta jóvá a tervet, akkor a falazás nem kezdődhet el. Ha háromszor egymás után hibás a jelszó, akkor a rendszer 15 percre zárolja a fiókot. |
| O | Optional ha a funkció be van kapcsolva | Where <feature>, the <system> shall <response> |
Ahol napelem van tervezve, a tetőszerkezet bírja a többletterhet. Ahol a kétlépcsős azonosítás be van kapcsolva, a rendszer belépéskor kódot kér. |
„A ház legyen meleg, és ne ázzon be."
E1 Amikor kint −15 °C van, a fűtés a lakószobákban legalább 21 °C-ot tart.
X1 Ha a talajvíz a pinceszint fölé emelkedik, akkor a pince falai és padlója szárazak maradnak.
Az EARS-kikötés a szerződés szövege. A BA írja, a fejlesztő olvassa, az AI implementálja, a teszt pedig bizonyítja. Egy jó EARS-kikötésből a következő dia szerint gyakorlatilag magától lesz kód.
A példa végig ugyanaz, a Vishy-házon: „Télen ne fázzunk." — ebből lesz az E1 kikötés (az EARS-diáról), a próba, majd a kivitelezés. Minden sor alatt kis betűvel: mi ennek a megfelelője a szoftverben. A lépések a lényeg, nem a példa.
| # | Lépés | A Vishy-házon — és a szoftverben | Ki |
|---|---|---|---|
| 1 | Szándék egy mondat | A család: „Télen ne fázzunk." Egy mondat, nem tervrajz — és még nem eldönthető. a megrendelő egy mondata a brief.md-ben. |
ember |
| 2 | EARS-kikötés requirements.md |
E1 Amikor kint −15 °C van, a fűtés a lakószobákban legalább 21 °C-ot tart. — az építész (és az AI) javasolja a megfogalmazást, a család elfogadja vagy javítja. azonosítós, számon kérhető mondat, amire a teszt és a commit hivatkozik. |
ember + AI |
| 3 | Terv design.md |
Hőszükséglet-számítás: mekkora hőszivattyú, padlófűtés vagy radiátor, milyen szigetelés (a falra ≤ 0,24 W/m²K). Itt kell vitatkozni — a hőszivattyú méretéről most, nem a beépítés után. a valódi mérnöki döntés szövegben születik, nem a kódban. | ember + AI |
| 4 | Feladatok tasks.md |
Ütemterv + anyaglista: szigetelés → csövezés → esztrich → hőszivattyú beüzemelése. Minden tétel visszahivatkozik E1-re. az AI bontja feladatokra; mindegyik a kikötésre mutat. |
AI |
| 5 | Bukó teszt RED tests.md · *_test.go |
A mérce előbb van, mint a fal: nyomáspróba a csöveken az esztrich előtt, és előre rögzítve, hogyan mérik a 21 °C-ot hideg napon. A próbát fűtés nélkül is lefuttatják — és piros. Ha így is „átmenne", a mérés rossz, nem a ház jó. itt lesz piros: a teszt E1-re hivatkozik, a kód előtt commitolva, és a futtatás bukik — ez bizonyítja, hogy tényleg mér valamit (TdD). |
ember + AI |
| 6 | Megvalósítás RED → GREEN | A brigád a terv szerint szerel — nem cseréli olcsóbb hőszivattyúra, és nem dönti el útközben, hogy „inkább radiátor lesz". az AI addig ír, amíg ugyanaz a teszt zöld nem lesz — a tesztet nem írja át, hogy átmenjen. | AI |
| 7 | Verifikáció gép + ember | A mérések jegyzőkönyve (nyomáspróba, beszabályozás) — aztán a műszaki ellenőr összeveti a tervvel: „jól építettük meg?" build · tesztek · biztonsági audit gépen, aztán az ember elolvassa a diffet — nem gyengült-e a teszt? | AI + ember |
| 8 | Validáció az átvétel | Az első hideg hét után a család: „meleg van ott, ahol élünk?" — a fürdőben is? Más kérdés, mint az ellenőré. Ha igen, az átvétel az audit.md-be kerül (az E1 [x] már a verifikációnál lett az); ha nem, új szándék. a státusz a spec-mappában változik (requirements + audit), nem egy jegykezelőben. |
ember (QA) |
Ami itt új: az 1–4. lépés szövegben zajlik, és ott dől el minden. Mire a kódig érünk, a nehéz kérdéseket már megválaszoltuk — a kód már csak következmény. Ezért tud az AI gyors lenni anélkül, hogy a kontroll elveszne.
A leggyakoribb kezdő hiba: a 2–3. lépés átugrása („majd megbeszéljük menet közben"). Ilyenkor az AI kitalálja a hiányzó döntést — magabiztosan, és általában rosszul. Az üres spec nem semleges: fel van töltve az AI találgatásaival.
A teszt-vezérelt fejlesztés nem új (Kent Beck, 2002) — de LLM mellett más a szerepe. Régen a fejlesztő fegyelmét pótolta. Most azt a kérdést válaszolja meg, amit egy magabiztos géptől másképp nem lehet: „tényleg kész van, vagy csak annak hangzik?"
01 — az eldönthető állítás (ember + AI)
02 · RED — a kikötés kódra fordítva — és commitolva (ember + AI)
03 · GREEN — ami zöldre viszi (AI)
04 — a zöld végig zöld marad (AI)
05 — az ember a tesztet is olvassa (ember)
A „kész vagyok" egy nyelvi modelltől nem bizonyíték — a magabiztos hang ingyen van. A zöld tesztfutás viszont tény. A teszt az egyetlen visszajelzés, amit az AI nem tud meggyőzően előadni. Ha a tesztet is az AI vázolja, a review a tesztet olvassa először — ez a tartóelem.
A piros teszt gépi hibaüzenet, amit az agent visszaolvas és amiből tovább dolgozik. Teszt nélkül minden kör emberi visszajelzést igényel — a tesztsor az, ami a felügyelet nélküli ciklust egyáltalán lehetővé teszi.
Ha az AI naponta több száz sort ír, a korábban megoldott problémák visszatérése a fő kockázat. Minden teljesített EARS-kikötés teszt formájában bekerít egy döntést: onnantól a gép őrzi, nem az emlékezet.
Az ops_dep_extract (a #s10 élő pipeline-ja) egy elírt tenant-hivatkozás miatt 27 futáson át zöld volt — és egyetlen függőségi élt sem írt. A „sikeres" futás csak annyit jelentett, hogy nem volt hibaüzenet. Két hétig (2026-08-28-ig) senki nem vette észre.
EARS: „Amikor az éjszakai futás lefut, a rendszernek a friss pillanatképekből legalább egy függőségi élt kell írnia."
RED-teszt: futtasd a lépést egy tesztadatbázison → élek száma ≥ 1?
→ az első éjszakán piros lett volna.
A TdD-nek van egy új veszélye AI mellett: ha a teszt a kód után születik, az agent hajlamos olyan tesztet írni, amit a saját kódja biztosan teljesít — vagy a bukó tesztet gyengíteni. Ezért két vasszabály: (1) a teszt előbb kerül commitba, mint az implementáció; (2) a review a tesztet is nézi, nem csak a kódot. A gyengített teszt zöld — és hazudik.
Vissza a házhoz (2. dia): a próbakockát a betonozás közben veszik — nem utólag választják ki, melyik falat mérjék meg. Ha a mérce a fal után születik, ahhoz igazítjuk, ami éppen kijött, és már nem mérce, hanem utólagos igazolás. A teszt pontosan ugyanez: ezért kerül commitba az implementáció előtt.
Így zárul a lánc: az EARS-kikötés mondja meg, mit jelent a „kész" — a teszt bizonyítja, hogy az — az ember pedig eldönti, hogy ez volt-e a cél. Spec, teszt és kód ugyanannak az állításnak három alakja.
Négy generikus motor visz mindent — ötödiket nem írunk: ha új képesség kell, a motort kívülről bővítjük (adapter · feature · katalógus-bejegyzés), sosem forkoljuk újra (A4).
A folyamat-motor: minden orchestráció .md pipeline. Bővítés ← új adapter, nem új Go-folyamat.
Entitás-specből DDL + tárolt funkció + CRUD. Bővítés ← új feature, az engine generál.
Riportok, KPI-k Markdown-katalógusban (bi/**/*.md, YAML-blokkokkal). Bővítés ← katalógus-bejegyzés: új riport = adatváltozás, nem Go-kód.
Oszlopok, szűrők, pivotok katalógusból; téma --dg-* tokennel. Bővítés ← katalógus-bejegyzés.
A motorok alatt — a foundation réteg: keret · könyvtár · minta · példa
A foundation-* repók nem csak könyvtárak — négyféle dolgot adnak: ① keret, amibe beépülsz (pl. az app-shell) · ② könyvtár, amit behivatkozol · ③ minta, amit követsz · ④ példa, amiből kiindulsz. Hogy egy feladatnál melyiket és hogyan használja, azt az AI választja (A11: a konstrukció az AI-é).
Logger, dbpool, http-middleware, auth-trió, sidebar. A minta: egy új szolgáltatás nem talál ki saját naplózást — ezt követi.
Dinamikus SQL annotált kommentekkel, nem string-fűzéssel. A minta: a feltételes blokk a SQL-ben látszik, nem Go-ban rejtőzik.
Az app-shell: fejléc, sidebar, téma, login. A minta: minden felület ugyanúgy néz ki, mert ugyanonnan származik.
Nem könyvtár, hanem hordozható módszer: a spec maga a definíció. Ugyanarra a módszerre több termék is épülhet — a spec viszi át, nem a kód.
A választás szabad, a forrás nem. A keretbe beépülsz, a könyvtárat behivatkozod, a mintát követed, a példából kiindulsz — hogy melyik illik a feladathoz, azt az AI dönti el. De a foundationből választ: ha ott van rá kanonikus megoldás, nem talál ki újat. Enélkül 16 repóban 16-féle naplózás születne, mind „helyes", mind más. A
foundation-*így az AI tudástára: nem kész kódot ad, hanem választékot — és a döntést, amit nem kell újra meghozni.
A közös elv: adat a katalógusban, viselkedés a motorban — a kettő határa a review-felület.
A házon: Szabványos, előre gyártott elemek — zsalu, ajtótok, födémpanel: nem minden háznál találják fel újra. · SdD-ben: A négy motor és a foundation: a spec ezekből választ, ötödiket nem ír (A4).
A teljes tudás, amire a fejlesztés épül — mérve a GitLab-projekteken (2026-09-22)
| Réteg | Mennyi | Mikor kerül a kontextusba |
|---|---|---|
| Axiómák (L1) | 11 axióma, 1 fájl (~9 KB) | mindig — minden session elején, kötelezően |
| Platform-szabályok (L2) | 14 fájl (~255 KB) | igény szerint — a réteg kapuja (HARD GATE) húzza be az első szerkesztés előtt |
| Projekt-szabályok (L3) | 7 projekt-CLAUDE.md + 15 útvonalhoz kötött szabály |
a projekt CLAUDE.md-je session startkor; a szabály, amikor egy illeszkedő fájlhoz nyúl |
| Specek | 117 spec-mappa (brief → EARS → design → tasks → tests → audit) | csak az éppen épülő feature-é |
| Minden dokumentum | ~1 800 Markdown-fájl, ~8 MB, 9 GitLab-repóban (ebből 367 pipeline) | RAG-gel keresve, aztán egy fájl pontos olvasása |
| Külső források | Jira, Confluence, szabványok (IEEE 1016, EARS), memória-jegyzetek | eszközön (MCP) át, amikor a feladat kéri — soha nem „minden, előre" |
A context window néhány száz oldal; a korpusz ~8 MB — milliós nagyságrendű token, a context window sokszorosa. Ezért a kérdés nem az, hogy betöltjük-e a tudást, hanem hogy mit, mikor és milyen sorrendben: az alaptörvény mindig, a többi csak akkor, amikor a feladat eléri.
Probléma — véges a kontextus
Megoldás — RAG
1 — magyarul
2 — embedding (vektor)
3 — pgvector · lokális rag_db
4 — releváns chunkok
5 — a megjelölt fájl
A repó a kollekció: minden platform-repo egy gyűjtemény. Claude Code ebből keresi vissza a releváns szabályt / doc-ot / spec-et — nem a teljes fát olvassa. Ez a dev-láb.
Nincs központi RAG-adatbázis: minden termék a saját éles DB-jében tartja a beágyazásait, tenantonként külön adatbázisban. A tudás ott van, ahol az adat — és a jogosultság is ott érvényesül. A dev-láb és a termék-láb sosem keveredik.
Így használja Claude — fejlesztés közben:
/rag-search "hol oldjuk fel a vault-ot?"→ top találatok (collection + source_file) → és csak azt az egy fájlt nyitja meg (Read). Tájékozódás RAG-gel, pontos olvasás utána — a véges kontextust a releváns tudás tölti, nem a teljes repó.
A házon: A tervtár: a brigád nem visz mindent a zsebében, de tudja, hol keresse. · SdD-ben: RAG: a teljes tudásból az adott SdD-lépéshez szükséges rész kerül a kontextusba.
A lapos vektor-keresés a „miről szól?" kérdésre jó: a szöveg → sűrű jelentés-vektor, a kérdéshez cosine-közeli chunkok jönnek vissza — nem kulcsszó, hanem jelentés („Dell laptop" megtalálja a „hordozható számítógép"-et is). De a „mi mire hivatkozik?", „ki ért hozzá?" kérdés kapcsolat — azt gráffal kérdezzük.
Ma · él
A chunkokat (csomópontokat) ágyazzuk be a szemantikus kereséshez — ez a jelentés-réteg.
Ma · él
Az éleket (X hivatkozik Y-ra; ugyanaz a személy két forrásban) külön gráf-rétegben tartjuk — fejlesztésben dev.doc_edges, az ügyfél-RAG-ban rag.cross_refs. A „mi fogyasztja a datagrid-et?" gráf-lekérdezés, nem vektor-keresés.
Folyamatban · PostgreSQL 19
CREATE PROPERTY GRAPH a meglévő tábláink fölé — nincs új tár —, lekérdezés GRAPH_TABLE(… MATCH …) mintával, SQL:2023. A cross_refs élek gráfra költöztetése folyamatban.
PostgreSQL 19 gráf — hol tartunk (2026-09-22)
| Hol | Mi fut | Eredmény |
|---|---|---|
éles szerver · 19/infraforge, csak loopback |
az infra-forge függőségi gráfja (infra_graph_db) natív property-graphban |
élesben 2026-09-15 óta — beta3, tudatosan vállalt kockázat |
éles szerver · 19/search, csak loopback |
az ügyfél-RAG keresőrétege side-carban, éjszakai szinkronnal (439 685 él) | ugyanazon a vason: PG19 15–40%-kal gyorsabb; a hangolt gráf-lekérdezés döntetlen (34,8 vs 32,2 ms) → az éles keresés a hordozható formán marad |
| fejlesztői gép · 19 beta3 | valós wiki-gráf másolata (7 347 él) | 1–2 ugrás azonos a mai CTE-vel; 2-ugrásos lánc gyorsabb (0,29 vs 0,42 ms); irányítatlan él lassú (18–115×), nincs változó hosszú út |
| éles szerver · fő RAG-klaszter | egy tenant éles DB-je — 461 752 cross_refs él, PG 18.4 — az iiriki élesben használja: /iier2/value-graph |
élesben, hordozható SQL-lel: minden találatnál ott a gráf-útvonal (SharePoint-hely → mappa → dokumentum → tábla); egy kapcsolóval ugyanez a keresés a 19/search side-caron SQL/PGQ-val fut, a két idő egymás mellett. Még hátra: a klaszter frissítése a 19 GA után; az alap PG ≥ 16 marad, a natív gráf-lekérdezés csak 19+ szerveren |
Hogyan használjuk fejlesztés közben — egy kérdés útja
1 · VEKTOR — /rag-search type:rules … — a releváns chunkok, forrásfájllal
2 · ÉL — /rag-connections — mi hivatkozik rá, mi épül rá (1–2 ugrás)
3 · PONTOSAN — csak a megjelölt fájl(ok) — Read
4 · FRISSÍTÉS — /rag-embed — csak ami változott (content_hash)
| A fejlesztő kérdése | Réteg · eszköz | Miért ez |
|---|---|---|
| „Hol van szabályozva, hogy a DB-ben próbáljuk először?" | vektor · /rag-search |
jelentés szerint talál — akkor is, ha a szabály más szavakkal mondja |
| „Ha módosítom az A5 axiómát, mi hivatkozik még rá?" | él · /rag-connections |
kapcsolat, nem hasonlóság — ez a módosítás hatósugara, mielőtt hozzányúlunk |
| „Pontosan mit mond a 3. bekezdés?" | fájl · Read |
a RAG tájékozódásra való; a döntés a pontos szövegen születik |
| „Most írtam át a specet — a következő session már ezt lássa." | frissítés · /rag-embed |
a változatlan chunk kimarad; session-startkor óránként magától is lefut |
Két külön RAG — sosem keveredik
| Fejlesztői RAG | Ügyfél-RAG (a termék) | |
|---|---|---|
| Mit tárol? | a saját kódunk, szabályaink, specjeink, dokumentumaink — repónként egy gyűjtemény | az ügyfél üzleti dokumentumai (Jira, Confluence, …) — tenantonként elkülönítve |
| Hol él? | lokális fejlesztői DB, a fejlesztő gépén | a termék saját éles DB-je tenantonként — házon belüli szerveren |
| Embedding | két vektor chunkonként: irodában snowflake-arctic-embed2 a belső GPU-n, irodán kívül felhő-modell — csak a saját fejlesztői anyagunkra |
snowflake-arctic-embed2 (1024 dim, erős magyar, az ékezet megmarad), csak házon belüli GPU-n |
| A modell neve | a környezet választja (elérhetőség szerint), nem a kód | egyetlen DB-regiszter dönti el (rag.collection_model) — sosem hardcode (A1 + A3) |
| Élek | dev.doc_edges — dokumentum- és kódkapcsolatok |
rag.cross_refs — személyek, hivatkozások, tartalmazás (hely → mappa → dokumentum → tábla) |
| Ki használja? | a fejlesztő és Claude Code (/rag-* parancsok) |
a végfelhasználó a termék chatjén / MCP-n át, jogosultság szerint (RLS) |
| Frissesség | /rag-embed igény szerint + óránként session-startkor |
éjszakai pipeline; teljesség-teszt: embedding > 0, rag.cross_refs > 0, < 30 óra |
A határ: ügyféladat soha nem kerül felhő-embeddingbe és nem kerül a fejlesztői RAG-ba; a fejlesztői eszközt soha nem irányítjuk ügyfél-adatbázisra. Két külön tár, két külön cél — ugyanaz a technika.
A házon: A tervtár mutatója: nem csak mi van benne, hanem mi mire hivatkozik (statika → alaprajz → anyaglista). · SdD-ben: Vektor = jelentés, él = kapcsolat — melyik spec mire épül, mit érint egy változás.
A vektor-adatbázis a tartalom-bázis: mit mond egy szövegrészlet. Az él-gráf a kontextus-bázis: hogyan viszonyul a többihez — mi hivatkozik rá, mi váltotta le, melyik szabály erősebb. Helyes rangsorolt találathoz mindkettő kell.
Ma · él
Releváns-e? A kérdéshez cosine-közeli chunkok, jelentés szerint. Magától nem látja, hogy a találat elavult, felülírt, vagy egy másik spec része.
Ma · él (dev.doc_edges · rag.cross_refs)
Mi a súlya? Hivatkozás, tartalmazás, leváltás, szerző. Magától nem tudja, miről szól a kérdés — nincs belépési pontja, amíg a vektor nem ad magot.
Egy rangsorolt találat útja
VEKTOR — a kérdéshez legközelebbi chunkok, hasonlósági pontszámmal
ÉL — a magok 1 ugrásnyi szomszédai: a másképp megfogalmazott, de kapcsolódó anyag
ÉL — a leváltott / elavult csomópont kiesik; az alacsonyabb rendű forrás hátrébb kerül
TERV — hasonlóság + tekintély + összekötöttség, súlyok konfigból (A3)
TERV — a végső sorrend; az újrarangsorolás (rerank) ma ki van kapcsolva
| Jel | Honnan | Egyedül mit rontana el |
|---|---|---|
| Relevancia — mennyire felel a kérdésre | tartalom · vektor | a leváltott, majdnem-azonos változat ugyanolyan előkelő helyre kerül |
| Állás — friss, mérvadó, a találatok közelében van | kontextus · él-gráf | belépési pont nélkül nem tud mit rangsorolni; a nem összekötött anyag kimarad |
| Együtt | fúzió | a közepesen hasonló, de három erős találattal összekötött csomópont jogosan előzi a magányos, magasabb pontszámút |
Egy szép mechanikus óra fogaskerékből, rugóból, tengelyből és mutatóból áll. Szétszedve csak a tartalom marad: minden alkatrész megvan, de az óra időt nem mutat.
Az összeépítés maga a kontextus: melyik fogaskerék melyiket hajtja, mi mihez illeszkedik. Ez adja vissza a funkciót — ezért működik az óra, és teszi a dolgát.
RAG-ban ugyanez: a vektor-adatbázis az alkatrészek sokasága — megtalálja a hasonlókat, de önmagában nem ad rendezett választ. Az él-gráf az összeszerelés: megmondja, mi hogyan kapcsolódik, mi a friss, mi hajt mit. Alkatrész + összeépítés = rangsorolt, működő válasz.
Ma vs terv. A fejlesztői RAG-ban a vektor és az él két külön lépés (
/rag-search, majd/rag-connections), amit az ember és Claude kapcsol össze. A beépített fúziós rangsor terv — a súlyok a konfigban lesznek, és csak akkor kerül élesbe, ha a kiértékelés javulást mutat. A „kontextus" szó két dolgot jelent: itt a kapcsolati kontextus; az LLM munkakontextusa a végeredmény.
A házon: A tervtár és a mutató együtt: a rajz megmondja, mi van a lapon; a mutató, hogy melyik érvényes, és mi mire épül. · SdD-ben: tartalom = mit mond a spec, kontextus = mi hivatkozik rá és mi váltotta le.
A 2. dián azt láttuk, ki mit csinál. Most egyetlen igényt követünk végig a Vishy család házán: a család mondatától a műszaki ellenőrig — és megnézzük, hol dönt benne az ember.
Az igénynek két lába van — más kérdésre válaszolnak
„Mi van a telken?" — mielőtt bárki falat rajzolna.
Nálunk (SdD): a brief.md és a kutatás — a tények, amire a spec épül (infra-forge-ban: a flotta-gyűjtés, csak olvas). Ebből születik a BRD (mi a cél, mi a korlát) és az SDD (hogyan).
„Mi kerül a falba?" — a terv szerint, nem improvizálva.
Nálunk (SdD): a kód — az AI az SDD szerint épít, nem improvizál; a betonosztály = a SDD-ben rögzített döntés. A brigád saját mérése = a gépi teszt (TdD) — még nem az emberi kapu.
A sorrend nem esetleges: nem tervezhetsz alapot, amíg nem tudod, mi van a talajban. A felmérés mondja meg, mire kell építeni; a kivitelezés azt, hogyan. A kettőt más szakember végzi, és külön is tévedhet — ezért kerül mindkettő írásban a tervre, nem szóban a helyszínre.
keret — a család szándéka
hálószoba + pince
betonosztály — a mérce előre rögzítve
kötés, aztán törik a próbakocka
A műszaki ellenőr a visszatöltés előtt összeveti a szigetelést a tervvel — és a nyomáspróba jegyzőkönyvével.
Az első nagy eső után a család lemegy a pincébe: az lett-e, amire szükségük volt? Ha nem — új szándék.
A terv nem a semmiből jött: emberi döntésekből lett EARS-követelmény, majd fal. Négy kérdés, négy döntés — mindegyik egy-egy ellenőrizhető kikötés.
Legyen-e pince, ha magas a talajvíz?
Az építész két utat mutat (vízzáró „fehér kád" pince vagy pince nélküli lemezalap, költséggel) — a család dönt. Javaslat, aztán az ember irányít (A11).
Mikor rögzítjük a mércét?
A betonozás ELŐTT — a betonosztály és a mintavétel a terven van. Az utólag kiválasztott mérés nem mér semmit (TdD).
Mi van, ha egy szállító késik?
Az ütemterv a független munkát előrehozza — egy késés nem állítja le az egész építkezést, és nem ír át semmit a terven.
Legyen inkább két szint?
Ezt a brigád nem döntheti el. Új szándék → vissza az építészhez, tervmódosításként. A scope a terven van (A10).
Minden döntés egy ember döntése volt — és EARS-követelményként került a tervre, mielőtt egy tégla a helyére került volna. Ugyanez a szoftverben: a projekt gazdája rögzíti, az AI betartja.
Az építkezésnek is van kerete, ami nem a brigád jóindulatán múlik. Claude Code-nál ugyanezek a darabok vannak — gépiesen.
| Mechanizmus | Mit csinál | A házon |
|---|---|---|
| Szabálybetöltés | A CLAUDE.md + az axiómák minden session elején a kontextusba kerülnek; a réteg szabályai akkor, amikor a munka eléri — ugyanaz a szerződés, mint az új kollégának. |
Az építési szabályzat és a tervrajz reggel ott van a helyszínen — nem emlékezetből dolgoznak. |
| Hooks | A szabály-kapu blokkolja a szerkesztést, amíg a réteg szabályfájlját nem olvasta el; a pre-push audit secreteket és szabálysértést szűr. A main-re szerkesztésnél csak figyelmeztet — az szándékos. A deploy-hook környezetenként más git-feltételt kér (lásd lent). | Betonozás előtti átvétel: amíg az ellenőr nem írta alá a vasszerelést, a mixer nem önt — nem kérés, hanem megállás. |
| Skills | Ismétlődő műveletek (/vault, /regen-html, a deploy-parancsok) dokumentált, paraméterezett eljárásként. |
Technológiai utasítás: a szigetelés, a betonozás leírt, bevált menete — nem minden brigád találja ki újra. |
| MCP szerverek | Az AI strukturált eszközökön át kérdez (pl. a flotta-keresés, KPI-k) — nem nyers SQL-lel. | Mérőműszerek: lézer, vízmérték, nedvességmérő — mérnek, nem szemre becsülnek. |
| Memory | Projektszintű tanulságok session-ök között megmaradnak. | A brigádvezető jegyzetei és a napló: a tegnapi tanulság holnap is megvan. |
A kapu nem kérés, hanem mechanikus erő: ahogy a vasszerelés átvétele nélkül nem öntenek betont, úgy a szabály-kapu blokkolja a szerkesztést, amíg az AI el nem olvasta az adott réteg szabályait — ebben a munkamenetben is többször megállított minket. Nem győzködni kell az AI-t: a keret nem engedi.
Az AI nem „szabad kezet" kap, hanem keretrendszert — ahogy a brigád sem, hanem tervet, szabályzatot és ellenőrt.
| Környezet | Mit kér a deploy-hook a gittől | A házon |
|---|---|---|
| dev | Nincs git-szabály — bármelyik ágról, akár commit nélkül is mehet. | Műhelyasztal: itt próbálgatnak, még nem a telken. |
| test | Feature ág a remote-on — az ágnak push-olva kell lennie. | Próbafelvonulás a telken: csak a leadott, látható terv szerint. |
| prod | Csak a main/master (origin) ágról, vagy verziózott release-ből. |
Használatbavétel: csak az átvett, jóváhagyott állapot kaphat engedélyt. |
Minél közelebb az éleshez, annál szigorúbb a git-feltétel — és a hook gépiesen érvényesíti, nem emlékezetből. Éles deploy ágról, ami nincs a remote-on beolvasztva, nem indulhat.
| Hook | Mikor fut | Hatása | A házon |
|---|---|---|---|
| Szabály-kapu | szerkesztés előtt | blokkol — amíg a réteg szabályfájlját el nem olvasta | az ellenőr nem írta alá a vasszerelést, nem öntenek |
| Pre-push audit | push előtt | blokkol — secretre és szabálysértésre | átadás előtti bejárás: hibával nem adják át |
| Deploy-hook | deploy előtt | blokkol — a környezet git-feltétele szerint | használatbavétel: csak az átvett állapotra |
main-szerkesztés |
szerkesztéskor | figyelmeztet — szándékosan nem tilt | a „Vigyázat, itt a napló!" tábla — a direkt út megengedett |
| Session-start | a munka elején | tájékoztat — nyitott feladatok, lejáró határidők | reggeli eligazítás a helyszínen |
Két kulcs: az AI-ügynök a saját jogosultságát sosem emelheti, és titkot sosem oldhat fel — az emberi kulcs. Ahogy a vasszerelést sem a brigád írja alá magának.
A Vishy-ház építésén építési napló fut: minden nap bejegyzés arról, ki mit csinált, milyen anyagból, ki ellenőrizte. Ha a beköltözés után vita van — „ez nem így volt megbeszélve" —, nem az emlékezet és nem a becslés dönt, hanem a napló.
Dátum, ki, mit, miért — a betonozás napja, a próbakocka száma, a műszaki ellenőr aláírása.
Nálunk: minden változás egy commit — szerző, dátum, üzenet.
A tegnapi bejegyzést nem javítják ki csendben — új bejegyzés mondja meg, mi változott.
Nálunk: a main védett ág — nincs force-push, a beolvasztás MR-en át megy, a javítás is új commit. A history technikailag átírható; nem fizika védi, hanem szabály és jogosultság — vagyis ez is egy kapu.
„Mennyi ideig tartott?" „Ki döntött a pincéről?" — a napló megmondja. A kivitelező becslése nem bizonyíték.
Nálunk: a lenti számok a git logból jönnek — bárki újraszámolhatja.
Először a ház: mit csinál a kész alkalmazás · ver=0.1.390 óta élesben
Linux VM a nyilvántartásban — ez a flotta, amit kezel
ennyi időnként fut le magától a teljes flotta-ciklus
az első mondattól az üzemelő alkalmazásig
architekt/BA/QA + AI
És csak azután a napló: 19 aktív fejlesztési nap, 390 commit, ~20 300 sor Go mellett ~26 500 sor Markdown — több terv, mint fal: a tervrajz nem lassította az építkezést, ez tette lehetővé. De ezek nem a mérce: a sor és a commit a felrakott tégla, nem a lakható ház — a mérce az átvett követelmény (lásd a vezetői tanulságokat). A „hagyományos" ellenpont (nagyságrendileg 12–27 emberhónap) ráadásul becslés, dokumentált módszertan nélkül — nagyságrend, nem bizonyíték.
És ma (2026-09-24, ugyanabból a git logból): v0.8.951 élesben · 2 107 commit · 81 aktív fejlesztési nap · ~35 900 sor Go + ~23 600 sor Go-teszt mellett ~86 800 sor Markdown · 47 spec-mappa. Az arány nem romlott: még mindig több a terv, mint a fal. A TdD a naplóból is látszik: a 2026-09-09-i mandátum óta született 16 új spec-mappa mind az első napon tests.md-vel jött (24 a 47-ből; a többi a mandátum előtti, grandfatherelt).
Miért elég egy architekt/BA/QA? Ahogy a háznál sem a téglarakás a szűk keresztmetszet, hanem a döntés, az ellenőrzés és az átvétel — és azt ember végzi: megrendelő (szándék) → BA (BRD, EARS) → architekt (SDD) → AI (teszt + kód) → architekt (review · verifikáció) → megrendelő = QA (validáció, átvétel). A téglát az AI rakja — a három emberi kalap egy emberen van, de a lánc sorrendje és a kapuk nem tűnnek el.
A házon: Az építési napló és a próbakocka jegyzőkönyve. · SdD-ben: A git log a napló — minden commit egy bejegyzés; a TdD-teszt futása a próbakocka jegyzőkönyve.
A háznál sem a tégla a termék, és nem is a tervrajz: a ház, amiben laknak. Eddig a módszert néztük — itt az, ami belőle lett: egy üzemelő alkalmazás, amit reggel megnyit valaki, és megcsinálja vele a napi munkáját. A kód ennek csak az anyaga.
Az alapfunkciók
Kereshető nyilvántartás a ~500 gépről: OS, csomagok, felhasználók, szolgáltatások, hálózat — és a változás története (SCD2), nem csak a mai állapot.
6 óránként lefut a flotta-ciklus: SSH-ping → gyűjtés → mentés. Elérhetetlen gép nem állítja meg — naplózza és megy tovább.
„Hol fut még EOL disztribúció?", „melyik gépeken ugyanaz a jelszó-hash?" — az AI a saját eszközein át kérdez, nem nyers SQL-lel.
A VM-igény űrlapon indul, a nyilvántartásba kerül, onnan a GitLab CI hozza létre — az alkalmazás a rekordot vezeti, nem ő provisionál.
Ez az alap. Azóta ugyanabból a láncból épült tovább: CVE- és NIS2-riportok · titok-keresés a flottán · függőségi gráf · IPAM és IT-szolgáltatás-katalógus · VM-igénylés OpenTofu-val · és a Timi IT-portál: csapat (távollét, ügyelet, standup), Jira-munkanapló, tudástár — egy felületen, AI-val a bejáratnál.
Egy hétfő reggel — ugyanaz a lánc, csak a ház felől nézve
1 — céges AD-fiókkal — a jogosultsága dönti el, mit lát
2 — „CentOS 6, éles" — a válasz a hajnali gyűjtésből van
3 — az AI-tól, mi függ attól a géptől — leállítás-tervezéshez
4 · KAPU — az érzékeny érték feltárása és minden változtatás emberi kapun megy (A6)
Ami a felhasználó felé nem látszik, mégis ez tartja: minden érzékeny érték már tárolás előtt álnevesítve van (
{{type:hash}}), az eredeti külön, titkosítva; az AI az álnevesített oldalt olvassa. A validáció kérdése ezen a dián dől el: „ezt akartuk?" — és a válasz nem a commitok száma, hanem hogy a hétfő reggel tényleg gyorsabb lett-e.
A házon: A kész, lakott ház — és a család már a következő bővítést tervezi. · SdD-ben: 09 Használat → új szándék: a SdD lánc újraindul.
A ház építésénél is van három pont, ahol a brigád nem mehet tovább egyedül — nem bizalmatlanságból, hanem mert ott a döntés következménye visszafordíthatatlan. A szoftverben ugyanez a három pont van.
Kapu ① · változtatás
Fal áthelyezése, tetőtér-beépítés, új szint — az építész és a hatóság hagyja jóvá, a brigád nem dönthet róla. Az építési naplóba viszont szabadon ír: mérés, észlelés, mi történt ma — az nem változtat a házon.
Nálunk: minden állapotváltoztatás MR-en megy át, ember mergeli; a megfigyelés (napló) kapu nélkül fut.
Kapu ② · érzékeny adat
A kulcsot és a riasztókódot csak megnevezett ember kapja meg, átadás-átvételi jegyzőkönyvvel — és nem „hátha kell alapon". A brigád nem adja át saját magának.
Nálunk: az eredeti érték feltárása szerepkör + napló + korlát mögött; az AI sosem kérheti.
Kapu ③ · jogosultság
A lakáshitel következő részletét a bank csak mindkét házastárs aláírásával folyósítja. Meghatalmazást senki nem írhat alá saját magának.
Nálunk: admin-jogot csak egy második admin megerősítésével lehet adni; az AI magának soha.
Hol ülnek a kapuk az SdD láncban?
1 — BRD + EARS, SDD — a tervrajz
2 · TdD · RED — a próbakocka — a mérce a fal előtt
3 · GREEN — a brigád a terv szerint; ugyanaz a teszt zöldre vált
KAPU ① · VERIFIKÁCIÓ — építési engedély + műszaki ellenőr: ember olvassa a diffet és a tesztet — a terv szerint épült?
KAPU · VALIDÁCIÓ — a család: ezt a házat akartuk?
A ② kulcs és a ③ két aláírás nem a lánc egy pontján ül, hanem végig érvényes: üzem közben is, minden lépésnél — ezt a jogosultság és a napló kényszeríti ki, nem a jóindulat.
Verifikáció ≠ validáció. A verifikáció arra felel: jól építettük-e meg? (mechanizmus létezik, a gépi ellenőrzések zöldek, az ember review-zta a diffet). A validáció: a jót építettük-e meg? (a megrendelő fogadja el az eredeti üzleti célra, valós folyamaton — ez a QA kapu). Egyik sem önmagában a „kész".
A házon: a műszaki ellenőr azt nézi, a terv szerint épült-e meg (verifikáció); a család azt, hogy azt a házat kapta-e, amire szüksége volt (validáció). A fenti három kapu az építkezés közben véd — az ① egyben a verifikációs kapu; a validáció a második módszertani kapu, és az dönti el, hogy kész-e. Mindegyiknél ember dönt.
A módszer nem az AI-ról szól, hanem arról, hová teszed az embereidet. A háznál sem a téglarakó a drága — hanem az építész, aki dönt, és a műszaki ellenőr, aki átveszi.
A gépelés már nem szűk keresztmetszet — a review és az átvétel az. Oda kell a szakértő: architekt/BA és QA, nem több kódoló kéz.
A házon: építészből és műszaki ellenőrből nem spórolunk.
A szabály, a spec és a döntés dokumentum — review-zható, verziózott, visszafordítható. Ha valaki elmegy, a tudás marad.
A házon: a tervrajz és a napló túléli a brigádot.
Nem sorokat és nem commitokat, hanem átvett követelményt — és hogy mennyi idő a szándéktól az átvételig. A gyors, de vissza nem vett munka nem sebesség.
A házon: a lakható, átadott ház számít, nem a felrakott tégla.
A kapuknál: minden változtatás, érzékeny adat és jogosultság ember kezében marad; az AI magának semmit nem nyit ki. A termék adata házon belül marad, a fejlesztés AI-költsége külön keret — két láb, két döntés.
A házon: engedély, kulcs, két aláírás — a kapuk diáján.
Az első lépés holnap: válassz egy kicsi, valódi igényt. Egy oldal brief, néhány EARS-mondat, a teszt előbb (TdD) — és mérd, mennyi idő alatt jut el az átvételig. Nem pilot-program kell, hanem egy végigvitt példa.
1 — írd le, mit szabad és mit nem — mielőtt promptolnál
2 — előbb a MIT dokumentumban, aztán a HOGYAN
3 — egy változás = egy diff = egy review
4 — sose hidd el „kész" fordítás alapján
5 — amit nem adsz oda, az nem létezik
Egyetlen mondatban: bánj az AI-jal úgy, mint egy nagyon gyors, nagyon felejtős új kollégával — aki látszólag logikus, de magabiztosan téved, és nem alkot új igazságot, csak újrakombinál. Adj neki írott szabályokat, írott specifikációt, és ellenőrizd a munkáját.
A házon: Az első saját házadnál: előbb terv és szabvány, aztán falak — kicsiben, ellenőrizve. · SdD-ben: Szabály → spec → kis lépés → teszt (TdD) → verifikáció.
A „köszönjük" többes szám szándékos: ezt a bemutatót ember + AI készítette — a módszertan saját bizonyítéka.
szándék → spec → terv → feladatok → teszt → kód → verifikáció → validáció → használat · Document = Code · az ember dönt, az AI végrehajt
A bemutatóban említett minden szabvány és technológia a hiteles forrására mutat (kattintható, ellenőrzött linkek). Mérünk és hivatkozunk — nem tippelünk.
Betűszó-térkép — az öt fogalom, amit ne keverj össze
| Rövidítés | Teljes név | Szabvány / forrás | Szerep nálunk |
|---|---|---|---|
| SdD | Spec-driven Development | módszertan — a mi működési modellünk; inspiráció: spec-kit | a fejlesztési lánc: szándék → spec → terv → feladatok → teszt → kód → verifikáció → validáció |
| SDD | Software Design Description | IEEE 1016-2009 inaktív-fenntartott (2020-03-05) — referencia-modell | technikai tervrajz — architektúra, adatmodell, interfész |
| BRD | Business Requirements Document | ISO/IEC/IEEE 29148 | üzleti tervrajz — célok, scope, workflow, compliance |
| EARS | Easy Approach to Requirements Syntax | Mavin, RE'09 | tesztelhető követelmény-kikötések (When / While / If… then) |
| TdD | Test-Driven Development | Beck, 2002 | red → green → refaktor; a teszt az EARS-kikötés gépi fele, és előbb kerül commitba, mint a kód |
CREATE PROPERTY GRAPH + GRAPH_TABLE(… MATCH …), az SQL/PGQ (ISO/IEC 9075-16:2023, SQL:2023) szerintdev.doc_edges (fejlesztés) · rag.cross_refs (ügyfél-RAG): a kapcsolat külön tárolva, nem vektor-hasonlóságtesting · JUnit 5 — ugyanaz a red/green ciklus#talk)