@3fn/core 13.0.0 → 14.1.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 (284) 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 +7 -16
  35. package/.kiro/steering/DesignerPunk-Systems-Overview.md +6 -6
  36. package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
  37. package/.kiro/steering/Task-Completion-Protocol.md +98 -17
  38. package/.kiro/steering/core-goals.md +3 -3
  39. package/.kiro/steering/personal-note.md +1 -1
  40. package/.kiro/steering/start-up-tasks.md +17 -6
  41. package/application-mcp-server/src/index.ts +26 -0
  42. package/dist/ComponentTokens.android.kt +12 -12
  43. package/dist/ComponentTokens.ios.swift +12 -12
  44. package/dist/ComponentTokens.web.css +3 -3
  45. package/dist/DesignTokens.android.kt +1 -1
  46. package/dist/DesignTokens.dtcg.json +8 -5
  47. package/dist/DesignTokens.figma.json +2 -2
  48. package/dist/DesignTokens.ios.swift +1 -1
  49. package/dist/DesignTokens.web.css +1 -1
  50. package/dist/android/DesignTokens.android.kt +1 -1
  51. package/dist/blend/OklchBlendCalculator.js +1 -0
  52. package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +13 -2
  53. package/dist/blend/ThemeAwareBlendUtilities.web.js +6 -1
  54. package/dist/browser/designerpunk.esm.js +36 -90
  55. package/dist/browser/designerpunk.esm.min.js +33 -36
  56. package/dist/browser/designerpunk.umd.js +36 -90
  57. package/dist/browser/designerpunk.umd.min.js +47 -50
  58. package/dist/browser/tokens.css +3 -3
  59. package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
  60. package/dist/build/tokens/defineComponentTokens.js +26 -0
  61. package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +21 -26
  62. package/dist/components/core/Avatar-Base/avatar.tokens.js +31 -34
  63. package/dist/components/core/Avatar-Base/index.d.ts +1 -1
  64. package/dist/components/core/Avatar-Base/index.js +2 -2
  65. package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.js +24 -5
  66. package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +16 -28
  67. package/dist/components/core/Button-CTA/examples/BasicUsage.js +18 -43
  68. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +3 -15
  69. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +9 -58
  70. package/dist/components/core/Button-CTA/types.d.ts +0 -24
  71. package/dist/components/core/Button-CTA/types.js +6 -0
  72. package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +28 -14
  73. package/dist/components/core/Button-Icon/buttonIcon.tokens.js +35 -20
  74. package/dist/components/core/Input-Text-Base/types.d.ts +13 -1
  75. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +11 -2
  76. package/dist/generators/DTCGFormatGenerator.js +8 -0
  77. package/dist/generators/TokenFileGenerator.js +7 -2
  78. package/dist/integration/BuildErrorHandler.js +2 -2
  79. package/dist/ios/DesignTokens.ios.swift +1 -1
  80. package/dist/mcp/application-mcp.js +24 -0
  81. package/dist/mcp/docs-mcp.js +130 -15
  82. package/dist/mcp/product-mcp.js +25 -0
  83. package/dist/tokens/OpacityTokens.js +1 -1
  84. package/dist/tokens/component/progress.d.ts +65 -5
  85. package/dist/tokens/component/progress.js +79 -18
  86. package/dist/tokens/semantic/BlendTokens.d.ts +10 -3
  87. package/dist/tokens/semantic/BlendTokens.js +17 -5
  88. package/dist/tokens/semantic/OpacityTokens.d.ts +4 -4
  89. package/dist/tokens/semantic/OpacityTokens.js +4 -4
  90. package/dist/types/ComponentTypes.d.ts +1 -1
  91. package/dist/types/generated/TokenTypes.d.ts +1 -1
  92. package/dist/types/generated/TokenTypes.js +1 -1
  93. package/dist/validators/StemmaTokenUsageValidator.js +3 -2
  94. package/dist/web/DesignTokens.web.css +1 -1
  95. package/governance/BUILD-SYSTEM-SETUP.md +1 -2
  96. package/governance/Component-Development-Guide.md +23 -13
  97. package/governance/Component-Development-Standards.md +21 -20
  98. package/governance/Component-Family-Avatar.md +6 -7
  99. package/governance/Component-Family-Badge.md +19 -20
  100. package/governance/Component-Family-Button.md +30 -43
  101. package/governance/Component-Family-Chip.md +14 -15
  102. package/governance/Component-Family-Container.md +12 -13
  103. package/governance/Component-Family-Data-Display.md +1 -2
  104. package/governance/Component-Family-Divider.md +1 -2
  105. package/governance/Component-Family-Form-Inputs.md +65 -65
  106. package/governance/Component-Family-Icon.md +9 -10
  107. package/governance/Component-Family-Loading.md +1 -2
  108. package/governance/Component-Family-Modal.md +1 -2
  109. package/governance/Component-Family-Navigation.md +1 -2
  110. package/governance/Component-Family-Progress.md +0 -1
  111. package/governance/Component-Inheritance-Structures.md +219 -99
  112. package/governance/Component-MCP-Document-Template.md +6 -5
  113. package/governance/Component-Primitive-vs-Semantic-Philosophy.md +1 -1
  114. package/governance/Component-Quick-Reference.md +33 -33
  115. package/governance/Component-Readiness-Status.md +59 -44
  116. package/governance/Component-Templates.md +57 -61
  117. package/governance/Contract-System-Reference.md +7 -7
  118. package/governance/MCP-Integration-Guide.md +1 -1
  119. package/governance/Process-Cross-Reference-Standards.md +31 -13
  120. package/governance/Process-Development-Workflow.md +49 -59
  121. package/governance/Process-File-Organization.md +25 -28
  122. package/governance/Process-Hook-Operations.md +22 -11
  123. package/governance/Process-Orchestration-Model-Selection.md +92 -0
  124. package/governance/Process-Spec-Planning.md +98 -52
  125. package/governance/Process-Task-Type-Definitions.md +80 -4
  126. package/governance/Product-Handoff-Protocol.md +2 -0
  127. package/governance/Rosetta-System-Architecture.md +13 -11
  128. package/governance/Test-Behavioral-Contract-Validation.md +38 -31
  129. package/governance/Test-Failure-Audit-Methodology.md +1 -1
  130. package/governance/Token-Family-Accessibility.md +1 -2
  131. package/governance/Token-Family-Blend.md +18 -16
  132. package/governance/Token-Family-Blur.md +0 -1
  133. package/governance/Token-Family-Border.md +1 -2
  134. package/governance/Token-Family-Color.md +0 -1
  135. package/governance/Token-Family-Glow.md +1 -2
  136. package/governance/Token-Family-Layering.md +0 -1
  137. package/governance/Token-Family-Motion.md +1 -2
  138. package/governance/Token-Family-Opacity.md +0 -1
  139. package/governance/Token-Family-Radius.md +1 -2
  140. package/governance/Token-Family-Responsive.md +1 -2
  141. package/governance/Token-Family-Shadow.md +1 -2
  142. package/governance/Token-Family-Sizing.md +0 -1
  143. package/governance/Token-Family-Spacing.md +1 -2
  144. package/governance/Token-Family-Typography.md +1 -2
  145. package/governance/Token-Governance.md +8 -8
  146. package/governance/Token-Quick-Reference.md +47 -34
  147. package/governance/Token-Resolution-Patterns.md +1 -1
  148. package/governance/Token-Semantic-Structure.md +1 -1
  149. package/governance/Web-Authoring-Standards.md +5 -5
  150. package/governance/browser-distribution-guide.md +1 -4
  151. package/governance/classification-map.md +474 -0
  152. package/governance/completion-documentation-guide.md +23 -37
  153. package/governance/component-meta-authoring-guide.md +1 -1
  154. package/governance/cross-platform-vs-platform-specific-decision-framework.md +1 -1
  155. package/governance/platform-implementation-guidelines.md +2 -3
  156. package/governance/release-management-system.md +28 -63
  157. package/governance/rosetta-system-principles.md +8 -6
  158. package/governance/stemma-system-principles.md +18 -17
  159. package/mcp-server/src/index.ts +24 -6
  160. package/mcp-server/src/indexer/DocumentIndexer.ts +119 -9
  161. package/mcp-server/src/indexer/__tests__/bare-id-crossrefs.test.ts +250 -0
  162. package/mcp-server/src/indexer/cross-ref-parser.ts +29 -1
  163. package/mcp-server/src/indexer/index-health.ts +27 -2
  164. package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +11 -26
  165. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +72 -5
  166. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +81 -24
  167. package/mcp-server/src/tools/list-cross-references.ts +2 -2
  168. package/package.json +24 -26
  169. package/src/__tests__/browser-distribution/css-bundling.test.ts +6 -4
  170. package/src/__tests__/console-allowlist.json +14 -0
  171. package/src/__tests__/console-fail-setup.ts +169 -0
  172. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +16 -0
  173. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +70 -17
  174. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +28 -0
  175. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +223 -16
  176. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +298 -0
  177. package/src/blend/OklchBlendCalculator.ts +3 -0
  178. package/src/blend/ThemeAwareBlendUtilities.android.kt +3 -0
  179. package/src/blend/ThemeAwareBlendUtilities.ios.swift +3 -0
  180. package/src/blend/ThemeAwareBlendUtilities.web.ts +9 -1
  181. package/src/blend/__tests__/InteractionStateAudit.test.ts +12 -9
  182. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +8 -0
  183. package/src/build/errors/__tests__/ErrorHandler.test.ts +5 -0
  184. package/src/build/tokens/__tests__/defineComponentTokens.test.ts +113 -0
  185. package/src/build/tokens/defineComponentTokens.ts +43 -1
  186. package/src/build/workflow/__tests__/CICDIntegration.test.ts +12 -1
  187. package/src/cli/__tests__/init.test.ts +45 -11
  188. package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +1 -1
  189. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +121 -7
  190. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +3 -0
  191. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +15 -6
  192. package/src/components/core/Avatar-Base/avatar.tokens.ts +31 -34
  193. package/src/components/core/Avatar-Base/contracts.yaml +11 -1
  194. package/src/components/core/Avatar-Base/index.ts +1 -1
  195. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +24 -5
  196. package/src/components/core/Badge-Count-Base/contracts.yaml +1 -1
  197. package/src/components/core/Badge-Label-Base/contracts.yaml +1 -1
  198. package/src/components/core/Button-CTA/Button-CTA.schema.yaml +2 -12
  199. package/src/components/core/Button-CTA/README.md +3 -6
  200. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +35 -89
  201. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -2
  202. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -2
  203. package/src/components/core/Button-CTA/contracts.yaml +6 -29
  204. package/src/components/core/Button-CTA/examples/BasicUsage.html +2 -14
  205. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +17 -44
  206. package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +12 -20
  207. package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +12 -51
  208. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +2 -26
  209. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +18 -71
  210. package/src/components/core/Button-CTA/types.ts +10 -28
  211. package/src/components/core/Button-Icon/buttonIcon.tokens.ts +43 -27
  212. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +13 -0
  213. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +13 -0
  214. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +13 -0
  215. package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +30 -2
  216. package/src/components/core/Input-Text-Base/README.md +25 -2
  217. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +16 -15
  218. package/src/components/core/Input-Text-Base/contracts.yaml +90 -0
  219. package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +26 -12
  220. package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +195 -59
  221. package/src/components/core/Input-Text-Base/types.ts +13 -1
  222. package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +5 -1
  223. package/src/components/core/Input-Text-Email/README.md +8 -7
  224. package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +1 -4
  225. package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +2 -16
  226. package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +10 -3
  227. package/src/components/core/Input-Text-Password/README.md +9 -8
  228. package/src/components/core/Input-Text-Password/contracts.yaml +5 -0
  229. package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +17 -7
  230. package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +22 -20
  231. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +11 -2
  232. package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +5 -1
  233. package/src/components/core/Input-Text-PhoneNumber/README.md +9 -8
  234. package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +2 -5
  235. package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +3 -17
  236. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  237. package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +1 -1
  238. package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +1 -1
  239. package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +1 -1
  240. package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +1 -1
  241. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +5 -2
  242. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +5 -2
  243. package/src/generators/DTCGFormatGenerator.ts +6 -0
  244. package/src/generators/TokenFileGenerator.ts +7 -2
  245. package/src/generators/__tests__/DTCGConfigOptions.test.ts +14 -5
  246. package/src/integration/BuildErrorHandler.ts +2 -2
  247. package/src/tokens/OpacityTokens.ts +1 -1
  248. package/src/tokens/__tests__/OpacityTokens.test.ts +3 -1
  249. package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +5 -3
  250. package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +11 -11
  251. package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +22 -20
  252. package/src/tokens/component/progress.ts +83 -21
  253. package/src/tokens/semantic/BlendTokens.ts +26 -5
  254. package/src/tokens/semantic/OpacityTokens.ts +4 -4
  255. package/src/types/ComponentTypes.ts +1 -1
  256. package/src/types/generated/TokenTypes.ts +1 -1
  257. package/src/validators/StemmaTokenUsageValidator.ts +3 -2
  258. package/token-index/components.yaml +8 -8
  259. package/token-index/semantics.yaml +1 -2
  260. package/src/tools/release/__tests__/ChangeClassifier.test.ts +0 -133
  261. package/src/tools/release/__tests__/ChangeExtractor.test.ts +0 -222
  262. package/src/tools/release/__tests__/GitHubPublisher.test.ts +0 -240
  263. package/src/tools/release/__tests__/NotesRenderer.test.ts +0 -142
  264. package/src/tools/release/__tests__/NpmPublisher.test.ts +0 -289
  265. package/src/tools/release/__tests__/PipelineIntegration.test.ts +0 -188
  266. package/src/tools/release/__tests__/ReleasePipeline.test.ts +0 -192
  267. package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +0 -49
  268. package/src/tools/release/__tests__/SummaryScanner.test.ts +0 -141
  269. package/src/tools/release/__tests__/TagResolver.test.ts +0 -91
  270. package/src/tools/release/__tests__/VersionCalculator.test.ts +0 -270
  271. package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +0 -80
  272. package/src/tools/release/cli/ReleasePipeline.ts +0 -165
  273. package/src/tools/release/cli/release-tool.ts +0 -107
  274. package/src/tools/release/pipeline/ChangeClassifier.ts +0 -61
  275. package/src/tools/release/pipeline/ChangeExtractor.ts +0 -87
  276. package/src/tools/release/pipeline/NotesRenderer.ts +0 -66
  277. package/src/tools/release/pipeline/SummaryScanner.ts +0 -70
  278. package/src/tools/release/pipeline/TagResolver.ts +0 -40
  279. package/src/tools/release/pipeline/VersionCalculator.ts +0 -375
  280. package/src/tools/release/publishers/GitHubPublisher.ts +0 -228
  281. package/src/tools/release/publishers/NpmPublisher.ts +0 -196
  282. package/src/tools/release/release-config.json +0 -5
  283. package/src/tools/release/types/index.ts +0 -282
  284. package/src/tools/release/validators/SemanticVersionValidator.ts +0 -67
@@ -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,17 +520,16 @@ metadata:
520
520
  **Query component readiness**:
521
521
  ```
522
522
  get_section({
523
- path: ".kiro/steering/Component-Family-Form-Inputs.md",
524
- heading: "Component Readiness"
523
+ path: "component-readiness-status",
524
+ heading: "Individual Component Status"
525
525
  })
526
526
  ```
527
527
 
528
528
  **Response includes**:
529
- - Component name
530
- - Current readiness status
531
- - Status indicator emoji
532
- - Usage recommendations
533
- - Migration guidance (if deprecated)
529
+ - Component name and family
530
+ - Roll-up status indicator (production-ready / web-ready-mobile-scaffold / scaffold)
531
+ - Per-platform readiness breakdown (web / iOS / Android)
532
+ - Implementation path
534
533
 
535
534
  ---
536
535
 
@@ -544,54 +543,70 @@ get_section({
544
543
  | Component Family | Shared Need/Purpose | Status | MCP Document Path |
545
544
  |------------------|---------------------|--------|-------------------|
546
545
  | 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` |
546
+ | Form Inputs | Data collection and validation | 🟡 | `.kiro/steering/Component-Family-Form-Inputs.md` |
547
+ | Containers | Layout and content organization | 🟡 | `.kiro/steering/Component-Family-Container.md` |
548
+ | Icons | Visual communication | 🟡 | `.kiro/steering/Component-Family-Icon.md` |
549
+ | Avatars | Identity representation | 🟡 | `.kiro/steering/Component-Family-Avatar.md` |
550
+ | Badges & Tags | Status and labeling | 🟡 | `.kiro/steering/Component-Family-Badge.md` |
551
+ | Chips | Selection, filtering, and input tokens | 🟡 | `.kiro/steering/Component-Family-Chip.md` |
552
+ | Navigation | Wayfinding | 🟡 | `.kiro/steering/Component-Family-Navigation.md` |
553
+ | Progress Indicators | Progress and step indication | 🟡 | `.kiro/steering/Component-Family-Progress.md` |
550
554
  | 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
555
  | Data Displays | Information presentation | 🔴 | `.kiro/steering/Component-Family-Data-Display.md` |
554
556
  | Dividers | Visual separation | 🔴 | `.kiro/steering/Component-Family-Divider.md` |
555
557
  | Loading | Progress indication | 🔴 | `.kiro/steering/Component-Family-Loading.md` |
556
- | Navigation | Wayfinding | 🔴 | `.kiro/steering/Component-Family-Navigation.md` |
557
558
  ```
558
559
 
560
+ > **🟡 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).
561
+
559
562
  ---
560
563
 
561
564
  ## Individual Component Status
562
565
 
563
566
  This section lists all implemented components with their readiness status and implementation paths. Used by extraction workflows to check component existence and status.
564
567
 
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/` |
568
+ **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.
569
+
570
+ - 🟢 **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.
571
+ - 🟡 **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.
572
+ - 🟡 **Scaffold (all platforms)** — structure present on all platforms but none production-ready; intentional for permissive/internal primitives (noted inline).
573
+
574
+ | Component | Family | Status | Platform Readiness (web / iOS / Android) | Implementation Path |
575
+ |-----------|--------|--------|------------------------------------------|---------------------|
576
+ | Avatar-Base | Avatar | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Avatar-Base/` |
577
+ | Badge-Count-Base | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Count-Base/` |
578
+ | Badge-Count-Notification | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Count-Notification/` |
579
+ | Badge-Label-Base | Badge | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Badge-Label-Base/` |
580
+ | Button-CTA | Button | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Button-CTA/` |
581
+ | Button-Icon | Button | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Button-Icon/` |
582
+ | Button-VerticalList-Item | Button | 🟢 | 🟢 / 🟢 / 🟢 | `src/components/core/Button-VerticalList-Item/` |
583
+ | Button-VerticalList-Set | Button | 🟢 | 🟢 / 🟢 / 🟢 | `src/components/core/Button-VerticalList-Set/` |
584
+ | Chip-Base | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Base/` |
585
+ | Chip-Filter | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Filter/` |
586
+ | Chip-Input | Chip | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Chip-Input/` |
587
+ | Container-Base | Container | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Container-Base/` |
588
+ | Container-Card-Base | Container | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Container-Card-Base/` |
589
+ | Icon-Base | Icon | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Icon-Base/` |
590
+ | Input-Checkbox-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Checkbox-Base/` |
591
+ | Input-Checkbox-Legal | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Checkbox-Legal/` |
592
+ | Input-Radio-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Radio-Base/` |
593
+ | Input-Radio-Set | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Radio-Set/` |
594
+ | Input-Text-Base | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Base/` |
595
+ | Input-Text-Email | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Email/` |
596
+ | Input-Text-Password | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-Password/` |
597
+ | Input-Text-PhoneNumber | Form Inputs | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Input-Text-PhoneNumber/` |
598
+ | Nav-Header-Page | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-Header-Page/` |
599
+ | Nav-SegmentedChoice-Base | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-SegmentedChoice-Base/` |
600
+ | Nav-TabBar-Base | Navigation | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Nav-TabBar-Base/` |
601
+ | Nav-Header-App | Navigation | 🟡 | scaffold / scaffold / scaffold — permissive scaffold by design | `src/components/core/Nav-Header-App/` |
602
+ | Nav-Header-Base | Navigation | 🟡 | scaffold / scaffold / scaffold — internal-only primitive | `src/components/core/Nav-Header-Base/` |
603
+ | Progress-Bar-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Bar-Base/` |
604
+ | Progress-Indicator-Node-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Indicator-Node-Base/` |
605
+ | Progress-Pagination-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Pagination-Base/` |
606
+ | Progress-Stepper-Base | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Stepper-Base/` |
607
+ | Progress-Stepper-Detailed | Progress Indicators | 🟡 | 🟢 / scaffold / scaffold | `src/components/core/Progress-Stepper-Detailed/` |
608
+ | Progress-Indicator-Connector-Base | Progress Indicators | 🟡 | scaffold / scaffold / scaffold | `src/components/core/Progress-Indicator-Connector-Base/` |
609
+ | Progress-Indicator-Label-Base | Progress Indicators | 🟡 | scaffold / scaffold / scaffold | `src/components/core/Progress-Indicator-Label-Base/` |
595
610
 
596
611
  **Usage:**
597
612
 
@@ -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"
@@ -704,29 +696,27 @@ Use when semantic variants represent different states or statuses.
704
696
  #### Focusable Contract
705
697
 
706
698
  ```yaml
707
- focusable:
699
+ interaction_focusable:
708
700
  description: Can receive keyboard focus
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
723
713
 
724
714
  ```yaml
725
- pressable:
715
+ interaction_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,25 +724,22 @@ 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
741
730
 
742
731
  ```yaml
743
- hoverable:
732
+ interaction_hover:
744
733
  description: Visual feedback on hover (pointer devices only)
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,32 +748,42 @@ 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
789
- error_state:
786
+ state_error:
790
787
  description: Shows error message and styling
791
788
  behavior: |
792
789
  When in error state, component displays:
@@ -807,7 +804,7 @@ error_state:
807
804
  #### Success State Contract
808
805
 
809
806
  ```yaml
810
- success_state:
807
+ state_success:
811
808
  description: Shows success styling
812
809
  behavior: |
813
810
  When in success state, component displays:
@@ -825,12 +822,12 @@ success_state:
825
822
  #### Loading State Contract
826
823
 
827
824
  ```yaml
828
- loading_state:
825
+ state_loading:
829
826
  description: Shows loading indicator during async operations
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"
@@ -849,7 +846,7 @@ loading_state:
849
846
  #### Focus Ring Contract
850
847
 
851
848
  ```yaml
852
- focus_ring:
849
+ interaction_focus_ring:
853
850
  description: WCAG 2.4.7 focus visible indicator
854
851
  behavior: |
855
852
  When focused via keyboard, component displays:
@@ -870,7 +867,7 @@ focus_ring:
870
867
  #### Reduced Motion Support Contract
871
868
 
872
869
  ```yaml
873
- reduced_motion_support:
870
+ accessibility_reduced_motion:
874
871
  description: Respects prefers-reduced-motion
875
872
  behavior: |
876
873
  When user has reduced motion preference:
@@ -913,7 +910,7 @@ accessibility_hidden:
913
910
  #### Float Label Animation Contract
914
911
 
915
912
  ```yaml
916
- float_label_animation:
913
+ content_float_label:
917
914
  description: Label animates on focus
918
915
  behavior: |
919
916
  Label smoothly transitions from placeholder position inside component
@@ -932,7 +929,7 @@ float_label_animation:
932
929
  #### Pressed State Visual Contract
933
930
 
934
931
  ```yaml
935
- pressed_state:
932
+ interaction_pressed:
936
933
  description: Visual feedback when pressed
937
934
  behavior: |
938
935
  Component shows visual feedback during active press/click.
@@ -947,13 +944,12 @@ 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
954
950
 
955
951
  ```yaml
956
- gradient_glow:
952
+ visual_gradient_glow:
957
953
  description: Radial gradient background providing state-dependent visual emphasis
958
954
  behavior: |
959
955
  Component renders an elliptical radial gradient background on
@@ -979,7 +975,7 @@ gradient_glow:
979
975
  #### Validates On Blur Contract
980
976
 
981
977
  ```yaml
982
- validates_on_blur:
978
+ validation_on_blur:
983
979
  description: Validation triggers on blur
984
980
  behavior: |
985
981
  Validation state is evaluated when component loses focus.
@@ -1018,7 +1014,7 @@ custom_validation:
1018
1014
  #### Contains Children Contract
1019
1015
 
1020
1016
  ```yaml
1021
- contains_children:
1017
+ layout_contains_children:
1022
1018
  description: Can contain child components
1023
1019
  behavior: |
1024
1020
  Component can contain any child components or content.
@@ -1038,7 +1034,7 @@ contains_children:
1038
1034
  #### Renders SVG Contract
1039
1035
 
1040
1036
  ```yaml
1041
- renders_svg:
1037
+ visual_renders_svg:
1042
1038
  description: Renders inline SVG with correct attributes
1043
1039
  behavior: |
1044
1040
  Component renders an inline SVG element with:
@@ -1046,7 +1042,7 @@ renders_svg:
1046
1042
  - Appropriate fill/stroke attributes
1047
1043
  - Proper sizing based on size prop
1048
1044
  SVG content is loaded based on name from internal map.
1049
- wcag: N/A
1045
+ wcag: null
1050
1046
  platforms: [web, ios, android]
1051
1047
  validation: |
1052
1048
  - SVG element renders with correct viewBox
@@ -1081,18 +1077,18 @@ renders_svg:
1081
1077
 
1082
1078
  | Behavior Needed | Contract(s) to Include |
1083
1079
  |-----------------|------------------------|
1084
- | Keyboard navigation | focusable, focus_ring |
1085
- | Click/tap interaction | pressable, pressed_state |
1086
- | Mouse hover feedback | hoverable |
1087
- | Disabled state | disabled_state |
1088
- | Error handling | error_state, validates_on_blur |
1089
- | Success feedback | success_state |
1090
- | Loading indication | loading_state |
1091
- | Animation support | reduced_motion_support |
1080
+ | Keyboard navigation | interaction_focusable, interaction_focus_ring |
1081
+ | Click/tap interaction | interaction_pressable, interaction_pressed |
1082
+ | Mouse hover feedback | interaction_hover |
1083
+ | Action temporarily unavailable | state_loading (in-flight), validation_on_blur (invalid input), or do not render (no valid path) — never a disabled-state contract; see "No Disabled States — Standardized Exclusion" |
1084
+ | Error handling | state_error, validation_on_blur |
1085
+ | Success feedback | state_success |
1086
+ | Loading indication | state_loading |
1087
+ | Animation support | accessibility_reduced_motion |
1092
1088
  | Decorative elements | accessibility_hidden |
1093
- | Form validation | validates_on_blur, custom_validation |
1094
- | Container behavior | contains_children |
1095
- | Icon rendering | renders_svg, accessibility_hidden |
1089
+ | Form validation | validation_on_blur, custom_validation |
1090
+ | Container behavior | layout_contains_children |
1091
+ | Icon rendering | visual_renders_svg, accessibility_hidden |
1096
1092
 
1097
1093
  ### Application MCP Checklist
1098
1094
 
@@ -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
 
@@ -180,7 +180,7 @@ excludes:
180
180
  | `category` | Taxonomy category (redundant with name prefix — enables validation) |
181
181
  | `description` | Short description of the behavioral guarantee |
182
182
  | `behavior` | Detailed behavior description |
183
- | `wcag` | WCAG criterion this contract supports (null if not applicable) |
183
+ | `wcag` | WCAG criterion this contract supports — required for allowlisted contracts (use the 'N/A' sentinel when genuinely not applicable); null only for non-allowlisted contracts |
184
184
  | `platforms` | Platforms where this contract applies |
185
185
  | `validation` | Testable criteria for verifying the contract |
186
186
  | `test_approach` | How to test this contract |