@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
@@ -69,7 +69,7 @@ Type primitives are specialized components within a family that provide opiniona
69
69
 
70
70
  For detailed Container-Card-Base documentation including props mapping, interactive behavior, and usage examples:
71
71
  ```
72
- get_section({ path: ".kiro/steering/Component-Family-Container.md", heading: "Container-Card-Base" })
72
+ get_section({ path: "component-family-container", heading: "Container-Card-Base" })
73
73
  ```
74
74
 
75
75
  ## Naming Convention
@@ -156,22 +156,22 @@ Returns metadata and outline (~200 tokens) to understand document structure befo
156
156
 
157
157
  ```
158
158
  // Understand Form Inputs family structure
159
- get_document_summary({ path: ".kiro/steering/Component-Family-Form-Inputs.md" })
159
+ get_document_summary({ path: "component-family-form-inputs" })
160
160
 
161
161
  // Understand Button family structure
162
- get_document_summary({ path: ".kiro/steering/Component-Family-Button.md" })
162
+ get_document_summary({ path: "component-family-button" })
163
163
 
164
164
  // Understand Container family structure
165
- get_document_summary({ path: ".kiro/steering/Component-Family-Container.md" })
165
+ get_document_summary({ path: "component-family-container" })
166
166
 
167
167
  // Understand Icon family structure
168
- get_document_summary({ path: ".kiro/steering/Component-Family-Icon.md" })
168
+ get_document_summary({ path: "component-family-icon" })
169
169
 
170
170
  // Understand Chip family structure
171
- get_document_summary({ path: ".kiro/steering/Component-Family-Chip.md" })
171
+ get_document_summary({ path: "component-family-chip" })
172
172
 
173
173
  // Get Container-Card-Base type primitive details
174
- get_section({ path: ".kiro/steering/Component-Family-Container.md", heading: "Container-Card-Base" })
174
+ get_section({ path: "component-family-container", heading: "Container-Card-Base" })
175
175
  ```
176
176
 
177
177
  **Returns**: Document metadata (purpose, layer, relevant tasks) plus section outline with headings.
@@ -182,37 +182,37 @@ Returns targeted content (~500-2,000 tokens) for specific information needs:
182
182
 
183
183
  ```
184
184
  // Get component behavioral contracts
185
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Behavioral Contracts" })
185
+ get_section({ path: "component-family-form-inputs", heading: "Behavioral Contracts" })
186
186
 
187
187
  // Get contract system conventions (taxonomy, naming, format)
188
- get_section({ path: ".kiro/steering/Contract-System-Reference.md", heading: "Taxonomy" })
189
- get_section({ path: ".kiro/steering/Contract-System-Reference.md", heading: "Naming Convention" })
190
- get_section({ path: ".kiro/steering/Contract-System-Reference.md", heading: "Canonical Format" })
188
+ get_section({ path: "contract-system-reference", heading: "Taxonomy" })
189
+ get_section({ path: "contract-system-reference", heading: "Naming Convention" })
190
+ get_section({ path: "contract-system-reference", heading: "Canonical Format" })
191
191
 
192
192
  // Get inheritance structure
193
- get_section({ path: ".kiro/steering/Component-Family-Button.md", heading: "Inheritance Structure" })
193
+ get_section({ path: "component-family-button", heading: "Inheritance Structure" })
194
194
 
195
195
  // Get token dependencies
196
- get_section({ path: ".kiro/steering/Component-Family-Container.md", heading: "Token Dependencies" })
196
+ get_section({ path: "component-family-container", heading: "Token Dependencies" })
197
197
 
198
198
  // Get usage guidelines
199
- get_section({ path: ".kiro/steering/Component-Family-Icon.md", heading: "Usage Guidelines" })
199
+ get_section({ path: "component-family-icon", heading: "Usage Guidelines" })
200
200
 
201
201
  // Get Chip family behavioral contracts
202
- get_section({ path: ".kiro/steering/Component-Family-Chip.md", heading: "Behavioral Contracts" })
202
+ get_section({ path: "component-family-chip", heading: "Behavioral Contracts" })
203
203
 
204
204
  // Get cross-platform notes
205
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Cross-Platform Notes" })
205
+ get_section({ path: "component-family-form-inputs", heading: "Cross-Platform Notes" })
206
206
 
207
207
  // Get radio component details
208
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Radio-Base" })
209
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Radio-Set" })
208
+ get_section({ path: "component-family-form-inputs", heading: "Input-Radio-Base" })
209
+ get_section({ path: "component-family-form-inputs", heading: "Input-Radio-Set" })
210
210
 
211
211
  // Get component schema definitions
212
- get_section({ path: ".kiro/steering/Component-Family-Button.md", heading: "Component Schemas" })
212
+ get_section({ path: "component-family-button", heading: "Component Schemas" })
213
213
 
214
214
  // Get placeholder family planned characteristics
215
- get_section({ path: ".kiro/steering/Component-Family-Modal.md", heading: "Planned Characteristics" })
215
+ get_section({ path: "component-family-modal", heading: "Planned Characteristics" })
216
216
  ```
217
217
 
218
218
  **Returns**: Section content with parent heading context for document location.
@@ -223,10 +223,10 @@ Returns complete content (~2,000-10,000 tokens) when comprehensive reference is
223
223
 
224
224
  ```
225
225
  // Full Form Inputs family reference
226
- get_document_full({ path: ".kiro/steering/Component-Family-Form-Inputs.md" })
226
+ get_document_full({ path: "component-family-form-inputs" })
227
227
 
228
228
  // Full Button family reference
229
- get_document_full({ path: ".kiro/steering/Component-Family-Button.md" })
229
+ get_document_full({ path: "component-family-button" })
230
230
  ```
231
231
 
232
232
  **Use sparingly**: Only when you need complete component family documentation.
@@ -241,10 +241,10 @@ find_docs({ concept: "form inputs" }) // discover by concept/keyword
241
241
  find_docs({ list: true }) // full catalog, paginated
242
242
 
243
243
  // List cross-references in a document
244
- list_cross_references({ path: ".kiro/steering/Component-Family-Form-Inputs.md" })
244
+ list_cross_references({ path: "component-family-form-inputs" })
245
245
 
246
246
  // Validate document metadata schema
247
- validate_metadata({ path: ".kiro/steering/Component-Family-Button.md" })
247
+ validate_metadata({ path: "component-family-button" })
248
248
 
249
249
  // Check documentation index health
250
250
  get_index_health()
@@ -270,30 +270,30 @@ rebuild_index()
270
270
  **Example: Building a Login Form:**
271
271
  ```
272
272
  // Step 1: Get Form Inputs overview
273
- get_document_summary({ path: ".kiro/steering/Component-Family-Form-Inputs.md" })
273
+ get_document_summary({ path: "component-family-form-inputs" })
274
274
 
275
275
  // Step 2: Get specific component contracts
276
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Text-Email" })
277
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Text-Password" })
276
+ get_section({ path: "component-family-form-inputs", heading: "Input-Text-Email" })
277
+ get_section({ path: "component-family-form-inputs", heading: "Input-Text-Password" })
278
278
 
279
279
  // Step 3: Get button for submit action
280
- get_section({ path: ".kiro/steering/Component-Family-Button.md", heading: "Button-CTA" })
280
+ get_section({ path: "component-family-button", heading: "Button-CTA" })
281
281
 
282
282
  // Step 4: Get container for layout
283
- get_section({ path: ".kiro/steering/Component-Family-Container.md", heading: "Container-Base" })
283
+ get_section({ path: "component-family-container", heading: "Container-Base" })
284
284
  ```
285
285
 
286
286
  **Example: Building a Survey with Radio Groups:**
287
287
  ```
288
288
  // Step 1: Get radio component details
289
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Radio-Base" })
290
- get_section({ path: ".kiro/steering/Component-Family-Form-Inputs.md", heading: "Input-Radio-Set" })
289
+ get_section({ path: "component-family-form-inputs", heading: "Input-Radio-Base" })
290
+ get_section({ path: "component-family-form-inputs", heading: "Input-Radio-Set" })
291
291
 
292
292
  // Step 2: Get container for section layout
293
- get_section({ path: ".kiro/steering/Component-Family-Container.md", heading: "Container-Base" })
293
+ get_section({ path: "component-family-container", heading: "Container-Base" })
294
294
 
295
295
  // Step 3: Get button for submit
296
- get_section({ path: ".kiro/steering/Component-Family-Button.md", heading: "Button-CTA" })
296
+ get_section({ path: "component-family-button", heading: "Button-CTA" })
297
297
  ```
298
298
 
299
299
  ## Related Documentation
@@ -13,7 +13,7 @@ description: Readiness status definitions, usage recommendations, and transition
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
 
@@ -520,7 +520,7 @@ metadata:
520
520
  **Query component readiness**:
521
521
  ```
522
522
  get_section({
523
- path: ".kiro/steering/Component-Family-Form-Inputs.md",
523
+ path: "component-family-form-inputs",
524
524
  heading: "Component Readiness"
525
525
  })
526
526
  ```
@@ -544,54 +544,70 @@ get_section({
544
544
  | Component Family | Shared Need/Purpose | Status | MCP Document Path |
545
545
  |------------------|---------------------|--------|-------------------|
546
546
  | Buttons | User interaction and actions | 🟢 | `.kiro/steering/Component-Family-Button.md` |
547
- | Form Inputs | Data collection and validation | 🟢 | `.kiro/steering/Component-Family-Form-Inputs.md` |
548
- | Containers | Layout and content organization | 🟢 | `.kiro/steering/Component-Family-Container.md` |
549
- | Icons | Visual communication | 🔴 | `.kiro/steering/Component-Family-Icon.md` |
547
+ | Form Inputs | Data collection and validation | 🟡 | `.kiro/steering/Component-Family-Form-Inputs.md` |
548
+ | Containers | Layout and content organization | 🟡 | `.kiro/steering/Component-Family-Container.md` |
549
+ | Icons | Visual communication | 🟡 | `.kiro/steering/Component-Family-Icon.md` |
550
+ | Avatars | Identity representation | 🟡 | `.kiro/steering/Component-Family-Avatar.md` |
551
+ | Badges & Tags | Status and labeling | 🟡 | `.kiro/steering/Component-Family-Badge.md` |
552
+ | Chips | Selection, filtering, and input tokens | 🟡 | `.kiro/steering/Component-Family-Chip.md` |
553
+ | Navigation | Wayfinding | 🟡 | `.kiro/steering/Component-Family-Navigation.md` |
554
+ | Progress Indicators | Progress and step indication | 🟡 | `.kiro/steering/Component-Family-Progress.md` |
550
555
  | Modals | Overlay interactions | 🔴 | `.kiro/steering/Component-Family-Modal.md` |
551
- | Avatars | Identity representation | 🔴 | `.kiro/steering/Component-Family-Avatar.md` |
552
- | Badges & Tags | Status and labeling | 🔴 | `.kiro/steering/Component-Family-Badge.md` |
553
556
  | Data Displays | Information presentation | 🔴 | `.kiro/steering/Component-Family-Data-Display.md` |
554
557
  | Dividers | Visual separation | 🔴 | `.kiro/steering/Component-Family-Divider.md` |
555
558
  | Loading | Progress indication | 🔴 | `.kiro/steering/Component-Family-Loading.md` |
556
- | Navigation | Wayfinding | 🔴 | `.kiro/steering/Component-Family-Navigation.md` |
557
559
  ```
558
560
 
561
+ > **🟡 in this table = "shipping, web production-ready, iOS/Android scaffold"** — the family has usable web implementations but has not reached the strict all-platform 🟢 bar. Per-component per-platform detail is in the Individual Component Status table below. Buttons is 🟢 only because it contains all-platform-production components (Button-VerticalList-Item/Set); its CTA/Icon members are themselves web-ready/mobile-scaffold. 🔴 families are genuine placeholders (no components ship).
562
+
559
563
  ---
560
564
 
561
565
  ## Individual Component Status
562
566
 
563
567
  This section lists all implemented components with their readiness status and implementation paths. Used by extraction workflows to check component existence and status.
564
568
 
565
- | Component | Family | Status | Implementation Path |
566
- |-----------|--------|--------|---------------------|
567
- | Avatar | Avatars | 🟡 Beta | `src/components/core/Avatar/` |
568
- | BadgeCountBase | Badges & Tags | 🟢 Production Ready | `src/components/core/Badge-Count-Base/` |
569
- | BadgeCountNotification | Badges & Tags | 🟢 Production Ready | `src/components/core/Badge-Count-Notification/` |
570
- | BadgeLabelBase | Badges & Tags | 🟢 Production Ready | `src/components/core/Badge-Label-Base/` |
571
- | ButtonCTA | Buttons | 🟢 Production Ready | `src/components/core/Button-CTA/` |
572
- | ButtonIcon | Buttons | 🟢 Production Ready | `src/components/core/Button-Icon/` |
573
- | ButtonVerticalListItem | Buttons | 🟢 Production Ready | `src/components/core/Button-VerticalList-Item/` |
574
- | ButtonVerticalListSet | Buttons | 🟢 Production Ready | `src/components/core/Button-VerticalList-Set/` |
575
- | ChipBase | Badges & Tags | 🟢 Production Ready | `src/components/core/Chip-Base/` |
576
- | ChipFilter | Badges & Tags | 🟢 Production Ready | `src/components/core/Chip-Filter/` |
577
- | ChipInput | Badges & Tags | 🟢 Production Ready | `src/components/core/Chip-Input/` |
578
- | ContainerBase | Containers | 🟢 Production Ready | `src/components/core/Container-Base/` |
579
- | ContainerCardBase | Containers | 🟢 Production Ready | `src/components/core/Container-Card-Base/` |
580
- | IconBase | Icons | 🟢 Production Ready | `src/components/core/Icon-Base/` |
581
- | InputCheckboxBase | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Checkbox-Base/` |
582
- | InputCheckboxLegal | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Checkbox-Legal/` |
583
- | InputRadioBase | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Radio-Base/` |
584
- | InputRadioSet | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Radio-Set/` |
585
- | InputTextBase | Form Inputs | ⚠️ Deprecated | `src/components/core/Input-Text-Base/` |
586
- | InputTextEmail | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Text-Email/` |
587
- | InputTextPassword | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Text-Password/` |
588
- | InputTextPhoneNumber | Form Inputs | 🟢 Production Ready | `src/components/core/Input-Text-PhoneNumber/` |
589
- | ProgressIndicatorConnectorBase | Loading | 🟢 Production Ready | `src/components/core/Progress-Indicator-Connector-Base/` |
590
- | ProgressIndicatorLabelBase | Loading | 🟢 Production Ready | `src/components/core/Progress-Indicator-Label-Base/` |
591
- | ProgressIndicatorNodeBase | Loading | 🟢 Production Ready | `src/components/core/Progress-Indicator-Node-Base/` |
592
- | ProgressPaginationBase | Loading | 🟢 Production Ready | `src/components/core/Progress-Pagination-Base/` |
593
- | ProgressStepperBase | Loading | 🟢 Production Ready | `src/components/core/Progress-Stepper-Base/` |
594
- | ProgressStepperDetailed | Loading | 🟢 Production Ready | `src/components/core/Progress-Stepper-Detailed/` |
569
+ **Per-platform status convention**: readiness is tracked per platform (web / iOS / Android). The **Status** column carries a single roll-up indicator; the **Platform Readiness** column shows the honest per-platform breakdown so no component's mobile immaturity is hidden behind a green light.
570
+
571
+ - 🟢 **Production Ready** — production-ready across ALL declared platforms (web, iOS, Android), per the strict definition above. Currently only Button-VerticalList-Item and Button-VerticalList-Set meet this bar.
572
+ - 🟡 **Web-ready, mobile-scaffold** — web is production-ready (implemented, tested, documented) but iOS and Android are scaffold (structure present, not test-covered). Safe to consume on web; treat mobile as not-yet-ready.
573
+ - 🟡 **Scaffold (all platforms)** — structure present on all platforms but none production-ready; intentional for permissive/internal primitives (noted inline).
574
+
575
+ | Component | Family | Status | Platform Readiness (web / iOS / Android) | Implementation Path |
576
+ |-----------|--------|--------|------------------------------------------|---------------------|
577
+ | Avatar-Base | Avatar | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Avatar-Base/` |
578
+ | Badge-Count-Base | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Count-Base/` |
579
+ | Badge-Count-Notification | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Count-Notification/` |
580
+ | Badge-Label-Base | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Label-Base/` |
581
+ | Button-CTA | Button | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Button-CTA/` |
582
+ | Button-Icon | Button | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Button-Icon/` |
583
+ | Button-VerticalList-Item | Button | 🟢 | 🟢 / 🟢 / 🟢 | `src/components/core/Button-VerticalList-Item/` |
584
+ | Button-VerticalList-Set | Button | 🟢 | 🟢 / 🟢 / 🟢 | `src/components/core/Button-VerticalList-Set/` |
585
+ | Chip-Base | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Base/` |
586
+ | Chip-Filter | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Filter/` |
587
+ | Chip-Input | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Input/` |
588
+ | Container-Base | Container | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Container-Base/` |
589
+ | Container-Card-Base | Container | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Container-Card-Base/` |
590
+ | Icon-Base | Icon | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Icon-Base/` |
591
+ | Input-Checkbox-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Checkbox-Base/` |
592
+ | Input-Checkbox-Legal | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Checkbox-Legal/` |
593
+ | Input-Radio-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Radio-Base/` |
594
+ | Input-Radio-Set | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Radio-Set/` |
595
+ | Input-Text-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Base/` |
596
+ | Input-Text-Email | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Email/` |
597
+ | Input-Text-Password | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Password/` |
598
+ | Input-Text-PhoneNumber | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-PhoneNumber/` |
599
+ | Nav-Header-Page | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-Header-Page/` |
600
+ | Nav-SegmentedChoice-Base | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-SegmentedChoice-Base/` |
601
+ | Nav-TabBar-Base | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-TabBar-Base/` |
602
+ | Nav-Header-App | Navigation | 🟡 | scaffold / scaffold / scaffold — permissive scaffold by design | `src/components/core/Nav-Header-App/` |
603
+ | Nav-Header-Base | Navigation | 🟡 | scaffold / scaffold / scaffold — internal-only primitive | `src/components/core/Nav-Header-Base/` |
604
+ | Progress-Bar-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Bar-Base/` |
605
+ | Progress-Indicator-Node-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Indicator-Node-Base/` |
606
+ | Progress-Pagination-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Pagination-Base/` |
607
+ | Progress-Stepper-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Stepper-Base/` |
608
+ | Progress-Stepper-Detailed | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Stepper-Detailed/` |
609
+ | Progress-Indicator-Connector-Base | Progress Indicators | 🟡 | scaffold / scaffold / scaffold | `src/components/core/Progress-Indicator-Connector-Base/` |
610
+ | Progress-Indicator-Label-Base | Progress Indicators | 🟡 | scaffold / scaffold / scaffold | `src/components/core/Progress-Indicator-Label-Base/` |
595
611
 
596
612
  **Usage:**
597
613
 
@@ -12,7 +12,7 @@ aliases: how do i scaffold a new component, scaffold a new component template, n
12
12
  **Scope**: cross-project
13
13
  **Layer**: 2
14
14
  **Relevant Tasks**: component-development, architecture, spec-planning
15
- **Last Reviewed**: 2026-01-02
15
+ **Last Reviewed**: 2026-07-15
16
16
 
17
17
  ---
18
18
 
@@ -412,14 +412,6 @@ properties:
412
412
  - secondary: [description]
413
413
  - tertiary: [description]
414
414
 
415
- # State properties
416
- disabled:
417
- type: boolean
418
- required: false
419
- default: false
420
- description: |
421
- When true, component is non-interactive with disabled visual styling.
422
-
423
415
  # Callback properties
424
416
  [callbackProp]:
425
417
  type: "() => void"
@@ -709,14 +701,12 @@ focusable:
709
701
  behavior: |
710
702
  Component can receive focus via Tab key navigation.
711
703
  Focus state is visually indicated with a focus ring.
712
- Focus is managed appropriately when disabled state changes.
713
704
  wcag: "2.1.1 Keyboard, 2.4.7 Focus Visible"
714
705
  platforms: [web, ios, android]
715
706
  validation: |
716
707
  - Tab key moves focus to component
717
708
  - Focus state is visually distinct with focus ring
718
709
  - Focus ring meets 3:1 contrast ratio
719
- - Disabled components are not focusable
720
710
  ```
721
711
 
722
712
  #### Pressable Contract
@@ -726,7 +716,7 @@ pressable:
726
716
  description: Responds to press/click events
727
717
  behavior: |
728
718
  Component responds to click, tap, Enter key, and Space key.
729
- Press triggers the callback when not disabled.
719
+ Press triggers the callback.
730
720
  Platform-appropriate feedback is provided during press.
731
721
  wcag: "2.1.1 Keyboard"
732
722
  platforms: [web, ios, android]
@@ -734,7 +724,6 @@ pressable:
734
724
  - Click/tap triggers callback
735
725
  - Enter key triggers callback
736
726
  - Space key triggers callback
737
- - Callback not called when disabled
738
727
  ```
739
728
 
740
729
  #### Hoverable Contract
@@ -745,14 +734,12 @@ hoverable:
745
734
  behavior: |
746
735
  On pointer devices, component shows visual feedback when mouse
747
736
  hovers over the component. Uses blend.hoverDarker token.
748
- Hover state not shown when disabled.
749
737
  wcag: "1.4.13 Content on Hover or Focus"
750
738
  platforms: [web, ios, android]
751
739
  validation: |
752
740
  - Visual feedback shown on mouse enter
753
741
  - Visual feedback removed on mouse leave
754
742
  - Hover uses blend.hoverDarker token
755
- - Hover state not shown when disabled
756
743
  - iOS: Only on macOS/iPadOS with pointer
757
744
  - Android: Only on desktop/ChromeOS with pointer
758
745
  ```
@@ -761,28 +748,38 @@ hoverable:
761
748
 
762
749
  ### Contract Category 2: State Contracts
763
750
 
764
- #### Disabled State Contract
751
+ #### No Disabled States — Standardized Exclusion
752
+
753
+ **DesignerPunk components MUST NOT declare a disabled-state contract.** Per the
754
+ 2026-07-15 adjudication (`.kiro/issues/button-cta-disabled-state-adjudication.md`),
755
+ the no-disabled-states philosophy now holds corpus-wide with zero exceptions —
756
+ Button-CTA was the last remaining component with a live `disabled_state`
757
+ contract, and it has been removed in favor of the standardized exclusion below.
758
+
759
+ If an action is temporarily unavailable, use one of these alternatives instead:
760
+
761
+ - **`state_loading`** — the action is in-flight (async operation running).
762
+ - **Validate-on-press / validate-on-blur** — the action is available but the
763
+ current input is invalid; surface the error rather than disabling the trigger.
764
+ - **Do not render the component** — if an action is genuinely unavailable
765
+ (no valid path forward), omit the component entirely rather than rendering
766
+ it in a disabled state.
767
+
768
+ Every component's `contracts.yaml` MUST carry the standardized exclusion block
769
+ (mirrored corpus-wide, e.g. `src/components/core/Button-CTA/contracts.yaml`):
765
770
 
766
771
  ```yaml
767
- disabled_state:
768
- description: Prevents interaction when disabled
769
- behavior: |
770
- When disabled, component:
771
- - Cannot receive focus
772
- - Cannot be interacted with
773
- - Uses desaturated colors (blend.disabledDesaturate)
774
- - Shows cursor: not-allowed (web)
775
- - Communicates disabled state to assistive technology
776
- wcag: "4.1.2 Name, Role, Value"
777
- platforms: [web, ios, android]
778
- validation: |
779
- - Component cannot receive focus when disabled
780
- - Interactions do not trigger callbacks when disabled
781
- - Visual styling indicates disabled state
782
- - aria-disabled="true" set (web)
783
- - Disabled state announced to screen readers
772
+ excludes:
773
+ state_disabled:
774
+ reason: "DesignerPunk does not support disabled states for usability and accessibility reasons. If an action is unavailable, the component should not be rendered."
775
+ category: state
784
776
  ```
785
777
 
778
+ Do not scaffold a `disabled` prop, a `disabled_state` contract, or any
779
+ disabled-specific validation steps in new components. For the full rationale,
780
+ see the exclusion reason above and the 2026-07-15 adjudication ruling
781
+ (`.kiro/issues/button-cta-disabled-state-adjudication.md`).
782
+
786
783
  #### Error State Contract
787
784
 
788
785
  ```yaml
@@ -830,7 +827,7 @@ loading_state:
830
827
  behavior: |
831
828
  When in loading state, component:
832
829
  - Shows loading spinner or indicator
833
- - Prevents interaction (similar to disabled)
830
+ - Prevents interaction while the async operation is in-flight
834
831
  - Maintains dimensions to prevent layout shift
835
832
  - Communicates loading state to assistive technology
836
833
  wcag: "4.1.3 Status Messages"
@@ -947,7 +944,6 @@ pressed_state:
947
944
  - Visual feedback shown during press
948
945
  - Feedback uses blend.pressedDarker token
949
946
  - Platform-appropriate animation/effect applied
950
- - Pressed state not shown when disabled
951
947
  ```
952
948
 
953
949
  #### Gradient Glow Contract
@@ -1084,7 +1080,7 @@ renders_svg:
1084
1080
  | Keyboard navigation | focusable, focus_ring |
1085
1081
  | Click/tap interaction | pressable, pressed_state |
1086
1082
  | Mouse hover feedback | hoverable |
1087
- | Disabled state | disabled_state |
1083
+ | Action temporarily unavailable | state_loading (in-flight), validates_on_blur (invalid input), or do not render (no valid path) — never a disabled-state contract; see "No Disabled States — Standardized Exclusion" |
1088
1084
  | Error handling | error_state, validates_on_blur |
1089
1085
  | Success feedback | success_state |
1090
1086
  | Loading indication | loading_state |
@@ -2,7 +2,7 @@
2
2
  id: contract-system-reference
3
3
  inclusion: manual
4
4
  name: Contract-System-Reference
5
- description: Uniform behavioral contract system reference — 10-category taxonomy with definitions, concept catalog with all 136 concepts, {category}_{concept} naming convention, canonical contracts.yaml format, exclusion format, inheritance and composition patterns, classification rules. Load when creating or modifying component contracts, auditing contract coverage, or building contract-consuming systems.
5
+ description: Uniform behavioral contract system reference — 10-category taxonomy with definitions, concept catalog with all 137 concepts, {category}_{concept} naming convention, canonical contracts.yaml format, exclusion format, inheritance and composition patterns, classification rules. Load when creating or modifying component contracts, auditing contract coverage, or building contract-consuming systems.
6
6
  ---
7
7
 
8
8
  # Contract System Reference
@@ -46,9 +46,9 @@ This document is the authoritative reference for contract conventions. For the d
46
46
 
47
47
  ## Concept Catalog
48
48
 
49
- 136 concepts across 10 categories. Originally 116, derived from the 29 deployed contracts.yaml files in the Spec 078 audit; grown since through governed additions (`gradient_glow` ballot measure, Spec 088 Nav-Header concepts, Spec 090 Progress-Bar-Base concepts).
49
+ 137 concepts across 10 categories. Originally 116, derived from the 29 deployed contracts.yaml files in the Spec 078 audit; grown since through governed additions (`gradient_glow` ballot measure, Spec 088 Nav-Header concepts, Spec 090 Progress-Bar-Base concepts, `readonly` ballot measure 2026-07-15).
50
50
 
51
- *Adjudicated 2026-07-03 (Lina): 136 counted empirically from the per-category lists below (26+6+7+17+19+6+1+15+10+29), which are the enforced source of truth via `src/__tests__/stemma-system/contract-catalog-name-validation.test.ts`; the stale "117" figures dated from the last full-sweep update (gradient_glow, 2026-03-18), while only this section's rolling "Updated:" line had tracked subsequent additions to 136.*
51
+ *Adjudicated 2026-07-03 (Lina): 137 counted empirically from the per-category lists below (26+6+7+17+19+6+1+16+10+29), which are the enforced source of truth via `src/__tests__/stemma-system/contract-catalog-name-validation.test.ts`; the stale "117" figures dated from the last full-sweep update (gradient_glow, 2026-03-18), while only this section's rolling "Updated:" line had tracked subsequent additions to 136. state grew to 16 via the 2026-07-15 readonly ballot.*
52
52
 
53
53
  ### accessibility (26)
54
54
 
@@ -78,9 +78,9 @@ This document is the authoritative reference for contract conventions. For the d
78
78
 
79
79
  `virtualization`
80
80
 
81
- ### state (15)
81
+ ### state (16)
82
82
 
83
- `binary_derivation` · `checked` · `connector_derivation` · `controlled` · `disabled` · `error` · `indeterminate` · `loading` · `mode_driven` · `priority_derivation` · `selected` · `selected_styling` · `styling` · `success` · `visual_driven`
83
+ `binary_derivation` · `checked` · `connector_derivation` · `controlled` · `disabled` · `error` · `indeterminate` · `loading` · `mode_driven` · `priority_derivation` · `readonly` · `selected` · `selected_styling` · `styling` · `success` · `visual_driven`
84
84
 
85
85
  ### validation (10)
86
86
 
@@ -110,7 +110,7 @@ All contract names follow `{category}_{concept}` in `snake_case`. No `supports_`
110
110
  | Checkmark animation | `animation_checkmark` |
111
111
  | Circular shape | `visual_circular_shape` |
112
112
 
113
- The Concept Catalog above lists all 136 concepts. For the historical migration mapping (113 source names → 104 canonical names, pre-Task 2.1), see `.kiro/specs/063-uniform-contract-system/findings/canonical-name-mapping.md`.
113
+ The Concept Catalog above lists all 137 concepts. For the historical migration mapping (113 source names → 104 canonical names, pre-Task 2.1), see `.kiro/specs/063-uniform-contract-system/findings/canonical-name-mapping.md`.
114
114
 
115
115
  ---
116
116
 
@@ -151,7 +151,7 @@ Both `find_docs` and keyworded `find_components` emit a three-layer confidence s
151
151
 
152
152
  **Token exemption:** token tools perform structured predicate retrieval with no relevance ranking — the three-layer model does not apply. Trigger: if a token tool is introduced with open-ended intent input and ranked output, it inherits this model. Bright line: predicate filter → no tier; relevance ranking → tier required.
153
153
 
154
- **119 Decision 4a cross-reference:** the agent-side certainty-calibration protocol that consumes a `partial` (propose best-fit + confidence + rationale → human go/no-go, with the proposal required to carry its own uncertainty) is captured in `.kiro/specs/119-steering-progressive-disclosure-redesign/design-outline.md` under Decision 4a. 121 emits the signal; 119 defines what the agent does with a `partial`.
154
+ **119 Decision 4a cross-reference:** the agent-side certainty-calibration protocol that consumes a `partial` (propose best-fit + confidence + rationale → human go/no-go, with the proposal required to carry its own uncertainty) is captured in `.kiro/specs/119-agent-experience-architecture/design-outline.md` under Decision 4a. 121 emits the signal; 119 defines what the agent does with a `partial`.
155
155
 
156
156
  ---
157
157
 
@@ -8,7 +8,7 @@ description: Cross-reference standards for documentation — formatting rules, c
8
8
  # Process-Cross-Reference-Standards
9
9
 
10
10
  **Date**: 2026-01-03
11
- **Last Reviewed**: 2026-01-03
11
+ **Last Reviewed**: 2026-07-09
12
12
  **Purpose**: Comprehensive guide for creating and maintaining cross-references in documentation
13
13
  **Organization**: process-standard
14
14
  **Scope**: cross-project
@@ -34,7 +34,7 @@ Cross-references MUST be used in the following documentation types:
34
34
  - **Completion Documents**: Task completion documentation in `.kiro/specs/[spec-name]/completion/`
35
35
  - **README Files**: Project and directory README files that provide navigation and context
36
36
  - **Overview Documents**: Master documents that map components to their documentation (e.g., `docs/token-system-overview.md`)
37
- - **Process Documentation**: Standards and methodology documents in `.kiro/steering/` and `docs/processes/`
37
+ - **Process Documentation**: Standards and methodology documents in the MCP-served governance corpus (`governance/`), the always-loaded identity docs (`.kiro/steering/`), and `docs/processes/`
38
38
 
39
39
  **Rationale**: These are documentation artifacts where cross-references add value by helping readers discover related information and navigate between connected concepts.
40
40
 
@@ -113,11 +113,25 @@ export const TypographyTokens = {
113
113
 
114
114
  ## How to Format Cross-References
115
115
 
116
- Cross-references should follow consistent formatting patterns to ensure clarity and maintainability.
116
+ Cross-references should follow consistent formatting patterns to ensure clarity and maintainability. **Which pattern applies depends on what you are linking to** — there are two reference classes:
117
+
118
+ ### Two Reference Classes (pick by target)
119
+
120
+ | Target | How to reference | Example |
121
+ |--------|------------------|---------|
122
+ | **Governance corpus** — an MCP-served doc under `governance/` that carries an `id:` | **Bare-`id`** markdown link: `[Human Label](<doc-id>)` — the target's `id`, no path, no `.md`. Bare-id links are validated against the served index (Spec 119-B OB-1): a target that is not MCP-served will be dropped from cross-ref enumeration and flagged unresolved | `[Token Governance](token-governance)` |
123
+ | **The 9 identity docs** under `.kiro/steering/` — always-loaded, NEVER MCP-served (Spec 119-A: identity refs never take the MCP round-trip; they carry `id:` for the uniqueness guard, not for resolution) | **Relative path** markdown link, like other non-id-indexed repo files (amended 2026-08-02, Civitas health-check follow-up #4 — the prior bare-id clause implied MCP resolvability these docs deliberately do not have) | `[Core Goals](../.kiro/steering/core-goals.md)` |
124
+ | **Spec-local / repo-file** — spec artifacts (requirements/design/tasks/completion docs, spec guides), READMEs, and other repo files that are **not** `id`-indexed | **Relative path** markdown link (see "Relative Path Usage" below) | `[Design Decisions](../design.md#design-decisions)` |
125
+
126
+ **Why the split.** Spec 119-A gave every doc in the MCP-served corpus a stable, relocation-independent `id` and made bare-`id` the addressing form (226 intra-corpus refs migrated). An `id`-addressed link survives file moves because the `id` — not the path — is the address. Spec artifacts and loose repo files carry no `id`, so relative paths remain their correct form.
127
+
128
+ **The addressing grammar is owned elsewhere — do not re-derive it here.** The canonical source for the `id` form, the composite `docid#sectionid` section grammar, kebab-case filenames, and `aliases` is [Steering Addressing Conventions](steering-addressing-conventions). This document governs cross-reference *practice* (when to link, link-text quality, anti-patterns, maintenance); it defers the *grammar* to that doc so the two never drift.
129
+
130
+ > **Tooling caveat (119-B OB-1).** Bare-`id` cross-refs **resolve** correctly (resolver strategy-1), but the cross-reference *parser* still only enumerates `.md`-suffixed targets, so `list_cross_references` and the `crossReferences` map currently under-count bare-`id` links. Enumeration parity is deferred to 119-B OB-1. Until then, do not treat an empty `list_cross_references` result as proof a doc has no inbound links.
117
131
 
118
132
  ### Relative Path Usage
119
133
 
120
- Always use relative paths from the current document location. Relative paths ensure links remain valid when the repository structure changes or when viewing documentation in different contexts.
134
+ For **spec-local and repo-file references** (the second class above), use relative paths from the current document location. Relative paths ensure these links remain valid when viewed across different contexts. (For steering/governance-corpus targets, use the bare-`id` form instead — see the table above.)
121
135
 
122
136
  **Pattern**: Use `../` to navigate up directories and `./` for same-directory references
123
137
 
@@ -483,7 +497,7 @@ where properties are separated by concern.
483
497
 
484
498
  ## Related Guides
485
499
 
486
- - [Compositional Color Guide](https://github.com/3fn/DesignerPunkv2/blob/main/.kiro/specs/typography-token-expansion/compositional-color-guide.md)
500
+ - [Compositional Color Guide](https://github.com/3fn/DesignerPunk/blob/main/.kiro/specs/typography-token-expansion/compositional-color-guide.md)
487
501
  - [Strategic Flexibility Guide](/Users/peter/.kiro/specs/typography-token-expansion/strategic-flexibility-guide.md)
488
502
  - [Inline Emphasis Guide](/.kiro/specs/typography-token-expansion/inline-emphasis-guide.md)
489
503
  ```
@@ -611,7 +625,7 @@ Strategic Flexibility Guide.
611
625
 
612
626
  When files are moved during organization:
613
627
 
614
- 1. Update all cross-reference links to reflect new locations
628
+ 1. **Bare-`id` references to steering/governance-corpus docs need no update** — the `id` is the address, so it survives the move (this move-resilience is the reason 119-A adopted `id`-addressing). Update the *relative-path* references (spec-local / repo-file links) to reflect new locations.
615
629
  2. Verify bidirectional links remain consistent
616
630
  3. Test navigation by clicking links in rendered markdown
617
631
  4. Document any broken links and fix them immediately
@@ -621,10 +635,12 @@ When files are moved during organization:
621
635
  Periodically validate cross-reference integrity:
622
636
 
623
637
  - Verify all links resolve to existing documents
624
- - Check that relative paths are correct from document location
638
+ - Check that relative paths are correct from document location (bare-`id` links resolve by `id`, not path, so there is no path to verify — confirm the `id` exists)
625
639
  - Confirm section anchors exist in target documents
626
640
  - Test navigation efficiency (related docs reachable in 2 clicks or less)
627
641
 
642
+ > **Caveat (119-B OB-1):** automated link-graph tooling built on `list_cross_references` currently under-counts bare-`id` links (the parser enumerates only `.md`-suffixed targets). Until OB-1 lands, supplement automated enumeration with a text search for bare-`id` targets when auditing a doc's inbound/outbound links.
643
+
628
644
  ### Navigation as Aid, Not Dependency
629
645
 
630
646
  Cross-references should be navigation aids, not content dependencies:
@@ -654,12 +670,14 @@ Cross-references should be navigation aids, not content dependencies:
654
670
 
655
671
  ## Related Documentation
656
672
 
657
- - **File Organization Standards** - Metadata and directory structure
658
- - **Completion Documentation Guide** - Completion doc cross-reference patterns
659
- - **Development Workflow** - Task completion workflow
673
+ - [Steering Addressing Conventions](steering-addressing-conventions) - **Canonical** `id` / `docid#sectionid` grammar, filename and `aliases` conventions (this doc defers the grammar there)
674
+ - [Process File Organization](process-file-organization) - Metadata and directory structure
675
+ - [Completion Documentation Guide](completion-documentation-guide) - Completion doc cross-reference patterns
676
+ - [Process Development Workflow](process-development-workflow) - Task completion workflow
660
677
 
661
- **MCP Queries**:
678
+ **MCP Queries** (bare-`id` in the `path` argument — the resolver addresses by `id`):
662
679
  ```
663
- get_section({ path: ".kiro/steering/Process-File-Organization.md", heading: "Required Metadata Fields" })
664
- get_document_full({ path: ".kiro/steering/Completion Documentation Guide.md" })
680
+ get_section({ path: "steering-addressing-conventions", heading: "Convention 2: Composite `docid#sectionid` Addressing Grammar" })
681
+ get_section({ path: "process-file-organization", heading: "Required Metadata Fields" })
682
+ get_document_full({ path: "completion-documentation-guide" })
665
683
  ```