Skip to content

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

Open

Description

@godavid

A 2026-10-27-i /hypo fix audit nyitott tételei (tulajdonosi kérés, 2026-10-27). A doksi-javítások a PR-ben vannak: #9. Az itt maradt tételek kódot, repo-beállítást vagy tulajdonosi döntést kívánnak.

Minden tételnél: fájl, miért számít egy kontextus nélküli agentnek, és a pontos javaslat. Jelölés: tulajdonosi döntés (needs-human) és kódőr (a prózai szabályt kód vagy teszt rögzíti).

Tulajdonosi döntések (needs-human)

  • npm-név (AGENTS.md, README.md, skills/tarhely-cli/SKILL.md).
    Miért: a csomag kiadatlan (npm view tarhely-cli → E404), a név szabad. Ha egy agent npx tarhely-cli-t futtat, egy névfoglaló csomag az init-en át megkapja a jelszót és a TOTP-seedet.
    Javaslat: npm publish --provenance (2FA), vagy a név lefoglalása. Ugyanabban a PR-ben az Állapot blokkok és a „közzétételig” megjegyzések törlése (AGENTS.md, README.md magyar és angol rész, SKILL.md törzs és description).
  • A letöltés jogi hatása (skills/tarhely-cli/SKILL.md, README.md, AGENTS.md).
    Miért: ha a GET /uzenet/letoltes/beerkezett/{eid} átvételnek számít vagy letöltési igazolást indít, egy agent egy tömeges download-dal jogi határidőt indíthat el.
    Javaslat: tisztázni. Ha igen: SKILL.md Aranyszabály 6 (csak azt töltsd le, amit a felhasználó kért; előtte mutasd meg a list --json kimenetét), egy mondat a README.md „Mit csinál, mit nem” részébe, és a „nincs tisztázva” törlése az AGENTS.md-ből.
  • Nem szintetikus eid a történetben, fixture-őr (README.md az e8a5384-ben, .gitleaks.toml).
    Miért: a fixture-szabály ma csak próza. A gitleaks egy valódi érkeztetési számot nem fog meg, és egy agent példának másolhatja.
    Javaslat: döntés az 1263939602026… előtagról (történet-átírás, vagy elfogadás .gitleaksignore ujjlenyomattal). .gitleaks.toml: [extend] useDefault = true és egy tarhely-erkeztetesi-szam szabály a nem szintetikus 13–24 jegyű számokra ((?:^|[^0-9])([1-9][0-9]{12,23})(?:[^0-9]|$)), allowlist: pnpm-lock.yaml, test/totp.test.ts, 1704067200000.
  • src/index.ts és package.json.
    Miért: a Kódtérkép nyilvános API-nak hívja, de a package.json-ban nincs main/exports, így csomagként nem importálható. A loginToKau/launchBrowser újraexportja megkerülné a withSession diagnosztika-szabályát.
    Javaslat: vagy "exports": { ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" } }, vagy a fájl elhagyása. Addig az AGENTS.md Kódtérkép-sora: ma csomagként nem importálható, és a loginToKau/launchBrowser exportja megkerülné a withSession-t.
  • main-védelem (repo-beállítás).
    Miért: a „Landolás és CI” szabály csak próza. 13 commitból 11 PR nélkül került a main-re. allow_auto_merge=false és védelem nélkül a gh pr merge --auto nem élesít, hanem azonnal merge-el, a CI eredményét nem várja meg.
    Javaslat: PR kötelező, kötelező check státusz, force-push tiltva, csak squash merge (allow_merge_commit=false, allow_rebase_merge=false); opcionálisan allow_auto_merge=true.
  • Kiadás és döntések (opcionális) (AGENTS.md).
    Miért: az első kiadásnak nincs leírt menete, és a „miért így” csak a csapdalistában és kommentekben él.
    Javaslat: első kiadáskor v0.1.0 tag és GitHub Release. „Kiadás” szakasz: pnpm build + npm pack --dry-run, npm publish --provenance, tag, Állapot-törlés. Opcionálisan „Döntések (miért így)” szakasz az öt kikövetkeztetett döntéssel; az idp.gov.hu indoklását csak a tulajdonos adhatja meg.
  • Hálózati rés (src/browser.ts:58-68; biztonsági határ, tulajdonosi jóváhagyás kell).
    Miért: a doksi szerint a böngésző minden más hostot elutasít, de a context.route a Service Worker és a WebSocket forgalmát nem látja (Playwright 1.63.0).
    Javaslat: newContext({ …, serviceWorkers: "block" }) és context.routeWebSocket(...), amely a nem engedélyezett hostokat lezárja; // INVARIANT: komment a context.route fölé. Tesztek a test/browser.test.ts-ben vi.mock("playwright")-tal: it("registers a route that aborts non-allowlisted hosts"), it("blocks service workers"). Addig Service Worker-rés megjegyzés az AGENTS.md Hálózat sorába, a README.md „Hová beszél?” részébe és a SKILL.md bevezetőjébe.

Kódőrök (code-guard)

  • CLI-tanácsok npx tarhely-cli-vel (src/errors.ts:37,45, src/store/credentials.ts:62, src/commands/doctor.ts:43,55, src/commands/init.ts:59,75, src/browser.ts:51).
    Miért: a hibakimenet hint-jét egy agent szó szerint lefuttatja, és az a kiadatlan, foglalható névre fut.
    Javaslat: a hívási előtagot a tényleges binárisból képezd (node <process.argv[1]>, kivéve az npx-es futást). A Chromium telepítése a csomagolt Playwright cli.js-ére mutasson. Unit-teszt: egyik hint sem tartalmaz bedrótozott npx tarhely-cli-t.
  • Csak-olvasás kódőr (src/tarhely/api.ts, apiRequest).
    Miért: a „csak olvas” ígéret ma próza és komment. Egy agent egy új hívással írni kezdhet a tárhelyen, és semmi nem állítja meg.
    Javaslat: assertReadOnlyEndpoint engedélylistával: POST /uzenetek/BEERKEZETT/kereses, GET /uzenet/beerkezett/{eid}, GET /uzenet/letoltes/beerkezett/{eid}, GET /mailbox/details. Tesztek a test/api.test.ts-ben: it("rejects any endpoint outside the read-only allowlist"), it("issues only allowlisted calls from apiList, apiDetail, downloadLetter and readQuotaPercent").
  • Diagnosztika-teszt (test/session.test.ts).
    Miért: a „kitöltött belépőmezőről soha nincs képernyőkép” invariánst teszt nem őrzi. Egy refaktor észrevétlenül képre teheti a jelszót.
    Javaslat: a browser, a kau/login és a tarhely/api mockolásával: it("never captures when login fails after the secrets were typed"), it("captures a capturable pre-secret failure"), it("captures a failure after a successful login").
  • Elavult komment (src/session.ts:37-38; az integráció alapállapotra állította).
    Miért: a komment szerint a capture csak sikeres belépés után él, a kód a titok előtti capturable hibánál is képet ad. Egy agent a kommentnek hisz.
    Javaslat: // INVARIANT: kitöltött belépőmezőről soha nincs képernyőkép vagy aria-snapshot. Capture csak sikeres belépés után, vagy a titkok begépelése előtti, capturable-nek jelölt hibánál (src/kau/login.ts). Lásd AGENTS.md, Invariánsok.
  • Debug-capture (src/errors.ts:53, src/report.ts:88-96).
    Miért: a 4-es kód hint-je képernyőképes nyilvános issue-t javasol, a kép személyes adatot mutat, és a capture alapjoggal, git-őr nélkül ír.
    Javaslat: a hint: nyiss issue-t a hibaüzenettel; képet csak kitakarva csatolj, a debug-mappa legyen repón kívül. A capture előtt assertOutDirNotCommittable(debugDir), a mappa 0o700, a fájlok 0o600 joggal. Tesztek: it("refuses a debug dir inside a non-ignored git work tree"), it("writes debug captures with 0o600"). Addig a README.md 4-es sorához: „, akkor sem, ha a kiírt „Tanács” a képernyőképet javasolja”.
  • Zip 200 MB teszt (test/extract.test.ts).
    Miért: a 200 MB-os korlátot teszt nem őrzi; egy refaktor csendben kiveheti.
    Javaslat: it("rejects a zip whose declared uncompressed size exceeds 200 MB and writes no files"): zip fflate zipSync-kel, a központi jegyzék +24-es eltolású mezője 201 MiB-ra írva. Utána az AGENTS.md Zip sorából „a 200 MB-osat nem” törlése.
  • Node-tartomány (package.json engines, src/commands/doctor.ts:22-37, src/main.ts:77).
    Miért: az engines >=20.16 átengedi a 21.x-et és a 22.0–22.3-at. A doctor csak a főverziót nézi, ezért ott „ok”-t mond, pedig a --no-extract (allowNegative) elbukik.
    Javaslat: "engines": { "node": "^20.16.0 || >=22.4.0" }. A doctor-ban isSupportedNode (20.x ≥ 20.16, 22.x ≥ 22.4, ≥ 23); tesztek: 20.15.1 és 22.3.0 nem ok, 20.16.0 és 22.4.0 ok. A main.ts-be vissza a komment: „A --no-extract miatt kell; a parseArgs allowNegative Node 20.16-tól és 22.4-től létezik.”
  • USAGE --since (src/main.ts:29).
    Miért: a súgó szerint a --since csak az ettől érkezett leveleket adja. A list viszont mindet visszaadja, a korábbiakat isNew: false-szal; egy agent hiányos listára számít.
    Javaslat: download: csak az ettől érkezettek; list: a korábbiak isNew: false (felső határ nincs).
  • Határ-teszt (test/boundaries.test.ts).
    Miért: a Kódtérkép rétegszabályait semmi nem kényszeríti.
    Javaslat: describe("module boundaries"): a loginToKau és a capture csak a session.ts-ben; a chromium.launch és a context.route csak a browser.ts-ben; a screenshot és az ariaSnapshot csak a report.ts-ben; fetch( csak az api.ts-ben; és a kau/, tarhely/, commands/ importtilalmai.

Review: már a main-en lévő hibák (pre-existing)

A PR saját családi review-ja (claude-opus-5.5@high, 1. kör) találta ezeket; nem a PR hozta be őket. Mindegyik átfed egy fenti tétellel, a javaslat ott van.

  • src/errors.ts portalChangedError hint („nyiss issue-t a képernyőképpel”): nyilvános issue-ba kér képernyőképet. Ellentmond az új AGENTS.md szabálynak („Ha ehhez nyúlsz: hint … nem buzdíthat képernyőkép … nyilvános feltöltésére”) és az új 4-es kódú útmutatásnak. A doksi most figyelmezteti az agentet, de a hint szövegét is javítani kell. → Debug-capture.
  • src/commands/doctor.ts: a MIN_NODE_MAJOR = 20 csak a főverziót nézi, a package.json engines viszont >=20.16. A --no-extract-hoz kellő util.parseArgs allowNegative 20.16+/22.4+ alatt létezik. Így a doctor a 20.0–20.15, a 21.x és a 22.0–22.3 ágon „node ok”-t mond. → Node-tartomány.
  • src/main.ts USAGE: a --since „csak az ettől érkezett levelek”, a list viszont minden levelet visszaad, a korábbiakat csak isNew: false-szal jelöli. A SKILL.md szövege a PR után helyes, a USAGE elavult. → USAGE --since.
  • A régi README.md mappapélda (2026-09-08_1263939602026…; a PR szintetikus eid-re cserélte) valódi érkeztetési szám lehet. A publikus git-történetben megmarad. → Nem szintetikus eid.
  • Minden CLI-hint, a doctor részlete és az init záró sora még npx tarhely-cli …-t ír (src/errors.ts, src/store/credentials.ts, src/browser.ts, src/commands/doctor.ts, src/commands/init.ts). A csomag kiadatlan (npm view → E404), így ezek egy foglalható névre mutatnak. A doksi most megkerüli; a kód a valódi hívást írhatná ki. → CLI-tanácsok.

Activity

  1. added
    quality[type] Code or doc quality cleanup candidate
    manual[source] Opened by a person or an owner-lane session
    triaged[status] Labelled and understood; nobody works on it yet
    on Nov 13, 2026
  2. godavid commented on Nov 14, 2026

    @godavid
    OwnerAuthor

    A különálló apró javítás bekerült: #11, head 1da704154ce6bb620804d2c926e7fc40f6567e68, merge 855cfa99a1b6875f4ee0c5d1d1a2e7cac4196f9a. Friss Codex GPT 6.1 Sol high review: clean, Important 0 / Nit 0 / Pre-existing 0.

    Csak az elavult USAGE --since sor a kvalifikált apró residual. A Service Worker/WebSocket boundary, debugcapture0600, Node-range és hint/modulhatár külön nagyobb scoped brief. Ezek nem új ownerkérdések.

    A collector nyitva marad. A fennmaradó gyökérokok a meglévő brief/collector alapján haladnak; a korábbi valós holdok érvényesek. A PR Refs hivatkozást használ, nem Closes-t. Ez a bejegyzés source/merge tény, önmagában nem általános production/store-állítás.

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

    manual[source] Opened by a person or an owner-lane sessionquality[type] Code or doc quality cleanup candidatetriaged[status] Labelled and understood; nobody works on it yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions