# Villanyszerelő Tudástár – Elmélet, szakszótár és Tesztek

Ingyenes, belépés, süti és előfizetés nélkül olvasható villamos ismeretanyag a `/tudastar` címen. Ez a dokumentum a tartalommotort, a közzétételi kaput, az oldalakat és a tartalomkészítés menetét írja le. Mérvadó terv: `docs/tudastar-terv.md` (2. információs architektúra, 3.3 tartalomformátum, 3.4 ábrák, 3.7 SEO, 4.3 állapotgép, 4.4 sablonok); terméktulajdonosi döntések: `docs/tudastar-dontesek.md`; a közös keret és a kalkulátorok: `docs/kalkulatorok.md`. A Tesztek (vizsgaszimuláció, terv 7. pont) leírása lent, a „Tesztek (vizsgaszimuláció)” szakaszban.

## Állapot

| Tétel | Kockázat | Állapot |
|---|---|---|
| 12 elméleti cikk: elektromos feszültség, áram, ellenállás, Ohm törvénye, teljesítmény és energia, Joule–Lenz, Kirchhoff, soros és párhuzamos kapcsolás, transzformátor, fényforrások, lumen és lux, színhőmérséklet | R1 | **közzétéve – „Belsőleg ellenőrizve”** |
| 5 gyakorlati cikk: rövidzárlat és túlterhelés, vezetékek színjelölése, vezeték- és kábeljelölések, IP-védettség, lámpafoglalatok és lámpatalpak | R2 | **közzétéve – „Belsőleg ellenőrizve”**, Figyelem-dobozzal (az R2 belső ellenőrzéssel való kiadásának kifejezett tulajdonosi megerősítése nyitott – lent, „Eltérések”) |
| Szakszótár (58 kifejezés, `/tudastar/szotar`) | R2 | **közzétéve – „Belsőleg ellenőrizve”**, Figyelem-dobozzal |
| Tesztek – számolós gyakorló (`/tudastar/tesztek`): 9 sablon a közzétett T0-kalkulátorokra | R1 | **közzétéve** (belső ellenőrzés, a kalkulátor kapujából levezetve) |
| Tesztek – 3 sablon T1-kalkulátorra (feszültségesés, kismegszakító-választás, Zs,max) | – | **rejtve**: a kalkulátor lektori kiadására és `tablesApproved()`-ra vár |
| Tesztek – statikus kérdésbank (`content/tudastar/kerdesek/`, MI-tervezet) | – | **nem élesedett**: a kérdések lektorra várnak (élesedés: ≥ 150 jóváhagyott, témakörönként ≥ 10) |
| 13 R3 vázlat: kismegszakító, áram-védőkapcsoló (FI-relé), EPH, feszültségmentesítés öt szabálya, világítási kapcsolások, 101–107 kapcsolók, dugalj, földelési rendszerek | R3 | **lektorra vár – nem közzétehető** (szöveg nélküli csonk a regiszterben) |
| Sémák és ábramotor: 20 netlistás bekötési ábra (Bekötés és Működés nézet, vezetéktábla, kapcsolóállás-táblázat), `/tudastar/semak` útvonalak, lektori csomag 4. rész (LK-4) | R3 | **kész, rejtve**: a buildbe semmi nem kerül belőle, amíg a lektor jóvá nem hagyja (lent, „Sémák és ábramotor”) |

A lámpafoglalat-cikkből (0.2) a lektori válaszig kikerült a foglalat bekötésére vonatkozó mondat (R3-típusú tartalom), helyette: „A foglalat bekötése villanyszerelői feladat.” (`lektori-kerdesek-elmelet.md`, Világítás 1.).

A 18 közzétett tétel forrása a `content/tudastar/elmelet/*.md` (szerzői vázlat MI-segítséggel, `ai: vázlat`, független szakmai ellenőrzés 1. köre után); a nyitott szakmai kérdések: `content/tudastar/lektori-kerdesek-elmelet.md`. Az R3 vázlatok: `content/tudastar/r3/*.md` + `*.netlist.json`, kérdések: `content/tudastar/lektori-kerdesek-r3.md`, szimulátor: `content/tudastar/r3-sim/`.

## Útvonalak

| Útvonal | Tartalom |
|---|---|
| `/tudastar` | Kezdőlap: H1 „Villanyszerelő Tudástár”, keresőgomb (`/`, Ctrl+K), „Folytasd” (legutóbbiak és kedvencek a böngészőből, csak közzétett célra), szekciókártyák (Elmélet, Kalkulátorok kiemelve, Szakszótár), „Hamarosan – szakmai lektorálás alatt” (csak darabszám, szöveg nélkül), kiemelt kalkulátorok, Népszerű, Elmélet-kategóriák, biztonsági sáv, „Hogyan ellenőrizzük a tartalmat?” (`#ellenorzes`, a jelvények magyarázata), egy tervező-blokk |
| `/tudastar/elmelet` | Kategórialista horgonyokkal (`#alapfogalmak` …), cikk-kártyák jelvénnyel, lektorálás alatti kategóriák felirata |
| `/tudastar/elmelet/kategoria/<kategória>` | Kategóriaoldal (csak közzétett cikkel rendelkező kategória; a többi 404) |
| `/tudastar/elmelet/<slug>` | Cikkoldal (anatómia lent); csak közzétett cikk, minden más 404 |
| `/tudastar/tesztek` | Tesztek: statikus oldalváz (H1, „A tesztekről” doboz, JS nélküli mintafeladat, feladattípusok kalkulátor- és cikklinkkel, „Hogyan működik?”) és a csak itt töltődő kliensszigete; `?kod=`, `?mod=`, `?feladat=`, `?tema=`, `?hossz=` (a sziget olvassa; a statikus oldal minden lekérdezésre azonos, a kanonikus URL paraméter nélküli). Csak akkor létezik, ha van közzétett tartalma, különben 404 |
| `/tudastar/semak`, `/tudastar/semak/<slug>` | Sémák gyűjtőoldal és részletoldal (netlistás bekötési ábrák) – csak szakmailag lektorált sémával létezik, **most 404** (lent, „Sémák és ábramotor”) |
| `/tudastar/szotar` | Szakszótár A–Z, kifejezésenkénti horgonnyal (`#aram-vedokapcsolo-fi-rele`, `#pen-vezeto` …), betűsorral; JSON-LD: DefinedTermSet |

Minden oldal `dynamic='force-static'`, `revalidate=3600`; a paraméteres oldalak `dynamicParams=false`, `generateStaticParams()` = a kapu szerint közzétett tételek. A Tudástár-oldalak szerverkomponensek; nincs `getAccount()`, `cookies()`, `headers()`, adatbázis vagy API (`tests/kb-guards.ts`). A Shell (fejléc, fülek, alsó navigáció, lábléc, kereső) a szekció-layoutokból jön; a szakszótár az Elmélet fülét emeli ki. A cikk URL-jében a kategória nem szerepel, így egy átsorolás nem töri el a linket.

**Navigáció.** Csak az a fül látszik, amelyik szekcióban van közzétett elem: most **Elmélet**, **Kalkulátorok** és **Tesztek** (a **Sémák** fül az első lektorált sémával jelenik meg; Konstruktor nincs). Nyilvános fejléc: „Tudástár” és „Kalkulátorok” link (`current` kiemeléssel); lábléc „Tudástár” oszlopa (csak a mindig létező célokra: Tudástár kezdőlap, Kalkulátorok – a kaputól függő oldalra, pl. a szakszótárra nem, így egy felfüggesztés nem hagy 404-re mutató linket a nyilvános oldalakon); főoldal: „Ingyenes Tudástár és kalkulátorok – belépés nélkül” szakasz kiemelt cikkekkel (csak közzétett), `home-fine` mondat, GYIK; belépési kapu: „Belépés nélkül is használhatod” doboz. A kalkulátoroldal „Kapcsolódó cikkek” szakasza a cikkek `calculators` mezőjéből épül (`articlesForCalc`), a cikk „Kapcsolódó → Kalkulátorok” szakasza ugyanebből – csak közzétett célra.

## Cikkoldal anatómiája

1. Mobil alkalmazásfejléc („←” a kategóriára), asztalon PublicHeader + szekciófülek, bal oldalsáv a kategória cikkeivel, jobb oldali sticky tartalomjegyzék.
2. Morzsamenü (BreadcrumbList JSON-LD), H1.
3. Jelvény: **„Belsőleg ellenőrizve”** (link a kezdőlap `#ellenorzes` magyarázatára), verzió, dátum, olvasási idő.
4. Műveletek (kliensszigete `article-actions.tsx`): Kedvenc (`aria-pressed`, „Visszavonás”), Megosztás (Web Share, különben link másolása), Nyomtatás. JS nélkül rejtve (`html:not(.js) .kk-actions`), mert csak szkripttel működnek.
5. Tartalom (mobilon JS nélkül is nyíló `<details>`; asztalon a jobb oldali sávban).
6. A törzs a vázlat sorrendjében: R2-nél **Figyelem-doboz** (a vázlat `> **Figyelem:** …` blokkja), **Röviden** doboz, H2/H3 szakaszok, képletsorok, táblázatok (görgethető, fókuszálható régió), **ábrák** (saját SVG, ábraaláírás, szöveges megfelelő), **kidolgozott példák** keretben, **Gyakori tévedések**.
7. Kapcsolódó: kalkulátorok (alattuk „Összes kalkulátor”) és cikkek (csak közzétett; a lektorálás alatti kapcsolódók csak darabszámmal).
8. Források: „szabvány (kiadás) – pont”, ha a kiadás maga is zárójeles („2022 (EN IEC 60445:2021)”), akkor „szabvány, kiadás – pont” (nincs kettős zárójel); ha a kiadás vagy a pontszám ellenőrzésre vár, visszafogott **„kiadás ellenőrzés alatt”** jelölés (lent).
9. Egy tervező-blokk (PlannerCta), előző/következő a kategórián belül (két `minmax(0,1fr)` oszlop: a hosszú szó is törik, 320 px-en sincs vízszintes görgetés).
10. Változásnapló (összecsukható), meta-sor (verzió, ujjlenyomat, ábra-ujjlenyomat, frissítés, ellenőrzés módja, MI-jelölés, „Hibát találtál?” mailto az azonosítóval, verzióval, ujjlenyomattal), nyomtatáskor URL + verzió + ujjlenyomat + jelvény + nyomtatás ideje; a láblécben a nem bezárható alapfigyelmeztetés (`#fontos`).

Belső link (`[[id#horgony|szöveg]]`): közzétett célra `<a>` – képernyőn a környező szövegtől eltérő színnel és aláhúzással (WCAG 1.4.1; nyomtatásban aláhúzás nélkül); **lektorra váró (R3) vagy nem közzétett célra a link szövege marad, „(hamarosan – szakmai lektorálás alatt)” tompított, dőlt jelöléssel, link és linkszerű aláhúzás nélkül**; ismeretlen célra a generátor/teszt bukik.

**Érintési célok:** 950 px alatt a belső tartalomjegyzék, a kategórialisták, a morzsamenü és a kategóriacímek linkjei, valamint a „Tartalom” és a „Változásnapló” összecsukó legalább 44 px magasak (terv 2.9). **Nyomtatás:** sötét módból „háttérgrafikákkal” nyomtatva is fehér lap (`html`, `body` és a tokenek a nyomtatási blokkban).

**SEO.** `<title>` ≤ 60 karakter minden Tudástár-oldalon (`kbSeoTitle`: „<cím> – Tudástár – Villanyrajz”, ha belefér, különben rövidebb változat; a kezdőlapé „Villanyszerelő Tudástár – ingyenes | Villanyrajz”; a `tests/kb-routes.mjs` minden oldalon ellenőrzi), `description` = a front matter `summary`-je (80–160), abszolút `canonical` (a `metadataBase` az `APP_ORIGIN`-ból), `og:type=article`, `og:site_name`, `og:locale`, `keywords`; JSON-LD: BreadcrumbList (a látható morzsamenüvel azonos, a szótáron is a kategóriával) + TechArticle (`headline`, `dateModified`, `inLanguage:'hu'`, `isAccessibleForFree`, publisher; `reviewedBy` csak valós szakmai lektorálásnál kerülhet bele), a szótáron DefinedTermSet. Sitemap: `/tudastar`, `/tudastar/elmelet`, a kategóriaoldalak, a közzétett cikkek és a szótár (`lastModified` = a kiadás vagy a tartalom dátuma); R3 soha.

**Kereső** (`lib/kb/search.ts`, a meglévő overlay): a közzétett cikkek (cím, rövid cím, összefoglaló, kulcsszavak, szinonimák), a szótári kifejezések (a zárójeles kiegészítésből képzett álnevekkel, pl. „RCD”, kisebb súllyal, hogy egy szavas keresésnél a cikk és a kalkulátor előrébb álljon) és a kalkulátorok; csoportok: Elmélet, Szakkifejezések, Kalkulátorok. Cikktörzs nem kerül bele. **A Tudástár-index nem az oldallal érkezik:** a generátor egy csak a kapu szerint közzétett tételeket tartalmazó modult ír (`lib/kb/content/generated/search.ts`, ≈ 9,6 KB gz), amelyet a kereső az első megnyitáskor dinamikus importtal tölt be (saját JS-darab, CSP `script-src 'self'`), és a szerver által átadott közzétett célokra (`valid`: `article:<id>`, `calc:<slug>`) szűr – egy felfüggesztett cikk így akkor sem jelenik meg, ha a generált index régebbi. Az oldalba csak a kalkulátorok tételei (≈ 4,3 KB gz) és a `valid` lista kerül. A generált index = a szerver közzétett keresőtételei (`tests/kb-content.ts`); a kliensből csak ez az egy generált modul tölthető be (`tests/kb-guards.ts`). Előnézetben (`SHOCKCRAFT_KB_PREVIEW`) a tervezetek tételei az oldallal érkeznek. A gyorschipek csak közzétett célra mutatnak (Színjelölés, IP-védettség, FI-relé a szótárban …).

**Könyvjelzők és előzmények** (`lib/kb/storage.ts`, a meglévő `shockcraft-kb-*` kulcsok, új kulcs nincs): a cikk „Kedvenc” gombja `article` típusú könyvjelzőt ír (`shockcraft-kb-bookmarks-v1`); az olvasott cikk legalább 15 másodperc látható olvasás után kerül a „Legutóbbiak” közé (`shockcraft-kb-recent-v1`), és ez a Menüben kikapcsolható (`shockcraft-kb-prefs-v1` `off: ['history']`). A „Folytasd” és a fiók csak a szerver által közzétettként átadott célokra (`valid`) linkel: a „Folytasd” a többit elhagyja, a „Kedvencek és előzmények” fiók pedig áthúzva, link nélkül, „már nem elérhető” jelöléssel és törlés gombbal mutatja (régi, felfüggesztett, lektorra váró vagy kézzel beírt tétel). A sütitáblázat (`components/legal-page.tsx`) frissítve.

## Tartalommotor – a döntés

**Forrás: Markdown + YAML front matter (`content/tudastar/<szekció>/*.md`); build előtt generált, típusos TS-modulok (`lib/kb/content/generated/`).**

- A vázlatokat a szerző és a lektor Markdownban írja és olvassa; a generátor (`scripts/kb-content.ts build`) ebből típusos blokkokat (`lib/kb/content/types.ts`: `rovid`, `callout`, `h2`, `h3`, `p`, `formula`, `ul`, `ol`, `table`, `figure`, `example`, `terms`) és könnyű metaadatot ír.
- A generált fájlok a repó részei. Így a vinext/Vite (Cloudflare Sites) és a Node standalone build is ugyanazt a statikus TS-importot látja: futásidőben nincs fájlrendszer-olvasás, nincs Markdown-parser, nincs új függőség, és a kliensbe nem kerül sem parser, sem cikktörzs. A sorközi mini-jelölést (`lib/kb/content/inline.ts`: `**félkövér**`, `_dőlt_`, `` `kód` ``, `X_{alsó}`, `X^{felső}`, `[[id#horgony|szöveg]]`) csak szerverkomponens rendereli React-elemekké, innerHTML nélkül.
- A frissességet a `tests/kb-content.ts` és a `scripts/kb-content.ts check` őrzi: a vázlatokból memóriában újragenerál, és bármilyen eltérésnél bukik („elavult generált fájl”).
- A kiadási kapu már a generálásban is érvényesül: R3 vázlatból lektori rekord nélkül csak szöveg nélküli azonosító-csonk lesz (`KB_PENDING`: id, slug, szekció, kategória, kockázat) – a lektorra váró szöveg nem jut a build bemenetei közé. A szekció és a kategória **kockázati alsó korlátja** alatti besorolás generálási hiba (`lib/kb/content/categories.ts` `minRisk`: a védelmi és automatizálási eszközök, az érintésvédelem, a munkabiztonság, a kapcsolások és a földelés kategóriája, valamint a teljes Sémák szekció csak R3 lehet; ismeretlen kategória: hiba). Így egy tévesen R1/R2-nek jelölt biztonságkritikus vázlat belső rekorddal sem juthat ki; a kapu (`gate.ts`) ugyanezt futásidőben is ellenőrzi.

Fájlok:

| Réteg | Fájlok |
|---|---|
| Forrás | `content/tudastar/elmelet/*.md` (18), `content/tudastar/r3/*.md` (13, lektorra vár) |
| Generátor (csak szkript és teszt; zod itt engedett) | `scripts/kb-content.ts` (build / check / list / record), `scripts/kb-content/parse.ts` (front matter + Markdown → blokkok), `generate.ts`, `figures.ts` (ábra-forrás ujjlenyomat), `schema.ts` (front matter zod-séma), `checklist.ts` („kiadás ellenőrzés alatt”) |
| Generált | `lib/kb/content/generated/articles.ts` (`KB_ARTICLES` metaadat + `KB_PENDING` csonkok), `generated/bodies/<slug>.ts` + `index.ts` (törzsek, csak szerver), `generated/search.ts` (a böngészőbe lustán töltődő keresőindex, csak közzétett tételek) |
| Modell és kapu | `lib/kb/content/types.ts`, `fingerprint.ts`, `inline.ts`, `categories.ts` (kategóriák, kockázati alsó korlát, sorrend), `gate.ts` (a kapu tiszta szabálya – szerver és generátor közös), `search-items.ts` (keresőtételek – szerver és generátor közös), `changes.ts` (változásnapló), `registry.ts` (szerver: kapu kiértékelése, linkfeloldás, kapcsolódók, előző/következő, szótár, keresőtételek), **`lib/kb/release.ts` (közzétételi kapu)** |
| Felület | `components/kezikonyv/article/` (`article-view`, `blocks`, `inline`, `article-list`, `article-actions` – az egyetlen kliensszigete), `components/kezikonyv/figures/` (ábrák), `components/kezikonyv/kb-continue.tsx` („Folytasd”) |
| Útvonalak | `app/(kezikonyv)/tudastar/` (`page`, `layout`, `not-found`, `elmelet/{page,layout,not-found,[slug],kategoria/[kategoria]}`, `szotar/{page,layout}`); `app/sitemap.ts` |

### Formátumszabályok (a vázlat)

- **Front matter** (minden mező kötelező, `scripts/kb-content/schema.ts`): `slug`, `title` (≤ 70), `navTitle` (≤ 34), `summary` (80–160, egyben a meta description), `section` (`elmelet` | `semak`), `category` (`lib/kb/content/categories.ts`), `risk` (R1 | R2 | R3), `audience`, `keywords` (≥ 3), `synonyms`, `related` (cikk-id-k), `calculators` (kalkulátor-slugok), `sources` (`- standard:` / `kiadás:` / `pont:`; a sorvégi `# megjegyzés` megmarad), `ai` (nincs | vázlat | nyelvi), `version`, `updated`. A fájlnév = a slug = az id.
- **Törzs:** `## ` / `### ` címsor (a horgony az ékezet nélküli címből képződik, egyedi), `**Röviden:** …` összefoglaló, `> **Figyelem:** …` figyelmeztető doboz (R2-nél kötelező), `- ` és `1. ` lista, `| … |` táblázat, egysoros „=”-es képletsor, `**Kidolgozott példa …**` vagy számpélda-bekezdés a hozzá tartozó számítási sorokkal (egy keretbe kerül), `[ÁBRA: abra-N „cím” … title: … desc: …]` ábra-helyőrző. A szakszótárban a betűs szakaszok alatti `- **Kifejezés** (kiegészítés) – meghatározás` sorok szótári tételek (horgony: a kifejezésből).
- **A szöveget a generátor nem írja át**, csak a formát alakítja; a hűséget a `tests/kb-content.ts` ellenőrzi (a renderelt törzs olvasható szövege = a vázlat törzse jelölés nélkül, normalizálva). A megjelenítéskor egyetlen tipográfiai igazítás történik: nem törő szóköz a szám és a mértékegység, illetve az ezres csoportok között (`typo()`).

### „Kiadás ellenőrzés alatt”

Egy forrásmegjelölés akkor kapja a jelölést, ha (1) a lektori kérdéslista (`content/tudastar/lektori-kerdesek-elmelet.md`) név szerint kéri a kiadás, a honosítási év vagy a pontszám ellenőrzését – a tábla a `scripts/kb-content/checklist.ts`-ben, minden sorát a teszt a kérdéslista szövegéhez köti –, vagy (2) a vázlat YAML-megjegyzése (`# lektor ellenőrizze …`) vagy az érték maga („ellenőrizendő”) jelzi. A jelölés szerkesztőségi állapot, nem része az ujjlenyomatnak. Ha a lektor válaszolt: a vázlatban a kiadás/pont javítása, a checklist-sor törlése, `build`, majd új ellenőrzés és új rekord (a tartalom változott).

## Állapotgép, ujjlenyomat, közzétételi kapu

**Állapotgép:** vázlat → belsőleg ellenőrzött (csak R1/R2) → szakmailag lektorált → közzétett; [felfüggesztve]. Számított állapotok (`releaseInfo()` a `registry.ts`-ben): `kozzeteve`, `vazlat` (R1/R2 rekord nélkül), `lektorra-var` (R3 lektori rekord nélkül, vagy R3 belső rekorddal), `ujraellenorzendo` (a rekord ujjlenyomata vagy szekciója/kockázata eltér), `felfuggesztve`.

**Tartalmi ujjlenyomat** (`lib/kb/content/fingerprint.ts`): FNV-1a a `lib/sizing-tables.ts` `fingerprint()`-jével (importálva). Lefedi a szöveges metaadatot (cím, rövid cím, összefoglaló, kategória, kockázat, közönség, kulcsszavak, szinonimák, kapcsolódók, kalkulátorok, `ai`, verzió, dátum), minden blokkot – az ábráknál a vázlat helyőrzőjét (cím, rajzleírás, `desc`) – és a forrásokat. A ténylegesen kirajzolt SVG-t ez **nem** fedi.

**Ábra-ujjlenyomat** (`scripts/kb-content/figures.ts`, a metaadat `figures` mezője és a rekord `figures` mezője): cikkenként a FIGURES-jegyzék hozzá tartozó bejegyzéseinek forrássora (komponens, `desc` – a szöveges megfelelő, ha a helyőrző nem ad –, `wide`), a komponenst exportáló modul és helyi importjai (`kit.tsx`) teljes szövege, valamint az ábraszínek szerződése a stíluslapból (a `--kk-wire-*`/`--kk-copper*` tokenek minden előfordulása és a `.kk-fig-svg .f-*/.s-*/.t-*` osztályok). Futásidőben nem számolható (nincs fájlolvasás), ezért a generált értéket a CI veti össze a forrással (`tests/kb-content.ts`, `scripts/kb-content.ts check`). A modulszintű lenyomat szándékosan szigorú: egy közös ábramodul vagy a `kit.tsx` változása minden érintett cikket újraellenőrzésre küld. Mutációs próba a tesztben: az L1 ↔ N színcsere a komponensben, a FIGURES szöveges megfelelőjében vagy a színtokenben, illetve a `kit.tsx` módosítása a tételt „újraellenőrzendő” állapotba teszi.

Nem része egyik ujjlenyomatnak sem: a „kiadás ellenőrzés alatt” jelzés és a változásnapló. **Bármely tartalmi vagy ábramódosítás új ujjlenyomatot ad**: a tétel kiesik a közzétettek közül (`generateStaticParams`, sitemap, kereső, linkcél), és a `tests/kb-content.ts` megbukik.

**Kapu – egyetlen konfigurációs pont: `lib/kb/release.ts`** (a kalkulátoroknál ugyanez a `lib/calc/release.ts`). Egy tétel akkor közzétett (`lib/kb/content/gate.ts`), ha van rekordja a `KB_RELEASES`-ben, nincs a `KB_SUSPENDED`-ben, a kockázati besorolás eléri a szekció és a kategória alsó korlátját, a rekord ujjlenyomata egyezik a tartalom mostani (a szerver által futásidőben is újraszámolt) ujjlenyomatával, a rekord `figures`-e az ábra-ujjlenyomattal, a szekció és a kockázat egyezik, és R3-nál a rekord `lektoralt`. Ugyanez a szabály hajtja a statikus paramétereket, a sitemapet, a keresőt, a belső linkeket, a kalkulátoroldalak „Kapcsolódó cikkek” listáját, a főoldal és a kezdőlap kiemeléseit és a füleket.

- **R1/R2 – belső kettős ellenőrzés:** `belso(<szekció>,<R1|R2>,<ujjlenyomat>,<ábra-ujjlenyomat>[,{date,note}])` rekord, jelvény: „Belsőleg ellenőrizve”. Feltétel: szerzői vázlat + tőle független szakmai ellenőrzés, a számpéldák újraszámolásával (`docs/tudastar-dontesek.md`).
- **R3 – csak szakmai lektor után** (`kind:'lektoralt'`, jogosultság, dátum, `approvalRef`, második olvasó). Fejlesztő, MI-asszisztens vagy a tulajdonos saját hatáskörben `lektoralt` rekordot nem tölthet ki.
- **Felfüggesztés** (biztonsági hibajelzés): az id felvétele a `KB_SUSPENDED`-be, deploy – az oldal 404, a linkek „hamarosan” szövegek lesznek.

### Tartalom módosítása vagy új R1/R2 cikk

1. A vázlat szerkesztése (`content/tudastar/elmelet/<slug>.md`), szükség esetén a `version`/`updated` emelése; új cikknél a kategória (a kategória kockázati alsó korlátja alá nem sorolható) és a sorrend (`lib/kb/content/categories.ts` `ARTICLE_ORDER`), új vagy módosított ábránál a komponens (lent).
2. `node_modules/.bin/tsx scripts/kb-content.ts build` – újragenerálás.
3. Belső kettős ellenőrzés (független ellenőrző, számpéldák újraszámolása; ábránál a kirajzolt SVG és a szöveges megfelelő is).
4. `node_modules/.bin/tsx scripts/kb-content.ts record <id>` – a kiírt sort a `lib/kb/release.ts`-be (tartalmi és ábra-ujjlenyomat); változásnapló-bejegyzés a `lib/kb/content/changes.ts`-be (a teszt megköveteli, hogy a legutóbbi bejegyzés a mostani verzióé és ne legyen régebbi a rekordnál).
5. **Újra** `scripts/kb-content.ts build` – a böngészőbe töltődő keresőindex (`generated/search.ts`) csak a közzétett tételeket tartalmazza, ezért a rekord után frissül.
6. `node_modules/.bin/tsx scripts/kb-content.ts list` → „közzétett”; tesztek (lent), deploy.

### R3 kiadása lektor után

1. A szakmai lektor (és R3-nál a második olvasó) a `content/tudastar/r3/<slug>.md` vázlatot, a netlistát és a `lektori-kerdesek-r3.md` kérdéseit jóváhagyja (a válaszok szerinti javítás után); jóváhagyó lap/e-mail = `approvalRef`.
2. A rekord a `lib/kb/release.ts`-be a `scripts/kb-content.ts record <id>` váza szerint (`kind:'lektoralt'`, jogosultság, dátum, ujjlenyomat, `approvalRef`, `secondReader`; név csak kifejezett hozzájárulással, `showName`; akkor is csak a cikk saját oldalán – a listák kártyáin a jelvény név nélküli, a névjegyzéki szám sehol sem jelenik meg, ezt a `tests/kb-content.ts` őrzi).
3. `scripts/kb-content.ts build`: a lektorált R3 vázlatból teljes cikk lesz, a netlistás ábráival (`KB_DIAGRAMS`). A Sémák útvonalai, a netlistás ábramotor és a lektori csomag 4. része elkészült (lent, „Sémák és ábramotor”); a generátor az R3 kötelező elemeit ellenőrzi (`checkR3`: nem zárható veszély-doboz az első blokkban a figyelmeztetés-könyvtár szövegével, „Régi berendezésben”, „Gyakori hibák”, „Mikor hívj szakembert?”, bekötési sémánál „Hogyan működik?” és a feszültségmentesítéssel kezdődő szerelési lépések). Négy vázlat még a lektor után sem adható ki, mert egy nem netlistás ábrájához nincs komponens (lent).
4. Tesztek, mindkét build, `tests/kb-routes.mjs` és `tests/kb-dist.mjs` (lent); a tesztek elvárt R3-listáját (`tests/kb-content.ts` `EXPECTED`, az R3-őrök) a kiadott tétellel igazítani kell.

## Tesztek (vizsgaszimuláció)

A terv 7. pontja (3. fázis) a mostani kapuk mellett kiadható részig: **számolós gyakorló** a közzétett kalkulátorokra, a **statikus kérdésbank** pedig teljes infrastruktúrával, de élesítés nélkül (a kérdések lektorra várnak). Minden ingyenes, belépés és süti nélkül; ranglista, pontgyűjtés és tanúsítvány nincs.

**Minden képernyőn** (beállítás – a felső „A tesztekről” doboz –, kérdés, tesztkódos indítás, eredmény, JS nélküli mintafeladat, a cikkek „Teszteld magad” blokkja): „Gyakorló teszt – nem hivatalos vizsgakérdések; az eredmény nem igazolás.” (`QUIZ_NOTICE`, `lib/quiz/topics.ts`; a figyelmeztetés-könyvtárban `teszt` tétel, `lib/kb/safety.ts`). A gyakorlási küszöb 60 %, „saját, nem hivatalos” jelöléssel (`PASS_THRESHOLD`). A tiltott kifejezések (terv 8.4, 4.5: „szabványos”, „hivatalos vizsgakérdés”, „vizsgán ezek jönnek”, „garantáltan”, idegen gyakorlat – GFCI, 120 V, 60 Hz, NEC …) gépi szűrője a `lib/quiz/schema.ts` `FORBIDDEN` listája; a `tests/quiz.ts` a sablonok minden szövegén, a tesztoldalon, a szigeten és a kérdésbank forrásán is futtatja.

### Felület

- **`/tudastar/tesztek`** – szerverkomponens (`force-static`, `revalidate=3600`), csak akkor létezik, ha van közzétett tartalma (`quizPublishedCount() > 0`); a „Tesztek” fül (alsó navigáció, asztali fülsor, Menü), a kezdőlapi kártya, a keresőtétel („Gyakorló tesztek”, kérdésszöveg nélkül) és a sitemap-bejegyzés ugyanettől függ.
- **Beállítás** (a sziget kezdeti csomagja): mód (Gyakorló / Vizsga / Hibáim (n)), feladattípusok témakörönként („Mind” / „Egyik sem”), hossz (5/10/20), vizsgánál időkorlát (kérdésenként másfél perc, ×1 / ×1,5 / ×2, kikapcsolható), tesztkód megnyitása (a teljes link is beilleszthető), korábbi eredmények (legfeljebb 50, a legutóbbi 10 látszik, „Újra ezzel a kóddal”), feladattípusonkénti statisztika, „Eredmények törlése”. Linkkel előválasztható: `?mod=gyakorlo|vizsga|hibaim`, `?feladat=<sablon>,…`, `?tema=<témakör>,…`, `?hossz=5|10|20`; `?kod=<tesztkód>` a kód adataival indító panelt nyit (más kiadás kódjánál jelzés: ugyanaz a beállítás, de a kérdések eltérhetnek).
- **Futó teszt** (a futtató – `components/quiz/quiz-runner.tsx` – csak az indításkor töltődik): ragadós sáv (mód, n/N, haladás, vizsgánál a hátralévő idő), „Időkorlát +5 perc” / „Időkorlát kikapcsolása”, élő régióban jelzés 5 és 1 perccel a vége előtt (a régió üresen is az akadálymentességi fában van, csak vizuálisan rejtett, így az első jelzés is elhangzik), lejáratkor automatikus beadás (újratöltés után is, a tárolt határidő szerint; az eredményoldal `role="alert"` jelzéssel közli: „Lejárt az idő – a tesztet automatikusan beadtuk.”). **Gyakorló:** „Ellenőrzés” után a helyes válasz, a választott rossz válasz hibamodellje („Ez az eredmény jön ki, ha …”), a magyarázat, a kalkulátor levezetése (`runCalc`), „Olvasd el: <cikk>” (csak közzétett cikkre), „Számold újra: <kalkulátor>” (a feladat bemeneteivel előtöltve), „Hibás a kérdés? Írd meg” (mailto a feladattípussal, verzióval, paraméterekkel és a tesztkóddal). **Vizsga:** szabad lépkedés, „Megjelölés későbbre”, kérdéstérkép (megválaszolt / megjelölt / aktuális), beadás megerősítése megválaszolatlan kérdésnél (a kérdéskártyában, a fókusz az „Igen, beadom” gombra kerül). Kérdésváltáskor a teszt teteje a képernyő tetejére görget, a fókusz a kérdés címére kerül. **Fókusz és képernyőolvasó (WCAG 2.4.3):** a megerősítések (`role="alertdialog"`, a kérdés `aria-describedby`-val) megnyitásakor a fókusz a gombjukra kerül (beadás: „Igen, beadom”, megszakítás és eredménytörlés: a biztonságos „Folytatom” / „Mégse”), mégsénél vissza a kiváltó gombra; az időkorlát kikapcsolása után az „Időkorlát nélkül” jelzésre, „Új teszt”, a kódpanel bezárása, a megkezdett teszt elvetése és az eredmények törlése után a beállítás „Új teszt” címére; a fókusz sosem esik a dokumentum elejére (`tests/kb-figures.mjs` billentyűzettel ellenőrzi). Gyakorló módban az udvarias élő régió csak az ítéletet és a helyes választ mondja, a magyarázat, a levezetés és a linkek az olvasási sorrendben következnek; a többválaszos kérdés jelzése („Több válasz is helyes lehet”) látható, és a válaszcsoport leírásaként is elhangzik. Hibás tesztkód beírásakor a hibaüzenet `role="alert"`.
- **Eredmény:** pontszám, a küszöb (saját, nem hivatalos), kérdésenkénti áttekintés összecsukható magyarázattal és levezetéssel, „Új teszt”, „Ugyanez a kérdéssor újra”, „Hibáim gyakorlása”, „Teszt linkjének másolása” (aki megnyitja, ugyanazt a kérdéssort kapja).
- **Újratöltés-állóság:** a futó és a befejezett teszt a `shockcraft-kb-quiz-session` sessionStorage-kulcsban (a lap bezárásával törlődik); újratöltéskor folytatódik. Ha egy link mást kér (pl. „Teszteld magad”, másik tesztkód), a befejezett teszt helyett az új beállítás jelenik meg, a megkezdett teszt pedig „Folytatom / Elvetem” kérdéssel visszavehető. Más kiadáshoz tartozó tárolt teszt nem folytatható (jelzés). Privát módban (tiltott tárhely) a teszt memóriából fut, mentés nélkül; a jelzés már a beállító képernyőn látszik (próbaírás a saját kulcsokkal – új kulcs nélkül –, `quizStorageBlocked`).
- **Tárolás** (`lib/quiz/storage.ts`, a `lib/kb/storage.ts` mintájára, kézi validálással, try/catch-csel): `shockcraft-kb-quiz-v1` (localStorage) – `results` (≤ 50: időpont, mód, kérdésszám, pontszám, tesztkód, felirat) és `stats` (tételenként – sablonnál sablononként –: verzió, válaszok, hibás, helyes sorozat, időpont; ≤ 2000). Személyes adat és kérdésszöveg nincs benne. A „Kedvencek és előzmények” panel (a fejléc Kedvencek gombjával vagy a Menüből nyílik) „Minden Tudástár-adat törlése” gombja mindkét kulcsot törli (a nyitott tesztoldal is alaphelyzetbe áll, a címsorból a `?kod=` is eltűnik); a sütitáblázat (`components/legal-page.tsx`) mindkettőt felsorolja.
- **JS nélkül:** a sziget rejtve (`html:not(.js)`), helyette `<noscript>` tájékoztatás, egy kidolgozott **mintafeladat** (az első közzétett sablon rögzített seedű kérdése, „Megoldás és levezetés” `<details>`-ben), a feladattípusok listája kalkulátor- és cikklinkkel, „Hogyan működik?”.
- **„Teszteld magad”** a cikkoldal „Kapcsolódó” szakaszában (`#teszteld-magad`), csak ha a cikkhez van közzétett sablon (most: Ohm törvénye, az ellenállás, a teljesítmény és a soros/párhuzamos kapcsolás cikke): 5 feladat az adott sablonokból (`/tudastar/tesztek?feladat=…&hossz=5#teszt` – a `#teszt` horgony telefonon is közvetlenül az előválasztott űrlapra visz; a feladattípus-lista „Gyakorlás” linkjei ugyanígy).
- **Alsó navigáció és űrlapmezők:** szövegmező vagy legördülő lista fókuszában az alsó sáv rejtve van (a képernyő-billentyűzet miatt), és csak 0,4 s késleltetéssel tér vissza (`visibility`, nem `display`): a sáv helyén álló gomb (pl. tesztkód → „Megnyitás”, Idő → „Vizsga indítása”) koppintása és kattintása így nem vész el (`tests/kb-figures.mjs` érintéssel és egérrel is ellenőrzi).
- **Linkek:** a folyó szövegbeli (pl. a „Hogyan működik?” e-mail-címe), a feladattípus-kártyák és a visszajelzés linkjei a `.kk-prose a` mintájára színnel és aláhúzással jelöltek (WCAG 1.4.1); a szám és a százalékjel között nem törő szóköz áll.

### Számolós sablonok (`lib/quiz/templates.ts`)

A helyes érték és a levezetés MINDIG `runCalc(def, raw(p))`-ből jön (a kiírt helyes válasz = a kalkulátor eredményszövege); a sablon csak a paramétereket (diszkrét, valószerű halmazok vagy E-sor), a kérdés szövegét, a magyarázatot és a tévesztőket adja. Tévesztő csak **megnevezett hibamodellből** jöhet (√3 kihagyása vagy szorzása, 3 a √3 helyett, fázis- és vonali feszültség cseréje, cos φ kihagyása/osztása, sin φ, ×2 kihagyása vagy kétszerezése, W/kW, Ω/kΩ, A/mA, U·R az U/R helyett, fordított osztás, soros ↔ párhuzamos, reciprok, átlag, kΩ-előtag figyelmen kívül hagyása, napi/heti/havi költség, rossz m-szorzó …; helyiérték-hiba csak tartalékként). A válaszok formázás után egyediek, egymástól és a helyestől a pontos és a kiírt értéken is legalább 5 %-ban eltérnek, növekvő sorrendben jelennek meg, magyar számformátummal (`lib/calc/number.ts`; a szám és a mértékegység között a kérdés- és magyarázatszövegben is nem törő szóköz). Ha egy paraméterkészletből ez nem teljesíthető, a motor másikat választ.

**A helyes válasz helye nem árulkodhat** (független ellenőrzés, 2026-10-12: a korábbi motorral a „ha két válasznak azonosak a számjegyei, a középső tagot jelöld, egyébként B vagy C” stratégia számolás nélkül átlagosan 65 %-ot ért, az ohm-aramnál 99 %-ot; a párhuzamos eredő helyes válasza 83 %-ban A volt). Ezért (`lib/quiz/engine.ts` `buildTemplateQuestion`):
- a kérdés seedjéből előbb a helyes válasz **tervezett helye** jön (egyenletesen A–D), majd a motor az összes megengedett tévesztő-hármas közül a legkisebb költségűt választja: a tervezett helytől való eltérés helyenként 1,5, a 30-szoros / 100-szoros (valószerűtlen) tévesztő 0,75 / 1,6 (a 100-szoros így csak végső tartalék), az előtaghibás pár 0,9, a helyiérték-tartalék 3;
- **előtaghiba** (ezerszeres / ezredrész, `Model.prefix`) csak **2 × 2 szerkezetben** kerülhet a válaszok közé: a helyes válasz „ikerpárja” mellett egy tévesztőé is (ugyanaz a hiba és az előtaghiba együtt), így az ikerpár jelenléte nem utal a helyes válaszra; egyedüli ikerpár nincs (`twinShape`);
- minden sablonnak van a helyesnél kisebb és nagyobb értéket adó, valószerű hibamodellje (pl. párhuzamos eredőnél `Rmin / n`, sorosnál `n · Rmax`, ellenállásnál a csúcs- és effektív érték cseréje 230 V-on, vezetékellenállásnál a mm² ↔ mm és az üzemi hőmérsékletű ρ);
- a paramétertér valószerű: 230 V-on legfeljebb 10 A (R ≥ 23 Ω), egész napos üzem csak legfeljebb 150 W-tal, a napi energia legfeljebb 6 kWh, a feszültségesés-feladatban az áram legfeljebb a keresztmetszethez illő névleges áram (1,5 mm² → 16 A).
A `tests/quiz.ts` sablononként 10 000 kérdésen méri: a helyes válasz minden helyen 10–50 %, a fenti és a „kilógó válasz elhagyása” stratégia legfeljebb 40 % (most 25–34 %), egyedüli ikerpár nincs.

**A T1-kalkulátorra épülő sablonok** (feszültségesés, kismegszakító, Zs,max) külön modulban vannak (`lib/quiz/templates-t1.ts`); a böngésző csak akkor tölti be, ha a szerver valamelyiket közzétettként adja át (`components/quiz/quiz-runner.tsx`, dinamikus import). Amíg kiadatlanok, a szövegük csak ebben a külön, be nem töltött csomagban van (mint a T1-kalkulátorszigetek), a tesztoldal kezdeti és futtató csomagjában nem (`tests/kb-dist.mjs`, `tests/kb-guards.ts`). Az összes sablon a tesztkód sorrendjében: `lib/quiz/all-templates.ts` (csak szerveren és tesztben).

| Sablon | Kalkulátor | Témakör | Állapot |
|---|---|---|---|
| `ohm-aram` – Áram Ohm törvényével | `ohm-torveny` (T0) | Alapfogalmak és számítások | közzétéve |
| `ohm-ellenallas` – Ellenállás Ohm törvényével | `ohm-torveny` (T0) | Alapfogalmak és számítások | közzétéve |
| `teljesitmeny-1f` – Egyfázisú hatásos teljesítmény | `teljesitmeny` (T0) | Alapfogalmak és számítások | közzétéve |
| `aram-1f-cosfi` – Áram teljesítményből (1f, cos φ) | `aram-teljesitmenybol` (T0) | Alapfogalmak és számítások | közzétéve |
| `aram-3f` – Háromfázisú vonali áram | `aram-teljesitmenybol` (T0) | Alapfogalmak és számítások | közzétéve |
| `vezetek-ellenallas` – Vezeték ellenállása (oda-vissza) | `vezetek-ellenallas` (T0) | Kábelek és vezetékek | közzétéve |
| `soros-eredo` – Soros eredő ellenállás | `eredo-ellenallas` (T0) | Alapfogalmak és számítások | közzétéve |
| `parhuzamos-eredo` – Párhuzamos eredő ellenállás | `eredo-ellenallas` (T0) | Alapfogalmak és számítások | közzétéve |
| `fogyasztas-koltseg` – Éves energiaköltség | `fogyasztas-koltseg` (T0) | Alapfogalmak és számítások | közzétéve |
| `feszultseges-1f` – Feszültségesés (egyfázisú) | `feszultseges` (T1, táblázatos) | Kábelek és vezetékek | **rejtve** – kalkulátorra vár |
| `kismegszakito-valasztas` – Kismegszakító-választás (Ib ≤ In ≤ Iz) | `kismegszakito` (T1, táblázatos) | Védelmi eszközök | **rejtve** – kalkulátorra vár |
| `zs-max` – Megengedett hurokimpedancia (Zs,max) | `hurokimpedancia` (T1, táblázatos) | Érintésvédelem | **rejtve** – kalkulátorra vár |

A sorrend a tesztkód bitmaszkjának alapja (`lib/quiz/code.ts` `TEMPLATE_IDS` = a `lib/quiz/all-templates.ts` `TEMPLATES` sorrendje, teszt őrzi): új sablon csak a lista végére kerülhet, azonosító nem változhat.

### Motor és tesztkód

- `lib/quiz/rng.ts`: mulberry32 seed, Fisher–Yates keverés. Ugyanaz a seed + beállítás + kiadás ugyanazt a kérdéssort adja (a kérdésenkénti seed a válaszlehetőségek kiválasztását is rögzíti).
- `lib/quiz/engine.ts`: kérdésépítés sablonból és a bankból; **témakvóta** a blueprint (`BLUEPRINT`, `lib/quiz/gate.ts`) szerint, **legnagyobb maradék** módszerrel (a felső korlátot – a témakör különböző családjainak számát – elérő témakör kiesik, a maradék újraoszlik; döntetlennél a seedből kevert sorrend); egy teszten belül **nincs azonosító- (sablonnál: paraméterkészlet-) és családismétlés**; a sablonok egyenletesen oszlanak el, és két szomszédos kérdés nem ugyanabból a sablonból jön, ha elkerülhető. **Súlyozás** a „Hibáim” módhoz: `w = h · r`, `h = 1 + hibás válaszok (≤ 5)`, `r = 1 / (1 + helyes sorozat (≤ 5))`; a kérdés vagy a sablon verzióváltása nullázza. A Gyakorló és a Vizsga mód a tesztkódból egyértelműen újraépül, ezért ott nincs személyes súlyozás.
- `lib/quiz/code.ts`: **tesztkód** `<g|v><kérdésszám>[t<perc>]-<s|t><bitmaszk>-<seed>-<kiadás>`, pl. `g10-sqn-1kx9q2-606c5754` (csak `[a-z0-9-]`, URL-be írható; kanonikus alak; minden érvénytelen kódra `null`). A kiadás (`quizRelease()`) a közzétett sablonok azonosítójából, verziójából és ujjlenyomatából (élesedés után a bank kiadásából) képzett lenyomat.

### Kiadási kapu – egyetlen konfigurációs pont: `lib/quiz/gate.ts`

- **Sablon:** akkor közzétett, ha (1) a kalkulátora közzétett a `lib/calc/release.ts` kapuja szerint (rekord, egyező tartalmi és forrás-ujjlenyomat, T1-nél `lektoralt`), **és a definíció táblázatos (`def.tables`), akkor `tablesApproved()` is igaz** – ezt a regiszter (`lib/quiz/registry.ts` `templateInfo`) a kalkulátor kapujából vezeti le, sablonlista nincs beégetve; (2) van belső ellenőrzési rekordja a `TEMPLATE_CHECKS` táblában, és annak ujjlenyomata egyezik a sablon mostani ujjlenyomatával (metaadat, hibamodellek és rögzített seedekkel generált mintakérdések szövege, válaszai és a kalkulátor levezetése – így a kalkulátor kódjának vagy szövegének változása is ide gyűrűzik); (3) nincs a `QUIZ_SUSPENDED`-ben. Állapotok: `kozzeteve`, `kalkulatorra-var`, `tablazatra-var`, `ellenorzesre-var`, `ujraellenorzendo`, `felfuggesztve`.
- **T1-sablon kiadása:** a kalkulátor lektori rekordja (`docs/lektoralas.md`) és táblázatosnál a `SIZING_REVIEW` jóváhagyása után a sablon „ellenőrzésre vár” állapotba kerül; belső ellenőrzés (mintakérdések átolvasása, a tévesztők szakmai helyessége), majd `node_modules/.bin/tsx scripts/quiz-release.ts templates` kiírja a `TEMPLATE_CHECKS`-be írandó sort. A kismegszakító- és a Zs,max-sablon cikklinkje („kismegszakito”, R3) csak a cikk lektori kiadása után jelenik meg.
- **Kérdésbank:** a bank akkor élesedik, ha legalább **150** jóváhagyott kérdés van, és **minden** témakörben legalább **10** (`BANK_MIN_TOTAL`, `BANK_MIN_PER_TOPIC`, `bankLive`). Addig a kiadó szkript a témaköri fájlokat nem írja ki, a betöltők listája üres, így **egyetlen kérdés szövege sem kerül a build bemeneteibe**, a kliens-JS-be, a szervercsomagba, a keresőbe vagy a sitemapbe (`tests/quiz.ts`, `tests/kb-dist.mjs`, `tests/kb-routes.mjs` a `tests/kb-quiz-needles.mjs` szövegmintáival). Élesedés után a kliens témakörönként, lustán (dinamikus importtal) tölti a `lib/quiz/release/<témakör>.json`-t; a worker-csomagba így sem kerül (a szerver csak a manifestet olvassa).
- Fejlesztő, MI-asszisztens vagy a tulajdonos saját hatáskörben jóváhagyott kérdést nem rögzíthet (`docs/tudastar-dontesek.md`).

### Kérdésbank – folyamat

**Forrás:** `content/tudastar/kerdesek/<témakör>.json` (a kérdésszerző írja; a kiadó és a tesztek csak olvassák) – kérdések tömbje vagy `{topic?, version?, note?, questions:[…]}`. Témakörök: `alapfogalmak-szamitasok`, `kapcsolasok`, `vedelmi-eszkozok`, `erintesvedelem`, `foldelesi-rendszerek`, `kabelek-vezetekek`, `meres`, `gepek`, `vilagitas`, `munkabiztonsag` (`lib/quiz/topics.ts`; a fájlnév = a témakör, más JSON – pl. a jövőbeli `profilok.json` – kimarad).

**Séma** (`lib/quiz/schema.ts`, zod – csak a szkriptek és a tesztek használják, a kliensbe és a szerver futásidejű kódjába nem kerül, `tests/kb-guards.ts`): `id` (`/^q-[a-z]{2,4}-\d{4}$/`), `version`, `topic`, `difficulty` (1–3), `type` (`single` | `multi` | `truefalse`), `stem`, `figure?`, `choices` (3–5, igaz/hamisnál 2: `{id, text, correct, why?}`), `explanation` (≥ 2 mondat), `ref` (`<cikk-id>#<horgony>` – létező cikk; közzétett cikknél létező H2/H3/ábra/szótár-horgony, R3 csonknál horgony nélkül ellenőrizve), `calc?` (létező kalkulátor), `shuffle`, `family?`, `review`, `source`, `retired?`, `note?` (belső szerzői megjegyzés). **Kiegészítés a tervhez:** a még nem lektorált vázlat `source`-a `"AI-tervezet"`, `review`-ja `"lektorra-var"` lehet. Szabályok: egyválasztósnál pontosan 1 helyes, többválasztósnál ≥ 2 helyes és ≥ 1 hibás; egyedi válaszazonosító és -szöveg; „mindegyik / egyik sem” típusú válasz csak `shuffle: false` mellett; tagadó kérdésben a tagadószó kiemelt (NEM); tiltott kifejezés nincs; témakör = fájlnév; egyedi azonosító a teljes bankban.

**Jóváhagyás:** `review = {state:'jovahagyott', qualification, date, approvalRef, fingerprint}`, ahol a `fingerprint` a kérdés mostani **tartalmi ujjlenyomata** (`questionFingerprint`: minden megjelenő és működést befolyásoló mező, a belső lektori mezők nélkül). Közzétehető (`approvedQuestion`): jóváhagyott, az ujjlenyomat egyezik, a `source` `"saját"`, `"AI-tervezet, lektorált"` vagy `"licencelt"`, és nincs `retired`. Bármely tartalmi változás után a jóváhagyás érvénytelen, a kérdés kiesik a kiadásból.

**Kiadás:** `node_modules/.bin/tsx scripts/quiz-release.ts`
- `check` – séma, szabályok, hivatkozások; a kiadás és az azonosítójegyzék naprakész-e;
- `build` – `lib/quiz/release/manifest.json` + `index.ts` (élesedés előtt csak darabszámok, kérdésszöveg nélkül), élesedéskor témakörönként `lib/quiz/release/<témakör>.json` (csak a jóváhagyott kérdések, a belső lektori mezők – `review`, `source`, `retired`, `note` – nélkül), és az azonosítójegyzék bővítése;
- `list` – témakörönként: kérdés / jóváhagyott / lektorra vár / visszavont, a bank és a sablonok állapota;
- `fingerprint <id>` – egy kérdés ujjlenyomata és a `review` váza;
- `templates` – a sablonok állapota és a `TEMPLATE_CHECKS`-be írható sorok.

**Azonosítójegyzék** (`lib/quiz/id-registry.json`, **csak bővülhet**): a jóváhagyott kérdések azonosítója a build-kor kerül bele a témakörével, és onnan soha nem tűnhet el, nem kaphat más témakört (a böngészőben tárolt kérdésstatisztika így soha nem kerül másik kérdéshez); jegyzékbeli azonosítót más témakörben a vázlat sem használhat. A `tests/quiz.ts` a HEAD-beli jegyzékhez képest is ellenőrzi. A lektorálatlan vázlat azonosítója nem kerül bele (a szerző a lektorálásig átszámozhatja).

### Lektori CSV (`scripts/quiz-csv.ts`, `scripts/quiz/csv.ts`)

- `node_modules/.bin/tsx scripts/quiz-csv.ts export [--out outputs/lektori-kerdesek] [--datum ÉÉÉÉ-HH-NN]` – a lektorálandó kérdések (vázlat, illetve a jóváhagyás óta módosult) témakörönként, azonosító szerint rendezve, **25 kérdéses csomagokban** (`<témakör>-<NN>.csv`). Excel-barát: UTF-8 BOM, pontosvessző, CRLF, képletvédelem (a `lib/plan-tools.ts` `csvCell`-je). Fejléc: csomag, témakör, kiadás dátuma, kitöltendő lektori sorok (jogosultság, dátum, jóváhagyó lap), kitöltési útmutató; kérdésenként: azonosító, verzió, témakör, nehézség, típus, kérdés, A–E válasz, helyes betűi, indoklások, magyarázat, hivatkozás, kalkulátor, forrás, **ujjlenyomat**, Döntés, Megjegyzés.
- `… import <kitöltött.csv> […] [--apply]` – visszaolvasás a `lib/catalog-csv.ts` dekódolójával és tagolójával (`decodeCsv`: UTF-8 / UTF-16LE / Windows-1250; `csvRows`: `;` `,` tab, RFC 4180 idézés); döntések: jóváhagyom / javítandó / elvetem (ékezet- és kisbetűfüggetlenül). Jóváhagyás csak egyező ujjlenyomatra és kitöltött lektori fejléccel; hibás csomagból semmi nem kerül át. `--apply` (a szerkesztő futtatja): a `review` mező beírása a forrásba, az `"AI-tervezet"` forrásból `"AI-tervezet, lektorált"` lesz; utána `scripts/quiz-release.ts build`. A szkript csak a lektor döntését írja át, saját hatáskörben nem hagy jóvá.

### Fájlok

| Réteg | Fájlok |
|---|---|
| Tiszta modulok (kliensen is) | `lib/quiz/topics.ts` (témakörök, `QUIZ_NOTICE`), `rng.ts`, `code.ts` (beállítás, tesztkód), `templates.ts`, `engine.ts`, `gate.ts` (**kapu**), `storage.ts` |
| Szerver (oldal, keret, sitemap, tesztek) | `lib/quiz/registry.ts` (sablonállapot, ujjlenyomat, kiadás, kliensadat, „Teszteld magad”, mintafeladat) |
| Kiadás és lektorálás (zod) | `lib/quiz/schema.ts`, `scripts/quiz-release.ts`, `scripts/quiz-csv.ts`, `scripts/quiz/bank.ts`, `scripts/quiz/csv.ts` |
| Generált | `lib/quiz/release/manifest.json`, `lib/quiz/release/index.ts` (élesedéskor `<témakör>.json`), `lib/quiz/id-registry.json` |
| Felület | `app/(kezikonyv)/tudastar/tesztek/{layout,page}.tsx`, `components/quiz/quiz-app.tsx` (sziget: beállítás, tesztkód, eredmények), `quiz-runner.tsx` (lustán: futó teszt, eredmény), `quiz-shared.ts`, `calc-defs.ts` (a kalkulátordefiníciók lusta betöltése a kalkulátorok saját szigetéből) |
| Tesztek | `tests/quiz.ts`, `tests/kb-quiz-needles.mjs` (a kiadatlan kérdések szövegmintái), bővítve: `tests/kb-guards.ts`, `tests/kb-routes.mjs`, `tests/kb-dist.mjs`, `tests/kb-figures.mjs` |

### Tesztek (vizsgaszimuláció)

`node --no-warnings --import tsx tests/quiz.ts`: sablononként **10 000 seedes tulajdonságteszt** (a helyes válasz = `runCalc`, szövege = a kalkulátor eredményszövege, a levezetés a kalkulátoré; pontosan egy helyes és három tévesztő, megnevezett hibamodellből; egyedi, egymástól és a helyestől a pontos és a kiírt értéken is ≥ 5 % eltérés, növekvő sorrend, magyar számformátum; determinizmus; legalább három hibamodell sorra kerül; **pozíciós árulkodás**: a helyes válasz minden helyen 10–50 %, a számolás nélküli stratégiák ≤ 40 %, egyedüli ikerpár nincs); érvénytelen és valószerűtlen paraméter (230 V / 4 Ω, egész nap 2200 W, 1,5 mm² / 20 A); a T1-sablonok külön modulban (`templates-t1.ts` = `T1_TEMPLATE_IDS`); **kapu** (a közzétett sablonok = a kalkulátorok kapujából levezetve, beégetett lista nélkül; a T1-sablon rejtve; mutációs próbák: lektori rekord, táblázat-kapu, belső rekord, felfüggesztés, szöveg-, hibamodell- és levezetés-változás → új ujjlenyomat); **motor** (determinizmus, a kért kérdésszám, ismétlésmentesség, egyenletes elosztás, szomszédos sablon; legnagyobb maradék 2000 véletlen esetre; szintetikus bankkal témakvóta, azonosító- és családismétlés, keverés); pontozás és küszöb; `w = h · r` és „Hibáim”; **tesztkód** 10 000 véletlen beállításra oda-vissza (URL-lel is), kanonikus alak, érvénytelen kódok, a sablonsorrend; **bank-kapu** (150 / 10 határesetek; a repó kiadása naprakész és élesedés előtt kérdésszöveg nélküli; mutációs próba egy ideiglenes másolaton – a valódi kérdések ott vázlatként, így a próba a bank első valódi jóváhagyásai után is ugyanazt méri –: 149/egy témakör 9 → nem él, 150 → él, csak jóváhagyott, belső mezők nélkül, lusta betöltő; módosított, „AI-tervezet”, visszavont, lektorra váró kérdés nem közzétehető); a build bemenetei (lib, components, app) egyetlen kiadatlan kérdés szövegét sem tartalmazzák; **séma-validáció** a `content/tudastar/kerdesek/*.json`-ra (ha még nincs fájl, nem bukik) és a szabályok mutációs esetei; azonosítójegyzék (csak bővülhet, a HEAD-hez képest is); **lektori CSV** oda-vissza UTF-8, Windows-1250 és UTF-16LE kódolásban, 25-ös csomagok, képletvédelem, változott kérdés és kitöltetlen fejléc elutasítása, `--apply` ideiglenes másolaton; tárolás (validálás, sérült JSON, privát mód és próbaírás, a lejárt idő jelzője, „Minden Tudástár-adat törlése”, sütitáblázat); kliensadat (csak közzétett sablon; a rejtett sablon címe sincs benne), lusta definíció-betöltők, „Teszteld magad”, mintafeladat; tiltott kifejezések és a kötelező jelölés.

### Méretek (Sites és Node build, 2026-10-11, frissítve 2026-10-12; Playwright, a letöltött JS gzip-pel)

- **A tesztoldal kezdeti JS-e** 161,95 KB gz, a `/aszf`-hez képest **+17,9 KB** (a közös Tudástár-keret ≈ 8,6 KB – `kb-chrome`, `kb-client`, kereső, ikonok –, a Tesztek saját része ≈ 9,3 KB: `quiz-app` 6,2, `quiz-shared` 2,8, ikon 0,3) – a terv 40 KB-os keretén belül. **A teszt indításakor** lustán további ≈ 43,2 KB töltődik: a futtató (`quiz-runner` 14,0), a kalkulátor közös csomagja (`calculator` 10,9 – ugyanaz, mint a kalkulátoroldalakon), a hét kalkulátorsziget a definícióval (≈ 13,3), a `sizing-core` (6,0 – a vezeték-ellenállás kalkulátoré), ikonok. A kérdésbank élesedéséig bankkérdés nem töltődik.
- **A többi oldal** a HEAD-hez (`909b207`) képest, Sites build: `/tervezo`, `/`, `/aszf` **+0,24 KB** (csak a vinext közös kliens-belépési chunkja, `index`: az új útvonal az útvonaltérképben és a kliensreferencia-jegyzékben); a Tudástár- és kalkulátoroldalak **+0,39 KB** (ehhez `kb-client` +0,13 KB: a „Minden Tudástár-adat törlése” a teszteredményeket és a futó tesztet is törli); a kalkulátoroldal **+0,46 KB** (ehhez a közös levezetés-komponens exportja, +0,06 KB). Mérés közben két csomagolási csapdát kerültünk el (lásd az eltéréseknél): a közös kalkulátormodulok szétdarabolódása (+1,3–1,9 KB minden kalkulátoroldalon) és a közös ikoncsomagok (`x`, `calculator`) kiszakadása (+0,15–0,3 KB minden oldalon).
- **HTML** (Sites build): a tesztoldal 143,0 KB (gz 22,7 KB); a „Tesztek” fül, a menüpont és a keresőtétel a többi oldal HTML-jét ≈ 2,3 KB-tal (a kalkulátoroldalon), a kezdőlapi kártya és a „Teszteld magad” a kezdőlapét ≈ 4,7, a cikkét ≈ 6 KB-tal növeli (tömörítetlenül; a HTML és az RSC-adat együtt).
- **2026-10-12 (a független ellenőrzés javításai után), Sites build:** a tesztoldal kezdeti JS-e **162,30 KB** gz (+0,35 KB: fókuszkezelés, próbaírás, lejárt idő; a `/aszf`-hez képest +18,2 KB), a teszt indításakor lustán **43,85 KB** (a futtató `quiz-runner` 8,8 KB és a T0-sablonok a motorral `templates` 5,8 KB – korábban együtt 14,0 –, a többi változatlan). A T1-sablonok külön `templates-t1` csomagja (2,4 KB gz) nem töltődik be. A többi mért oldal (`/tervezo`, `/`, `/aszf`, kalkulátor- és Tudástár-oldalak) JS-e nem változott.
- **HTML-ingadozás (vinext, base64-darabolás):** az inline RSC-adatot a vinext 4096 bájtos darabokra vágja, és ha a darabhatár egy többbájtos UTF-8 karaktert vág ketté, a darabot base64-ként írja ki (`[3,"…"]`), ami tömörítve is jóval nagyobb. Ezért egy oldal HTML-je a tartalom kis eltolódásától is véletlenszerűen ugorhat néhány KB-ot: a független mérés szerint a Tesztek bevezetésekor a `/tudastar/szotar` +9,0 KB nyers / +6,9 KB gz (4 base64-darab, 21,9 KB, mind a DefinedTermSet JSON-LD-ből; előtte 0), az Ohm-cikk +6,0 KB nyers / +2,1 KB gz (2 darab). A 2026-10-12-i buildben a szótár 4 base64-darabot tartalmaz (298,7 KB nyers, 62,1 KB gz), az Ohm-cikk egyet sem. Ok: a JSON-LD (`components/kezikonyv/json-ld.tsx`, szerverkomponens) a statikus HTML mellett az RSC-adatban is megismétlődik; kiváltása (pl. csak a statikus HTML-be írt JSON-LD) a keretrendszer korlátja miatt külön vizsgálatot igényel, a backlogban.

### Eltérések a tervtől (Tesztek)

- **A kérdésbank élesítés nélkül készült el** (a mérvadó döntés szerint lektor még nincs): a séma kiegészült az `"AI-tervezet"` forrással és a `"lektorra-var"` állapottal; közzétenni csak a lektor által jóváhagyott, a mostani tartalomra szóló kérdést lehet. A témakör szerinti teszt (`?tema=`, `t…` tesztkód) és a bankkérdések megjelenítése (egy- és többválasztós, igaz/hamis, rögzített sorrend) kész és tesztelt, de a felületen csak élesedés után jelenik meg.
- **Profilonként konfigurálható küszöb** (`content/tudastar/kerdesek/profilok.json`) még nincs: a küszöb egyetlen, 60 %-os, „saját, nem hivatalos” érték (`PASS_THRESHOLD`). A `profilok.json`-t a kiadó szkript kihagyja, így később fájlformátum-ütközés nélkül bevezethető.
- **Témakörönkénti erősség–gyengeség kimutatás** helyett feladattípusonkénti statisztika (válasz, hibás, helyes sorozat); a bank élesedésekor témakörre bővíthető.
- **A sablonok közzététele belső ellenőrzési rekordhoz kötött** (`TEMPLATE_CHECKS`, ujjlenyomattal), nem csak a kalkulátor kapujához: a sablon saját szövege és tévesztői is ellenőrzést igényelnek, és a kalkulátor bármely változása újraellenőrzést ír elő. A rekordok a 10 000 seedes tulajdonságteszt és a mintakérdések átolvasása után, „Villanyrajz szerkesztőség” megjelöléssel készültek; második személy általi ellenőrzés még nem történt (a rekord megjegyzése kimondja).
- **A sziget két részre bomlik:** a kezdeti csomag csak a beállítást, a tesztkódot és az eredményeket tartalmazza; a motor, a sablonok, a kalkulátorok és a futó teszt a teszt indításakor töltődik (a terv 40 KB-os oldalankénti keretéhez). A kalkulátordefiníciókat a **kalkulátorok saját szigetéből** töltjük (a kilenc érintett sziget `def`-et is exportál), és a futtató a kalkulátor levezetés-komponensét (`StepList`) és a közös mezőleírókat (`lib/calc/fields`) is onnan használja: enélkül a csomagoló a kalkulátoroldalak közös moduljait (`number`, `constants`, `fields`, `sub`) külön darabokra vágta volna (+1,3–1,9 KB gz minden kalkulátoroldalon). A sziget az `X` és a `Calculator` ikon helyett `CircleX`-et és `Sigma`-t használ, mert a közös ikoncsomag minden oldal JS-ét növelte volna.
- **A tesztkód** a terv „seed + paraméterek + kiadás” leírásának megfelelő, rövid, URL-be írható alak; a kérdéssor a kiadás tartalmától is függ, ezért más kiadás kódjánál a felület jelzi, hogy a kérdések eltérhetnek.
- **A bottom-nav elrejtése** a beviteli mező fókuszakor (terv 2.3) csak szövegbevitelre vonatkozik: választógomb vagy jelölőnégyzet fókusza nem rejti el, különben a válasz kijelölése után a „Következő” gomb alól előugró sáv elnyelte volna a koppintást.
- **Nincs kérdésenkénti URL** és a sitemapben csak a `/tudastar/tesztek` szerepel (a tesztkódos, előválasztó URL-ek kanonikus címe a paraméter nélküli oldal).

## Méretek

**Kliens-JS** (Node build, 2026-10-11, Playwright, a letöltött JS gzip-pel, a `/aszf` oldalhoz képest): a Tudástár-specifikus kliens-JS a kezdőlapon ≈ 10,3 KB, a cikkoldalon és a szótáron ≈ 11,1 KB gz (keret: `kb-chrome` ≈ 5,0 KB – a lusta indexbetöltéssel és a könyvjelzőszűréssel +0,7 KB –, `kb-client` 1,9 KB, kereső 1,4 KB, cikkműveletek 1,1 KB, `kb-continue` 0,5 KB, ikonok) – a terv 40 KB-os keretén belül. A keresőindex saját darab (`search-*.js`, 9,6 KB gz), csak a kereső első megnyitásakor töltődik. A közös React/vinext-alap ≈ 144 KB gz minden oldalon azonos. `kezikonyv.css` ≈ 9,6 KB gz (keret: 15 KB).

**A tervező kliens-JS-e** (Sites build, 2026-10-11, a HEAD-hez – `5b9e921`, a Tudástár előtt – képest, Playwright): `/tervezo` belépés nélkül 148,28 → 148,92 KB gz (**+0,64 KB**: a közös kliens-belépési chunk `index` +530 B – öt új útvonal, a layoutok és a not-found határok az útvonaltérképben, két új kliensreferencia –, `planner-access` +70 B, `public-shell` +40 B, `categories` +13 B). Az `index` és a `categories` növekménye minden oldalt, a bejelentkezett tervezőt is érinti (≈ +0,54 KB); a tervező kalkulátorok miatti +6,6 KB-os túllépésével együtt így ≈ **+7,2 KB** a +2 KB-os keret helyett – tulajdonosi döntésre vár (`docs/kalkulatorok.md`). A tervezőbe a Tudástárból továbbra is csak a `lib/kb/links.ts` kerül. Ugyanígy mérve: `/` +0,52 KB (`index`), `/kalkulatorok/ohm-torveny` +1,42 KB (`index`, `kb-chrome`, az előzménylista óra-ikonja).

**HTML-méret** (Sites build, 2026-10-11; a terv kerete 150 KB): lásd az „Eltérések” között.

## Ábrák

A vázlatok 22 `[ÁBRA: …]` helyőrzőjéhez saját, kézzel írt SVG-komponens tartozik (`components/kezikonyv/figures/`: `kit.tsx` közös segédek, `alapfogalmak-1.tsx`, `alapfogalmak-2.tsx`, `vilagitas.tsx`, `vezetekek-ip.tsx`; jegyzék: `index.tsx` `FIGURES`, kulcs: `<slug>/<abra-N>`). A rajz a helyőrző leírása alapján készült; külső ábra nincs, és a forrásvázlatokban sincs `<img>`, külső kép-URL vagy base64.

- Szerverkomponensek, kliens-JS nélkül; `<figure id="abra-N">` + `<figcaption>` (szám, cím, szöveges megfelelő – a helyőrző `desc`-je, vagy ha nincs, a jegyzék `desc`-je). Akadálymentes név és leírás egyszer: a `<figure>` neve az „N. ábra. Cím” (`aria-labelledby`), leírása a szöveges megfelelő (`aria-describedby`); az egyetlen SVG-ből álló ábra `<svg role="img">`-je csak a `<title>`-t kapja névként (`<desc>` nélkül, hogy a leírás ne hangozzék el kétszer–háromszor), a több panelből állóknál a panelek saját, rövid `<desc>`-et kapnak.
- Színek csak a `kezikonyv.css` tokenjeiből (`f-*`, `s-*`, `t-*` osztályok), így világos, sötét és nyomtatási módban is helyes. Vezetékszín-tokenek: `--kk-wire-l1` (barna; vonalként sötét módban világosabb), `--kk-wire-l2` (fekete), a színmintákhoz (`--kk-wire-l1-swatch`, `--kk-wire-l2-swatch`) sötét módban is valódi barna, illetve fekete, világos körvonallal, `--kk-wire-l3` (szürke), `--kk-wire-n` (kék), `--kk-wire-pe` + `--kk-wire-pe-stripe` (zöld-sárga csíkozás), `--kk-copper`/`--kk-copper-end` (vezető). A szín sosem egyedüli jel: minden ér felirattal; a vezetékszín-ábra jelzi, hogy a tervező alaprajzán a PE egyszínű zöld.
- **Telefonon is olvasható, görgetés nélkül.** A korábban széles ábrák keskeny képernyőre átrendezve: a fényhasznosítás keskeny elrendezést kapott (felirat a sáv fölött), a lámpatalpak és a lumen–lux két panelre bomlik (`kk-fig-panels`: asztalon egymás mellett, telefonon egymás alatt), a színhőmérséklet-skála 600 px alatt függőleges változatban jelenik meg (`kk-fig-only-wide` / `kk-fig-only-narrow`, a rejtett változat `display:none`, nyomtatásban a széles). A szűk ábrák (IP-kód, időáram-sáv, kábeljelölés, IP-próbatestek, ötös kábel, transzformátor, hurok) keskenyebb viewBoxot vagy nagyobb feliratot kaptak. Szabály: a tényleges betűméret (font-size × a nagyítás) 320 px-en legalább 9, 390 px-en legalább 10 px (320 széles viewBoxon ≥ 11, 360 szélesen ≥ 12 egység); a `tests/kb-figures.mjs` minden ábrán méri, és azt is, hogy egyik sem lóg ki a keretéből. A `wide` (görgethető keret, két oldali görgetési árnyékkal) megmaradt tartalékként, most egyik ábra sem használja. A szöveg a vonalakon `t-halo` körvonalat kap (háttérszínű, `paint-order:stroke`), a lumen–lux távolságvonalai a felirat előtt véget érnek.
- **Jelölési konvenció:** fogyasztói pozitív irányrendszer – a fogyasztón (ellenálláson) a feszültségnyíl az áram irányába mutat; a soros/párhuzamos ábra mindkét panelje és a Kirchhoff-hurok (I áramnyíllal, körbejárási iránnyal) így készült. A hazai jelölési konvenció megerősítése a lektori kérdések között (`lektori-kerdesek-elmelet.md`, Alapfogalmak 12.).

Új vagy módosított ábra: komponens a megfelelő fájlba, bejegyzés a `FIGURES`-be (`<slug>/<abra-N>`, egy sorban – az ábra-ujjlenyomat ezt a sort olvassa), szükség esetén `desc`; utána `build`, belső ellenőrzés, `record` (az érintett cikkek új ábra-ujjlenyomata) és újra `build`. A teszt minden helyőrzőhöz megköveteli.

## Sémák és ábramotor (terv 3.4)

**Állapot: kész, a lektorálásig rejtve.** A 20 netlistából (`content/tudastar/r3/*.netlist.json`: 101, 102, 105, 106, 106+6, 107 és három változata, dugaljkör áthurkolással és leágaztatással, két dugaljkör kismegszakítóval, FI-relé bekötése és hibahelyzetei, TN-C, TN-S, TN-C-S, TT, IT, EPH) a program vezetékszintű bekötési rajzot, Működés nézetet, vezetéktáblát és kapcsolóállás-táblázatot készít. Mind R3: a nyilvános buildbe a lektori jóváhagyásig semmi nem kerül belőlük (sem szöveg, sem netlista-felirat, sem SVG) – a lektor az ábrákat a lektori csomag 4. részében kapja (`docs/lektoralas.md`).

### Láncolat: netlista → elrendezés → rajz

| Lépés | Fájl | Mit tartalmaz |
|---|---|---|
| Netlista (a szakmai tartalom) | `content/tudastar/r3/<fájl>.netlist.json` (`kb-netlista/1`) | alkatrészek, kapcsok szereppel, erek vezetővel, színnel és szakasszal, kábelszakaszok, kapcsolóállások (`connect`), hibahelyzetek, igazságtábla |
| Szimulátor | `lib/kb/circuit.ts` (a `content/tudastar/r3-sim/sim.py` és bővítései TS-megfelelője) | union-find állásonként: kimenetek (lámpák, dugaljak, kioldás, hurkok, érintés), hálózatok, fázis alatti hálózatok, invariánsok (I1–I17, E1–E7, S5–S9), vezetéktábla, szakaszok |
| Elrendezés (csak geometria) | `content/tudastar/diagramok/<netlista-id>.json` (`kb-diagram/1`) | viewBox, `minWidth`, alkatrészek helye és kapcsainak koordinátái, vezetékek útvonala, feliratok, helyek (dobozok), megjegyzések. **Összeköttetést nem tartalmaz** – hogy mi mivel van összekötve, csak a netlistából jön. A netlista ujjlenyomatához kötött (`fingerprint`): ha a netlista változik, a betöltés „elavult elrendezés” hibával megáll, a rajzot újra kell nézni |
| Jelenet | `components/kezikonyv/diagram/scene.ts` (`buildScene`) | netlista + elrendezés → rajzelemek (szimbólumok: `symbols.tsx`), állásonkénti kiemelés a szimulációból, jelmagyarázat, szöveges leírás (`<desc>`) |
| Bekötés nézet | `bekotes.tsx` (szerverkomponens) | SVG `role="img"`; minden ér `data-wire`/`data-from`/`data-to`, kapocs `data-term`, csomópont `data-junction`, érintkező `data-sel`/`data-state` – ebből olvas vissza a teszt |
| Működés nézet | ugyanaz az SVG az alapállás kiemelésével + `diagram-run.tsx` (kliensszigete) | kapcsoló- és hibahelyzet-gombok (`aria-pressed` a kétállásúaknál), „Alapállás”, `aria-live` állapotszöveg, az aktuális sor a kapcsolóállás-táblázatban (`aria-current`) |
| Figura | `diagram-figure.tsx` | nézetváltó (Bekötés \| Működés, `role="tablist"`, nyilakkal), jelmagyarázat, „Így látod a tervezőben” sor (a tervező alaprajzán a PE egyszínű zöld), ábraaláírás az ábra-azonosítóval és a netlista-ujjlenyomattal, „Vezetékek táblázatban” (`<details>`), kapcsolóállás-táblázat (12 állás fölött összecsukva) |
| PDF | `scripts/lektori-csomag.ts` (4. rész) | ugyanazokból a rajzelemekből, vektorosan, a stíluslap színeivel |

**Működés.** A kiemelés a vastagsággal is jelöl, nem csak színnel: az áramút erei vastagok (`is-cur`), a fázis alatt álló erek közepesek (`is-live`), a szakadt ér szaggatott (`is-broken`), a működő fogyasztó kitöltött (`is-on`). Az áramút **érszintű**: az áramot vivő hálózaton belül csak az áramkapcsok (a táppont, a működő fogyasztó L/N kapcsa, a vezető hibahely, érintés, földelő vagy próbaellenállás, a föld) közötti utak erei (`pathWires` a `lib/kb/circuit.ts`-ben). A hálózat zsákutca-ágai feszültség alatt lehetnek, de nem visznek áramot: TN-S-ben hibátlan állapotban a védővezető (bár a csillagponton a nullával egy hálózat), IT-ben a szigetelésfigyelő mérővezetéke, a 106+6-nál a nem használt váltóvezeték és az áthidaló, ha a második lámpa nem ég. A kimenetek és a fázis alatti hálózatok (a Pythonnal összevetett rész) ettől függetlenek. A böngészőbe szimulátor és netlista nem kerül: a szerver állásonként előre kiszámolja a vezeték-azonosítókat és az eredményszöveget.

**JS nélkül és nyomtatásban** a két nézet egymás alatt látszik, a Működés az alapállással, a gombok helyett a teljes kapcsolóállás-táblázattal; nyomtatáskor a csukott `<details>` (vezeték- és kapcsolóállás-táblázat) is kinyílik.

**Keskeny képernyő.** 48rem alatt a rajz a `minWidth` (= a viewBox szélessége) alá nem kicsinyedik, így a legkisebb felirat is ≥ 10 px (a többi ábra mércéje 390 px-en), a keret vízszintesen görget (a széles ábrákéhoz hasonló árnyékkal); a lap maga nem görget. 48rem fölött a rajz a hasábba illeszkedik (a legszélesebb, 4 × 107-es változatnál a felirat ≥ 9,4 px). A `scripts/kb-content/diagram-check.ts` minden ábrára ellenőrzi.

### Rajz = netlista (`tests/kb-diagram.ts`)

A kirajzolt SVG-ből visszaolvasva, ábránként: minden netlista-ér pontosan egyszer szerepel, végpontjai a saját kapcsain; a színosztály az érszín (és a szerep szerint elvárt jelölés); az érfelirat a saját vezetékén áll és nem közelebb egy idegen hálózathoz; csomópontpötty csak valódi csomóponton (keresztezésen híd); nincs átfedés idegen hálózat vezetékével, és ér nem fut át idegen kapcson; az érintkezők az állás szerint; a vezetéktábla a Python-szimulátoréval is egyezik; a feliratok nem fedik egymást és nem lógnak ki; olvashatóság (≥ 10 px keskeny képernyőn); kontraszt. Működés: mind a 208 állásban a kiemelés, a működő fogyasztók és a szöveg a szimuláció szerint. Mutációs próba: netlista (kapocs, szerep, szín), elrendezés (útvonalcsere, kapocs áthelyezése és cseréje, idegen kapcson át, átfedés, `minWidth`), SVG (szín, végpont, felirat, pötty törlése és keresztezésre tétele, érintkező) – 819/819 kiszűrve. A TS és a Python szimulátor egyenértékűségét a `tests/kb-circuit.ts` igazolja (minden netlista minden állása, 1190 mutáns azonos PASS/FAIL-lal, kóddal és üzenettel; referencia: `tests/fixtures/kb-circuit-reference.json`, generálja és `--check`-kel ellenőrzi a `python3 -I scripts/kb-circuit-reference.py`).

### Kapu, ujjlenyomat, kimenet

- **Ábra a vázlatban:** a front matter `figures` listája (`id`, `netlist`, `variants`, `views`) és a szövegbeli `[ÁBRA: abra-N …]` helyőrző. A netlistás ábra a cikk ábra-ujjlenyomatában a FIGURES-bejegyzés helyén szerepel (`scripts/kb-content/diagrams.ts` `diagramSource`): a netlista és az elrendezés teljes szövege, a rajzoló modulok (`diagram-figure.tsx` és helyi importjai: `scene.ts`, `symbols.tsx`, `bekotes.tsx`, `diagram-run.tsx`, `lib/kb/circuit.ts` – a `lib/sizing-tables.ts` kivételével) és a rajz színszerződése a stíluslapból (ér-tokenek, `.kk-dg*` szabályok). A netlista, az elrendezés, egy szimbólum, a rajzoló kód vagy a rajz CSS-ének bármely változása a cikket „újraellenőrzendő” állapotba teszi (a `tests/kb-semak.ts` mutációs próbával igazolja).
- **Csak a közzétett cikk ábrája generálódik:** a `lib/kb/content/generated/diagrams.ts` (`KB_DIAGRAMS`) most üres; a netlisták és az elrendezések nem build-bemenetek. A `tests/kb-content.ts` a build bemeneteiben, a `tests/kb-dist.mjs` a `dist/`-ben, a `tests/kb-routes.mjs` a kiszolgált oldalakon keresi a netlisták feliratait (`tests/kb-r3-needles.mjs` `netlistNeedles()`) és az ábra jelölőit (`data-diagram="`, `data-wire="`, `data-diagram-figure="`).
- **R3 vázlat ellenőrzése a generáláskor** (`scripts/kb-content/generate.ts` `checkR3`): az első blokk a nem zárható „> **Veszély – …**” doboz, és szó szerint tartalmazza a figyelmeztetés-könyvtár (`lib/kb/safety.ts`: `bekotes`, `munkavegzes`) tételét; kötelező szakaszok: „Régi berendezésben”, „Gyakori hibák”, „Mikor hívj szakembert?”, bekötési sémánál „Hogyan működik?” is; a szerelés lépései („A szerelés menete szakembernek” / „Bekötés lépésről lépésre”) a **Feszültségmentesítés** lépéssel kezdődnek; a front matter minden ábrájának van helyőrzője. A parser kezeli a szimulációs blokkot (`<!-- sim:… -->`, a táblája a cikkben a netlista-ujjlenyomattal), a veszély-dobozt és a táblázatcellában álló linket.
- **Útvonalak:** `/tudastar/semak` (gyűjtőoldal: veszély-doboz, tartalomjegyzék, kategóriánként kártya mini-ábrával és „Röviden”-nel, Számítások) és `/tudastar/semak/<slug>` (a cikksablon a netlistás ábrákkal) – `force-static`, `dynamicParams=false`, csak közzétett sémával; most mind 404, a „Sémák” fül, a sitemap-bejegyzés és minden link hiányzik. Az Elmélet-szekciós R3 cikkek (FI-relé, kismegszakító, EPH) ábrái a cikkoldalon ugyanígy jelennek meg.
- **Sablonok tesztje nem közzétett mintán** (`tests/kb-semak.ts`): szimulált jóváhagyással (a valódi rekordok érintetlenek) rendereli a gyűjtő- és a részletoldalt (101–107, változatok, dugalj, földelés): veszély-doboz, nézetváltó, Működés, táblák, kötelező szakaszok, a vázlat teljes szövege; a generátor csak a közzétett cikk ábráját adja ki; belső rekord R3-ra nem elég; az R3-ellenőrzés mutációs próbával.

### Méretek

Sites build, 2026-10-12, a HEAD-hez (`e9a369b`) képest, Playwright, a letöltött JS gzip-pel (a lustán töltött keresőindex nélkül): minden mért oldal – `/`, `/tervezo`, `/kalkulatorok/ohm-torveny`, `/tudastar`, egy Elmélet-cikk, a szakszótár, `/tudastar/tesztek` – **+0,21 KB** (a közös kliens-belépési chunk `index` +208 B: a két új útvonal és az új kliensreferencia az útvonaltérképben; a tervezőnél ez a már túllépett keretre jön rá – `docs/kalkulatorok.md`). A Működés szigete (`diagram-run`, 1,7 KB gz) külön darab, és csak netlistás ábrát tartalmazó oldalon töltődik – most egyiken sem (mérve: egyik oldal sem tölti). A Tudástár stíluslapja (a buildelt `layout-*.css`) 9,6 → 11,1 KB gz (+1,5 KB: a `.kk-dg*` és `.kk-semak*` szabályok; keret: 15 KB), a Tudástár- és kalkulátoroldalakon.

### R3 séma kiadása (csak lektor után)

1. Lektori csomag: a 4. rész az összes ábrát tartalmazza (`BEK-<ID>` blokkok, ábránként netlista- és ábra-ujjlenyomat, „Jóváhagyom / Javítással / Elutasítom”, második olvasó). A cikk szövegét a lektor a vázlatból hagyja jóvá (az 5. rész – cikkek – még helyőrző).
2. A rekord (`kind:'lektoralt'`) a `lib/kb/release.ts`-be a `scripts/kb-content.ts record <id>` váza szerint; az `approvalRef` a kiküldött kiadást (`LK-<n>`, csomag-ujjlenyomat) és a cikk **minden ábrájának** ujjlenyomat-párját („netlista/ábra”) tartalmazza – a `tests/lektori-csomag.ts` (`diagramRefProblems`) ellenőrzi, hogy a lektor ezt az ábrát hagyta jóvá. Fejlesztő vagy MI `lektoralt` rekordot nem írhat.
3. `scripts/kb-content.ts build` (a cikk törzse és a `KB_DIAGRAMS` ekkor generálódik), a tesztek elvárt R3-listájának igazítása (`tests/kb-content.ts` `EXPECTED`, `tests/kb-semak.ts` valós állapota), mindkét build, `tests/kb-routes.mjs`, `tests/kb-dist.mjs`, `tests/kb-figures.mjs`.

**Kiadásra előkészítve (ujjlenyomattal, `scripts/kb-content.ts list`):** 8 Sémák-cikk (101, 102, 105, 106, 106+6, 107, dugalj, földelési rendszerek) és az EPH. **Még nem adható ki a lektor után sem** (a generátor név szerint jelzi): a kismegszakító (1. ábra: B, C, D jelleggörbe) és a FI-relé (1. ábra: az összegáramváltó elve) – a nem netlistás, sematikus ábrájukhoz még nincs SVG-komponens; a feszültségmentesítés öt szabálya (folyamatábra, szintén komponens nélkül); a „Világítási kapcsolások” gyűjtőcikk (áttekintő ábrája a hat netlista Szerelési rajz nézete, amely nem készült el – lent, „Eltérések”).

## Tesztek

    node_modules/.bin/tsx tests/kb-content.ts     # generált modulok naprakészek; front matter teljes; tartalom-hűség (18 tétel szövege = vázlat); kapu (pontosan a 18 R1/R2, R3 sehol: static params, sitemap, kereső, linkcél, kalkulátoroldal; R3 szöveg nincs a build bemeneteiben); tartalmi és ábra-ujjlenyomat a rekordban (mutációs próba: L1 ↔ N színcsere a komponensben, a FIGURES szövegében, a színtokenben, kit.tsx-módosítás → „újraellenőrzendő”); kockázati alsó korlát (mutációs próba: R2 vázlat az érintésvédelem kategóriában, a Sémák szekcióban, ismeretlen kategóriában → generálási hiba, a kapu sem enged); a generált keresőindex = a szerver közzétett keresőtételei; állapotgép (módosított tartalom, R3 belső rekorddal, felfüggesztés); változásnapló ↔ rekord; belső linkek és horgonyok (R3-ra szövegként); szótár-horgonyok; ábra minden helyőrzőhöz (akadálymentes név és leírás egyszer); „kiadás ellenőrzés alatt”; SEO-mezők; inline-biztonság
    node --no-warnings --import tsx tests/kb-circuit.ts   # TS-szimulátor = Python (sim.py és bővítései): 20 netlista, 208 állás, 1190 mutáns; áramot vivő erek (zsákutca-ág nem)
    node --no-warnings --import tsx tests/kb-diagram.ts   # rajz = netlista (SVG-ből visszaolvasva), Működés = szimuláció minden állásban, figura (nézetváltó, aria-pressed, aria-live, táblák), olvashatóság, kontraszt, ábra-ujjlenyomat; mutációs próba 819/819
    node --no-warnings --import tsx tests/kb-semak.ts     # Sémák sablonjai szimulált jóváhagyással (gyűjtő- és részletoldal), csak a közzétett cikk ábrája generálódik, kapu (ábra- vagy szimbólummódosítás → újraellenőrzendő, belső rekord R3-ra nem), R3-ellenőrzés mutációs próbával; valós állapot: 0 közzétett séma, üres ábramodul, nincs fül
    node_modules/.bin/tsx tests/kb-guards.ts      # importgráf (content/, scripts/, node:fs, zod, db, auth, billing … tiltva; a Tesztek oldala, szigete és a lib/quiz is – a zodos lib/quiz/schema.ts csak szkriptből és tesztből érhető el; a sziget kezdeti csomagja motor, sablon és kalkulátorkód nélkül, a futtató és a definíciók dinamikus importtal), kliensszigetek Tudástár-tartalom, -kapu és parser nélkül (kivétel: a generált keresőindex, csak dinamikus importtal, függőség nélkül, csak keresőtétel-mezőkkel), Tudástár-oldal szerverkomponens, force-static/revalidate/dynamicParams, nincs getAccount/cookies/headers
    node_modules/.bin/tsx tests/kb-search.ts      # cikkek és szótári kifejezések a keresőben (R3 nélkül; a betöltött index = a szerver tételei), index ≤ 40 KB gz, az oldalba ágyazott rész (kalkulátorok) ≤ 6 KB gz
    node_modules/.bin/tsx tests/kb-storage.ts     # tárolók, `history` beállítás, sütitáblázat
    node tests/kb-dist.mjs                        # build után (DIST=dist): az R3 vázlatok és a kérdésbank kiadatlan kérdéseinek (tests/kb-quiz-needles.mjs) szövegmintáinak egyike sincs a build kimenetében (kliens és szerver); a közzétett cikk szövege csak a szervercsomagban; pozitív kontroll: a számolós sablon szövege a kliens-JS-ben
    BASE=http://127.0.0.1:8787 node tests/kb-routes.mjs   # build után, mindkét targeten: a kalkulátorok mellett /tudastar, /elmelet, kategóriák, minden közzétett cikk (jelvény, Röviden, Források, Gyakori tévedések, TechArticle, description), szótár (DefinedTermSet, horgonyok), title ≤ 60 minden Tudástár- és kalkulátoroldalon; R3: közvetlen URL-en, perjellel a végén és RSC-kéréssel is 404, a csak R3 kategóriák (védelmi eszközök, érintésvédelem, munkabiztonság, Sémák) 404-ek, nincs rá link és a szövege sincs a főoldalon, a kalkulátor-hubon, egyik kalkulátoroldalon és Tudástár-oldalon sem, nincs a sitemapben; sitemap = közzétett cikkek + kategóriák (+ `/tudastar/tesztek`, ha van közzétett tartalma; tesztkódos URL nincs); Tesztek: 200 és fül, ha közzétett (különben 404), kötelező jelölés, description, kanonikus URL a `?kod=`-os kérésre is, JS nélküli tartalék, „Teszteld magad” az Ohm-cikkben, T1-sablonra sem link, sem kliensadat; a kérdésbank kiadatlan kérdéseinek szövege egyik kiszolgált oldalon sincs
    BASE=http://127.0.0.1:8787 node tests/kb-figures.mjs  # build után (Playwright, böngészőtelepítés nélkül): 320 px-en egyik sitemap-oldalon sincs vízszintes görgetés; az ábrák felirata 320 px-en ≥ 9, 390 px-en ≥ 10 px, és egyik ábra sem lóg ki a keretéből; a szövegközi linkek aláhúzottak és eltérő színűek (világos és sötét témában), a „hamarosan” jelölés nem linkszerű; JS nélkül a cikkműveletek rejtve; 390 px-en az érintési célok ≥ 44 px; Tesztek 320 px-en: beállítás, gyakorló (kérdés, visszajelzés) és vizsga, eredmény görgetés nélkül, érintési célok ≥ 44 px; 390 px-en szövegmező / legördülő lista fókuszában a sáv helyén álló gomb koppintásra és kattintásra is működik; billentyűzettel a fókusz a megerősítéseknél és a műveletek után sem esik a dokumentum elejére; élő régiók; a tesztoldal linkjei aláhúzottak és eltérő színűek; JS nélkül a sziget rejtve, a mintafeladat látszik
    node --no-warnings --import tsx tests/quiz.ts  # Tesztek: 10 000 seedes sablonteszt, motor, kvóta, tesztkód, kapu (mutációs próbákkal), kérdésbank-séma, -kapu (ideiglenes másolaton) és szivárgásőr, azonosítójegyzék, lektori CSV, tárolás, tiltott kifejezések (lent: „Tesztek (vizsgaszimuláció) – tesztek”)

A futtatás módja (Sites- és Node-előnézet) a `docs/kalkulatorok.md` „Tesztek” szakaszában.

## Eltérések a tervtől (és miért)

- **Markdown-forrás + generált TS-modulok** a kézzel írt TS-blokk-AST helyett (terv 3.3): a tartalmat a szerzők Markdownban adták le és a lektor is abban olvassa; a generált modul ugyanúgy típusos, tesztelhető és ujjlenyomatolható, futásidőben nincs parser. A blokk-típusok a vázlatokhoz igazodnak (képletsor szövegként, nem MathML-AST; nincs `safety`, `calc`, `symbol`, `cta` blokk – az R1/R2 elméleti cikkekben nincs rájuk szükség).
- **Állapotnevek:** a feladat szerinti vázlat → belsőleg ellenőrzött → lektorált → közzétett (a terv `tervezet`/`lektoralasra-kesz`/`jovahagyott` helyett); a rekordok a `lib/kb/release.ts`-ben (nem a metaadatban), a szkript `scripts/kb-content.ts` (nem `kb-review.ts`; nincs `approve`/`diff` parancs – a rekordot kézzel kell beírni).
- **Kategóriaoldalak** (`/tudastar/elmelet/kategoria/<id>`) a gyűjtőoldal horgonyai mellett: önálló, kereshető belépési pontok.
- **Felfüggesztés:** a felfüggesztett tétel 404 és kiesik mindenhonnan (a terv „cím + Röviden + Javítás alatt sáv, noindex” változata helyett) – egyszerűbb és biztonságosabb.
- **Az olvasási előzmény** csak 15 s látható olvasás után ír, és a Menüben kikapcsolható (a terv „automatikus” előzménye helyett): a puszta megnyitás vagy egy tévedésből kattintott link ne kerüljön a „Legutóbbiak” közé.
- **A Tudástár keresőindexe lustán töltődik** (a terv 3.8 szerint): generált, csak közzétett tételeket tartalmazó kliensmodul (`lib/kb/content/generated/search.ts`, nem `lib/kb/search-index.ts`), a kereső első megnyitásakor, dinamikus importtal; az oldalba csak a kalkulátorok tételei és a közzétett célok listája kerül. A vinext minden oldal RSC-adatába a not-found határok fáját is beágyazza; hogy a keret ne kerüljön bele kétszer-háromszor, a Shell az adatait folyamatonként egyszer számolja, és mindig ugyanazt az objektumot adja át.
- **HTML-méret** (Sites build, 2026-10-11; a terv kerete 150 KB). A korábbi, minden oldalba ágyazott keresőindex miatt a meglévő kalkulátoroldalak is 50–65 %-kal nőttek; a lusta betöltés óta: `/kalkulatorok/ohm-torveny` HEAD 87,7 KB (gz 18,0) → index-beágyazással 133,4 KB (gz 29,7) → **most 92,6 KB (gz 20,1)**; `/kalkulatorok/feszultsegoszto` 89,6 → 132,2 → **91,7 KB**; `/kalkulatorok` 104,5 → 143,6 → **102,0 KB**; a főoldal `/` 64,2 → 75,4 → **72,1 KB** (a kiemelt cikkek szakaszával). Tudástár: kezdőlap 154 → **113 KB**, Elmélet **117 KB**, kategóriaoldalak 83–98 KB, Ohm törvénye 182 → **139 KB** (gz 29), a leghosszabb cikk (rövidzárlat és túlterhelés; korábban 233 KB-ot mértünk, a dokumentáció tévesen 225 KB-ot írt) → **189 KB** (gz 39), a szakszótár 328 → **272 KB** (gz 54). **A 150 KB-os keretet ma is túllépi 13 cikk (151–189 KB) és a szakszótár:** ennek kb. kétharmada a vinext RSC-adata – a cikk (az SVG-ábrákkal) a hidratáláshoz a HTML-en kívül még egyszer szerepel benne; a látható HTML 35–55 KB. Tovább csökkenteni a szótár betűnkénti bontásával és a cikktörzs RSC-n kívüli (statikus) kiszolgálásával lehet – ez utóbbi a vinext működését érinti; külön feladat, tulajdonosi döntésre.
- **Nincs még:** `/tudastar/tudnivalok` (helyette a kezdőlap „Hogyan ellenőrizzük a tartalmat?” szakasza), `/tudastar/konyvjelzok` (helyette a „Kedvencek és előzmények” fiók), lektori előnézet R3-ra (az R3 vázlat szövege lektorálásig nem generálódik; a lektori anyag a vázlat, a kérdéslista és a lektori csomag 4. része a bekötési ábrákkal), tervezői „Tudástár ↗” link a Tervsegédben (a terv szerinti szerelvény → séma linkek R3-célúak).
- **Sémák – nincs Szerelési rajz nézet** (terv 3.4: Bekötés / Szerelési rajz / Működés): a Szerelési rajz a tervező jelképeivel (alaprajzi jelek, nyomvonal) készülne, ehhez a tervező szimbólumkészletét (`ElectricalSymbol`) kellene a Tudástárba emelni, de a Tudástár-oldalak a tervező kódját nem importálhatják (`tests/kb-guards.ts`). Helyette a figura „Így látod a tervezőben” sora magyarázza az eltérést (PE). A vázlatok `views` mezőjében szereplő `szerelesi-rajz` most nem jelenik meg; a „Világítási kapcsolások” gyűjtőcikk áttekintő ábrája erre épülne, ezért az nem adható ki.
- **Sémák – a veszély-doboz** a vázlat első blokkja (`> **Veszély – …**`), nem a sablon része: így a lektor a cikk szövegével együtt hagyja jóvá; a generátor megköveteli, hogy a figyelmeztetés-könyvtár (`bekotes`, `munkavegzes`) mondatai szó szerint benne legyenek. Nem zárható, `role="note"`; a gyűjtőoldal tetején a könyvtári szöveg áll.
- **Sémák – az áramút érszintű** a terv hálózatszintű kiemelése helyett (a zsákutca-ág, pl. a TN-S védővezető hibátlan állapotban, nem „visz áramot” a rajzon); a Python-szimulátorral összevetett kimenetek ettől függetlenek.
- **Sémák – keskeny képernyőn görgethető rajz** (48rem alatt, a legkisebb felirat ≥ 10 px), a cikkábrák átrendezett keskeny változata helyett: a vezetékszintű rajz nem rendezhető át a netlista és a teszt megkerülése nélkül.
- **R2 tartalom a figyelmeztetés-könyvtár jóváhagyása előtt (tulajdonosi megerősítésre vár).** A terv 8.1 pontja szerint R2/R3 tartalom csak a figyelmeztetés-könyvtár (`lib/kb/safety.ts`) szakmai és jogi jóváhagyása után kerülhet ki, a 4.2 pont pedig R2-re is lektort ír. A mérvadó `docs/tudastar-dontesek.md` az „alacsony kockázatú elméletet (pl. Ohm-törvény, teljesítmény, IP-kód, színjelölés)” belső kettős ellenőrzéssel kiadhatónak mondja, a lektort csak a bekötési rajzokhoz és a biztonsági témákhoz (R3) köti; a példák között két R2 tétel (IP-kód, színjelölés) is szerepel, és a 4.2 pont R2-példái („IP-védettség, vezetékjelölések”) ugyanezek. Ezt úgy értelmeztük, hogy a döntés az R1/R2 osztályt egészében a belső ellenőrzéshez rendeli, ezért mind a 6 R2 tétel (rövidzárlat, színjelölés, kábeljelölés, IP, lámpafoglalat, szakszótár) „Belsőleg ellenőrizve” jelvénnyel, Figyelem-dobozzal és az alapfigyelmeztetéssel közzétett. **A tulajdonos kifejezett megerősítése nyitott** (`docs/BACKLOG.md`); ha nem erősíti meg, a döntésben név szerint nem szereplő R2 tételek (rövidzárlat, kábeljelölés, lámpafoglalat, szakszótár) rekordját ki kell venni a `lib/kb/release.ts`-ből (a kapu, a linkek és a kereső maguktól igazodnak).
- **A vezetekek-szinjelolese R2** (a terv 10.4 táblája R3-nak sorolja): a mérvadó döntés a színjelölést név szerint a belső ellenőrzéssel kiadható elmélet közé teszi; a cikk bekötési vagy feszültség alatti lépéssort nem tartalmaz, csak azonosítást és figyelmeztetéseket (`lektori-kerdesek-elmelet.md`, Gyakorlati 1.).
- **A cikkek vázlata MI-segítséggel készült** (`ai: vázlat`); ezt a meta-sor és a kezdőlap magyarázata kimondja. A belső kettős ellenőrzés második köre független szakmai ellenőrzés volt; szakmai lektor még nem hagyta jóvá egyik cikket sem – ezért nincs „Szakmailag lektorálta” jelvény és `reviewedBy`.
