@adia-ai/adia-ui-factory 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.claude-plugin/plugin.json +12 -3
  2. package/CHANGELOG.md +8 -0
  3. package/README.md +24 -1
  4. package/bin/adia-scaffold +93 -13
  5. package/package.json +2 -2
  6. package/references/shell-embed.md +10 -0
  7. package/references/spa-architecture.md +7 -0
  8. package/skills/adia-ui-kit/CHANGELOG.md +41 -0
  9. package/skills/adia-ui-kit/SKILL.md +442 -0
  10. package/skills/adia-ui-kit/assets/figma-make/guidelines/Guidelines.md +87 -0
  11. package/skills/adia-ui-kit/assets/figma-make/guidelines/components.md +142 -0
  12. package/skills/adia-ui-kit/assets/figma-make/guidelines/styles.md +118 -0
  13. package/skills/adia-ui-kit/assets/figma-make/guidelines/tokens.md +120 -0
  14. package/skills/adia-ui-kit/assets/team-scaffold/archive-README.md +30 -0
  15. package/skills/adia-ui-kit/assets/team-scaffold/drafts-README.md +57 -0
  16. package/skills/adia-ui-kit/assets/team-scaffold/inbox-README.md +76 -0
  17. package/skills/adia-ui-kit/assets/team-scaffold/outbox-README.md +46 -0
  18. package/skills/adia-ui-kit/assets/team-scaffold/team-root.README.md +51 -0
  19. package/skills/adia-ui-kit/assets/team-scaffold/tickets-README.md +208 -0
  20. package/skills/adia-ui-kit/assets/team-scaffold/tickets-REGISTRY.md +81 -0
  21. package/skills/adia-ui-kit/assets/templates/AGENTS.template.md +128 -0
  22. package/skills/adia-ui-kit/assets/templates/CLAUDE.template.md +1 -0
  23. package/skills/adia-ui-kit/assets/templates/FEEDBACK-OMISSIONS-DEFENSE.template.md +150 -0
  24. package/skills/adia-ui-kit/assets/templates/FEEDBACK.template.md +213 -0
  25. package/skills/adia-ui-kit/assets/templates/RESPONSE.template.md +114 -0
  26. package/skills/adia-ui-kit/assets/templates/figma-make-guidelines.md +90 -0
  27. package/skills/adia-ui-kit/evals/adversarial-content-trust.json +83 -0
  28. package/skills/adia-ui-kit/evals/evals.json +55 -0
  29. package/skills/adia-ui-kit/evals/routing-corpus.json +121 -0
  30. package/skills/adia-ui-kit/evals/teach-routing-cases.json +92 -0
  31. package/skills/adia-ui-kit/references/capabilities.md +245 -0
  32. package/skills/adia-ui-kit/references/catalog-lookup.md +186 -0
  33. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v1.md +8 -0
  34. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v2.md +3585 -0
  35. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v3.md +1899 -0
  36. package/skills/adia-ui-kit/references/common-gotchas-consumer.md +522 -0
  37. package/skills/adia-ui-kit/references/component-literacy.md +291 -0
  38. package/skills/adia-ui-kit/references/composition.md +245 -0
  39. package/skills/adia-ui-kit/references/correction-loop.md +462 -0
  40. package/skills/adia-ui-kit/references/css-policy.md +343 -0
  41. package/skills/adia-ui-kit/references/decision-model.md +158 -0
  42. package/skills/adia-ui-kit/references/diagnostic-output.md +57 -0
  43. package/skills/adia-ui-kit/references/docs-catalog.md +239 -0
  44. package/skills/adia-ui-kit/references/exclusions.md +225 -0
  45. package/skills/adia-ui-kit/references/feedback-authoring.md +466 -0
  46. package/skills/adia-ui-kit/references/figma-make.md +244 -0
  47. package/skills/adia-ui-kit/references/flows-auth.md +307 -0
  48. package/skills/adia-ui-kit/references/flows-content.md +206 -0
  49. package/skills/adia-ui-kit/references/flows-data.md +348 -0
  50. package/skills/adia-ui-kit/references/flows-interaction.md +181 -0
  51. package/skills/adia-ui-kit/references/flows-shells.md +336 -0
  52. package/skills/adia-ui-kit/references/gap-detection.md +266 -0
  53. package/skills/adia-ui-kit/references/harness.md +284 -0
  54. package/skills/adia-ui-kit/references/loading-protocol.md +406 -0
  55. package/skills/adia-ui-kit/references/local-link.md +198 -0
  56. package/skills/adia-ui-kit/references/mcp.md +401 -0
  57. package/skills/adia-ui-kit/references/migration.md +116 -0
  58. package/skills/adia-ui-kit/references/mission.md +194 -0
  59. package/skills/adia-ui-kit/references/mode-routing.md +298 -0
  60. package/skills/adia-ui-kit/references/patterns-agent.md +223 -0
  61. package/skills/adia-ui-kit/references/patterns-data.md +1066 -0
  62. package/skills/adia-ui-kit/references/patterns-forms.md +223 -0
  63. package/skills/adia-ui-kit/references/patterns-layout.md +326 -0
  64. package/skills/adia-ui-kit/references/patterns-recipes.md +1416 -0
  65. package/skills/adia-ui-kit/references/patterns-shells.md +1097 -0
  66. package/skills/adia-ui-kit/references/patterns-traits.md +259 -0
  67. package/skills/adia-ui-kit/references/patterns-wiring.md +339 -0
  68. package/skills/adia-ui-kit/references/pev-rationale.md +137 -0
  69. package/skills/adia-ui-kit/references/reasoning-gate.md +146 -0
  70. package/skills/adia-ui-kit/references/reasoning-methodologies.md +112 -0
  71. package/skills/adia-ui-kit/references/recon.md +192 -0
  72. package/skills/adia-ui-kit/references/rendering-model.md +431 -0
  73. package/skills/adia-ui-kit/references/response-authoring.md +398 -0
  74. package/skills/adia-ui-kit/references/session-log-schema.md +203 -0
  75. package/skills/adia-ui-kit/references/session-log-template.md +118 -0
  76. package/skills/adia-ui-kit/references/setup.md +652 -0
  77. package/skills/adia-ui-kit/references/skill-hygiene.md +135 -0
  78. package/skills/adia-ui-kit/references/spec-to-ui-reasoning.md +394 -0
  79. package/skills/adia-ui-kit/references/state.md +229 -0
  80. package/skills/adia-ui-kit/references/teach-protocol.md +421 -0
  81. package/skills/adia-ui-kit/references/theme.md +142 -0
  82. package/skills/adia-ui-kit/references/version-check.md +69 -0
  83. package/skills/adia-ui-kit/scripts/audit-decision-trace.mjs +198 -0
  84. package/skills/adia-ui-kit/scripts/audit-kit-roster.mjs +366 -0
  85. package/skills/adia-ui-kit/scripts/changelog-archive.mjs +126 -0
  86. package/skills/adia-ui-kit/scripts/check-adia-versions.py +404 -0
  87. package/skills/adia-ui-kit/scripts/run-skill-evals.mjs +358 -0
  88. package/skills/adia-ui-kit/scripts/validate-session-log.mjs +242 -0
  89. package/skills/adia-ui-kit/skill.json +102 -0
  90. package/skills/adia-ui-migration/CHANGELOG.md +47 -0
  91. package/skills/adia-ui-migration/SKILL.md +381 -0
  92. package/skills/adia-ui-migration/skill.json +29 -0
  93. package/skills/adia-ui-spa/SKILL.md +1 -1
  94. package/skills/adia-ui-verify/SKILL.md +2 -2
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: skill-hygiene
3
+ load-when: Maintaining the skill's own structural integrity — token economy, capability-menu drift, cold-start path weight, reference graph audit
4
+ load-size-tokens: ~2,000
5
+ required-for:
6
+ - Teach landings
7
+ - periodic hygiene cuts
8
+ - audit-skill-hygiene.mjs failure triage
9
+ ---
10
+
11
+ # §SkillHygiene — Token / structure / drift discipline for THIS skill
12
+
13
+ This section is the meta-discipline that keeps THIS skill healthy. It
14
+ mirrors §DiagnosticOutput's posture, but turned inward: the skill is
15
+ the substrate, the agent loading it is the consumer, and "hygiene"
16
+ means keeping the load cost honest as the skill grows.
17
+
18
+ A skill is **procedural memory loaded into agent context on demand**.
19
+ Three irreducible mechanics gate its usefulness:
20
+
21
+ 1. **Token cost** — every byte enters context at retrieval time. At
22
+ ~78K tokens, the skill consumes ~40% of a 200K context window
23
+ *before the agent does any work*.
24
+ 2. **Retrieval cost** — bigger skills are harder to navigate; the
25
+ agent risks missing or mis-loading the right section.
26
+ 3. **Maintenance cost** — each section must stay correct as the
27
+ substrate evolves. Drift compounds with section count.
28
+
29
+ Hygiene is the practice of paying those three costs honestly.
30
+
31
+ ### The eight hygiene axes
32
+
33
+ Each axis has a measure, a threshold, and a remediation shape. Run
34
+ `npm run audit:skill-hygiene` (or `node scripts/skills/audit-skill-hygiene.mjs <skill>`)
35
+ to get the mechanical report.
36
+
37
+ | # | Axis | What it measures | Soft threshold | Remediation if breached |
38
+ |---|---|---|---|---|
39
+ | 1 | **Token economy** | Total bytes / approx tokens | warn ≥ 250K chars (~62K tokens); error ≥ 350K (~87K) | Split section out to `references/`; archive historical content; demote inline detail to citation |
40
+ | 2 | **Structural integrity** | H2/H3 headings inside fenced code blocks; broken anchor refs | 0 unintentional fence-leaks | Ensure template-blocks don't shadow real sections; check-links covers anchor refs |
41
+ | 3 | **Content currency** | Version-reference distribution; ticket-ref staleness | Most-cited version within 2 minor versions of latest cited | Re-grep examples against current substrate; update or archive stale references |
42
+ | 4 | **Reference graph** | §-section cross-refs vs orphan definitions | 0 orphan definitions; ratio refs/def ≥ 2 | Either reference an orphan from somewhere, or fold it into a referenced section |
43
+ | 5 | **Cut velocity** | Versions shipped per day | warn > 5 cuts/day | Pause + dogfood pass; high churn = risk of unvalidated content (per the FB-37 §399 lesson) |
44
+ | 6 | **Inline vs reference economy** | Code-block density vs repo-path citations | Subjective; flag if code-blocks dominate without grounding | When teaching a recipe, cite the canonical demo URL rather than inlining a 50-LOC block |
45
+ | 7 | **Capability menu drift** | Items in on-load capability menu vs H2 section count | drift ≤ 5 | Menu is the cold-start surface; if it's wrong, agents don't reach 80% of the skill |
46
+ | 8 | **Cold-start path weight** | First 5 H2 sections' total chars | warn > 30K | The first 5 sections decide the agent's mental model. Heavy cold-start = expensive first-token-cost. |
47
+
48
+ ### When to run
49
+
50
+ - **Before any MINOR cut** (`vN.M.0` bump). The MINOR-bump checkpoint
51
+ is the right place — patches can land quickly, but a minor cut is
52
+ the moment to ask "is the skill healthier after this than before?"
53
+ - **Weekly during high-churn arcs.** The §399 lesson: 16 cuts in one
54
+ day produced one validated misdiagnosis (FB-37). Velocity is itself
55
+ a hygiene signal.
56
+ - **After any §CorrectionLoop session that rewrites a section.** The
57
+ rewrite may have grown the section; audit it specifically.
58
+ - **Cold-start of a long-running session.** A 78K-token skill is a
59
+ budget decision; know the cost before committing.
60
+
61
+ ### Discipline rules
62
+
63
+ 1. **Audit is a *report*, not a *gate*.** `audit:skill-hygiene` exits 0
64
+ by default even with findings. Use `--strict` to fail in CI, but the
65
+ default posture is informational. Skills grow during arcs; the audit
66
+ tells the operator when growth has crossed into health-debt.
67
+ 2. **Findings rank by leverage, not severity.** "Token economy +30%
68
+ over threshold" is high-leverage because it affects every agent that
69
+ loads the skill. "1 orphan §-ref" is low-leverage because nobody
70
+ loses anything. Prioritize accordingly.
71
+ 3. **Soft thresholds are calibrated, not absolute.** The current
72
+ thresholds (in `audit-skill-hygiene.mjs:THRESHOLDS`) reflect the
73
+ current corpus of 16 skills. Re-calibrate when the corpus shifts.
74
+ 4. **A finding without a remediation is debt, not feedback.** When the
75
+ audit flags something, EITHER fix it OR write a journal-section
76
+ defending the carve-out. Standing findings rot into background
77
+ noise.
78
+ 5. **Hygiene cuts are PATCH-level (vN.M.x).** Pure reorganization,
79
+ citation strengthening, or content archival. New sections or
80
+ substantive content adds are MINOR (vN.M+1.0). Don't bundle them.
81
+
82
+ ### Anti-patterns
83
+
84
+ - **The "everything in one file" anti-pattern.** A 78K-token monolithic
85
+ SKILL.md is the easy default — every new section appends. Better:
86
+ the bulk of detail lives in `references/<topic>.md` files that the
87
+ agent loads on demand via `skill_view(name, file_path)`. SKILL.md
88
+ itself stays focused on the procedural spine.
89
+ - **The "historical commentary inline" anti-pattern.** Every cut adds
90
+ a callout: "v0.6.18's FB-10 was a real example…" These age into
91
+ archaeology. After a few months, move them to `references/changelog-
92
+ archaeology.md` or delete them.
93
+ - **The "demonstration-by-inline-recipe" anti-pattern.** A 100-LOC
94
+ HTML block teaches a pattern but consumes 1000 tokens per load.
95
+ Better: cite the canonical demo URL + show only the 5-line
96
+ decision skeleton inline. The agent fetches the URL if it needs
97
+ the full thing.
98
+ - **The "soft-warning bloat" anti-pattern.** Adding every dogfood
99
+ finding as a Pitfalls-section bullet or inline callout. Findings
100
+ should distill into *rules* or *examples*; raw findings belong in
101
+ journal entries.
102
+ - **The "promotion without demotion" anti-pattern.** New section
103
+ added, old section unchanged. Skills must lose mass as they gain
104
+ it, or token economy degrades monotonically.
105
+
106
+ ### The hygiene cut shape
107
+
108
+ A canonical `vN.M.x` hygiene cut:
109
+
110
+ ```
111
+ - Single PATCH-level bump (no new sections; pure cleanup).
112
+ - 0+ sections archived to references/ (with cross-link kept).
113
+ - 0+ inline recipes demoted to citation-only.
114
+ - 0+ stale version refs updated or removed.
115
+ - 0 substrate changes (skill-only).
116
+ - CHANGELOG entry titled "<axis>: <finding> resolved" or similar.
117
+ - audit:skill-hygiene before + after numbers in the CHANGELOG.
118
+ ```
119
+
120
+ Example commit subject: `skill(adia-ui-kit): v2.18.2 — hygiene pass
121
+ (token economy: 78K → 65K tokens via reference extraction)`
122
+
123
+ ### Cross-references
124
+
125
+ - `scripts/skills/audit-skill-hygiene.mjs` — the mechanical audit.
126
+ - `scripts/skills/check-skill-patterns-sot.mjs` — the trip-wire for
127
+ §Patterns citation drift (a hygiene-axis-3 prevention gate).
128
+ - §DiagnosticOutput — same posture, applied to consumer repos
129
+ instead of to this skill. The two sections cross-validate:
130
+ hygiene-against-self is consultant-against-others.
131
+ - Journal §399 — the FB-37 arc that surfaced cut-velocity as a
132
+ hygiene axis (16 cuts shipped today, one false-positive ticket
133
+ among them).
134
+
135
+ ---
@@ -0,0 +1,394 @@
1
+ ---
2
+ name: spec-to-ui-reasoning
3
+ load-when: User input is a PRD, spec, mockup, schema, role/user-story, feature list, or component request — i.e., any UI composition prompt that arrives BEFORE the AdiaUI primitive vocabulary is in scope. The pre-composition reasoning gate.
4
+ load-size-tokens: ~3,200
5
+ required-for:
6
+ - Mode 1-4 composition when input is PRD / spec / unstructured product intent
7
+ - §SpecToUi (kit mode 15) — pre-composition reasoning gate
8
+ - Any composition where the user has not yet named the primitives or surface shape
9
+ companion-rubric: "agents-ux-wireframing-ascii (in core-skills-best-practices)"
10
+ companion-skill: "ref-gen-ui-systems (the 19-rung Reasoning Ladder)"
11
+ ---
12
+
13
+ # Spec-to-UI Reasoning — Pre-Composition Gate for Kit Modes 1-4
14
+
15
+ > **The kit's central pre-composition pitfall:** an agent reads a PRD or spec, recognizes a few keywords ("dashboard," "settings," "triage"), and jumps directly to AdiaUI primitive vocabulary — `<admin-shell>` + `<table-ui>` + `<filter-bar-ui>`. That is **AP-01 Premature Rendering** (canonical Reasoning Ladder anti-pattern). Components emitted before intent, domain, role, task, and decision have been resolved are structurally suspect — they are pattern-matched from prompt vocabulary, not derived from user need.
16
+
17
+ This reference is the kit's **Mode 1-4 specific operationalization** of two canonical specs:
18
+
19
+ 1. **The 19-rung Generative UI Reasoning Ladder** — authored at `~/.claude/skills/ref-gen-ui-systems/references/reasoning-ladder.md`. Defines the pipeline `InputContext → Intent → Domain → Role → Task → Decision → ExperiencePosture → InformationArchitecture → AppShell → Navigation → Surface → View → Section → Component → DataBinding → Interaction → State → Feedback → RenderPlan → Validation`.
20
+
21
+ 2. **The agents-ux-wireframing-ascii rubric** — authored at `~/.claude/skills/core-skills-best-practices/references/agents-ux-wireframing-ascii.md`. Defines the 5 wireframe levels, 10 scoring dimensions, canonical notation grammar, and 10 anti-patterns specific to the wireframing discipline boundary.
22
+
23
+ This reference does NOT duplicate those specs. It cites them as authoritative, then adds **kit-specific extensions** the canonical specs do not cover.
24
+
25
+ ---
26
+
27
+ ## §When to load this reference
28
+
29
+ Trigger phrases that fire §SpecToUi mode (kit mode 15):
30
+
31
+ - **PRD / spec input**: "build a Y based on this PRD", "the spec says...", "we have a product brief that requires...", "here's the design doc"
32
+ - **Vague brief**: "build a dashboard for X", "we need a Y interface", "users should be able to..."
33
+ - **Mockup input**: "match this Figma", "convert this wireframe", "here's a screenshot"
34
+ - **Schema input**: "given this data model, build UI for it", "we have these tables/entities"
35
+ - **Role / user story input**: "as a sales manager I want...", "the user is a manager who needs to..."
36
+ - **Feature list input**: "the screen has feature A, feature B, feature C"
37
+ - **Component request input**: "add a table here" (only when upstream reasoning has not been resolved)
38
+
39
+ If the user has already produced or signed off on a wireframe / decision spec / domain model, **skip this reference** and proceed to §0 (Reasoning Gate) + §1 (Catalog Lookup). The kit's existing pipeline starts at Rung 6 (ExperiencePosture); this reference covers Rungs 0-5 + the wireframe checkpoint between Rungs 5 and 13.
40
+
41
+ ---
42
+
43
+ ## §The pipeline (canonical, with kit anchors)
44
+
45
+ ```
46
+ Tier 0: Foundation
47
+ Rung 0 InputContext — Annotate raw input: known / inferred / missing / assumptions
48
+ Rung 1 Intent — userGoal · businessGoal · operationalGoal · successCriteria · failureModes · scope
49
+
50
+ Tier 1: Domain Reasoning
51
+ Rung 2 Domain — Entities · relationships · metrics · events · permissions · freshness
52
+ Rung 3 Role — uiDifferentiators (non-empty per role when multiple roles exist)
53
+ Rung 4 Task — requiredInformation per task; tasks are NOT features
54
+ Rung 5 Decision — requiredSignals + possibleActions (both non-empty for critical decisions)
55
+
56
+ ↓ WIREFRAME CHECKPOINT (load agents-ux-wireframing-ascii rubric) ↓
57
+ Tier 2 + Tier 3 produce a wireframe artifact scored against the rubric's 10 dimensions.
58
+ Skipping this checkpoint = AP-01 Premature Rendering at the protocol level.
59
+
60
+ Tier 2: Structure [Region + Interaction wireframes]
61
+ Rung 6 ExperiencePosture — Maps to AdiaUI shell selection (table below)
62
+ Rung 7 InformationArchitecture — Derived from tasks, not entities
63
+ Rung 8 AppShell — Selected from posture + IA (admin-shell / chat-shell / editor-shell / simple-shell)
64
+ Rung 9 Navigation — Role-scoped; primary / secondary / contextual
65
+
66
+ Tier 3: Surface Design [State + Responsive wireframes]
67
+ Rung 10 Surface — page / panel / drawer / modal / popover / card / toast / command-menu
68
+ Rung 11 View — Route-level composition of sections
69
+ Rung 12 Section — Semantic group; requires taskIds OR decisionIds
70
+
71
+ ↓ WIREFRAME OUTPUT CONTRACT (rubric Dimensions 1-5 are [gate]) ↓
72
+ Region layout + ownership + state coverage + responsive behavior produced
73
+ as a wireframe artifact BEFORE proceeding to primitive selection.
74
+
75
+ Tier 4: Operational Model — kit's §0 + §1 + §2 + §3 take over from here
76
+ Rung 13 Component → kit §1 Catalog Lookup + §2 Composition
77
+ Rung 14 DataBinding → kit §State (references/state.md)
78
+ Rung 15 Interaction → kit §2 Composition (actions, error paths)
79
+ Rung 16 State → kit §State (signals, controllers)
80
+ Rung 17 Feedback → kit §3 Validation (loading/empty/error per data-driven component)
81
+
82
+ Tier 5: Output
83
+ Rung 18 RenderPlan → kit §2 Composition output
84
+ Rung 19 Validation → kit §3 Validation + §PEV verify-target table
85
+ ```
86
+
87
+ **Full procedure for Rungs 0-12** — see [`~/.claude/skills/ref-gen-ui-systems/references/reasoning-ladder.md`](../../../../.claude/skills/ref-gen-ui-systems/references/reasoning-ladder.md). The rest of THIS reference covers the kit-specific mappings the canonical spec does not provide.
88
+
89
+ ---
90
+
91
+ ## §Kit-specific mapping: Shell ↔ ExperiencePosture (Rung 6 → Rung 8)
92
+
93
+ The canonical Rung 6 (ExperiencePosture) defines 8 postures. AdiaUI's 4 substrate shells map onto them as follows:
94
+
95
+ | Rung 6 Posture | Primary AdiaUI Shell | Secondary fit | Why |
96
+ |---|---|---|---|
97
+ | **monitoring** | `<admin-shell>` (sidebar + content + statusbar) | `<simple-shell>` for single-surface monitoring | Statusbar carries freshness indicators; sidebar groups areas |
98
+ | **acting** | `<admin-shell>` (queues in page-body) | `<editor-shell>` (when actions are content-editing) | Page-body holds queues + bulk-action toolbars |
99
+ | **analyzing** | `<admin-shell>` (charts + drilldowns) | `<editor-shell>` for canvas-style analysis | Reading-column rhythm via `<section-ui>` works for charts; full-bleed via `[data-full-bleed]` for canvas |
100
+ | **configuring** | `<admin-shell>` (forms in page-body) | `<simple-shell>` for one-page settings | `<section-ui>` reading-column + `<field-ui>` grouping |
101
+ | **creating** | `<editor-shell>` (canvas + toolbar + inspector) | `<chat-shell>` for AI-assisted creation | Editor toolbar + sidebar inspector + canvas |
102
+ | **reviewing** | `<editor-shell>` (diff/approve canvas) | `<admin-shell>` (review queue + detail panel) | Diff surface + history sidebar |
103
+ | **debugging** | `<editor-shell>` (logs/inspector canvas) | `<admin-shell>` (log queue + detail) | Inspector pattern + filterable log surface |
104
+ | **exploring** | `<chat-shell>` (search + thread) | `<simple-shell>` for browse-without-chat | Thread surface for discovery + search input |
105
+
106
+ **Multi-posture products** (monitoring + acting + analyzing combined): default to `<admin-shell>` and lean on sub-shells (`<editor-shell>` for nested creation/review surfaces).
107
+
108
+ **Mistake**: choosing a shell from the prompt's keyword instead of the user's posture. "Dashboard" prompts often imply `<admin-shell>` but a single-screen KPI summary is `<simple-shell>`.
109
+
110
+ ---
111
+
112
+ ## §Kit-specific mapping: Decision ↔ Primitive (Rung 5 → Rung 13)
113
+
114
+ When Rung 5 (Decision) is resolved, the canonical decision shape maps onto AdiaUI primitives:
115
+
116
+ | Decision type | requiredSignals shape | possibleActions shape | Primary primitive | Verify-target |
117
+ |---|---|---|---|---|
118
+ | **Triage** ("which X needs action now?") | Priority field + deadline field + assignment field | assign / open detail / mark resolved | `<table-ui>` + `<row-ui>` + `<button-ui>` action menu | Row click → drawer/modal; bulk-action toolbar via `<table-toolbar-ui>` |
119
+ | **Comparison** ("which X is best for Y?") | Multi-axis metric set | select / drill / save | `<table-ui>` (sortable) OR `<grid-ui>` of `<card-ui>` | Sort affordances + selection state |
120
+ | **Status check** ("is X healthy?") | Aggregate metric + freshness | drill / acknowledge / alert | `<stat-ui>` + `<chart-ui>` + `<badge-ui>` | Statusbar + page-header alert region |
121
+ | **Drilldown** ("why is X like this?") | Detail entity + related history | open / annotate / link | `<drawer-ui>` OR `<panel-ui>` + `<list-ui>` history | Drawer auto-managed via MutationObserver |
122
+ | **Assignment** ("who should do X?") | Owner candidates + load + skill | assign / reassign / unassign | `<combobox-ui>` + `<avatar-ui>` candidates | Optimistic update + rollback path |
123
+ | **Creation** ("make a new Y") | Required-field set + validation rules | submit / save-draft / cancel | `<form>` + `<field-ui>` + `<button-ui>` | Validation states + error path per `<field-ui>` |
124
+ | **Configuration** ("set behavior for Z") | Setting set + scopes + permissions | save / reset / preview | `<settings-page>` shell + `<field-ui>` groups | Section-ui rhythm + dirty-state tracking |
125
+ | **Authentication / identity** ("who am I?") | Credential set + factor | sign-in / sign-up / reset | `<auth-card-ui>` + `<field-ui>` + `<otp-input-ui>` | Per-flow path; see `references/flows-auth.md` |
126
+
127
+ **Mistake**: choosing a primitive from the user's vocabulary ("they said table, so I'll use `<table-ui>`") instead of from the decision shape. A "list of things to look at" can be `<table-ui>`, `<grid-ui>` of `<card-ui>`, OR `<list-ui>` — the choice depends on whether the decision is triage (sort by priority), comparison (multi-axis), or browse (no triage).
128
+
129
+ ---
130
+
131
+ ## §Wireframe checkpoint — what to produce before primitive selection
132
+
133
+ > **Wireframes contain semantic labels, NOT AdiaUI primitive vocabulary.** A wireframe with `<admin-shell>`, `<table-ui>`, or `<card-ui>` inside its boxes is collapsing Rung 8 (AppShell) + Rung 13 (Component) into a single artifact — that's AP-07 (Component collapse too early) per the canonical rubric. The wireframe is a **pre-component** structural reasoning artifact: regions, ownership, state, responsive behavior. Primitive selection happens AFTER the wireframe is scored, at Rung 13 (kit §1 Catalog Lookup).
134
+
135
+ ### What goes INSIDE a wireframe
136
+
137
+ Use the **rubric's canonical notation grammar** (text-native, line-based, diffable):
138
+
139
+ ```txt
140
+ +-----+ persistent region Semantic labels only:
141
+ | | "Header" "Sidebar" "Main"
142
+ +-----+ "Lead Queue" "KPI Strip"
143
+ "Filter Panel" "Inspector"
144
+ [Control] interactive control
145
+ {State} data/state surface Annotations only:
146
+ <Section> semantic component (NOT AdiaUI tag) [owns: scroll]
147
+ [state: local]
148
+ → transition or flow {loading} {empty} {error}
149
+ ↓ focus/flow descent [collapse: narrow]
150
+ ... repeated content ! risk: <description>
151
+ / responsive alternative
152
+ ! risk or unresolved issue
153
+ ```
154
+
155
+ ### What stays OUT of a wireframe
156
+
157
+ Wireframes never contain:
158
+
159
+ - **AdiaUI tag names** — `<admin-shell>`, `<table-ui>`, `<card-ui>`, `<button-ui>` are Rung 13 vocabulary. Use semantic labels: "App shell," "Lead queue," "Filter panel," "Action."
160
+ - **HTML markup** — no `<div>`, `<section>`, `<form>`, no attributes, no nesting syntax. Wireframes are layout AST in ASCII, not markup.
161
+ - **CSS / styling decisions** — no colors, typography, spacing tokens, brand expression, animation. Those are Tier 5 (RenderPlan) decisions; smuggling them collapses reasoning layers.
162
+ - **Final density / pixel measurements** — coarse spatial relationships only. Visual fidelity is design-tier work, not wireframe-tier.
163
+
164
+ A wireframe that contains any of the above is no longer a wireframe — it's a partial composition pretending to be one. That's AP-08 (Prose pretending to be wireframe) at the kit-protocol level.
165
+
166
+ ### CORRECT vs INCORRECT — minimal worked example
167
+
168
+ **CORRECT** (semantic labels, ownership annotations, state coverage):
169
+
170
+ ```txt
171
+ +--------------------------------------------------+
172
+ | Header: product · search · user menu |
173
+ +----------+---------------------------------------+
174
+ | Sidebar | Main [scroll: page] [owns: route] |
175
+ | - Inbox | +----------------+ +-----------------+|
176
+ | - Reports| | KPI Summary | | SLA Risk ||
177
+ | | +----------------+ +-----------------+|
178
+ | | +----------------------------------+ |
179
+ | | | Lead Queue [owns: selection] | |
180
+ | | | [Filter] [Sort] [Bulk Action] | |
181
+ | | | Row · Row · Row | |
182
+ | | | {empty} "No leads match filters" | |
183
+ | | | {error} "Could not load leads" | |
184
+ | | +----------------------------------+ |
185
+ +----------+---------------------------------------+
186
+
187
+ ! unresolved: should filter panel persist on tablet?
188
+ ```
189
+
190
+ **INCORRECT** (AdiaUI tag vocabulary leaking into the wireframe — premature component collapse):
191
+
192
+ ```txt
193
+ <admin-shell> ← AP-07: Rung 8 vocab in wireframe
194
+ <admin-sidebar> ← AP-07: composing instead of regioning
195
+ <nav-item-ui>Inbox</nav-item-ui> ← AP-07: Rung 13 primitive in wireframe
196
+ </admin-sidebar>
197
+ <admin-content>
198
+ <table-ui rows="..."> ← AP-07: Rung 13 primitive selected without scoring
199
+ <table-toolbar-ui>...</table-toolbar-ui>
200
+ </table-ui>
201
+ </admin-content>
202
+ </admin-shell>
203
+ ```
204
+
205
+ The second form skips the wireframe checkpoint entirely — it's a half-rendered composition, not a structural reasoning artifact. Score the first against the 6 [gate] rubric dimensions; if all ≥ 3/5, THEN proceed to Rung 13 (kit §1 Catalog Lookup) to convert semantic labels into AdiaUI primitives.
206
+
207
+ ### The 5 wireframe levels
208
+
209
+ Before any AdiaUI primitive enters the composition, produce a wireframe artifact scored against the **agents-ux-wireframing-ascii rubric**. The rubric's 5 levels:
210
+
211
+ | Level | When required | Output (semantic, no AdiaUI tags) |
212
+ |---|---|---|
213
+ | **Region** | Every Mode 1-4 composition with a shell/multi-area surface | ASCII layout: persistent regions ("Header" / "Sidebar" / "Main" / "Statusbar") + page-local regions + primary actions + scroll ownership. Semantic labels only. |
214
+ | **Interaction** | Compositions with flows, modals, drawers, command palettes, state transitions | ASCII flow: triggers, transitions, focus movement, dismissal behavior. Use `→` / `↓` / `[Control]` / `{State}`. |
215
+ | **State** | Every data-driven region (tables, charts, lists, forms) | Default + `{loading}` + `{empty}` + `{error}` variants minimum |
216
+ | **Responsive** | Compositions with shells (admin / editor / chat — they collapse non-trivially) | WIDE / MEDIUM / NARROW variants showing what persists / collapses / becomes sheet/modal |
217
+ | **Component** | Compositions handed off to multi-agent implementation OR composed of nested composites | Semantic component tree with `[owns: ...]` annotations. STILL semantic labels (`<LeadQueue owns="selection">`), NOT AdiaUI tags. AdiaUI primitive mapping happens after this level, at Rung 13. |
218
+
219
+ **Minimum bar for Mode 1-4 composition**: Region + State levels. Add Interaction when the composition includes modals/drawers/command palettes. Add Responsive when shells are involved. Add Component when handing off to nested composite authoring.
220
+
221
+ ### Rubric's 6 gate dimensions
222
+
223
+ All must be ≥ 3/5 before primitive emission ([gate] = mechanically checkable):
224
+
225
+ - **D1** — Intent-to-structure traceability (every region traces to task/decision/data-group/action-group)
226
+ - **D2** — Structural hierarchy clarity (containment unambiguous; component tree derivable)
227
+ - **D3** — Interaction ownership (focus / selection / dismissal / mutation owners explicit)
228
+ - **D4** — State coverage (loading + empty + error per data-driven region minimum)
229
+ - **D5** — Responsive decomposition (wide / medium / narrow OR explicit out-of-scope marker)
230
+ - **D9** — Reviewability and diffability (text-native, line-based, diffable — not images, not markup)
231
+
232
+ ### Rubric's 4 review dimensions
233
+
234
+ Score for context but do not block ([review] = judgment-based):
235
+
236
+ - **D6** — Density and information priority
237
+ - **D7** — Semantic component mapping
238
+ - **D8** — Annotation discipline
239
+ - **D10** — Appropriate fidelity (smaller wireframes for smaller tasks)
240
+
241
+ **Full rubric** — see [`~/.claude/skills/core-skills-best-practices/references/agents-ux-wireframing-ascii.md`](../../../../.claude/skills/core-skills-best-practices/references/agents-ux-wireframing-ascii.md). Includes full notation grammar, per-level worked examples, all 10 rubric anti-patterns, and 7-phase operating procedure.
242
+
243
+ ### Level-boundary discipline (load-bearing — easy to violate)
244
+
245
+ The rubric's 5 wireframe levels are NOT interchangeable. Each uses different notation. The most common protocol-execution failure is **embedding implementation tags inside Level 1 region boxes** — see KP-04 below for the kit-specific anti-pattern. Sister skill `adia-ui-authoring` v1.7.1+ ships the same level-boundary discipline at its §Phase 2.5 (composite-demo authoring).
246
+
247
+ **Per-level notation reference** (what goes inside boxes at each level):
248
+
249
+ | Level | Box content uses | Examples |
250
+ |---|---|---|
251
+ | 1 Region | Semantic labels for what the region IS | "Plan card", "KPI strip", "Dunning banner", "Lead Queue", "Filter Panel" |
252
+ | 2 Interaction | Arrows + semantic labels | `[Search Input] → focus → Command Menu` |
253
+ | 3 State | Semantic labels per state | `DEFAULT` / `EMPTY` / `ERROR` headings with regions described semantically |
254
+ | 4 Responsive | Semantic labels per breakpoint | `WIDE` / `MEDIUM` / `NARROW` with what collapses/stacks |
255
+ | 5 Semantic Component | `<Thing>` tree form (separate artifact below Level 1) | Tree of named semantic components with ownership annotations |
256
+
257
+ **Annotations consistent across levels:** `[owns: ...]`, `[Control]`, `{State}`, `[trigger: ...]`, `[commit: ...]`, `!` unresolved.
258
+
259
+ **Level 5 separation rule:** the Level 5 semantic-component tree is a **SEPARATE artifact below the Level 1 region wireframe**, NOT embedded inside Level 1 boxes. Smuggling `<Thing>` syntax into Level 1 boxes collapses the reasoning prematurely AND makes the Level 1 wireframe unreadable for operator review who doesn't know the design system's tag names.
260
+
261
+ ### Literacy gate precondition (NEW in kit v3.7.0)
262
+
263
+ When the wireframe checkpoint passes (all 6 [gate] dimensions ≥ 3/5) and the task targets the `nailed` tier of kit §PEV verify, **the next step is the literacy gate, NOT immediate primitive selection.** Load [`component-literacy.md`](component-literacy.md) before kit §1 Catalog Lookup.
264
+
265
+ The literacy gate fires in conjunction with primitive selection — it forces a CSS read for each primitive AND each embedded composite BEFORE locking the selection. Sister skill `adia-ui-authoring` v1.8.0 ships the same gate as §Phase 2.5a. The artifact (`<task>.preflight.yaml`) is required for `nailed` tier of kit §PEV; optional for `structurally-verified-only`. The CSS-illiteracy postmortem (`.brain/postmortems/2026-05-24-component-css-illiteracy.md`) is the load-bearing rationale.
266
+
267
+ ---
268
+
269
+ ## §Entry-point patterns — where does the user's input enter the ladder?
270
+
271
+ The canonical `entry-points.md` reference defines 7 entry-point patterns. Kit Mode 1-4 most commonly enters at:
272
+
273
+ | Input shape | Enters at | Process |
274
+ |---|---|---|
275
+ | **PRD / product brief** | Rung 2 Domain (Intent derivable from goal + success criteria) | Extract intent → entities → roles → derive tasks from features (features ≠ tasks) → derive decisions → continue through wireframe |
276
+ | **Vague brief** ("build a dashboard for X") | Rung 1 Intent (resolve before proceeding) | Ask 1-2 clarifying questions about user goal + success criteria → derive domain → continue |
277
+ | **Schema / data model** | Rung 2 Domain (entities are given) | Resolve domain from schema → derive role + task + decision → wireframe → primitives |
278
+ | **Mockup / Figma / wireframe** | Rung 13 Component (visual is given); validate upward | Read upward: what task/decision does this surface? Are the wireframe checkpoint outputs derivable? If not, the mockup is suspect. |
279
+ | **Role + user story** | Rung 3 Role (role is given) | Resolve intent + domain → derive task from story → decision → wireframe → primitives |
280
+ | **Feature list** | Rung 4 Task (features ≠ tasks; decompose) | "Lead inbox" is NOT a task; "triage leads to identify which need action today" is. Decompose features into tasks → decisions → primitives. |
281
+ | **Component request** ("add a table here") | Rung 13 Component (validate upward) | Resolve task + decision the table supports BEFORE accepting the component. If upstream contradicts the table, the table changes — not the upstream. |
282
+
283
+ **The Core Rule**: regardless of entry point, **validate upward before proceeding downward.** A component request at Rung 13 cannot be accepted until Rungs 1-5 are resolved. If upstream reasoning contradicts the requested component, the component changes — not the reasoning.
284
+
285
+ **Full procedure for each entry pattern** — see [`~/.claude/skills/ref-gen-ui-systems/references/entry-points.md`](../../../../.claude/skills/ref-gen-ui-systems/references/entry-points.md).
286
+
287
+ ---
288
+
289
+ ## §Bridges to existing kit references
290
+
291
+ Once the ladder Rungs 0-12 have produced their outputs (intent + domain + role + task + decision + wireframe), hand off to the kit's existing pipeline:
292
+
293
+ | Ladder output | Kit reference | Use for |
294
+ |---|---|---|
295
+ | Rung 5 Decision shape | [`references/decision-model.md`](decision-model.md) | Mapping decision shape to A2UI decisions block; required-signals field map |
296
+ | Rung 6 Posture | [`references/patterns-shells.md`](patterns-shells.md) §Shell-selection-by-posture | Shell choice rationale |
297
+ | Rung 7 IA + Rung 8 AppShell | [`references/patterns-shells.md`](patterns-shells.md) | Admin/chat/editor/simple shell composition |
298
+ | Rung 9 Navigation | [`references/patterns-shells.md`](patterns-shells.md) §Navigation | Sidebar nav + nav-item-ui selected state |
299
+ | Rung 10 Surface | [`references/patterns-recipes.md`](patterns-recipes.md) + [`references/patterns-layout.md`](patterns-layout.md) | Surface taxonomy (page / panel / drawer / modal / popover / card / toast) |
300
+ | Rung 11 View + Rung 12 Section | [`references/patterns-recipes.md`](patterns-recipes.md) | Route-level composition + section-ui rhythm |
301
+ | Rung 13 Component | [`references/catalog-lookup.md`](catalog-lookup.md) + [`references/composition.md`](composition.md) + [`references/component-literacy.md`](component-literacy.md) (literacy gate) + the 8 `patterns-*.md` bundles | Primitive selection + composition contract + CSS-literacy precondition |
302
+ | Rung 13.5 Phase 4 author checklist | [`references/common-gotchas-consumer.md`](common-gotchas-consumer.md) | The four recurring consumer-side traps even AFTER literacy fires: composite grammar bypass / parent CSS override / mixed control sizes / `minmax(min, 1fr)` vs container queries. Sister-aligned with `adia-ui-authoring` v1.8.2. |
303
+ | Rung 14 DataBinding | [`references/state.md`](state.md) | Signals, controllers, BaseController, data sources |
304
+ | Rung 15 Interaction | [`references/composition.md`](composition.md) §Actions + [`references/state.md`](state.md) §Optimistic | Action shape + error path + optimistic update |
305
+ | Rung 16 State | [`references/state.md`](state.md) | 7-category taxonomy with ownership |
306
+ | Rung 17 Feedback | [`references/composition.md`](composition.md) §Validation + kit §3 checklist | Loading + empty + error per data-driven component |
307
+ | Rung 18 RenderPlan | [`references/composition.md`](composition.md) | HTML + A2UI JSON output |
308
+ | Rung 19 Validation | kit §3 Validation + §PEV verify-target table | Mode 1-4 verify path |
309
+
310
+ ---
311
+
312
+ ## §Anti-patterns specific to PRD-driven composition
313
+
314
+ Beyond the rubric's 10 anti-patterns (which cover the wireframing discipline itself), kit Mode 1-4 has 3 PRD-specific failure modes:
315
+
316
+ ### KP-01 — Feature-as-task collapse
317
+
318
+ **Symptom**: PRD lists "Lead inbox with priority sorting"; agent treats "Lead inbox" as a task and emits `<table-ui>` immediately.
319
+
320
+ **Root cause**: features in PRDs conflate task + component. "Lead inbox" is a feature naming the surface; the task is "triage incoming leads to identify which need action today." Different tasks produce different primitives — triage vs comparison vs browse all are "lists" but have different optimal primitives.
321
+
322
+ **Correction**: decompose every PRD feature into 1-N task statements per the canonical entry-point Pattern 2. Then resolve decisions per task. Then primitives.
323
+
324
+ ### KP-02 — Shell-vocabulary primacy
325
+
326
+ **Symptom**: PRD says "dashboard" → agent emits `<admin-shell>` without resolving posture. PRD says "settings page" → `<settings-page>` shell. PRD says "chat interface" → `<chat-shell>`.
327
+
328
+ **Root cause**: shell vocabulary in PRDs is a description of the surface category, NOT a directive about the shell to use. A "dashboard for executives reviewing weekly" is monitoring posture → admin-shell. A "dashboard for analysts comparing quarters" is analyzing posture → admin-shell with full-bleed sections (or editor-shell). A "dashboard for the CEO at 7am scanning headlines" is monitoring posture → simple-shell with stat-cards. Same word, different shells.
329
+
330
+ **Correction**: read the user's posture (monitoring / acting / analyzing / configuring / creating / reviewing / debugging / exploring) from the PRD's goals + actions + frequency, NOT from the shell vocabulary.
331
+
332
+ ### KP-03 — Skipping the wireframe checkpoint
333
+
334
+ **Symptom**: PRD reasoning produces a clean Rungs 0-5 trace, then agent jumps to `<admin-shell>` + `<table-ui>` + `<chart-ui>` without producing a wireframe artifact.
335
+
336
+ **Root cause**: the wireframe rubric's central failure mode (premature visual collapse) at the kit-protocol level. The wireframe is a load-bearing intermediate, not a deliverable artifact — skipping it means the agent commits to component vocabulary without resolving region layout + state coverage + responsive behavior + ownership.
337
+
338
+ **Correction**: produce a wireframe artifact (minimum Region + State levels) BEFORE primitive emission. Score against the 6 [gate] rubric dimensions. If any gate dimension scores < 3, return to the ladder and resolve the gap.
339
+
340
+ ### KP-04 — AdiaUI tag vocabulary inside the wireframe
341
+
342
+ **Symptom**: agent produces a wireframe artifact, but the boxes contain `<admin-shell>`, `<table-ui>`, `<button-ui>`, or HTML markup (`<div>`, `<section>`, `<form>`) instead of semantic labels.
343
+
344
+ **Root cause**: collapsing Rung 8 (AppShell) and Rung 13 (Component) into a single artifact. The wireframe is supposed to be a **pre-component** structural reasoning surface; using primitive vocabulary inside it short-circuits the entire ladder Tier 2-3 (Structure + Surface).
345
+
346
+ **Correction**: wireframes use **semantic labels only** — "App shell," "Sidebar," "Lead Queue," "Inspector" — plus the rubric's notation grammar (`+--+` regions, `[Control]` controls, `{State}` data states, `<Section>` semantic components, `[owns: ...]` ownership, `!` unresolved). AdiaUI tag mapping happens AFTER the wireframe is scored, at kit §1 Catalog Lookup. See §Wireframe checkpoint above for the CORRECT-vs-INCORRECT worked example.
347
+
348
+ ---
349
+
350
+ ## §Verify-target — when is the pre-composition gate satisfied?
351
+
352
+ The §SpecToUi gate is satisfied when:
353
+
354
+ - [ ] Rung 0 InputContext annotated (known / inferred / missing / assumptions)
355
+ - [ ] Rung 1 Intent stated (userGoal + businessGoal + successCriteria)
356
+ - [ ] Rung 2 Domain entities listed
357
+ - [ ] Rung 3 Role(s) with non-empty uiDifferentiators (when multiple roles)
358
+ - [ ] Rung 4 Tasks decomposed (features ≠ tasks)
359
+ - [ ] Rung 5 Decisions with non-empty requiredSignals + non-empty possibleActions
360
+ - [ ] Wireframe artifact produced at Region + State minimum (other levels per task risk)
361
+ - [ ] All 6 [gate] rubric dimensions score ≥ 3/5
362
+
363
+ Once satisfied, the §SpecToUi mode hands off to §0 Reasoning Gate (which now has its precondition met) + §1 Catalog Lookup + §2 Composition.
364
+
365
+ If the gate is NOT satisfied, the kit's §Plan-Execute-Verify loop has failed at the Plan step — there is no plan, only vibes. Returning to the ladder is not optional.
366
+
367
+ ---
368
+
369
+ ## §References
370
+
371
+ **Canonical sources (do not duplicate; cite + extend):**
372
+
373
+ - [`~/.claude/skills/ref-gen-ui-systems/references/reasoning-ladder.md`](../../../../.claude/skills/ref-gen-ui-systems/references/reasoning-ladder.md) — 19 rungs full procedure
374
+ - [`~/.claude/skills/ref-gen-ui-systems/references/entry-points.md`](../../../../.claude/skills/ref-gen-ui-systems/references/entry-points.md) — 7 entry-point patterns
375
+ - [`~/.claude/skills/ref-gen-ui-systems/references/composable-hierarchy.md`](../../../../.claude/skills/ref-gen-ui-systems/references/composable-hierarchy.md) — 6-layer composable system
376
+ - [`~/.claude/skills/ref-gen-ui-systems/references/anti-patterns.md`](../../../../.claude/skills/ref-gen-ui-systems/references/anti-patterns.md) — 10 named anti-patterns
377
+ - [`~/.claude/skills/core-skills-best-practices/references/agents-ux-wireframing-ascii.md`](../../../../.claude/skills/core-skills-best-practices/references/agents-ux-wireframing-ascii.md) — wireframing rubric (5 levels + 10 dimensions + 10 anti-patterns + 7-phase procedure)
378
+
379
+ **Kit references this section hands off to:**
380
+
381
+ - [`patterns-shells.md`](patterns-shells.md) — Shell composition (Rung 8 → 9)
382
+ - [`patterns-recipes.md`](patterns-recipes.md) — Surface + view recipes (Rung 10 → 11)
383
+ - [`patterns-layout.md`](patterns-layout.md) — Layout-tier composition
384
+ - [`decision-model.md`](decision-model.md) — Decision shape → A2UI decisions block
385
+ - [`state.md`](state.md) — DataBinding + State + Feedback (Rungs 14-17)
386
+ - [`catalog-lookup.md`](catalog-lookup.md) + [`composition.md`](composition.md) — Component selection + emission (Rung 13)
387
+
388
+ **Companion kit modes:**
389
+
390
+ - §0 Reasoning Gate (kit) — fires AFTER §SpecToUi resolves Rungs 0-5
391
+ - §1 Catalog Lookup (kit) — fires AFTER wireframe checkpoint
392
+ - §2 Composition (kit) — fires AFTER primitive selection
393
+ - §3 Validation (kit) — Mode 1-4 verify-target gate
394
+ - §CorrectionLoop (kit) — when output is wrong, return upward through the ladder to find the layer of origin