Skip to content

[hypo] 2026-10-27 tulajdonosi audit — nyitott tételek #32

Open

Description

@godavid

A 2026-10-27-i tulajdonosi /hypo fix kör (a belépő doksi és a runbook javítása) nyitva hagyott tételei. A cél az agentes fejlesztés védelme: a doksi ezeknek a kódbázisoknak a memóriája, az agentek megbíznak benne. Minden tétel: fájl, miért számít egy előzmény nélküli agentnek, pontos javaslat.

A kör PR-je: #33 (a teljes higiénia-riport ott, kommentben).

Előfeltétel a landoláshoz

  • pnpm-workspace.yaml — külön deps-PR overrides-szal: zod >= 4.6.6, undici >= 7.30.1. Miért: a kötelező biztonsag check a mainen piros (2026-10-26, pnpm audit high), így minden PR-en bukik, a hypo-PR-en is; ez a hypo-PR landolásának előfeltétele.

Deploy- és állapotjelzések

  • docs/superpowers/plans/2026-09-16-agent-felulet.md, docs/superpowers/specs/2026-08-06-teljes-szoveges-kereses-design.md, docs/superpowers/specs/2026-09-16-agent-felulet-design.md — a cím után állapotjelzés, a törzs érintetlen: „KÉSZ, archivált rekord, nem utasítás; leszállítva (Agent-felület: REST API + MCP-szerver + felvételi napló #10, Agent-felület és értesítés a weboldalon #17); deploy csak a release-production.yml-ből, csak squash PR; lásd ../../uzemeltetes.md”. Miért: a 2026-09-16-i terv L3-6/L53 még helyi vercel --prod-ot ír elő; egy agent ezt követve megkerüli a release-production.yml deploy-kapuját.
  • PRODUCT.md L87-88 — owner-döntés a régi aldomain átirányítás-vállalásáról: (a) a DNS-rekord vissza a Vercelre, vagy (b) a sor mondja ki, hogy az átirányítás 2026-09-16 óta nem él (a 2026-09-23-i döntés szerint). Miért: a doksi olyan átirányítást ígér, amely nem működik; az agent erre építhet.
  • Gyökér LICENSE — az owner hozzáadja az MIT-szöveget a jogosult nevével. Miért: a GitHub most license: null-t mutat, a PRODUCT.md és a package.json-ok MIT-et állítanak; a licenc-metaadatot olvasó eszközök és agentek nem látnak licencet.

CI-kapuk (ma a CI csak biztonsági ellenőrzést futtat)

  • .github/workflows/teszt.yml (új; a Bump actions/setup-node from 7.0.0 to 7.1.0 in the actions group across 1 directory #24 miatt nem a biztonsag.yml-ben) — pnpm install --frozen-lockfile, pnpm -r test, pnpm --filter @gitjog/pipeline exec tsc --noEmit, pnpm --filter @gitjog/szoveg exec tsc; utána a teszt legyen kötelező check a 23985520-as rulesetben. Előbb .js kiterjesztés a packages/szoveg/src relatív importjaiba (index.ts, hivatkozas.ts, szakasz-diff.ts), ez megszünteti a 7 tsc-hibát; utána törölni az AGENTS.md 7-hibás megjegyzését és a runbook „a CI nem futtat tesztet” megjegyzését. Miért: a zöld PR ma csak a biztonsági checkeket bizonyítja; a determinizmus-, horgony-, delta-őr- és dátumteszteket semmi nem kényszeríti ki, egy agent zöld CI mellett is törhet viselkedést.
  • apps/web/lib/md.ts — XSS-teszt az új packages/szoveg/test/md-xss.test.ts-ben: ellenséges markdownból nem lesz tag, minden id illeszkedik a ^[a-z0-9-]+$-re; INVARIANT: komment a fájlba; az AGENTS.md invariáns-sora erre a tesztre mutasson. Miért: az XSS-invariáns ma csak prózában él; egy agent az md.ts módosításával csendben megtörheti.
  • packages/pipeline/supabase/*.sql + apps/web/app/kereses — a kiemelés-invariáns gépi őre: CI-grep a StartSel=< / StopSel=< mintára és a dangerouslySetInnerHTML-re, vagy vitest a kiemelve() escape-elt kimenetére. Miért: a kiemelés STX/ETX-szel jelölt, nem HTML; ezt ma csak komment őrzi, egy agent visszaírhatja <mark>-ra és HTML-ként renderelheti.
  • packages/pipeline/adatrepo/napi-delta.yml — heti CI-diff a nyers godavid/magyar-jog/.github/workflows/napi-delta.yml ellen; utána az AGENTS.md „Ne tedd” 3. sora [kapu]. Miért: a két példány byte-azonosságát ma kézzel kell tartani; egy agent az egyiket módosítja, és az eltérés észrevétlen marad.
  • packages/pipeline/test — vitest: a torvenylista-generalas.ts KIEMELT_SLUGOK egyezik a config.ts JOGSZABALYOK slugjaival documentId szerint (vagy az egyik a másikból származik); utána a runbookból törölni a „(ezt teszt nem őrzi)” részt. Miért: a két listát semmi nem tartja szinkronban; egy agent az egyiket bővíti, a másikat elfelejti.
  • Függőség-kapu (a javasolt teszt-workflow-ban) — a web és a szoveg nem importál pipeline-t; a packages/szoveg/src nem importál next, react, @supabase/, node:fs, postgres, cheerio csomagot; packages/*/src nem importál apps/-ból; NEXT_PUBLIC_SUPABASE nincs az apps-ban. Miért: az importszabályok ma csak az AGENTS.md táblájában élnek; gépi kapu nélkül egy agent csendben átlépi a határt.
  • Márka- és nyelvi őr — CI: git grep a régi márkaszóra az engedélyezett fájlokon kívül, és ugyanez a PR-címre (PR_TITLE env-ből). Miért: védjegyfelszólítás (2026-09-16); egy agent a régi szót visszahozhatja doksiba, UI-ba vagy PR-címbe.
  • .github/pull_request_template.md — egy jelölőnégyzet: az üzemeltetést érintő viselkedésváltozás ugyanabban a PR-ben frissíti a docs/uzemeltetes.md-t. Miért: a fix(delta): a szétcsúszás-őr a régi/előzmény nélküli állapotokat számolja #21 és a fix(api,szoveg): pont nélküli §, naptári dátum-ellenőrzés, rövid cache #30 runbook-frissítés nélkül ment be; az agent a runbookot igaznak veszi.

Adatbázis és üzemeltetés

  • packages/pipeline/supabase/06-anon-idokorlat.sql (új, idempotens) — alter role anon set statement_timeout = '8s'; notify pgrst, 'reload config';; az owner erősítse meg az élő beállítást, utána a runbook INFERRED-jelölője törölhető. Miért: a timeout ma csak az élő DB-ben él; aki az SQL-ből építi újra az adatbázist, elveszíti.
  • docs/uzemeltetes.md — az owner erősítse meg a két <!-- INFERRED: verify --> tételt (a szétcsúszás-őr teendője, a timeout-parancs) és a Vercel Firewall-szabály aktuális módját (2026-09-25: log). Miért: az agent a runbookot igaznak veszi; az INFERRED-tételek nem ellenőrzöttek.
  • apps/web/lib/api/valtozasok.ts — a veszteséges felveve_utan cursor (valtozasok: a cursor (felveve_utan) egész napi kötegeket dob el — 171/221 módosítás csendben elveszik #26) javítása keyset cursorral (felveve, slug, datum), plusz teszt egy azonos időbélyegű köteggel; utána az „Ismert korlátok” tétele törölhető. Miért: az API-t használó agentek csendben elveszítenek változásokat.

Agentnek szóló szövegek (llms.txt, MCP, adat-repó sablonok)

  • apps/web/lib/api/semak.ts L13 — a kitalált 18-sz-elovasarlasi-jog horgony helyett 6-272-sz-megbizasi-szerzodes (Ptk.; a kereses vagy a tartalomjegyzék adja). Miért: az MCP- és OpenAPI-leírás nem létező horgonyt ad a külső agenteknek.
  • packages/pipeline/src/sablonok.ts L99-100 + apps/web/app/llms.txt/route.ts L31-32 + README_MD L8 — „egy commit = egy hatálybalépési nap, az aznap változó összes törvénnyel; mindig adj meg útvonal-szűrőt”. Miért: a külső agent azt hiszi, egy commit egy törvény egy állapota, és útvonal-szűrő nélkül félreolvassa a git log-ot.
  • packages/pipeline/src/sablonok.ts README_MD L20-21 — a main@{dátum} reflog-recept helyett allapotok.json-ból jq-val kiválasztott SHA-k; ugyanez kézzel a godavid/magyar-jog/README.md-ben. Miért: a reflog friss klónban üres diffet ad; az agent csendben rossz eredményt kap.
  • packages/pipeline/src/sablonok.ts L1 — owner-választás: (a) a README_MD/LICENSE_TXT (+LICENSE_HU_MD) szinkronja az élő fájlokból, vagy (b) a fejléc mondja ki, hogy ezeket csak a friss backfill írja. Miért: a fejléc szerint a sablon a forrás; egy agent a sablont szerkeszti, és hatást vár az élő README-n.
  • apps/web/app/llms.txt/route.ts L63/L69 + apps/web/lib/csatornak.ts L49 — földek forgalm → földek+forgalm. Miért: a curl a nyers szóközt elutasítja; a bemásolt példa nem fut.
  • apps/web/app/llms.txt/route.ts L38 — a diff {tol}/{ig} két létező időállapot napja, {tol} a korábbi, különben 404. Miért: az agent tetszőleges dátumot ad, és 404-et kap.
  • apps/web/lib/csatornak.ts L1-3 — vagy az llms.txt importálja a REST_PELDAK, FRISSITES_UTAN, OPENAPI_URL, RSS_URL, torvenyRss értékeket, vagy a komment mondja ki, hogy az llms.txt ezeket kézzel ismétli. Miért: a komment egyetlen forrást állít; az agent egy helyen javít, a másik elavul.
  • packages/pipeline/src/sablonok.ts L96 + apps/web/app/llms.txt/route.ts L91 — „4+ MB” → „3+ MB” (élő méret 3 365 848 bájt). Miért: a pontatlan méret félrevezeti az agent letöltési döntését.

Webes felület és dizájn

  • apps/web/app/kereses/page.tsx L107-109 — a horgonyos <Link> helyett sima <a> (a DESIGN.md :target-szabálya szerint), a next/link import törlése. Miért: a kód ellentmond a DESIGN.md-nek; az agent a hibás mintát másolja.
  • DESIGN.md / OG-kártyák / icon.svg — teszt: a világos :root OKLCH-tokenek sRGB hexre váltva egyeznek a PAPIR/TINTA/… konstansokkal; vagy közös modulból exportált értékek. Miért: a hex-másolatok eltávolodnak a tokenektől; a tokent módosító agent nem tud a másolatokról.

Eszközlánc

  • package.json — owner választja a pnpm fő verziót, és felveszi a packageManager mezőt; a napi-delta.yml mindkét példánya (ma 11) egy körben a többi workflow-hoz (12). Miért: az agent találomra választ pnpm-et; lockfile-zaj és eltérő viselkedés.

Korábbi eltérések (a review Pre-existing leletei)

  • packages/pipeline/src/sablonok.ts:85 — a kódkomment szerint „A delta minden futáskor kiírja” (AGENTS_MD); a delta.ts csak új időállapotot felvevő futáskor írja. Miért: ugyanaz az elavulás, amelyet a PR a docs/uzemeltetes.md-ben javított; az agent a kommentnek hisz. Javaslat: a komment igazítása a runbookhoz.
  • packages/pipeline/src/backfill.ts:42 — a komment szerint a KOTEG_MERET „feldolgozott jogszabályonként” számol, a :224-es ellenőrzés viszont commitokat számol (commitSzamlalo - utolsoPushnal >= 500). Miért: az agent rossz egységgel számol. Javaslat: „500 commitonként”, ahogy az új doksi írja.
  • packages/szoveg/src/szakaszok.ts fejléc — a test/szakaszok.test.ts relatív hivatkozás a csomagon belül helyes, de a horgony-teszt csomaghatáron át az apps/web/lib/md.ts-t is importálja (az új AGENTS.md kivételként dokumentálja). Miért: a fejléc nem jelzi a kivételt. Javaslat: a fejléc említse a csomaghatáron átnyúló importot és az AGENTS.md kivételét.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions