@3fn/core 13.0.0 → 14.0.0

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 (236) hide show
  1. package/.kiro/agents/ada-prompt.md +80 -132
  2. package/.kiro/agents/ada-prompt.md.attribution.json +45 -0
  3. package/.kiro/agents/ada.json +44 -59
  4. package/.kiro/agents/ada.json.attribution.json +13 -0
  5. package/.kiro/agents/data-prompt.md +83 -74
  6. package/.kiro/agents/data-prompt.md.attribution.json +53 -0
  7. package/.kiro/agents/data.json +31 -38
  8. package/.kiro/agents/data.json.attribution.json +13 -0
  9. package/.kiro/agents/kenya-prompt.md +83 -72
  10. package/.kiro/agents/kenya-prompt.md.attribution.json +53 -0
  11. package/.kiro/agents/kenya.json +27 -35
  12. package/.kiro/agents/kenya.json.attribution.json +13 -0
  13. package/.kiro/agents/leonardo-prompt.md +176 -234
  14. package/.kiro/agents/leonardo-prompt.md.attribution.json +45 -0
  15. package/.kiro/agents/leonardo.json +28 -36
  16. package/.kiro/agents/leonardo.json.attribution.json +13 -0
  17. package/.kiro/agents/lina-prompt.md +110 -151
  18. package/.kiro/agents/lina-prompt.md.attribution.json +53 -0
  19. package/.kiro/agents/lina.json +46 -59
  20. package/.kiro/agents/lina.json.attribution.json +13 -0
  21. package/.kiro/agents/sparky-prompt.md +89 -72
  22. package/.kiro/agents/sparky-prompt.md.attribution.json +53 -0
  23. package/.kiro/agents/sparky.json +37 -37
  24. package/.kiro/agents/sparky.json.attribution.json +13 -0
  25. package/.kiro/agents/stacy-prompt.md +74 -48
  26. package/.kiro/agents/stacy-prompt.md.attribution.json +45 -0
  27. package/.kiro/agents/stacy.json +28 -30
  28. package/.kiro/agents/stacy.json.attribution.json +13 -0
  29. package/.kiro/agents/thurgood-prompt.md +94 -138
  30. package/.kiro/agents/thurgood-prompt.md.attribution.json +45 -0
  31. package/.kiro/agents/thurgood.json +31 -35
  32. package/.kiro/agents/thurgood.json.attribution.json +13 -0
  33. package/.kiro/steering/AI-Collaboration-Principles.md +3 -3
  34. package/.kiro/steering/Civitas-System-Overview.md +5 -5
  35. package/.kiro/steering/DesignerPunk-Systems-Overview.md +6 -6
  36. package/.kiro/steering/Task-Completion-Protocol.md +98 -17
  37. package/.kiro/steering/core-goals.md +3 -3
  38. package/.kiro/steering/personal-note.md +1 -1
  39. package/.kiro/steering/start-up-tasks.md +14 -3
  40. package/application-mcp-server/src/index.ts +26 -0
  41. package/dist/ComponentTokens.android.kt +1 -1
  42. package/dist/ComponentTokens.ios.swift +1 -1
  43. package/dist/ComponentTokens.web.css +1 -1
  44. package/dist/DesignTokens.android.kt +1 -1
  45. package/dist/DesignTokens.dtcg.json +8 -5
  46. package/dist/DesignTokens.figma.json +2 -2
  47. package/dist/DesignTokens.ios.swift +1 -1
  48. package/dist/DesignTokens.web.css +1 -1
  49. package/dist/android/DesignTokens.android.kt +1 -1
  50. package/dist/blend/OklchBlendCalculator.js +1 -0
  51. package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +13 -2
  52. package/dist/blend/ThemeAwareBlendUtilities.web.js +6 -1
  53. package/dist/browser/designerpunk.esm.js +22 -81
  54. package/dist/browser/designerpunk.esm.min.js +29 -32
  55. package/dist/browser/designerpunk.umd.js +22 -81
  56. package/dist/browser/designerpunk.umd.min.js +42 -45
  57. package/dist/browser/tokens.css +1 -1
  58. package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.js +24 -5
  59. package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +16 -28
  60. package/dist/components/core/Button-CTA/examples/BasicUsage.js +18 -43
  61. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +3 -15
  62. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +9 -58
  63. package/dist/components/core/Button-CTA/types.d.ts +0 -24
  64. package/dist/components/core/Button-CTA/types.js +6 -0
  65. package/dist/components/core/Input-Text-Base/types.d.ts +13 -1
  66. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +11 -2
  67. package/dist/generators/DTCGFormatGenerator.js +8 -0
  68. package/dist/integration/BuildErrorHandler.js +2 -2
  69. package/dist/ios/DesignTokens.ios.swift +1 -1
  70. package/dist/mcp/application-mcp.js +24 -0
  71. package/dist/mcp/docs-mcp.js +130 -15
  72. package/dist/mcp/product-mcp.js +25 -0
  73. package/dist/tokens/OpacityTokens.js +1 -1
  74. package/dist/tokens/semantic/BlendTokens.d.ts +10 -3
  75. package/dist/tokens/semantic/BlendTokens.js +17 -5
  76. package/dist/tokens/semantic/OpacityTokens.d.ts +4 -4
  77. package/dist/tokens/semantic/OpacityTokens.js +4 -4
  78. package/dist/types/ComponentTypes.d.ts +1 -1
  79. package/dist/types/generated/TokenTypes.d.ts +1 -1
  80. package/dist/types/generated/TokenTypes.js +1 -1
  81. package/dist/validators/StemmaTokenUsageValidator.js +3 -2
  82. package/dist/web/DesignTokens.web.css +1 -1
  83. package/governance/Component-Development-Guide.md +22 -12
  84. package/governance/Component-Development-Standards.md +2 -2
  85. package/governance/Component-Family-Avatar.md +0 -1
  86. package/governance/Component-Family-Badge.md +0 -1
  87. package/governance/Component-Family-Button.md +4 -17
  88. package/governance/Component-Family-Chip.md +0 -1
  89. package/governance/Component-Family-Container.md +0 -1
  90. package/governance/Component-Family-Data-Display.md +1 -2
  91. package/governance/Component-Family-Divider.md +1 -2
  92. package/governance/Component-Family-Form-Inputs.md +5 -5
  93. package/governance/Component-Family-Icon.md +1 -2
  94. package/governance/Component-Family-Loading.md +1 -2
  95. package/governance/Component-Family-Modal.md +1 -2
  96. package/governance/Component-Family-Navigation.md +0 -1
  97. package/governance/Component-Family-Progress.md +0 -1
  98. package/governance/Component-Inheritance-Structures.md +195 -76
  99. package/governance/Component-MCP-Document-Template.md +6 -5
  100. package/governance/Component-Primitive-vs-Semantic-Philosophy.md +1 -1
  101. package/governance/Component-Quick-Reference.md +33 -33
  102. package/governance/Component-Readiness-Status.md +54 -38
  103. package/governance/Component-Templates.md +32 -36
  104. package/governance/Contract-System-Reference.md +6 -6
  105. package/governance/MCP-Integration-Guide.md +1 -1
  106. package/governance/Process-Cross-Reference-Standards.md +31 -13
  107. package/governance/Process-Development-Workflow.md +49 -59
  108. package/governance/Process-File-Organization.md +24 -24
  109. package/governance/Process-Hook-Operations.md +19 -7
  110. package/governance/Process-Orchestration-Model-Selection.md +92 -0
  111. package/governance/Process-Spec-Planning.md +91 -39
  112. package/governance/Process-Task-Type-Definitions.md +80 -4
  113. package/governance/Product-Handoff-Protocol.md +2 -0
  114. package/governance/Rosetta-System-Architecture.md +6 -6
  115. package/governance/Test-Behavioral-Contract-Validation.md +38 -31
  116. package/governance/Test-Failure-Audit-Methodology.md +1 -1
  117. package/governance/Token-Family-Accessibility.md +1 -2
  118. package/governance/Token-Family-Blend.md +18 -16
  119. package/governance/Token-Family-Blur.md +0 -1
  120. package/governance/Token-Family-Border.md +1 -2
  121. package/governance/Token-Family-Color.md +0 -1
  122. package/governance/Token-Family-Glow.md +1 -2
  123. package/governance/Token-Family-Layering.md +0 -1
  124. package/governance/Token-Family-Motion.md +1 -2
  125. package/governance/Token-Family-Opacity.md +0 -1
  126. package/governance/Token-Family-Radius.md +1 -2
  127. package/governance/Token-Family-Responsive.md +1 -2
  128. package/governance/Token-Family-Shadow.md +1 -2
  129. package/governance/Token-Family-Sizing.md +0 -1
  130. package/governance/Token-Family-Spacing.md +1 -2
  131. package/governance/Token-Family-Typography.md +1 -2
  132. package/governance/Token-Governance.md +8 -8
  133. package/governance/Token-Quick-Reference.md +21 -21
  134. package/governance/Token-Resolution-Patterns.md +1 -1
  135. package/governance/Token-Semantic-Structure.md +1 -1
  136. package/governance/Web-Authoring-Standards.md +5 -5
  137. package/governance/browser-distribution-guide.md +1 -4
  138. package/governance/classification-map.md +368 -0
  139. package/governance/completion-documentation-guide.md +11 -8
  140. package/governance/component-meta-authoring-guide.md +1 -1
  141. package/governance/cross-platform-vs-platform-specific-decision-framework.md +1 -1
  142. package/governance/platform-implementation-guidelines.md +1 -1
  143. package/governance/release-management-system.md +2 -2
  144. package/governance/rosetta-system-principles.md +8 -6
  145. package/governance/stemma-system-principles.md +18 -17
  146. package/mcp-server/src/index.ts +24 -6
  147. package/mcp-server/src/indexer/DocumentIndexer.ts +119 -9
  148. package/mcp-server/src/indexer/__tests__/bare-id-crossrefs.test.ts +250 -0
  149. package/mcp-server/src/indexer/cross-ref-parser.ts +29 -1
  150. package/mcp-server/src/indexer/index-health.ts +27 -2
  151. package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +11 -26
  152. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +72 -5
  153. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +81 -24
  154. package/mcp-server/src/tools/list-cross-references.ts +2 -2
  155. package/package.json +23 -21
  156. package/src/__tests__/browser-distribution/css-bundling.test.ts +6 -4
  157. package/src/__tests__/console-allowlist.json +14 -0
  158. package/src/__tests__/console-fail-setup.ts +169 -0
  159. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +16 -0
  160. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +70 -17
  161. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +28 -0
  162. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +223 -16
  163. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +298 -0
  164. package/src/blend/OklchBlendCalculator.ts +3 -0
  165. package/src/blend/ThemeAwareBlendUtilities.android.kt +3 -0
  166. package/src/blend/ThemeAwareBlendUtilities.ios.swift +3 -0
  167. package/src/blend/ThemeAwareBlendUtilities.web.ts +9 -1
  168. package/src/blend/__tests__/InteractionStateAudit.test.ts +12 -9
  169. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +8 -0
  170. package/src/build/errors/__tests__/ErrorHandler.test.ts +5 -0
  171. package/src/build/workflow/__tests__/CICDIntegration.test.ts +12 -1
  172. package/src/cli/__tests__/init.test.ts +45 -11
  173. package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +1 -1
  174. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +121 -7
  175. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +3 -0
  176. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +15 -6
  177. package/src/components/core/Avatar-Base/contracts.yaml +11 -1
  178. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +24 -5
  179. package/src/components/core/Badge-Count-Base/contracts.yaml +1 -1
  180. package/src/components/core/Badge-Label-Base/contracts.yaml +1 -1
  181. package/src/components/core/Button-CTA/Button-CTA.schema.yaml +2 -12
  182. package/src/components/core/Button-CTA/README.md +3 -6
  183. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +35 -89
  184. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -2
  185. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -2
  186. package/src/components/core/Button-CTA/contracts.yaml +6 -29
  187. package/src/components/core/Button-CTA/examples/BasicUsage.html +2 -14
  188. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +17 -44
  189. package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +12 -20
  190. package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +12 -51
  191. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +2 -26
  192. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +18 -71
  193. package/src/components/core/Button-CTA/types.ts +10 -28
  194. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +13 -0
  195. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +13 -0
  196. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +13 -0
  197. package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +30 -2
  198. package/src/components/core/Input-Text-Base/README.md +25 -2
  199. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +16 -15
  200. package/src/components/core/Input-Text-Base/contracts.yaml +90 -0
  201. package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +26 -12
  202. package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +195 -59
  203. package/src/components/core/Input-Text-Base/types.ts +13 -1
  204. package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +5 -1
  205. package/src/components/core/Input-Text-Email/README.md +8 -7
  206. package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +1 -4
  207. package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +2 -16
  208. package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +10 -3
  209. package/src/components/core/Input-Text-Password/README.md +9 -8
  210. package/src/components/core/Input-Text-Password/contracts.yaml +5 -0
  211. package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +17 -7
  212. package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +22 -20
  213. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +11 -2
  214. package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +5 -1
  215. package/src/components/core/Input-Text-PhoneNumber/README.md +9 -8
  216. package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +2 -5
  217. package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +3 -17
  218. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  219. package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +1 -1
  220. package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +1 -1
  221. package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +1 -1
  222. package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +1 -1
  223. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +5 -2
  224. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +5 -2
  225. package/src/generators/DTCGFormatGenerator.ts +6 -0
  226. package/src/generators/__tests__/DTCGConfigOptions.test.ts +14 -5
  227. package/src/integration/BuildErrorHandler.ts +2 -2
  228. package/src/tokens/OpacityTokens.ts +1 -1
  229. package/src/tokens/__tests__/OpacityTokens.test.ts +3 -1
  230. package/src/tokens/semantic/BlendTokens.ts +26 -5
  231. package/src/tokens/semantic/OpacityTokens.ts +4 -4
  232. package/src/tools/release/__tests__/ReleasePipeline.test.ts +1 -1
  233. package/src/types/ComponentTypes.ts +1 -1
  234. package/src/types/generated/TokenTypes.ts +1 -1
  235. package/src/validators/StemmaTokenUsageValidator.ts +3 -2
  236. package/token-index/semantics.yaml +1 -2
@@ -0,0 +1,368 @@
1
+ ---
2
+ id: classification-map
3
+ inclusion: manual
4
+ name: Classification Map
5
+ description: The per-rule classification-map register — each governance/design rule's boundary call (functional/operational/ideological), verification disposition + owner, and education disposition, recorded once and cited thereafter. Entries are stable, citable markdown headings with fenced-YAML machine-readable bodies.
6
+ aliases: classification map register, rule classification, boundary call, verification disposition, education disposition, enforcement ownership, which check verifies a rule, teacher or imposter, prune register, check-state facet, dormant check state
7
+ ---
8
+
9
+ # Classification Map
10
+
11
+ **Date**: 2026-07-14
12
+ **Last Reviewed**: 2026-08-02
13
+ **Purpose**: The living register of per-rule classification decisions — boundary call, verification disposition + owner, and education disposition — so enforcement ownership is decided once and cited thereafter instead of re-litigated per agent, per prompt, per session
14
+ **Organization**: process-standard
15
+ **Scope**: cross-project
16
+ **Layer**: 2
17
+ **Relevant Tasks**: all-tasks
18
+
19
+ ---
20
+
21
+ ## About This Register
22
+
23
+ This is the **classification-map register**: one entry per governance/design rule, recording three decisions —
24
+
25
+ 1. **Boundary call** — is the rule functional, operational, or ideological? (One-line rationale; scoped rows may carry per-scope rationale, since a surface-dependent boundary can require multiple realities stated at once.)
26
+ 2. **Verification disposition + owner** — which check (if any) verifies the rule, at what strictness, and who owns that check.
27
+ 3. **Education disposition** — what the education layer (docs MCP, skills, steering prose) keeps, authors, or prunes for this rule.
28
+
29
+ **Governing methodology**: Spec 125-B (Classification Map & Deferred Enforcement Layers), which formalizes the settled methodology of the Spec 125 design outline §2 — *"CI validates functional and operational requirements, never ideology; education and verification are complementary layers (strategy → tactics → validation loop)."* See `.kiro/specs/125-B-classification-map/` (requirements + design, merged) for the full procedure, including the two-bladed imposter test that guides per-surface education assessments.
30
+
31
+ **This is a LIVING register, not a one-time survey.** When a rule's classification changes, the entry is updated — never silently: every change is **dated and attributed** in the entry's `history` list (Req 1.5). Entries are superseded via `history`, never by renaming or deleting the entry heading.
32
+
33
+ ---
34
+
35
+ ## Methodology Notes (measurement law — U1 pilot verdicts carried into the U1b campaign)
36
+
37
+ *Recorded 2026-08-02 by Thurgood (steward) per 125-B Task 5.1; source rulings: the ratified verdict ballot (`.kiro/docs/ballots/2026-08-02-u1-pilot-closeout-verdict.md`), the U1 closeout record §2, and the settled U1b amendment (PR #112). These are the durable, MCP-served statements of the campaign's measurement law; the operational detail lives in `.kiro/specs/125-B-classification-map/completion/u1b/campaign-measurement-protocol.md`.*
38
+
39
+ 1. **First-push pinning by RECONSTRUCTION (default)**: a PR's first-push SHA = the last commit with `committedDate ≤ createdAt + 120s`; check conclusions are queried against that SHA; no concluded required checks → INDETERMINATE, never converted. Observation passes are event-anchored (window open / session-start-while-open / close) — never calendar-cadenced.
40
+ 2. **Batch overshoot counts whole** (the J3 ruling): an observation batch that crosses a close condition counts every qualifying PR in the batch.
41
+ 3. **Roll-up reading** (ballot Decision 0): a criterion is MET iff MET in every EVALUABLE segment with ≥1 evaluable; empty or under-populated segments never force INDETERMINATE.
42
+ 4. **Applicability scoring**: actions that never become applicable score N/A, not ABSENT.
43
+ 5. **Campaign window parameters** (ballot Decision (c), P1–P3): N=10 observed PRs per wave window; re-accretion (W2) and churn (W3) per-wave; first-push failure rate (W1) on ONE shared campaign window with a single pre-campaign baseline; waves may overlap; **campaign-endogenous events (wave prunes, wave ballots, register/roster PRs) do not segment the shared window — exogenous events only (new check armings, outside regenerations touching pruned surfaces, required-check-set changes), bounded at K=3** (Peter's ruling, 2026-08-02). A pruned pattern reappearing on a GENERATED surface without a source change is an anomaly finding, never a re-accretion hit.
44
+
45
+ ---
46
+
47
+ ## Addressing and Citation
48
+
49
+ **How to cite an entry** (from any spec, steering doc, crossRef, or agent):
50
+
51
+ ```
52
+ governance/classification-map.md § "<entry-id>"
53
+ ```
54
+
55
+ This is exactly the `path § "heading"` grammar that sweep-1 (`122-sweep-1-refs`) resolves and verifies mechanically — a citation in this format is platform-checkable.
56
+
57
+ **Entry-id rules:**
58
+
59
+ - An entry-id is a markdown `### <entry-id>` heading in the **Entries** section below. The heading text IS the identifier.
60
+ - Entry-ids are **kebab-case** (lowercase, hyphen-separated).
61
+ - Entry-ids are **NEVER renamed once cited.** A classification change is recorded in the entry's `history`; the heading is permanent. (A rename would silently break every external citation.)
62
+ - Entry-ids SHALL be **unique** within this register, **AND no entry-id may be a substring of another entry-id**.
63
+
64
+ **Why the non-substring rule** (record it so it never reads as pedantry): sweep-1 resolves `§ "heading"` citations against markdown heading lines by **verbatim substring match** (`tools/agent-generator/sweeps/common.ts:186`). If one id were a substring of another — e.g. `token-creation` alongside `token-creation-primitive` — a citation of the shorter id could **silently mis-resolve** against the longer heading and still report green. The non-substring constraint makes every citation unambiguous **by construction**, not by care.
65
+
66
+ Authors adding an entry MUST check both constraints against all existing entry-ids before landing the heading.
67
+
68
+ ---
69
+
70
+ ## Entry Schema
71
+
72
+ Every entry is a `### <entry-id>` heading followed by **one fenced YAML block** carrying the machine-readable fields. The schema (from 125-B design § Data Models):
73
+
74
+ **Top-level fields:**
75
+
76
+ | Field | Required | Content |
77
+ |-------|----------|---------|
78
+ | `rule` | yes | The rule itself, stated in one line |
79
+ | `boundary_call` | yes | `class` + `rationale` (see below) |
80
+ | `verification` | yes | `disposition`, `owner`, `check_state`, `checks`, optional `scope[]` (see below) |
81
+ | `education` | yes | `disposition` — what the education layer keeps/authors/prunes for this rule |
82
+ | `crossRef` | when applicable | The reciprocal half of any external cross-reference pointing at this entry (e.g. `canonical/shared/shared-catalog.yaml#<entry-id>`) |
83
+ | `history` | yes | List of `{ date, change, by }` — every classification change, dated and attributed |
84
+
85
+ **`boundary_call`:**
86
+
87
+ - `class`: `functional | operational | ideological`
88
+ - `rationale`: one line for scalar rows; rows with a `scope[]` qualifier MAY push per-surface rationale into the scope entries instead (a surface-dependent boundary can require multiple realities stated at once).
89
+
90
+ **`verification`:**
91
+
92
+ - `disposition`: `barrier | record-check | warn | none | scoped`
93
+ - `owner`: the agent who owns the verification decision/check for this rule
94
+ - `check_state`: `none | proposed | armed | dormant | retired`
95
+ - **`dormant`** (the DORMANT state, Req 1.3) records an **armed, blocking check whose selection is empty or stale** — it runs and passes while verifying nothing. The corpus demonstrably produces this state; a register that cannot record it misrepresents the corpus.
96
+ - `checks`: list of the concrete check name(s), when armed (e.g. `["122-sweep-1-refs"]`)
97
+ - `scope[]`: **optional** per-surface qualifier — but **REQUIRED when the rule's boundary is surface-dependent** (for such rules a scalar disposition is not simplification, it is wrong). Entries without multi-surface needs stay scalar (the lens-not-columns guard). Each scope entry carries:
98
+ - `surface`: the surface this line governs
99
+ - `disposition`: `barrier | record-check | warn | none` (scalar dispositions only — never `scoped`)
100
+ - `check_state` and `checks`: **per-scope** when scoped — "lint at consumption / no check at definition" must serialize per scope, not collapse into one top-level value
101
+ - `rationale`: per-surface rationale line
102
+
103
+ **The `scoped` sentinel:** when `scope[]` is present, the top-level `disposition` SHALL be the sentinel value `scoped` — or omitted entirely (`scoped` is the documented default for scoped rows). **A scoped row has NO valid scalar top-level disposition**: writing `barrier` there falsely flags the definition layer; writing `none` there misses the consumption sites. The truth lives per-scope.
104
+
105
+ ### Illustrative Example (documentation, NOT a register entry)
106
+
107
+ The following is schema documentation only. It is deliberately inside a fenced block AND its heading line is indented one space — because sweep-1's resolver matches heading lines by raw line-regex (`/^#{1,6}\s/`, `common.ts`) and is **not fence-aware**; the indent is what actually makes it un-resolvable, the fence is what makes it visually documentation. It **cannot be cited or resolved as a rule**. Do not copy its content as fact; copy its shape (and do NOT copy the indent into real entries).
108
+
109
+ ````markdown
110
+ ### example-rule-id
111
+
112
+ ```yaml
113
+ rule: "a one-line statement of the rule"
114
+ boundary_call:
115
+ class: operational # functional | operational | ideological
116
+ rationale: "one line (scalar rows); scoped rows may push rationale into scope[]"
117
+ verification:
118
+ disposition: scoped # barrier | record-check | warn | none | scoped
119
+ # scope[] present => top-level disposition is the
120
+ # sentinel `scoped` (or omitted — scoped is the default);
121
+ # a scoped row has NO valid scalar here
122
+ owner: thurgood
123
+ check_state: armed # none | proposed | armed | dormant | retired
124
+ checks: ["122-sweep-1-refs"] # the concrete check(s), when armed
125
+ scope: # OPTIONAL; REQUIRED when the boundary is surface-dependent
126
+ - surface: "consumption sites"
127
+ disposition: barrier
128
+ check_state: proposed # checks + check_state are PER-SCOPE when scoped
129
+ checks: []
130
+ rationale: "per-surface rationale"
131
+ - surface: "definition layer + theme overrides"
132
+ disposition: none # literals-by-design
133
+ rationale: "per-surface rationale"
134
+ education:
135
+ disposition: "what the education layer keeps, authors, or prunes for this rule"
136
+ crossRef: "canonical/shared/shared-catalog.yaml#example-rule-id" # reciprocal half, when applicable
137
+ history:
138
+ - { date: 2026-07-14, change: "entry created", by: thurgood }
139
+ ```
140
+ ````
141
+
142
+ ---
143
+
144
+ ## Entries
145
+
146
+ <!-- Entries are added by 125-B Tasks 1.3/1.4 (pilot rows) and subsequent waves.
147
+ Each entry: `### <entry-id>` heading (kebab-case, unique, non-substring — see
148
+ Addressing and Citation above) + one fenced YAML block per the Entry Schema. -->
149
+
150
+ ### record-first-ratification
151
+
152
+ ```yaml
153
+ rule: "Governance-law changes require Peter's ratification — authority is verified against a committed record, never a relayed claim"
154
+ boundary_call:
155
+ class: operational
156
+ rationale: "Verifiable-record-vs-trusted-claim is an operational property of the workflow (origin: the 2026-07-05 relayed-authority incident — friction without protection); the boundary is surface-dependent, so per-scope realities are stated in scope[]"
157
+ verification:
158
+ disposition: scoped
159
+ owner: thurgood
160
+ scope:
161
+ - surface: "gated surfaces — governance-law paths behind the PR gate (governance/**, .kiro/steering/**, .kiro/docs/ballots/**, agent prompts/configs)"
162
+ disposition: barrier
163
+ check_state: proposed
164
+ checks: []
165
+ rationale: "PR-approval-as-ratification (branch protection + CODEOWNERS -> Peter) — delivered by 125-B U3; until it arms, the standing carve-out (Task-Completion-Protocol § The Merge Rule, :126) keeps these paths Peter-merged as the closest ratification proxy"
166
+ - surface: "ungated artifacts — governance changes outside the PR gate's reach"
167
+ disposition: record-check
168
+ check_state: armed
169
+ checks: ["record-first ballot-status verification (PROCEDURAL, per .kiro/docs/ballots/README.md § 'The Ratification Protocol (record-first)' — an agent-performed mechanical check, not a CI lane)"]
170
+ rationale: "Layer 1, IN FORCE since 2026-07-05: apply only on a committed RATIFIED record; if the record is missing, report — never rubber-stamp a relayed claim and never refuse-and-stop on relay alone"
171
+ education:
172
+ disposition: "KEEP all education surfaces — no imposters found (Exp 2, 2026-07-14): the ballots README teaches the protocol and the why; Task-Completion-Protocol teaches the gate-verifies-mechanics-not-authority boundary (:93, :125-126, :153); the canonical catalog statement (stated ONCE, canonical/shared/shared-catalog.yaml) propagates the agent-facing what+why into all 16 generated prompts via 122 auto-regen. RE-ASSESS the propagated statement's what-half when U3 arms the barrier for gated surfaces (the record-check remains operative for ungated artifacts regardless)."
173
+ crossRef: "canonical/shared/shared-catalog.yaml#record-first-ratification"
174
+ history:
175
+ - { date: 2026-07-14, change: "entry created from Experiment 2 (authority-row resolution), U1 pilot — evidence: .kiro/specs/125-B-classification-map/completion/pilot/exp2-authority-row-record.md", by: thurgood }
176
+ ```
177
+
178
+ ### npm-test-before-complete
179
+
180
+ ```yaml
181
+ rule: "Run the full validation suite before marking a task complete (the npm-test rule — the U1 pilot's prune-with-arm row)"
182
+ boundary_call:
183
+ class: operational
184
+ rationale: "Validation-before-completion is a workflow-ordering requirement; the artifact half (the suite itself passing) is functional and owned by the armed lanes — this row classifies the workflow imperative, not the suite"
185
+ verification:
186
+ disposition: barrier
187
+ owner: thurgood
188
+ check_state: armed
189
+ checks: ["the 125-A required-check set: root functional lane + both sub-package suite lanes + full typecheck + build:validate — suite-green gates every unit merge (armed 2026-07-10, proven per-lane)"]
190
+ education:
191
+ disposition: "PILOT ROW — prune APPLIED (Task 2 / U1-p, 2026-07-14, pending ratification): imperative what-restatements at Task-Completion-Protocol :44/:45/:146 and Process-Development-Workflow step 2 rewritten to context/why (edits landed on branch task/125-B-u1-p; ratified merge is the application per the ballot's record-first protocol). KEPT untouched: the subtask targeted-tests instruction (no gate exists at subtask grain), ALL lane-selection teaching (single home: start-up-tasks §5), and the SEPARATELY-CLASSIFIED Jest-not-Vitest education (a distinct rule, verified untouched post-prune). Observation window (Task 3.1, N=20) opens at the U1-p merge and is the in-the-wild backstop; a DIFFERENCE-DETECTED finding there triggers a revert per the ballot's stated path."
192
+ history:
193
+ - { date: 2026-07-14, change: "entry created from Experiment 1 classification (Task 1.4); per-surface assessments + candidate prune diff: .kiro/specs/125-B-classification-map/completion/pilot/pilot-row-assessment.md; prune candidate produced, not applied", by: thurgood }
194
+ - { date: 2026-07-14, change: "prune applied via U1-p ballot (.kiro/docs/ballots/2026-07-14-npm-test-imperative-prune.md), staged on task/125-B-u1-p; probe (NO GROSS LOSS DETECTED) + trial (NO-DIFFERENCE-DETECTED) evidence attached; A2-pattern zero-hits + Jest-education-intact independently re-verified; awaiting Peter's ratification and the U1-p merge (which opens the Task 3.1 observation window)", by: thurgood }
195
+ ```
196
+
197
+ ### tool-boot-smoke
198
+
199
+ ```yaml
200
+ rule: "Every tool declared in canonical/registry/tool-registry.json SHALL be listed (tools/list) and SHALL respond to a cheap empty-args call on its server — a listed-but-throws-on-invocation tool is caught at the gate, never returns-data asserted (Req 5)"
201
+ boundary_call:
202
+ class: functional
203
+ rationale: "A tool advertised in tools/list whose handler throws on invocation is a functional defect, not a style/workflow preference — barrier, nothing to prune (no prose predecessor; this is a net-new net-new check, not a reclassification of existing education)"
204
+ verification:
205
+ disposition: barrier
206
+ owner: thurgood
207
+ check_state: armed
208
+ checks: ["125B-tool-boot-smoke"]
209
+ education:
210
+ disposition: "nothing to prune — no prose predecessor"
211
+ history:
212
+ - { date: 2026-07-14, change: "entry created (U1-s pilot substrate, Task 1.6); check wired: .github/workflows/tool-boot-smoke.yml + tests/tool-boot-smoke.test.ts; local run 49/49 passing incl. Product MCP passing index-empty (Req 5.2); side-effect confirmation + gate-bite proof plan recorded in .kiro/specs/125-B-classification-map/completion/task-1-6-completion.md", by: thurgood }
213
+ ```
214
+
215
+ ### no-autonomous-token-creation
216
+
217
+ ```yaml
218
+ rule: "Creating ANY token (primitive, semantic, or component) requires human review — no autonomous token creation"
219
+ boundary_call:
220
+ class: operational
221
+ rationale: "Protects the primitive→semantic→component hierarchy and namespace coherence — workflow integrity (the sanctioned path by which vocabulary enters the system), not the math and not ideology; the contested reading ('functional — protects the math') is recorded and rejected: a functional rule is machine-checkable against a token's value, and 'was this sanctioned' is not a value property"
222
+ verification:
223
+ disposition: warn
224
+ owner: ada
225
+ check_state: proposed
226
+ checks: []
227
+ education:
228
+ disposition: "KEEP — education owns mathematical fit, semantic/tier correctness, and the approval itself (token-governance autonomy levels + Component Development Guide's token-selection framework; generated prompts teach right-token / right-tier / mathematical fit). The clean split (Part 1 of the evidence): a check may detect that a token appeared; it never verifies that its creation was sanctioned or that it is mathematically/semantically correct — those stay education's job."
229
+ history:
230
+ - { date: 2026-07-14, change: "entry created from Experiment 3 (token-approval boundary call + feasibility spike), U2 — boundary call and FP/FN adjudication are Ada's (token-owner judgment); Thurgood audited the evidence and landed this entry. Evidence: .kiro/specs/125-B-classification-map/completion/u2/exp3-spike-evidence.md", by: thurgood }
231
+ ```
232
+
233
+ ### console-fail-root-lanes
234
+
235
+ ```yaml
236
+ rule: "Root functional-lane test suites SHALL fail on unallowlisted console.error/console.warn output — expected noise is recorded in a checked-in per-suite allowlist (suite × message-pattern), not tolerated ambiently (Req 11)"
237
+ boundary_call:
238
+ class: functional
239
+ rationale: "An armed barrier against actual runtime output a test run produces — machine-checkable against the allowlist by construction; nothing to prune (no prose predecessor for this specific gate)"
240
+ verification:
241
+ disposition: barrier
242
+ owner: thurgood
243
+ check_state: armed
244
+ checks: ["root functional lane — src/__tests__/console-fail-setup.ts wired via jest.config.js setupFilesAfterEnv; every root-lane test file; gate-bite proven live during Task 4.4 (clean tests pass, an injected unallowlisted console.error/console.warn fails the test)"]
245
+ education:
246
+ disposition: "nothing to prune — no prose predecessor. The allowlist itself (src/__tests__/console-allowlist.json) is the citable record: each entry carries its own { suite, pattern, reason } — the adjudication lives with the data, not in steering prose."
247
+ history:
248
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.4): hook wired; allowlist seeded with 12 entries (10 from PR #39's adjudicated jsdom-stylesheet-limitation and deliberate-error-path-logging classes, discharging the pending jsdom-stylesheet-limitation doc-addition chip [125-B-backlog.md item 5]; 2 net-new — figma-extract.test.ts / figma-push.test.ts CLI-output classes discovered during this task's own full-suite gate-bite run); full root suite green (377 suites / 8987 tests). Mechanism built and row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
249
+ ```
250
+
251
+ ### console-fail-subpackage-deferred
252
+
253
+ ```yaml
254
+ rule: "Console-fail (console-fail-root-lanes) is NOT extended to the mcp-server / application-mcp-server sub-package suites for U2 — their own jest 29 configs sit outside the root jest.config.js's `roots`, so the root setupFilesAfterEnv hook never loads for them. A future extension MUST use a version-agnostic capture (plain method-swap / jest.spyOn without jest-30-only APIs) since those suites run under jest 29 (Design C8)"
255
+ boundary_call:
256
+ class: operational
257
+ rationale: "A scope decision about WHERE the functional console-fail rule runs, not the rule itself — the underlying property stays functional (see console-fail-root-lanes); this row records the deliberate root-lanes-only boundary plus the constraint a future implementer inherits, so the deferral is recorded rather than silently skipped"
258
+ verification:
259
+ disposition: none
260
+ owner: thurgood
261
+ check_state: none
262
+ checks: []
263
+ education:
264
+ disposition: "KEEP this row as the citable deferral record — no prose predecessor to prune. If ever replicated to the sub-packages, the version-agnostic constraint travels with this entry rather than being rediscovered."
265
+ history:
266
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.4) recording the root-lanes-only scope decision fixed in Design C8 — deferred, not silently skipped. Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
267
+ ```
268
+
269
+ ### wcag-format-validity
270
+
271
+ ```yaml
272
+ rule: "WCAG references on behavioral contracts SHALL follow the standard format — a numbered WCAG criterion plus text, single or comma-separated multiple ('N/A' exempt) — malformed references fail the check (behavioral-contract-validation.test.ts, 'WCAG references should follow standard format')"
273
+ boundary_call:
274
+ class: functional
275
+ rationale: "A machine-checkable string-shape property of a contract's wcag field — not a style/workflow preference"
276
+ verification:
277
+ disposition: barrier
278
+ owner: lina
279
+ check_state: armed
280
+ checks: ["behavioral-contract-validation.test.ts:355 'WCAG references should follow standard format' (root functional lane) — already blocking since 125-A; no implementation work performed in U2"]
281
+ education:
282
+ disposition: "nothing to prune — no prose predecessor. Record-only entry (Req 12.7): the check's already-armed state needed a citable register row; this is it."
283
+ history:
284
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.4, Req 12.7) — record-only: verified already armed/blocking since 125-A, no work performed. Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
285
+ ```
286
+
287
+ ### inverse-drift-incremental-build
288
+
289
+ ```yaml
290
+ rule: "The armed lane-functional-root required check rebuilds from a clean state on every run, which MASKS incremental-build breakage and stale-artifact test dependencies — a distinct risk from what the check verifies. Candidate mechanism: an incremental-path integrity check (not yet designed)"
291
+ boundary_call:
292
+ class: operational
293
+ rationale: "A workflow/tooling-integrity risk about HOW the check runs (clean vs. incremental rebuild), not a functional property of any single artifact — recorded as a known-deferred hazard, not yet a rule with a check"
294
+ verification:
295
+ disposition: none
296
+ owner: thurgood
297
+ check_state: proposed
298
+ checks: []
299
+ education:
300
+ disposition: "KEEP as the citable WATCH record — no prose predecessor to prune. Candidate mechanism noted for whoever picks this up."
301
+ history:
302
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.4) recording the known-deferred incremental-build / inverse-drift hazard at WATCH (check_state: proposed) — evidence: 125-B-backlog.md item 5; .kiro/specs/125-mechanical-enforcement-strategy/inbound-to-125-B-from-125-A.md §3 (STACY R1 item 4). Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
303
+ ```
304
+
305
+ ### wcag-required-refs
306
+
307
+ ```yaml
308
+ rule: "Behavioral contracts on the WCAG-required allowlist (exact `interaction_focusable`, `interaction_focus_ring`, `state_disabled`, `state_error`; `accessibility_*`; `content_*_label`) SHALL carry a WCAG reference (or the 'N/A' legitimate-null sentinel) — re-armed at the canonical allowlist after a period as DORMANT (armed but aimed at six retired legacy contract names) (Req 12.1–12.5)"
309
+ boundary_call:
310
+ class: functional
311
+ rationale: "A machine-checkable presence check against a contract's own wcag field, scoped to a defined allowlist — not a style/workflow preference"
312
+ verification:
313
+ disposition: barrier
314
+ owner: lina
315
+ check_state: armed
316
+ checks: ["behavioral-contract-validation.test.ts 'accessibility-related contracts should have WCAG references' (root functional lane) — re-armed at the canonical allowlist matcher (Req 12.1-12.3). Match-count floor: aggregate selection > 0 (69 selected at Task 4.2's audit) PLUS per-literal presence for interaction_focusable (7 live), interaction_focus_ring (10 live), state_error (4 live). state_disabled is EXCLUDED from the per-literal floor pending the Button-CTA disabled-state adjudication (Peter, 2026-07-14 amendment) — the matcher itself is unchanged: state_disabled contracts (currently 1 live, Button-CTA) are still selected and still must carry a valid wcag ref, proven live via a gate-bite mutation (Task 4.3)"]
317
+ education:
318
+ disposition: "nothing to prune — no prose predecessor taught the six-name trigger as a rule (it was implementation detail of a stale test, not documented education). The adjudication table (.kiro/specs/125-B-classification-map/completion/u2/stemma-pre-arm-adjudication.md) is the citable record of the 7 nulls resolved (4 genuine-defect fixes + 3 'N/A' legitimate-null exemptions) and the DD3 floor-input correction (design.md's recorded 11/11/21/4 were grep over-counts conflating live contracts: with excludes: blocks; true live counts are 7/10/1/4)."
319
+ history:
320
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.2 audit -> Task 4.3 arm): check re-armed, replacing the legacy 6-name trigger (behavioral-contract-validation.test.ts, formerly :325-350) with the normative allowlist matcher (C7) copied verbatim from .kiro/specs/125-B-classification-map/completion/u2/wcag-required-matcher.ts. State transition: DORMANT (armed-but-aimed-at-6-retired-legacy-names, discovered 125-B design-outline §3.3) -> armed (re-pointed at canonical allowlist; audit-clean per 4 WCAG-ref fixes + 3 legitimate-null 'N/A' exemptions applied to contracts.yaml BEFORE arming). Aggregate floor: 69 selected at audit. Bite-tested live (4 mutate/red/restore/green cycles). Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
321
+ - { date: 2026-07-14, change: "Per-literal floor set to THREE literals (interaction_focusable, interaction_focus_ring, state_error) per Peter's in-session amendment to DD3's originally-recorded four (design.md still records four; this entry is the citable deviation record). state_disabled EXCLUDED from the per-literal floor pending the Button-CTA disabled-state adjudication — the matcher's WCAG_REQUIRED_EXACT set is UNCHANGED: state_disabled contracts (1 live, Button-CTA) are still selected and still must carry a valid wcag ref; the amendment narrows the floor assertion only, not the selection. This defuses the razor's-edge coupling risk Lina raised as a PETER-ESCALATION in Task 4.2's adjudication table (.kiro/specs/125-B-classification-map/completion/u2/stemma-pre-arm-adjudication.md §7). Drafted by Lina; landed by Thurgood — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
322
+ ```
323
+
324
+ ### validation-criteria-completeness
325
+
326
+ ```yaml
327
+ rule: "All non-inherited behavioral contracts SHALL carry validation criteria — promoted from counting-without-failing (asserting only contractsWithValidation > 0) to a hard zero-tolerance assertion (withoutValidation === 0) after an audit found the corpus already clean (Req 12.6)"
328
+ boundary_call:
329
+ class: functional
330
+ rationale: "A machine-checkable presence check against a contract's own validation field; the domain-owner position (Lina) is that zero-validation is a defect by definition, not a style preference (DD4)"
331
+ verification:
332
+ disposition: barrier
333
+ owner: lina
334
+ check_state: armed
335
+ checks: ["behavioral-contract-validation.test.ts 'all contracts should have validation criteria' (root functional lane), formerly :435 -- promoted from toBeGreaterThan(0) to expect(contractsWithoutValidation).toBe(0); inherited-contract skip preserved. Bite-tested live: emptying a non-inherited contract's validation array reds the check; restored to green."]
336
+ education:
337
+ disposition: "nothing to prune -- no prose predecessor. DD4's no-exemption-mechanism rationale (a zero-validation contract is defective by definition; escalate, don't self-exempt) is the citable design rationale, not restated in steering prose."
338
+ history:
339
+ - { date: 2026-07-14, change: "entry created (U2, Task 4.2 inventory -> Task 4.3 promotion): pre-promotion inventory (Task 4.2) found 234 non-inherited contracts, 0 without validation -- zero fixes, zero DD4 escalations needed (no trigger existed). Assertion promoted audit-first per Req 12.6 / Peter's 2026-07-13 approval. Flagged by Lina as beyond the explicit (a)/(b) drafting scope (one-rule-per-entry: this promotion governs a distinct assertion from wcag-required-refs) and accepted for landing on that basis. Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
340
+ ```
341
+
342
+ ### certainty-calibration
343
+
344
+ ```yaml
345
+ rule: "Discovery-time certainty calibration — weight discovery results by match strength (strong / partial / none): search before guessing; strong -> act on it; partial -> a candidate, not an answer — propose best-fit + confidence + rationale and confirm before acting; none -> never fabricate a location or proceed confidently — state what was searched, propose the best guess, ask the human for go/no-go; when still unsure, surface it"
346
+ boundary_call:
347
+ class: ideological
348
+ rationale: "The rule governs judgment quality at discovery time — CI validates function, never ideology: there is no mechanical predicate for 'calibrated well', so no check can own compliance; the education layer owns the rule"
349
+ verification:
350
+ disposition: none
351
+ owner: thurgood
352
+ check_state: none
353
+ checks: []
354
+ rationale: "No CI hook. A narrow future hook — e.g. a prompt-lint asserting the generated pointer cue's PRESENCE in agent outputs — is noted as possible, NOT adopted: it would verify delivery of the education, never compliance with the rule"
355
+ education:
356
+ disposition: "KEEP — durable and specific-but-stable by the churn-rate test (the strong/partial/none contract tracks the shipped Spec-121 matchConfidence signal, not implementation detail). Canonical prose lives in AI-Collaboration-Principles § 'Certainty Calibration: Finding Guidance Before You Guess' (refined-not-rewritten by 119-B, design § 4b). Delivery surfaces: Kiro always-load + CLAUDE.md @-import (the always layer), plus ONE generated discovery-adjacent pointer cue landing with 119-B U-final (design § 4c) — single canonical snippet, zero restated semantics per surface"
357
+ trigger_scope: "Discovery-time uncertainty about WHERE GUIDANCE LIVES — not a general epistemic protocol for all judgments (scope expansion is the likeliest accidental-rewrite mode; R8 AC5)"
358
+ signal_scope: "Surfaces that emit matchConfidence — signal emission is the operative test, not server identity. Signal-less surfaces (deterministic lookups, search_tokens partial matching, find_screens / find_templates) are OUT of scope: prose either states their degraded behavior or stays silent; the search_tokens partial-match gap is routed to Ada as .kiro/issues/2026-07-19-application-mcp-search-tokens-partial-match-signal.md"
359
+ enumeration_home:
360
+ canonical: "THIS field is the single canonical home of the emitting-tools enumeration (the three-surface fork guard). Currently emitting matchConfidence: find_docs (incl. top-level matchConfidence 'none' on zero-hit); keyworded find_components. Citing surfaces — the AICP settled reference (4b) and the generated pointer cue (4c) — carry the 'enumeration illustrative; signal emission is the operative test' hedge and cite this entry; they never independently assert the list"
361
+ update_trigger: "A new tool emitting matchConfidence updates THIS field; citing surfaces inherit through the hedge, or are touched in the same edit"
362
+ attribution:
363
+ drafted_by: thurgood
364
+ landed_by: thurgood
365
+ second_eye: "Peter's ratification (R1 AC3; scope-pass A3-as-ratified) — the row is presented for ratification with the 119-B U1 PR and reaches main only through Peter's ratifying merge; a light Ada/Lina consumer review may be added at Peter's option"
366
+ history:
367
+ - { date: 2026-08-02, change: "entry created (119-B Task 1, unit U1 — window-free per R1 AC1; lands pre-measurement under the ratified R11 AC2 exception, with the keyword-shadowing check scheduled in the U2 case-study findings). Cite as governance/classification-map.md § 'certainty-calibration' (entry-id grammar, never count/position — R1 AC4). Drafted and landed by Thurgood per the steward-writes-register convention; pending Peter's ratification at the U1 merge. Evidence: .kiro/specs/119-B-capability-routing-measurement/completion/task-1-completion.md", by: thurgood }
368
+ ```
@@ -8,7 +8,7 @@ description: Comprehensive completion and summary documentation guide — two-do
8
8
  # Completion Documentation Guide
9
9
 
10
10
  **Date**: 2026-01-03
11
- **Last Reviewed**: 2026-02-28
11
+ **Last Reviewed**: 2026-07-05
12
12
  **Purpose**: Comprehensive guide for creating completion and summary documentation
13
13
  **Organization**: process-standard
14
14
  **Scope**: cross-project
@@ -78,7 +78,7 @@ Documentation tiers define the depth and comprehensiveness of completion documen
78
78
  **For complete tier definitions and templates**, query Spec Planning Standards via MCP:
79
79
 
80
80
  ```
81
- get_section({ path: ".kiro/steering/Process-Spec-Planning.md", heading: "Three-Tier Completion Documentation System" })
81
+ get_section({ path: "process-spec-planning", heading: "Three-Tier Completion Documentation System" })
82
82
  ```
83
83
 
84
84
  ---
@@ -166,6 +166,7 @@ docs/specs/[spec-name]/ # Public-facing documentation (TRIGGER
166
166
  **Task**: N.M [Task description from tasks.md]
167
167
  **Type**: Implementation
168
168
  **Status**: Complete
169
+ **Delegated-tier** _(optional — include ONLY if the executing agent/model diverged from the task's planned `**Agent**: <agent> (<Model>)`)_: planned `<agent> (<Model>)` → actual `<agent> (<Model>)` — <one-line reason; flag whether it was agent-evolution (routing/scope) or model-evolution (cognitive-demand)>. See `process-orchestration-model-selection`.
169
170
 
170
171
  ---
171
172
 
@@ -288,7 +289,7 @@ Detailed completion documents can optionally link to the summary document:
288
289
 
289
290
  ### Automatic Analysis
290
291
 
291
- `commit-task.sh` runs release analysis automatically after each task commit. For on-demand analysis:
292
+ Release analysis runs post-merge on `main` (non-blocking). For on-demand analysis:
292
293
 
293
294
  ```bash
294
295
  npm run release:analyze
@@ -351,8 +352,10 @@ If AI agent created the summary document, you MUST run:
351
352
  - [ ] Create summary doc: `docs/specs/[spec-name]/task-N-summary.md`
352
353
  - [ ] Trigger release detection: `./.kiro/hooks/release-manager.sh auto`
353
354
  - [ ] Mark parent task complete using `taskStatus` tool
354
- - [ ] Commit changes: `./.kiro/hooks/commit-task.sh "Task N Complete: Description"`
355
- - [ ] STOP and wait for user authorization
355
+ - [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."` — completion and summary docs travel on the branch.
356
+ - **If this parent IS its own merge unit** (a standalone task, or a small single-unit spec): the tooling opens the PR.
357
+ - **If this parent is one of several in a declared multi-parent unit** (spec's tasks.md unit grouping): the tooling commits the docs on the branch — **no PR yet**; the PR opens at UNIT completion.
358
+ - [ ] STOP — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. The task is **accepted when the UNIT merges**.
356
359
 
357
360
  ---
358
361
 
@@ -365,7 +368,7 @@ If AI agent created the summary document, you MUST run:
365
368
 
366
369
  **MCP Queries**:
367
370
  ```
368
- get_section({ path: ".kiro/steering/Process-Spec-Planning.md", heading: "Three-Tier Completion Documentation System" })
369
- get_section({ path: ".kiro/steering/Process-Development-Workflow.md", heading: "Task Completion Workflow" })
370
- get_section({ path: ".kiro/steering/Release Management System.md", heading: "Release Pipeline Architecture" })
371
+ get_section({ path: "process-spec-planning", heading: "Three-Tier Completion Documentation System" })
372
+ get_section({ path: "process-development-workflow", heading: "Task Completion Workflow" })
373
+ get_section({ path: "release-management-system", heading: "Release Pipeline Architecture" })
371
374
  ```
@@ -229,7 +229,7 @@ Component-meta.yaml does NOT currently include a `data_shapes:` field for descri
229
229
 
230
230
  Or query via MCP:
231
231
  ```
232
- get_section({ path: ".kiro/steering/Component-Meta-Data-Shapes-Governance.md", heading: "Trigger Criteria" })
232
+ get_section({ path: "component-meta-data-shapes-governance", heading: "Trigger Criteria" })
233
233
  ```
234
234
 
235
235
  **Any agent creating or reviewing a component-meta.yaml should evaluate the trigger criteria in that doc.** If any criterion is met, follow the escalation process defined there.
@@ -9,7 +9,7 @@ description: Strategic guidance on when to use cross-platform patterns vs platfo
9
9
  # Cross-Platform vs Platform-Specific Decision Framework
10
10
 
11
11
  **Date**: 2025-12-19
12
- **Last Reviewed**: 2025-12-19
12
+ **Last Reviewed**: 2026-07-08
13
13
  **Purpose**: Strategic guidance on when to use cross-platform patterns vs platform-specific idioms
14
14
  **Organization**: process-standard
15
15
  **Scope**: cross-project
@@ -14,7 +14,7 @@ description: Guidelines for maintaining cross-platform behavioral consistency
14
14
  **Scope**: cross-project
15
15
  **Layer**: 2
16
16
  **Relevant Tasks**: component-development, cross-platform-validation, testing
17
- **Last Reviewed**: 2026-01-02
17
+ **Last Reviewed**: 2026-07-08
18
18
 
19
19
  ---
20
20
 
@@ -6,7 +6,7 @@ inclusion: manual
6
6
  # Release Management System
7
7
 
8
8
  **Date**: 2026-02-28
9
- **Last Reviewed**: 2026-02-28
9
+ **Last Reviewed**: 2026-07-05
10
10
  **Last Updated**: 2026-02-28
11
11
  **Purpose**: Mental model of the release management system for AI agents
12
12
  **Organization**: process-standard
@@ -82,7 +82,7 @@ Must be `docs/specs/[spec-name]/task-N-summary.md` — the scanner looks here vi
82
82
 
83
83
  ## Post-Commit Analysis
84
84
 
85
- `commit-task.sh` runs `release:analyze` after each task commit (non-blocking, fails silently). This provides immediate feedback on accumulated change significance. Skip with `--no-analyze` flag.
85
+ `release:analyze` runs post-merge on `main` (non-blocking, informational) — merged history is the analysis's correct input. Run `npm run release:analyze` locally for on-demand detail.
86
86
 
87
87
  ---
88
88
 
@@ -13,7 +13,7 @@ description: Rosetta System foundational principles — primitive-to-semantic hi
13
13
  **Scope**: cross-project
14
14
  **Layer**: 2
15
15
  **Relevant Tasks**: token-development, architecture, spec-planning
16
- **Last Reviewed**: 2026-01-03
16
+ **Last Reviewed**: 2026-07-09
17
17
 
18
18
  ---
19
19
 
@@ -138,10 +138,12 @@ Mathematical foundation allows documented exceptions for design requirements:
138
138
  | **Radius** | Shape definition | radius100, radius200 | radius.button, radius.card |
139
139
  | **Shadow** | Depth and elevation | shadowBlur200, shadowOpacity300 | shadow.container, shadow.modal |
140
140
  | **Glow** | Emphasis effects | glowBlur200, glowOpacity100 | glow.focus, glow.highlight |
141
- | **Opacity** | Transparency | opacity048, opacity080 | opacity.disabled, opacity.hover |
141
+ | **Opacity** | Transparency | opacity048, opacity080 | opacity.ghost, opacity.heavy |
142
142
  | **Blend** | Color modification | blend100, blend200 | blend.hoverDarker, blend.focusSaturate |
143
143
  | **Border** | Edge definition | borderWidth100, borderWidth200 | border.input, border.focus |
144
144
  | **Motion** | Animation timing | duration250, easingStandard | motion.floatLabel |
145
+ | **Sizing** | Component dimensions (width, height, box size) | size100, size300 | - |
146
+ | **Blur** | Edge softness, radial spread, backdrop obscuring (composed into Shadow, Glow) | blur100, blur200 | - |
145
147
  | **Layering** | Stacking order | - | zIndex.modal, elevation.card |
146
148
  | **Accessibility** | WCAG compliance | tapArea44, tapArea48 | accessibility.touchTarget |
147
149
 
@@ -522,8 +524,8 @@ Rosetta Token System
522
524
  Rosetta System documentation is accessible via MCP:
523
525
 
524
526
  ```
525
- get_document_summary({ path: ".kiro/steering/rosetta-system-principles.md" })
526
- get_section({ path: ".kiro/steering/rosetta-system-principles.md", heading: "Mathematical Relationships" })
527
+ get_document_summary({ path: "rosetta-system-principles" })
528
+ get_section({ path: "rosetta-system-principles", heading: "Mathematical Relationships" })
527
529
  ```
528
530
 
529
531
  ---
@@ -581,8 +583,8 @@ get_section({ path: ".kiro/steering/rosetta-system-principles.md", heading: "Mat
581
583
  ## Related Documentation
582
584
 
583
585
  - [Stemma System Principles](stemma-system-principles) - Relational foundation for component development
584
- - [Civitas System Overview](civitas-system-overview) - Governance foundation for operational consistency
585
- - [DesignerPunk Systems Overview](designerpunk-systems-overview) - Visual architecture of all three systems
586
+ - [Civitas System Overview](../.kiro/steering/Civitas-System-Overview.md) - Governance foundation for operational consistency
587
+ - [DesignerPunk Systems Overview](../.kiro/steering/DesignerPunk-Systems-Overview.md) - Visual architecture of all three systems
586
588
  - [Token System Overview](../../docs/token-system-overview.md) - Master document mapping token files
587
589
  - [Token Quick Reference](token-quick-reference) - Token documentation routing
588
590
  - [Token Architecture 2.0 Mathematics](../../preserved-knowledge/token-architecture-2-0-mathematics.md) - Detailed mathematical formulas
@@ -13,7 +13,7 @@ description: Foundational principles and governance for systematic component dev
13
13
  **Scope**: cross-project
14
14
  **Layer**: 2
15
15
  **Relevant Tasks**: component-development, architecture, spec-planning
16
- **Last Reviewed**: 2026-01-01
16
+ **Last Reviewed**: 2026-07-09
17
17
 
18
18
  ---
19
19
 
@@ -127,7 +127,7 @@ Behavioral contracts work uniformly across web, iOS, and Android:
127
127
  | **Data Displays** | Information presentation | DataDisplay-Base | Placeholder |
128
128
  | **Dividers** | Visual separation | Divider-Base | Placeholder |
129
129
  | **Loading** | Progress indication | Loading-Base | Placeholder |
130
- | **Navigation** | Wayfinding | Nav-Base | Placeholder |
130
+ | **Navigation** | Wayfinding | Nav-Header-Base | Active |
131
131
 
132
132
  ### Family Inheritance Structure
133
133
 
@@ -161,7 +161,8 @@ base_contracts:
161
161
  - validatable
162
162
  - float_label_animation
163
163
  - error_state_display
164
- - disabled_state
164
+ # No disabled_state — DesignerPunk does not support disabled states
165
+ # (adjudicated 2026-07-15). If unavailable, don't render the component.
165
166
 
166
167
  # Input-Text-Email extends with:
167
168
  extended_contracts:
@@ -554,11 +555,9 @@ Input-Text-Base:
554
555
  type: string
555
556
  required: false
556
557
  description: Placeholder text when empty
557
- disabled:
558
- type: boolean
559
- required: false
560
- default: false
561
- description: Whether input is disabled
558
+ # No `disabled` prop — DesignerPunk does not support disabled states
559
+ # (adjudicated 2026-07-15). If the field is unavailable, don't render it;
560
+ # use `readOnly` when the value should stay visible but not be editable.
562
561
  error:
563
562
  type: string
564
563
  required: false
@@ -577,10 +576,9 @@ Input-Text-Base:
577
576
  description: Displays error message and visual error indication
578
577
  platforms: [web, ios, android]
579
578
  required: true
580
- - name: supports_disabled_state
581
- description: Prevents interaction when disabled
582
- platforms: [web, ios, android]
583
- required: true
579
+ # No supports_disabled_state contract — DesignerPunk does not support
580
+ # disabled states for usability and accessibility reasons (adjudicated
581
+ # 2026-07-15). If unavailable, don't render the component.
584
582
 
585
583
  tokens:
586
584
  - typography.input.*
@@ -712,7 +710,10 @@ LoginForm:
712
710
  behavioral_contracts:
713
711
  - form_validation_on_submit
714
712
  - field_validation_on_blur
715
- - submit_button_disabled_until_valid
713
+ # Submit button stays interactive at all times — validation runs on press
714
+ # and surfaces field errors. DesignerPunk does not support disabled states
715
+ # (adjudicated 2026-07-15), so never gate the button on form validity.
716
+ - submit_validates_on_press
716
717
  ```
717
718
 
718
719
  #### Feed Post Pattern
@@ -828,8 +829,8 @@ Rosetta Token System
828
829
  Stemma System documentation is accessible via MCP:
829
830
 
830
831
  ```
831
- get_document_summary({ path: ".kiro/steering/stemma-system-principles.md" })
832
- get_section({ path: ".kiro/steering/stemma-system-principles.md", heading: "Component Schema Format" })
832
+ get_document_summary({ path: "stemma-system-principles" })
833
+ get_section({ path: "stemma-system-principles", heading: "Component Schema Format" })
833
834
  ```
834
835
 
835
836
  ---
@@ -886,8 +887,8 @@ get_section({ path: ".kiro/steering/stemma-system-principles.md", heading: "Comp
886
887
 
887
888
  ## Related Documentation
888
889
 
889
- - [Civitas System Overview](civitas-system-overview) - Governance foundation for operational consistency
890
- - [DesignerPunk Systems Overview](designerpunk-systems-overview) - Visual architecture of all three systems
890
+ - [Civitas System Overview](../.kiro/steering/Civitas-System-Overview.md) - Governance foundation for operational consistency
891
+ - [DesignerPunk Systems Overview](../.kiro/steering/DesignerPunk-Systems-Overview.md) - Visual architecture of all three systems
891
892
  - [Primitive vs Semantic Usage Philosophy](primitive-vs-semantic-usage-philosophy) - Comprehensive decision guidance for component selection
892
893
  - [Component Schema Format Specification](component-schema-format) - Formal schema structure and validation rules
893
894
  - [Component Readiness Status System](component-readiness-status) - Comprehensive readiness status definitions and transition guidelines