# AUDIT — Urbino Manager rendszer · Tier-0..Tier-4 záró audit

**Dátum.** 2026.05.22 · **Audit-scope.** Tier-0..Tier-4 organism-réteg + preview-fájlok + dokumentáció. Cél: a 8. lépés (screen-mock) megkezdése előtt felmérni a réteg konzisztenciáját, a spec-fedést, és kihegyezni egy priorizált cleanup-listát.

**Olvasási útmutató.** A `[megj.]` blokk az audit-megfigyelés, a `[hatás]` blokk azt mondja meg, hogy ez a 8. lépésre veszélyes / kozmetikai / információs. Az utolsó szakasz egy összevont, priorizált task-lista.

---

## 1. Organism-leltár — props-szerződés vs implementáció

**Számok.** 31 organism-fájl (`.jsx`) a `manager-system/organisms/`-ban + 1 közös `_styles.css` (4099 sor). A `ORGANISMS.md` katalógusa kb. 25 organism-et nevez meg; a Hub szövege „18 organism"-et ír. Mindkettő stale (lásd 7. fejezet).

| # | Fájl | Exposed `window.*` | Props (impl. szignatúra) | ORGANISMS.md spec | Megjegyzés |
|---|---|---|---|---|---|
| 1 | `app-shell.jsx` | `AppShell`, `LeftNav`, `TopBar` | `AppShell({active, breadcrumb=[], topBarRight, pageTemplate='mgr', children})` · `LeftNav({active})` · `TopBar({breadcrumb, children, searchPlaceholder})` | T0 — `AppShell` 5 prop, `LeftNav` 5 prop, `TopBar` 3 prop | **Eltérés:** spec szerint `LeftNav` propjai `active`+`tenant`+`currentUser`+`collapsed`+`counts`; az impl. csak `active`-et fogad — tenant/currentUser/counts a `window.MGR_MOCK`-ból olvasott globális. `collapsed` nincs implementálva. *[hatás: információs — a Tier-3.5 nem szállította a collapsed-módot, az `MGR_MOCK`-ról 8. lépésben szólni kell a fejlesztőnek]* |
| 2 | `page-header.jsx` | `PageHeader` | `({eyebrow, title, description, back, backLabel='Vissza', actions})` | T0 — 5 prop (`back` is) | OK; a `backLabel` az implben pluszplusz, dokumentálatlan a spec-en. *[hatás: kozmetikai — ORGANISMS.md update]* |
| 3 | `empty-state.jsx` | `EmptyState` | `({kind='empty', title, description, action, icon, fullPage=false})` | T0 — 5 prop | A `fullPage` plusz a specen, dokumentálatlan. *[hatás: kozmetikai]* |
| 4 | `icon.jsx` | `MgrIcon` | `<Icon name size className style>` | Nincs külön szekció — ad-hoc segéd | Az ORGANISMS.md nem említi, hogy van saját ikon-organism. *[hatás: információs — a spec szerinti "Lucide-ikonok" valóban erre épülnek; doc-pótlás javasolt]* |
| 5 | `user-chip.jsx` | `UserChip` | `({name, role, email, initials, size='md', disabled=false, showRole=true, meta})` | T1 — 7 prop (a `showRole` az implben plusz) | OK | 
| 6 | `settings-section.jsx` | `SettingsSection` | `({title, description, actions, children, bare=false})` | T1 — 4 prop (`bare` impl-plus) | OK |
| 7 | `settings-sub-nav.jsx` | `SettingsSubNav` | `({active})` | T1 — 1 prop | OK; a `_styles.css` ehhez **mindössze 1 osztály**-t exportál (`.mgr-settings-sub-nav`), nagyrész DS `.u-tabs`-ot fogyasztja, ahogy a spec ígéri. |
| 8 | `confirm-dialog.jsx` | `ConfirmDialog`, `RejectionBody`, `ReopenBody`, `MergeBody` | `ConfirmDialog({kind='info', title, subtitle, message, confirmLabel, cancelLabel='Mégse', destructiveLabel, size='md', icon, inPlace=false})` + 3 body-helper | T1 — 7 prop | **Pluszok:** `subtitle`, `destructiveLabel`, `size`, `icon`, `inPlace`. **Hiány:** `open` / `onConfirm` / `onCancel` propok nincsenek a komponensben — a host renderelje feltételesen + saját footer-handlerrel. *[hatás: információs — a spec szerinti generikus `open`/`onConfirm`/`onCancel` minta hiánya a Tier-1-ben dokumentálandó, a screen-fázisban a host saját state-tel kezeli]* |
| 9 | `data-table.jsx` | `DataTable` | `({columns=[], rows=[], countLabel, barActions, loading=false, selectable=false, density='work', emptyState, pagination, showHeader=true})` | T2 — 9 prop | OK; D-3 chevron-only impl. **De**: a `tier-2.html` preview NEM ezt használja, hanem inline saját `DataTable`-t definiál `tickets`+`density` API-val (`tier-2.html:744`). Az organism-jsx élesben még sosem volt megrenderelve. *[hatás: **veszélyes** — a screen-mock fázis (8.) első DataTable-hívásánál derül ki, ha az organism-impl. nem feleltethető meg a Tier-2-ben látottal. Lásd 6. fejezet preview-szúrópróba]* |
| 10 | `filter-pill-bar.jsx` | `FilterPillBar` | `({filters=[], searchValue='', searchPlaceholder='…', hasActive=false})` | T2 — 6 prop | **Hiány:** `onChange` és `onClear` callback-ek nincsenek implementálva (a spec dokumentálja). Az impl. csak vizuális, defaultValue inputtal. *[hatás: információs — preview-szinten OK, screen-fázisban a controlled-mode pótlandó]* |
| 11 | `triage-bar.jsx` | `TriageBar` | `({status, category, citizenSuggestedCategory, priority, dueDate, assignee, savingField, openField, onOpen})` | T4 — 8 prop | OK, D-4 4 döntéssel bakelve. A 4 popover (CategoryPopover/PriorityPopover/AssigneePopover) hardkódolt mock-tartalmú a fájlon belül — *nem* a `MGR_MOCK`-ból olvas. *[hatás: információs — a screen-fázisban a popover-content propon kell áthúzni vagy real-lookup-ra cserélni]* |
| 12 | `ticket-meta-bar.jsx` | `TicketMetaBar` | `({displayId, title, status, reporterName, reporterContact, addressText, createdAt, origin})` | T4 — 4 (cím + meta-sor) | Implementáció jól lefedi a spec 10 4.3 meta-sorát. OK |
| 13 | `activity-timeline.jsx` | `ActivityTimeline` | `({events, systemEventActor, title})` | T4 — 3 prop | OK; D-5 AT-1C + AT-2B impl. |
| 14 | `internal-notes-panel.jsx` | `InternalNotesPanel` | `({notes, readOnly, composerValue, onComposerChange, onSubmit, pending, currentUserInitials, title})` | T4 — 8 prop | OK; D-5 N-1B + N-2A impl. |
| 15 | `action-bar.jsx` | `ActionBar`, `ActionBar_buildDefaultActions` | `({status, actions, hint, lockedNote})` + helper | T4 — 4 prop | OK; D-5 AB-1A + AB-2A. A `_buildDefaultActions` helper a spec-ben nincs nevesítve, az audit szerint hasznos állapotgép-tükör. *[hatás: információs]* |
| 16 | `similar-tickets-box.jsx` | `SimilarTicketsBox` | `({state, items, maxVisible=3, onOpen, onMerge, onRetry})` | T4 — 6 prop | OK; D-6 |
| 17 | `ticket-create-form.jsx` | `TicketCreateForm` | `({value, onChange, onSubmit, onCancel, pending})` | T4 — 5 prop | OK; D-7. Beágyazva fogyasztja a `LocationPicker`-t és `TriageBar`-t (lásd 4. fejezet). |
| 18 | `location-picker.jsx` | `LocationPicker` | `({value, onChange, onGeocode=mockReverseGeocode, allowGps=true, mapZoom=16, pinStatus='uj', containerClass='…'})` | T2-listán (volt T3 előtt) — 5 prop | OK; D-7 L-1A/L-2C/L-3A impl. `mockReverseGeocode` inline definiált fallback. |
| 19 | `map-widget.jsx` | `MapWidget`, `MapLegend` | `({mode='view', lat=47.0341, lng=18.0181, status='folyamatban', popupContent, containerClass='', zoom=16, onLocationChange})` | Tier-3.5-ből kiemelve D-7 nyomán | OK; **függés Leaflet-globálra** (`window.L`) — preview-szinten kell `<script src="leaflet">` (a `tier-3.5-map.html` és `tier-4-uj-bejelentes.html` ezt megteszi). 8. lépés: a screen-fájl is. |
| 20 | `category-tree-editor.jsx` | `CategoryTreeEditor` | `({categories, onUpdate, onCreate, onReorder, onDelete, onOpenImport, showInactive=true, onToggleShowInactive})` | T4 — 8 prop | OK; D-8 C-1A..C-4A impl. Beágyazva fogyasztja `IconPicker`-t. |
| 21 | `icon-picker.jsx` | `IconPicker`, `ICON_SET_DEFAULT`, `iconGlyph` | `({iconSet=DEFAULT_ICONS, selected, onSelect, onClose, style, title='Ikon választása'})` | T4 — 4 prop (+ a globális `iconGlyph` helper) | OK; D-8 C-2A. `iconGlyph` mint globális segéd a `category-tree-editor`, `category-import-dialog` használja, **dokumentálatlan a Hub és ORGANISMS.md által**. *[hatás: információs — doc-pótlás]* |
| 22 | `category-import-dialog.jsx` | `CategoryImportDialog` | `({open, availableRoots, onConfirm, onCancel, pending, inPlace})` | T4 — 5 prop | OK; D-8 C-3B. |
| 23 | `role-editor.jsx` | `RoleEditor`, `ROLE_INFO` | `({value, onChange, locks, readOnly})` | T4 — 4 prop | OK; D-9 UD-2A/UD-4A impl. `ROLE_INFO` mint konstans-export a 4 szerepkör magyarázatát adja — a `UserInviteDialog` és bármilyen user-detail screen újra-fogyaszthatja. |
| 24 | `user-invite-dialog.jsx` | `UserInviteDialog` | `({open, value, onChange, onConfirm, onCancel, pending, fieldErrors={}, inPlace})` | T4 — 6 prop | OK; D-9 UD-1A impl. `fieldErrors`-szal a 422-szerver-választ tükrözi. |
| 25 | `user-picker.jsx` | `UserPicker` | `({users, selectedIds, onAdd, placeholder, allowedStatuses=['Active'], query, onQueryChange, emptyHint})` | T4 — 4 prop a SITEMAP-ban | OK; D-10 G-3A impl. Controlled (`query`/`onQueryChange`) vagy uncontrolled módban is megy. |
| 26 | `group-member-list.jsx` | `GroupMemberList` | `({members, editMode, candidates, onRemove, onAdd})` | T4 — 4 prop | OK; D-10 G-2A impl. Beágyazva fogyasztja `UserPicker`-t. |
| 27 | `tenant-info-form.jsx` | `TenantInfoForm` | a fájl signature: csak `(value, onChange, editing, fieldErrors)` (a `props` destructuring miatt regex nem fogta) | T4 — 4 prop | OK; D-11 T-1A impl. |
| 28 | `logo-uploader.jsx` | `LogoUploader` | `({logoUrl, logoMeta, fallbackText, onUpload, onDelete, pending, uploadError, readOnly})` | T4 — 8 prop | OK; D-11 L-1A + L-2A impl. |
| 29 | `recipient-list.jsx` | `RecipientList` | `({recipients=[], editingId=null, readOnly=false, onAdd, onEdit, onRemove, onToggleActive, onEditSave, onEditCancel, emptyComponent})` | T3 — 4 prop a SITEMAP-ban | OK; D-11 emelte ki inline-ból. **Spec-szelídítés:** SITEMAP 4-propot ír, az impl. 10 propot exportál — ez a kanonikus interface, ORGANISMS.md frissítendő. |
| 30 | `kpi-card.jsx` | `KpiCard` | `({label, value, hint, tone='default', delta, href, onClick})` | T3 — 6 prop | OK; D-12 emelte ki inline-ból. **Eltérés:** a spec `delta: {value, label}` formátumot ír, az impl. `delta: {dir, label}` formátumot vár ("up"/"down" + szöveg). *[hatás: információs — a screen-fázisban a fejlesztőnek a `dir` formátum a kanonikus]* |
| 31 | `team-performance-table.jsx` | `TeamPerformanceTable` | `({rows=[], hrefForUser=defaultHref})` | T4 — 2 prop | OK; D-12 Tier-3-ból átemelve. Empty state inline kezelve a komponensben. |

### 1.1 Hiányzó organism-ek az `organisms/`-ból (vs ORGANISMS.md katalógus)

Az `ORGANISMS.md` 11 további organism-et nevez meg, amelyek **NEM léteznek önálló fájlként**, hanem (a) inline a preview-ban, (b) szándékosan elhagyva, vagy (c) későbbi fázisra halasztva. Egyik sem build-blocker a screen-mock fázishoz, de a 8. lépés előtt el kell dönteni, melyik melyik:

| Organism | ORGANISMS.md helye | Tényleges hely | Státusz |
|---|---|---|---|
| `StatusTrack` | T3 | inline `tier-3.html` (`L344-L376`) | **Kiemelendő `organisms/status-track.jsx`-be** mielőtt screen-fázis indul — a A1 adatlap host-ja ezt fogja fogyasztani |
| `WeeklyReportCard` | T3 | inline `tier-3.html` (`L412-L468`) | **Kiemelendő `organisms/weekly-report-card.jsx`-be** — A4 dashboard + A5 archívum + adatlap is használja |
| `ContentEditor` | T3 | inline `tier-3-content.html` (`L409-…`) | Kiemelése a screen-fázisban indokolt (A10+A11+A12 közös) |
| `PublishStateChip` | T3 | inline `tier-3-content.html` (`L361`) | Kicsi — vagy DS-promóció, vagy önálló `organisms/publish-state-chip.jsx` |
| `PhotoGallery` | T3 | inline `tier-3-content.html` (`L369`) | **Még csak placeholder** — count + overflow prop, valós kép-galéria viselkedés (lightbox, meta) hiányzik |
| `PhotoUploader` | T3 | inline `tier-3-content.html` (`L386`) | Placeholder; valós drop-zone-impl. hiányzik |
| `RichTextEditor` | T4 | nincs | A10/A11 spec-fázisban dől el (FK-1 — `99_donesnaplo.md`); pilotban várhatóan `<textarea>` fallback |
| `CoverImageUploader` | T4 | nincs | A10/A11 fázisra halasztva — a `LogoUploader` mintájára egyszerű lesz |
| `DateTimeRangePicker` | T4 | nincs | A11 spec-fázis |
| `LinkValidator` | T4 | nincs | A12 spec-fázis |
| `ReorderableList` | T4 | a `CategoryTreeEditor` inline tartalmazza a drag-grip-et | Külön organism feleslegesnek tűnik — a category-fa-spec már absorbeálta |
| `PdfPreview` | T4 | nincs | A5 spec — a Hub szerint „&lt;iframe&gt;" — explicit kihagyott |

### 1.2 Nem ORGANISMS.md-ben listázott „extra" organism-ek

A `tier-3.5/*` preview-k további négy minta-organismet vezetnek be, amik **nincsenek a katalógusban**: Toast, AppShell-loading-skeleton, User-menu, Notification-bell-panel. Mindegyik inline a preview-ban, organism-fájl nélkül. **Hatás:** információs — a screen-fázis előtt vagy katalogizálni kell őket (ORGANISMS.md új „Tier-3.5 cross-cutting" szekció), vagy egyértelműen leírni, hogy a screen-szinten host-szintű állapotkezelés.

---

## 2. Spec-fedés — A1..A12 feature-szintű feladat-lista

Forrás: `uploads/urbino-docs/03_implementacios_terkep.md` 1.2. A „Kész" = van rá legalább 1 Hi-Fi preview + a hozzá tartozó organism(ek) fájlszinten léteznek.

| Feature | Spec-fájl | Organism-igény | Tier-4 iter / döntés | Preview | Státusz |
|---|---|---|---|---|---|
| **A1** Bejelentés-lista | `10_bejelentes_lista_es_adatlap.md` | `DataTable` + `FilterPillBar` + `TabFilter` + `UserChip` | Tier-2 (D-2) | `tier-2.html` | ✅ Lista **de organism-API mismatch** — lásd 6. fejezet |
| **A1** Bejelentés-adatlap fej | uo. 4.3 | `TicketMetaBar` + `TriageBar` + `StatusTrack` | Iter 1 / D-4 | `tier-4-bejelentes-adatlap-fej.html` + `tier-4-triagebar-explorer.html` | ✅ MetaBar+TriageBar megvan; **StatusTrack inline él tier-3.html-ben**, nem fájl-szinten |
| **A1** Bejelentés-adatlap body | uo. 4.6 | `ActivityTimeline` + `InternalNotesPanel` + `ActionBar` + `PhotoGallery` | Iter 2 / D-5 | `tier-4-bejelentes-adatlap-body.html` + UX-explorer | ✅ Timeline+Notes+ActionBar megvan; **PhotoGallery placeholder, inline** |
| **A1** Elutasítás / Visszanyitás dialógus | uo. 4.7 | `ConfirmDialog`+`RejectionBody`+`ReopenBody` | Tier-1 | (a `tier-1.html` katalógus szerint kész) | ✅ |
| **A2** Új bejelentés-form | `00_architektura_v4.md` 6.1 | `TicketCreateForm` + `LocationPicker` + `MapWidget` + `TicketMetaBar` | Iter 4 / D-7 | `tier-4-uj-bejelentes.html` + UX-explorer | ✅ |
| **A3** Duplikáció-szűrő | `20_duplikacio_es_osszevonas.md` | `SimilarTicketsBox` + `ConfirmDialog`/`MergeBody` | Iter 3 / D-6 | `tier-4-duplikacio.html` + UX-explorer | ✅ |
| **A4** Dashboard | `40_riport.md` 3. | `KpiCard` + `TeamPerformanceTable` + `WeeklyReportCard`(compact) | Iter 9 / D-12 | `tier-4-dashboard.html` | ✅ — de **WeeklyReportCard inline él tier-3.html-ben**, a dashboard-preview inline mini-cardot használ ad hoc |
| **A5** Heti PDF-riport | `40_riport.md` 4. | `WeeklyReportCard` + `DataTable`(archívum) + `RecipientList`(ro) + `PdfPreview`(iframe) | (nincs külön Tier-4-iter — Hub: "screen-fázisban (8) megépítendő") | (nincs A5-fókuszú preview) | ⚠ **Tier-4-szinten szándékosan nem fedve** — a Hub és D-12 utolsó bekezdés ezt explicit kimondja, de a `WeeklyReportCard`-ot ehhez ki kell emelni `organisms/`-ba |
| **A6** Kategóriák | `30_beallitasok.md` 4.2 | `CategoryTreeEditor` + `IconPicker` + `CategoryImportDialog` | Iter 5 / D-8 | `tier-4-kategoriak.html` + UX-explorer | ✅ |
| **A7** Csoportok | `30_beallitasok.md` 4.3 | `GroupMemberList` + `UserPicker` + GroupDetailPage-composition | Iter 7 / D-10 | `tier-4-csoportok.html` + UX-explorer | ✅ |
| **A8** Felhasználók | `20_felhasznalokezeles.md` | `UserInviteDialog` + `RoleEditor` + UserDetailPage-composition | Iter 6 / D-9 | `tier-4-felhasznalok.html` + UX-explorer | ✅ |
| **A9** Általános | `30_beallitasok.md` 2. | `TenantInfoForm` + `LogoUploader` + `RecipientList`(edit) | Iter 8 / D-11 | `tier-4-altalanos.html` + UX-explorer | ✅ |
| **A10** Hírek | `60_tartalom.md` 3.2 | `ContentEditor` + `RichTextEditor` + `CoverImageUploader` + `PublishStateChip` | nincs Tier-4-iter | `tier-3-content.html` (vázlatszint) | ⚠ Csak Tier-3 UX-explorer + Hi-Fi van; **screen-fázisban (8) kell az organism-kiemelés és a `RichTextEditor`/`CoverImageUploader` impl.** |
| **A11** Programok | `60_tartalom.md` 3.3 | mint A10 + `DateTimeRangePicker` + `LocationPicker`(opt) | nincs | mint A10 | ⚠ uo. + `DateTimeRangePicker` még nem létezik |
| **A12** Városi információk | `60_tartalom.md` 3.4 | `ContentEditor` + `LinkValidator` + `ReorderableList` | nincs | mint A10 | ⚠ uo. + `LinkValidator` még nem létezik |

### 2.1 Spec-fedés összegzés

- **Teljes lefedés:** A1 (header+body+dialog), A2, A3, A6, A7, A8, A9, A4 → **8/12**.
- **Részleges:** A1-list (organism-mismatch — lásd 6.), A5 (organism kiemelés hiányzik).
- **Tier-4-en hiányzó (screen-fázisra halasztott):** A10, A11, A12 — a Hub és D-12 záró bekezdése ezt kimondja, **konzisztens**.

### 2.2 A Hub szöveg vs valóság

- Hub szöveg: „6/8 iteráció kész". **Valóság: 9/9 iteráció kész** (D-4..D-12 mind élesben él, és a Riport-ág D-12 is megjárta). A Hub `header.lede` + `status` + `plan` szekció **stale** — lásd 7. fejezet.

---

## 3. CSS-konzisztencia (`organisms/_styles.css`, 4099 sor)

A fájl 440 egyedi `.mgr-*` osztályt definiál 42 logikai szekcióban. A névsáv `mgr-*` prefix konzisztensen tartva — egyetlen szivárgó osztály sincs a DS `u-*` sávjába.

### 3.1 Duplikált blokkok (cleanup-igény)

Az `D-2` átszámozás idején (DataTable → Tier-2, többi átsorolás) **több organism CSS-blokk duplikáltan maradt benne**: a régebbi „Tier 0/1" rétegezésű blokk megmaradt, és új blokkot is kapott alább. A CSS-cascade így ütközik — a második blokk wins a deklarált tulajdonságokra.

| Osztály-család | 1. blokk | 2. blokk | Eltérés |
|---|---|---|---|
| `.mgr-user-chip*` | L458 (eredeti, `__body`/`__meta`/`--sm`/`--lg`/`--disabled`) | L815 (Tier-1, `__text`/`__name`/`__role`) | **A 2. blokk dead-code** — `__text` és `__role` osztályokat a `user-chip.jsx` JSX **soha nem rendereli** (a JSX `__body` + `__meta`-t használ). A teljes 2. blokk törölhető. |
| `.mgr-settings-section*` | L509 (eredeti, card-szerű: bg+border+radius+padding) | L986 (Tier-1, `display:flex`, `__heading-block`, `__footer`) | Részleges átfedés: a 2. felüldefiniálja a `display`-t és gap-eket, de a card-padding (L509) megmarad. A 2. blokk `__heading-block` és `__footer` osztályai dead-code (JSX `__title-block`-ot renderel). |
| `.mgr-data-table*` | L582 (a teljes komponens: `__bar`, `__count`, `__scroll`, `__skeleton-row`, …) | L847 (csak base + skeleton) | A 2. blokk redundáns — minden, amit deklarál, az 1.-ben már megvan. **Törölhető.** |
| `.mgr-filter-pill-bar*` | L682 (search + chips + clear) | L924 (`__filters` wrapper + másik `__clear`) | A 2. blokk az `__filters` wrappert deklarálja, ami **nincs a JSX-ben** (a JSX `__chips`-et renderel L48). Részben dead. |

**Hatás.** Vizuálisan jelenleg minden rendben renderelődik (a JSX a friss osztályneveket használja, a régiek csak „lustán ülnek" a CSS-ben). De a fájl **800+ sornyi nyilvánvaló duplikációt** és néhány dead-class-deklarációt cipel — a screen-fázis előtt ezt érdemes megtisztítani, mert a fejlesztő bezavarodhat („melyik a kanonikus?").

### 3.2 Stale header-komment

A fájl tetején (L8-13) a réteg-sorrend doksi azt mondja:

> Réteg-sorrend: 1. Shell — AppShell, LeftNav, TopBar / 2. Page-level — PageHeader / 3. Cross-cutting — EmptyState

Ez a Tier-0 elejéről való, és a 4099 soros valós fájlra (Tier-0..Tier-4 + 3.5 cross-cutting) **nem tükröz semmit**. A fájl belső 42 szekcióját egy aktualizált TOC fejléccel javasolt kiváltani.

### 3.3 Pozitívumok

- **Egyetlen magic-number sincs** — minden méret/szín `--u-*` tokenre van kötve. A 4099 sor átfutva 4-5 helyen találhatók explicit pixel-méretek (avatar-fix, ikonméret), egyik sem token-bypass.
- A `mgr-*` névsáv konzisztens, a BEM-szerű `__elem` és `--mod` mintát mindenhol követi.
- A komplex organism-ekhez (`triage-bar`, `similar-tickets-box`, `category-tree-editor`, `user-detail`) a CSS-block-méret arányos: a legnagyobb (`.mgr-cat*` 27 osztály, `.mgr-similar*` 28 osztály, `.mgr-triage-bar*` 27 osztály) — egészséges arány.

---

## 4. Cross-organism fogyasztások

Ki, kit, hogyan használ a globális `window.*` névtéren át. Az `Icon` (= `MgrIcon`) és `MGR_MOCK` adatfüggés nem számít kompozíciónak.

```
ticket-create-form  ──> LocationPicker
                    ──> TriageBar  (read-only mock)
                    ──> ActionBar  (két submit-gomb)

location-picker     ──> MapWidget

map-widget          ──> window.L  (Leaflet — külső, host-szintű script)

category-tree-editor ─> IconPicker
                     ─> iconGlyph  (globális helper az icon-picker-ből)

category-import-dialog ─> iconGlyph

group-member-list   ──> UserPicker  (edit-mode-ban beágyazva)

user-invite-dialog  ──> RoleEditor  (a roles-szekcióba beágyazva)

confirm-dialog      ──> (MgrIcon)   — body-helperek (RejectionBody/ReopenBody/MergeBody) saját jogon exportáltak

app-shell           ──> MgrIcon + MGR_MOCK
```

### 4.1 Megfigyelések

- **Lánc-mélység max 3** (`TicketCreateForm → LocationPicker → MapWidget → window.L`) — a screen-mock fájlnak a `LocationPicker` használatához *valóban csak ezt az egy láncot kell betöltenie*, plusz Leaflet. Egészséges függés-gráf.
- **`iconGlyph` mint globális segéd** — szivárgó implementációs részlet az `icon-picker.jsx`-ből, dokumentálatlan, két fogyasztója van (`category-tree-editor`, `category-import-dialog`). Vagy promotálni kell saját `icon-glyph.js` helper-fájlba, vagy explicit a kategória-organism-eken belül kötni. *[hatás: információs cleanup]*
- **Beágyazott render — script-order-érzékeny.** Mivel a JSX-fájlok `Object.assign(window, …)`-szal exportálnak, és a fogyasztó destrukturálja a wrapper IIFE-jén belül (`const { IconPicker, iconGlyph } = window;`), **az import-sorrend a preview-HTML-ben szigorúan számít** (icon-picker.jsx előbb, category-tree-editor.jsx utána). A 8. lépés screen-fájljainál ezt explicit dokumentálni kell — egy „organism-loader" snippet, vagy az ORGANISMS.md egy „dependency-graph" táblája.
- **Nincs gyanús cross-coupling.** Egyik organism sem hivatkozik másik organism CSS-osztályára (a `mgr-cat`-ből nem hivatkozik senki a `.mgr-similar`-ra stb.). A `_styles.css` per-organism szekciója önálló.

### 4.2 Tier-besorolás vs valós használat

A Tier-3.5 / Tier-4 átsorolás után pár organism „rossz" tierben szerepel:

- `MapWidget` az ORGANISMS.md-ben még Tier-3.5-ben, **de a D-7 nyomán Tier-4 (A2)** is fogyasztja, és a `LocationPicker`-rel együtt **Tier-4 organismként él**. Az ORGANISMS.md erre frissítendő.
- `LocationPicker` a SITEMAP-ban Tier-2-listán szerepel, **de tényleg Tier-4 organism** (A2 + jövőben A11). A `MapWidget`-szintű tier-átsorolás itt is indokolt.
- `KpiCard` az ORGANISMS.md-ben még Tier-3 — D-12 átemelte fájl-szintre, de a Hub szerint a táblában is „(már Tier-3)" zárójellel — ez konzisztens, csak a tier-besorolás bizonytalan: a `kpi-card.jsx` valójában Tier-3-ban él.

*[hatás: információs — ORGANISMS.md tier-frissítés a screen-fázis előtt]*

---

## 5. DECISIONS ↔ kód validáció

D-1..D-12 mind kódolva van. Az alábbi mátrix soronként szúrópróbál.

| Döntés | Tényleges kód-érték | Validáció |
|---|---|---|
| **D-1** Page-CTA a PageHeader-ben | `PageHeader.actions` slot megvan; a `TopBar` `children` slotja létezik, **de Tier-2 előtt nem kapott CTA-t** | ✅ A `tier-2.html` `<PrimaryBtn icon="plus">Új bejelentés</PrimaryBtn>` a `PageHeader.actions`-be megy, nem a TopBar-be |
| **D-2** DataTable → Tier-2 | `data-table.jsx` létezik, `tier-2.html` külön fájl, `ORGANISMS.md` Tier-2 szekciója létezik | ✅ szerkezetileg; **de a Tier-2 preview saját inline DataTable-jét használja** (6. fejezet) — az átszervezés "first build" hatása maradt |
| **D-3** Chevron-only sor-end, kebab nélkül | `data-table.jsx` L132-134: `<td className="u-table__action"><Icon name="chevron-right"/></td>` | ✅ |
| **D-4** TriageBar 4 sub-döntés | `triage-bar.jsx` `Field` komponens implementálja `eyebrow`+`__chev`+`__req`+suggestion-tag-et; `locked`+`mgr-triage-bar--locked` modifier | ✅ Mind a 4 sub-döntés (T-1B/T-2B/T-3B/T-4B) tükröződik a CSS+JSX-ben |
| **D-5** Timeline+Notes+ActionBar | `activity-timeline.jsx` event-type ikonokkal + dotted-underline relatív idő + tooltip; `internal-notes-panel.jsx` composer alul + kronológiai sorrend; `action-bar.jsx` sticky + 1 primer + helper | ✅ AT-1C/AT-2B/N-1B/N-2A/AB-1A/AB-2A mind tükrözve |
| **D-6** SimilarBox + Merge | `similar-tickets-box.jsx` 4 állapot (loading/empty/findings/error) + 56×56 thumb + amber findings-header + count-badge; `confirm-dialog.jsx` `MergeBody` kártya-radio | ✅ SB-1A/SB-2A/SB-3A/SB-4A/MD-1A/MD-2A mind tükrözve |
| **D-7** TicketCreateForm + LocationPicker | Külön oldal-háló, két submit-gomb (`ticket-create-form.jsx` `onSubmit` 2 ágon), 1-oszlopos szekciók (`Section`-helper); `LocationPicker` map-first + click+drag (Leaflet defaults) + auto-geocode (`mockReverseGeocode` debounced) | ✅ Mind az 6 sub-döntés |
| **D-8** Kategóriák | Drag-grip cellában + IconPicker popover + preview-card import-dialog + always-visible row-actions | ✅ C-1A/C-2A/C-3B/C-4A |
| **D-9** Felhasználók | `UserInviteDialog` lineáris form + amber-tinted role-szekció + `RoleEditor.locks` + saját-deaktiválás disabled-pattern | ✅ UD-1A/UD-2A/UD-3A/UD-4A — a UD-3A inline-szekció pattern a preview composition-ben (`tier-4-felhasznalok.html`), nem önálló organismben |
| **D-10** Csoportok | `GroupMemberList` row-lista + remove-X edit-mode-ban; `UserPicker` autocomplete; undo-toast a preview composition-ben | ✅ G-1A/G-2A/G-3A/G-4A — undo-toast preview-szintű implementáció |
| **D-11** Általános | `TenantInfoForm` locked-mezők lock-tag-gel; `LogoUploader` 2 állapot (dropzone + preview-meta-buttons); `RecipientList` informatív empty (host-átadható `emptyComponent`) | ✅ T-1A/L-1A/L-2A/R-1A |
| **D-12** Dashboard | `KpiCard` `href`/`onClick` + `tone='danger'` piros bal-border + delta; `TeamPerformanceTable` saját grid-row + empty kezelés | ✅ — **eltérés:** spec szövege a `delta:{value, label}`-t ír, az impl. `delta:{dir, label}`. A Hub és ORGANISMS.md erre nem reflektál |

### 5.1 Spec-szelídítések, amik a kódban élnek, de nincsenek külön döntésben

- A `ConfirmDialog` API bővítései (`subtitle`, `destructiveLabel`, `size`, `icon`, `inPlace`) — D-6 / D-8 / D-9 ezeket implicit használja, de explicit nincs róluk döntés. *[hatás: információs — a fejlesztőnek a Tier-1 `ConfirmDialog` API ezt mutatja, az ORGANISMS.md kiegészítendő]*
- A `RecipientList` `emptyComponent`-prop (host-átadható empty-state) — D-11 R-1A indokolja, de az ORGANISMS.md a `RecipientList`-et 4 prop-pal írja, az impl. 10 prop. **Az impl. a kanonikus.**

---

## 6. Preview-fájl szúrópróba

Összes preview: **34 HTML** (a kérdésben szereplő „24 preview" szám stale — Hub-frissesség, 7. fejezet). Megoszlás: tier-0 (1) · tier-1 (1) · tier-2 (2: explorer + Hi-Fi) · tier-3 (4) · tier-3.5 (8) · tier-4 (18: 9 explorer + 9 Hi-Fi).

Szúrópróba mintán (8 fájl megnyitva, a többi a `<script src>` jegyzék és cím-meta-alapján validálva):

| Preview | Cím | Használt organism-ek (`<X />`) | Külső organism-script-ek | Megfigyelés |
|---|---|---|---|---|
| `tier-0.html` | Shell + PageHeader + EmptyState | AppShell, PageHeader, EmptyState | 4 organism-src | Tiszta minta |
| `tier-1.html` | Cross-cutting organisms | AppShell, PageHeader, UserChip, SettingsSection, SettingsSubNav, ConfirmDialog | 8 src | Tiszta |
| `tier-2.html` | DataTable Hi-Fi (Bejelentés-lista) | DataTable, FilterPillBar, TabFilter | **5 src — de NEM importálja `data-table.jsx`-et** | ⚠ **fontos:** a 744. sorban inline saját `DataTable`-t definiál, `tickets`+`density` API-val. Az `organisms/data-table.jsx` (`rows`+`columns` API) **soha nem renderelődik a preview-kban**. Lásd 6.1 |
| `tier-2-ux-explorer.html` | UX Explorer | DataTable (mock-decoration) | 0 src — minden inline | Explorer-jellegű, nem fogyaszt organism-fájlt |
| `tier-3.html` | Riport-ág Hi-Fi | KpiCard, StatusTrack, WeeklyReportCard | 3 src — de **StatusTrack és WeeklyReportCard inline definiált** itt (L344, L412), nem fájl | ⚠ Bár a `kpi-card.jsx`-et a Tier-4 dashboard kiemelte, a StatusTrack/WeeklyReportCard még inline él itt |
| `tier-3-content.html` | Tartalom-ág Hi-Fi | ContentEditor, PublishStateChip, PhotoGallery, PhotoUploader | 3 src (`app-shell` + alapok) — **mind a 4 organism inline a preview-ban** | ⚠ A teljes Tartalom-ág 4 organism-je inline él — screen-fázis előtt kiemelendők |
| `tier-3-recipient.html` | Beállítás-ág RecipientList Hi-Fi | RecipientList | 5 src (beleértve a `recipient-list.jsx`-et) | Tiszta — D-11 D-day-on átállt fájlra |
| `tier-4-bejelentes-adatlap-fej.html` | Adatlap fej Hi-Fi | TriageBar, TicketMetaBar | 2 src | Tiszta |
| `tier-4-bejelentes-adatlap-body.html` | Adatlap body Hi-Fi | TriageBar, ActivityTimeline, InternalNotesPanel, ActionBar | 4 src | Tiszta |
| `tier-4-duplikacio.html` | A3 Hi-Fi | ConfirmDialog, SimilarTicketsBox | 3 src | Tiszta |
| `tier-4-uj-bejelentes.html` | A2 Hi-Fi | TicketCreateForm, LocationPicker | 6 src (Leaflet + map-widget + location-picker + …) | Tiszta — a teljes függés-lánc explicit |
| `tier-4-kategoriak.html` | A6 Hi-Fi | CategoryTreeEditor, IconPicker, CategoryImportDialog | 3 src | Tiszta |
| `tier-4-felhasznalok.html` | A8 Hi-Fi | RoleEditor, UserInviteDialog | 2 src | A `UserDetailPage` composition inline a previewn — várt minta |
| `tier-4-csoportok.html` | A7 Hi-Fi | GroupMemberList | 2 src (`user-picker` + `group-member-list`) | Tiszta — bár `UserPicker`-t a `GroupMemberList` beágyazva használja, **a preview standalone UserPickert is** mutathat (TODO ellenőrzés a screen-fázisban) |
| `tier-4-altalanos.html` | A9 Hi-Fi | TenantInfoForm, LogoUploader, RecipientList | 3 src | Tiszta |
| `tier-4-dashboard.html` | A4 Hi-Fi | KpiCard, TeamPerformanceTable | 2 src | Tiszta — de a `WeeklyReportCard`-szekciót a preview „inline kompakt-kártya"-val pótolja (D-12 hatás megfogalmazás: „vagy egy egyszerű inline-card-ot"). Screen-fázisra a WeeklyReportCard organism-igény fennáll |

### 6.1 Veszélyes — a tier-2.html és organisms/data-table.jsx interface-mismatch

A `tier-2.html` saját inline `DataTable`-t használ:

```
const DataTable = ({ tickets = TICKETS_ALL, density = 'work', sortKey = 'createdAt', … })
```

Az `organisms/data-table.jsx` viszont:

```
const DataTable = ({ columns = [], rows = [], countLabel, barActions, loading, selectable, … })
```

**Két különböző API**. A screen-fázisban, amikor a fejlesztő az `organisms/data-table.jsx`-et fogyasztja, kapja a `rows`/`columns` API-t — de a Tier-2 preview szerint a Bejelentés-listát `tickets={…}`-tal kell etetni. **A fejlesztőnek a kanonikus interface a `data-table.jsx`** (oszlop-render-eket a screen-fájl definiálja, mint az ORGANISMS.md is leírja), de a Tier-2 preview ezt nem demonstrálja.

**Hatás.** A 8. lépés első screen-mock-ja a Bejelentés-listához *valódi* `data-table.jsx`-fogyasztó kell, az oszlop-render-ekkel (status-chip cella, UserChip cella, dátum-cella). A Tier-2 preview ehhez **nem nyújt working példát**. Ezt a 8. lépés előtt javasolt kifejteni — vagy a `tier-2.html`-t átírni a fájl-szintű DataTable-re, vagy egy új mini-demo preview-t hozni „DataTable real organism contract"-tal.

### 6.2 Minor preview-megjegyzések

- A 6 darab UX-explorer preview (triagebar/adatlap-body/duplikáció/uj-bejelentés/kategóriák/felhasználók/csoportok/altalanos) **explicit nem importálja az organism-fájlokat** (0 organism-src) — szándékos, mert decision-vázlatok absztrakt mockokkal. ✅
- Az `index.html` (az ORGANISMS.md által ígért katalógus-belépő a preview-mappában) **nem létezik**. A Hub a belépőt biztosítja, de fejlesztő-átadáskor a preview-mappának saját TOC-ja hasznos lenne.
- A `tier-3.5-loading.html` és `tier-3.5-toast.html` Skel/Toast komponenseket inline definiál — szándékos cross-cutting-pattern-bemutató, organism-kiemelés nem indokolt egyelőre.

---

## 7. Hub-frissesség (`Urbino Manager.html`)

A Hub-fájl **2 generációval le van maradva**. A `<title>` és a meta dátum (2026.05.22) helyes, de a tartalom nem.

| Hub-állítás | Valóság |
|---|---|
| Hub `<p class="hub__lede">`: "Bejelentés-ág 4 iterációja és a Beállítás-ág 2 iterációja kész; jön a Beállítás-ág folytatása (A7 / A4 / A9)" | A Beállítás-ág **mind a 4** (A6+A7+A8+A9) kész, és a Riport-ág A4 is. **A teljes Tier-4 lefutott** — A5/A10/A11/A12 van hátra, ami screen-fázisra halasztott |
| `.status__badge` 7 + "Tier-4 folyamatban (6/8 iteráció kész)" | 9/9 iteráció kész |
| `.status__cta` → `tier-4-felhasznalok.html` ("Iter 6 záró") | A 9. (záró) iter `tier-4-dashboard.html` lenne |
| Plan-step #7 "Bejelentés-ág 4 + Beállítás-ág 2 = 6/8" | Plan-step #7-en a **9/9 iteráció kész**; D-10, D-11, D-12 hiányzik a hub plan-step szöveg-listából |
| Tier-4-előrehaladás tábla — Iter 7..9 sora "Tervezve" amber-tinted | Mind a 3 kész |
| Decision-log szekció — csak D-1..D-9 jelenik meg | A `DECISIONS.md` ténylegesen **D-1..D-12** |
| Files-szekció: "18 organism-fájl" + "16 fájl tier-0..3.5 + 12 tier-4 = 28" | **31 organism-fájl** + összesen **34 preview** (17 tier-0..3.5 + 17 tier-4) |

**Hatás.** A Hub a *belépő dokumentum* — egy új fejlesztő/auditáló rajta keresztül érti meg a státuszt. Stale állapotban félrevezet. A 8. lépés indítása előtt a Hub-fájl 3 szekciója (status, plan, Tier-4-tábla, decision-log, files) frissítendő.

---

## 8. Mock-data felépítés (`data/mock.js`)

A `window.MGR_MOCK` objektum jelenleg 5 felső-szintű kulcsot exportál:

```
MGR_MOCK = {
  tenant: { code, name, shortName, displayPrefix },
  currentUser: { id, name, initials, role, email },
  users: [{ id, name, initials, role, status }] × 5,
  navCounts: { bejelentesek, riportok },
  categories: { utak, kozter, vilagit, huladek, vesz, egyeb } × 6 fix kulcs,
  tickets: [{ id, num, title, category, priority, status, assignee, dueDate, createdAt, overdue, rejectionReason? }] × 12,
}
```

### 8.1 Megfigyelések

- A `tenant` és `currentUser` szerkezet **stabil** és minden organism konzisztensen olvassa (a `LeftNav` ezen át jeleníti meg a brand-block tenant-nevét és a footer-block aktuális felhasználóját).
- A `users` 5 rekorddal **alulméretezett** a Tier-4 prevhez. A `tier-4-felhasznalok.html` és `tier-4-csoportok.html` **saját ALL_USERS / USERS mock-objektumokat** definiál inline a fájlban (8 rekord, részben átfedő nevekkel). **Inconsistency.** A "Kovács Anna" rekord pl. a globális mock-ban `id: 2`, a `tier-4-csoportok` mock-ban `id: 1`. Ha a screen-fázisban a két screen átjárhat (felhasználó → csoport-tagság link), inconsistens.
- A `categories` 6 fix kulcsú objektum, **iconRef** mező nincs (a `category-tree-editor.jsx` az `iconGlyph`-on át vár stringet) — a kategória-organismek külön, fájl-szintű mock-objektumon dolgoznak (`tier-4-kategoriak.html` inline `CATEGORIES`-szal). Inconsistency.
- A `tickets` 12 rekord — a Tier-2 preview ezt etetésre használja, de a `priority` enum-érték (`Low`/`Normal`/`High`) **a `TriageBar` `PRIO_LABELS`-szel konzisztens**. ✅
- A `tickets`-en `displayId` mező nincs (csak `num`), de a `TicketMetaBar` `displayId`-t vár — a `tier-4-bejelentes-adatlap-fej.html` host összerakja (`ALM-1058`) — fine.
- **Hiányzó mock-családok a 8. lépéshez:**
  - `groups` (csoportlista — A7) — jelenleg csak inline a preview-ben
  - `recipients` (riport-címzettek — A5/A9) — uo.
  - `activityEvents` / `notes` (A1 body — naplók) — uo.
  - `similarTickets` (A3 — duplikáció-szűrő mock-adat) — uo.
  - `news`/`events`/`cityInfos` (A10/A11/A12)
  - `weeklyReports` (A5 archívum)

### 8.2 Hatás

A jelenlegi `mock.js` **csak az AppShell + Tier-2-listához ad valódi értéket**. A Tier-4 organismek mindegyike saját inline mock-tal él, ami:
- a fejlesztő-átadáskor decentralizált — a fejlesztő nem talál egy „kanonikus" mock-forrást;
- a screen-fázisban (8.) több screen ugyanazon az organismet fogyasztja, és vagy ugyanazt a mock-rekordot adja át (akkor centralizálni kell), vagy mindenki maga állítja elő (akkor a `mock.js` szerepe kérdéses).

A 8. lépés előtt érdemes egy döntést hozni: **(a)** mindent a `mock.js`-be centralizálni (A1..A12-höz teljes mock-szett), **(b)** vagy a `mock.js`-t demolda, és a preview-szinten élő dataset-konvencióra hagyatkozni. A jelenlegi köztes állapot inconsistency-forrás.

---

## Priorizált cleanup-task-lista a 8. lépés előtt

A taskokat 4 sávra bontva: **P0 = veszélyes, blokkoló**, **P1 = ajánlott (a fejlesztő-átadás miatt)**, **P2 = kozmetikai/doc**, **P3 = döntésre vár, nem mostani**.

### P0 — Veszélyes, mielőtt screen-mock indul

1. **`tier-2.html` ↔ `data-table.jsx` interface összeillesztése.**
   A Tier-2 preview saját inline DataTable-t használ `tickets` API-val, az organism-fájl `rows`+`columns`-szal. Vagy a preview-t átírni a fájl-szintű kontraktusra (column-render-pattern demonstrációval), vagy egy új mini-preview-t hozni („A1 Bejelentés-lista — real DataTable contract"), amit a 8. lépés első screen-mock-ja referál. Ha ez nincs, a fejlesztő nem tudja, melyik a kanonikus interface.

2. **`StatusTrack` + `WeeklyReportCard` kiemelése `organisms/`-ba.**
   Mindkettő inline él a `tier-3.html`-ben, és mindkettő több screen fogyasztója: `StatusTrack` az A1 adatlap-fej kötelező eleme, `WeeklyReportCard` az A4 dashboard + A5 archívum + A5 adatlap. A screen-mock első Bejelentés-adatlap-mock-ja az A1 fej inline `StatusTrack`-jét **nem fogja tudni közvetlenül használni** — vagy ki kell emelni, vagy újra-inline-olni screenként, ami DRY-szabálysértés.

### P1 — Ajánlott a fejlesztő-átadáshoz

3. **`_styles.css` duplikált blokkok eltávolítása.**
   A 4 duplikált család (`mgr-user-chip`, `mgr-settings-section`, `mgr-data-table`, `mgr-filter-pill-bar`) második blokkja eltávolítható; a dead-class-deklarációk (`__text`/`__role`, `__heading-block`/`__footer`, `__filters`) törlendők. Becsült méretcsökkenés: ~800-1000 sor.

4. **Hub frissítése (`Urbino Manager.html`).**
   - `.hub__lede` szöveg újraírása (9/9 iteráció kész).
   - `.status` blokk badge 7 → 8 (vagy „kész"), CTA → tier-4-dashboard.
   - Plan-step #7 szövege újraírni (mind 9 iteráció felsorolása).
   - Tier-4-tábla 7. (A7) + 8. (A9) + 9. (A4) sora amber → green.
   - Decision-log szekció kiegészítése D-10, D-11, D-12 entry-vel.
   - Files-szekció szám-mezői (organism db + preview db) frissíteni.

5. **`mock.js` konszolidációja vagy demolása.**
   Vagy felbővíteni a Tier-4 use-case-ekhez (groups/recipients/activities/notes/similar/news/events/cityInfos/weeklyReports szettekkel), vagy explicit elhagyni, és a 8. lépés screen-fájljait önálló mockokkal dolgozni. A jelenlegi „fele-fele" állapot a fejlesztő-átadásnál zavart kelt. Konkrét javaslat: **kibővíteni**, mert a screen-szintű kompozíciók is innen fognak válogatni.

6. **`ORGANISMS.md` frissítése a tényleges API-khoz.**
   A D-9..D-12 nyomán létrejött 8 új organism (`role-editor`, `user-invite-dialog`, `user-picker`, `group-member-list`, `tenant-info-form`, `logo-uploader`, `recipient-list` revízió, `kpi-card`+`team-performance-table` kiemelés) **és** a Tier-besorolás valós állapota (`MapWidget`, `LocationPicker`, `KpiCard`) frissítendő. A spec-szelídítések (`ConfirmDialog` plusz-propjai, `RecipientList` 10 propja) is bekerülnek.

### P2 — Kozmetikai, doc-szintű

7. **`_styles.css` header-komment** újraírása a tényleges 42 szekciós struktúrára (TOC + offset-jelzés).
8. **`iconGlyph` helper dokumentálása** — vagy önálló fájlba (`organisms/icon-glyph.js`), vagy ORGANISMS.md új szekció az `IconPicker` alatt.
9. **`preview/index.html`** TOC-belépő hozzáadása (nice-to-have a fejlesztő-átadáshoz; jelenleg a Hub elég).
10. **Stale említések a hubban / READMEban**: "kb. 25 organism" / "18 organism" mind frissíthető.

### P3 — Döntésre vár, nem mostani

11. **A10/A11/A12 Tier-4-iter dönés.** A Hub és D-12 záró bek. szerint ezek a screen-fázisban épülnek meg. Eldöntendő, hogy:
    - a `ContentEditor`/`RichTextEditor`/`CoverImageUploader`/`PublishStateChip` mind organism-fájlba kerül-e, vagy
    - a tartalom-ág screen-mock-ot már 8. lépés keretében finomítja a Tier-3-as inline-okból.
    Spec-szempontból FK-1 (`99_donesnaplo.md`) szerint a RichTextEditor mibenléte az A10 spec-fázisban dől el — a manager-system előzhet, ha pilot-felel a `<textarea>` fallback.

12. **`DateTimeRangePicker` (A11) + `LinkValidator` (A12) + `CoverImageUploader` (A10/A11)** — mindegyik még nem létezik, a screen-fázis vagy magában oldja, vagy egy „Iter 10" Tier-4-iterben kerülnek megépítésre. Most döntsünk: build-now (10. iter) vagy build-as-needed (screen-szinten).

13. **`tier-2.html` vagy organism-`DataTable` egységes use-case** — a 8. lépés első Bejelentés-lista screen-mock-ja várhatóan dönti el; jelenleg P0/1. tételben szerepel mint "ki kell tisztázni".

---

## Záró összegzés

**Erősségek.** A Tier-0..Tier-4 organism-réteg **funkcionálisan kész** az A1+A2+A3+A6+A7+A8+A9+A4 lefedéséhez. 12 UX-döntés (D-1..D-12) **mind tükrözve van a kódban** — a döntés→kód követés szinte hibátlan. A CSS-réteg token-tisztán épült, dead-CSS-en kívül magic-number nélkül.

**Gyengeségek.** A "lerakódott" inline organismek (`StatusTrack`, `WeeklyReportCard`, `ContentEditor`-család, `PhotoGallery`/`PhotoUploader`) a screen-fázis első tartalmi screenjén fognak fájdalmat okozni. A `data-table.jsx` ↔ `tier-2.html` interface-mismatch a Bejelentés-lista mock-jánál ugyanígy. A mock-decentralizáció (`mock.js` vs preview-onkénti inline) szétszórtság-érzetet ad.

**A 8. lépés akkor indítható**, ha legalább a **P0** táblázati 2 tétel le van kezelve (DataTable kanonikus contract + 2 organism kiemelése). A P1 (CSS-cleanup + Hub-frissítés + mock-konszolidáció + ORGANISMS.md update) ideálisan ugyanabban a tisztítási menetben, de hosszabb halasztás esetén sem blokkoló.
