@3fn/core 14.1.0 → 15.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 (1380) hide show
  1. package/.kiro/steering/AI-Collaboration-Principles.md +9 -3
  2. package/.kiro/steering/Agent-Directory.md +31 -7
  3. package/.kiro/steering/Civitas-System-Overview.md +3 -3
  4. package/.kiro/steering/DesignerPunk-Systems-Overview.md +3 -3
  5. package/.kiro/steering/Task-Completion-Protocol.md +12 -11
  6. package/.kiro/steering/start-up-tasks.md +12 -4
  7. package/CHANGELOG.md +74 -0
  8. package/README.md +26 -21
  9. package/application-mcp-server/src/__tests__/consumerRootLiveReindex.test.ts +118 -0
  10. package/application-mcp-server/src/__tests__/errorCatalogWiring.test.ts +73 -0
  11. package/application-mcp-server/src/__tests__/mcpDataRootsDeclaration.test.ts +107 -0
  12. package/application-mcp-server/src/__tests__/tool-boundary.contract.test.ts +55 -0
  13. package/application-mcp-server/src/index.ts +249 -59
  14. package/application-mcp-server/src/indexer/ComponentIndexer.ts +273 -46
  15. package/application-mcp-server/src/indexer/ModeClassifier.ts +23 -16
  16. package/application-mcp-server/src/indexer/SemanticOverrideReader.ts +113 -0
  17. package/application-mcp-server/src/indexer/TokenIndexer.ts +195 -3
  18. package/application-mcp-server/src/indexer/__tests__/MultiRootIndexing.test.ts +134 -0
  19. package/application-mcp-server/src/indexer/__tests__/ThemeResolution.test.ts +241 -0
  20. package/application-mcp-server/src/indexer/__tests__/ThemeRootFollowsIndex.test.ts +216 -0
  21. package/application-mcp-server/src/indexer/__tests__/fixtures/consumerFixture.ts +84 -0
  22. package/application-mcp-server/src/indexer/resolveThemeTierRoot.ts +61 -0
  23. package/application-mcp-server/src/watcher/FileWatcher.ts +20 -7
  24. package/dist/ComponentTokens.android.kt +1 -1
  25. package/dist/ComponentTokens.ios.swift +1 -1
  26. package/dist/ComponentTokens.web.css +1 -1
  27. package/dist/DesignTokens.android.kt +1 -5
  28. package/dist/DesignTokens.dtcg.json +388 -122
  29. package/dist/DesignTokens.figma.json +281 -941
  30. package/dist/DesignTokens.ios.swift +1 -5
  31. package/dist/DesignTokens.web.css +5 -5
  32. package/dist/browser/designerpunk.esm.js +160 -94
  33. package/dist/browser/designerpunk.esm.min.js +58 -55
  34. package/dist/browser/designerpunk.umd.js +160 -94
  35. package/dist/browser/designerpunk.umd.min.js +57 -54
  36. package/dist/browser/tokens.css +5 -5
  37. package/dist/build/platforms/AndroidMotionTokenFormatter.d.ts +101 -0
  38. package/dist/build/platforms/AndroidMotionTokenFormatter.js +220 -0
  39. package/dist/build/platforms/WebMotionTokenFormatter.d.ts +85 -0
  40. package/dist/build/platforms/WebMotionTokenFormatter.js +167 -0
  41. package/dist/build/platforms/iOSMotionTokenFormatter.d.ts +99 -0
  42. package/dist/build/platforms/iOSMotionTokenFormatter.js +221 -0
  43. package/dist/build/validation/index.d.ts +0 -4
  44. package/dist/build/validation/index.js +1 -8
  45. package/dist/cli/attach.d.ts +153 -0
  46. package/dist/cli/attach.js +423 -0
  47. package/dist/cli/designerpunk.d.ts +46 -0
  48. package/dist/cli/designerpunk.js +171 -34
  49. package/dist/cli/figma-extract.js +10 -1
  50. package/dist/cli/figma-push.js +11 -2
  51. package/dist/cli/init.d.ts +36 -5
  52. package/dist/cli/init.js +348 -143
  53. package/dist/cli/loadComponentTokens.d.ts +25 -0
  54. package/dist/cli/loadComponentTokens.js +87 -8
  55. package/dist/cli/shared/bornRepo.d.ts +50 -0
  56. package/dist/cli/shared/bornRepo.js +199 -0
  57. package/dist/cli/shared/errorCatalog.d.ts +130 -0
  58. package/dist/cli/shared/errorCatalog.js +148 -0
  59. package/dist/cli/shared/mcpConfig/cc.d.ts +25 -0
  60. package/dist/cli/shared/mcpConfig/cc.js +156 -0
  61. package/dist/cli/shared/mcpConfig/kiro.d.ts +53 -0
  62. package/dist/cli/shared/mcpConfig/kiro.js +140 -0
  63. package/dist/cli/shared/mcpDataRoots.d.ts +88 -1
  64. package/dist/cli/shared/mcpDataRoots.js +76 -2
  65. package/dist/cli/shared/transforms.d.ts +64 -0
  66. package/dist/cli/shared/transforms.js +138 -0
  67. package/dist/cli/shared/vocabulary.d.ts +50 -0
  68. package/dist/cli/shared/vocabulary.js +62 -0
  69. package/dist/cli/sync/Applier.d.ts +25 -26
  70. package/dist/cli/sync/Applier.js +37 -73
  71. package/dist/cli/sync/Classifier.d.ts +70 -6
  72. package/dist/cli/sync/Classifier.js +123 -84
  73. package/dist/cli/sync/FileScanner.d.ts +19 -10
  74. package/dist/cli/sync/FileScanner.js +33 -25
  75. package/dist/cli/sync/KeyGrain.d.ts +106 -0
  76. package/dist/cli/sync/KeyGrain.js +301 -0
  77. package/dist/cli/sync/Manifest.d.ts +147 -12
  78. package/dist/cli/sync/Manifest.js +276 -21
  79. package/dist/cli/sync/Migration.d.ts +271 -0
  80. package/dist/cli/sync/Migration.js +764 -0
  81. package/dist/cli/sync/NameContract.d.ts +169 -0
  82. package/dist/cli/sync/NameContract.js +246 -0
  83. package/dist/cli/sync/RegionGrain.d.ts +118 -0
  84. package/dist/cli/sync/RegionGrain.js +167 -0
  85. package/dist/cli/sync/Reporter.d.ts +33 -4
  86. package/dist/cli/sync/Reporter.js +112 -53
  87. package/dist/cli/sync/SteeringDirCheck.d.ts +32 -4
  88. package/dist/cli/sync/SteeringDirCheck.js +62 -14
  89. package/dist/cli/sync/index.d.ts +125 -6
  90. package/dist/cli/sync/index.js +716 -66
  91. package/dist/color/OklchValidator.d.ts +43 -3
  92. package/dist/color/OklchValidator.js +46 -8
  93. package/dist/components/core/Button-CTA/Button-CTA.refs.d.ts +83 -0
  94. package/dist/components/core/Button-CTA/Button-CTA.refs.js +86 -0
  95. package/dist/components/core/Button-CTA/Button-CTA.tokens.d.ts +20 -10
  96. package/dist/components/core/Button-CTA/Button-CTA.tokens.js +21 -10
  97. package/dist/components/core/Button-CTA/index.d.ts +2 -2
  98. package/dist/components/core/Button-CTA/index.js +3 -3
  99. package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.d.ts +11 -30
  100. package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.js +16 -49
  101. package/dist/components/core/Container-Base/Container-Base.refs.d.ts +181 -0
  102. package/dist/components/core/Container-Base/Container-Base.refs.js +223 -0
  103. package/dist/components/core/Container-Base/index.d.ts +2 -2
  104. package/dist/components/core/Container-Base/index.js +10 -10
  105. package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.js +1 -1
  106. package/dist/components/core/Container-Base/platforms/web/token-mapping.d.ts +27 -9
  107. package/dist/components/core/Container-Base/platforms/web/token-mapping.js +50 -22
  108. package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.d.ts +149 -0
  109. package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.js +207 -0
  110. package/dist/components/core/Container-Card-Base/index.d.ts +1 -1
  111. package/dist/components/core/Container-Card-Base/index.js +19 -19
  112. package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.js +7 -6
  113. package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.d.ts +15 -0
  114. package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.js +41 -1
  115. package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.d.ts +331 -0
  116. package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.js +164 -0
  117. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.js +1 -1
  118. package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.d.ts +20 -0
  119. package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.js +34 -0
  120. package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.d.ts +20 -0
  121. package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.js +34 -0
  122. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.d.ts +30 -0
  123. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +72 -3
  124. package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.d.ts +20 -0
  125. package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.js +34 -0
  126. package/dist/consumer-canonical/agents/ada.md +331 -0
  127. package/dist/consumer-canonical/agents/data.md +429 -0
  128. package/dist/consumer-canonical/agents/kenya.md +400 -0
  129. package/dist/consumer-canonical/agents/leonardo.md +524 -0
  130. package/dist/consumer-canonical/agents/lina.md +501 -0
  131. package/dist/consumer-canonical/agents/sparky.md +395 -0
  132. package/dist/consumer-canonical/agents/stacy.md +515 -0
  133. package/dist/consumer-canonical/agents/thurgood.md +463 -0
  134. package/dist/consumer-canonical/always-set/agent-directory.dispositions.yaml +21 -0
  135. package/dist/consumer-canonical/always-set/agent-directory.overlay.md +51 -0
  136. package/dist/consumer-canonical/always-set/ai-collaboration-principles.dispositions.yaml +15 -0
  137. package/dist/consumer-canonical/always-set/ai-collaboration-principles.overlay.md +26 -0
  138. package/dist/consumer-canonical/always-set/civitas-system-overview.dispositions.yaml +15 -0
  139. package/dist/consumer-canonical/always-set/civitas-system-overview.overlay.md +70 -0
  140. package/dist/consumer-canonical/always-set/core-goals.dispositions.yaml +9 -0
  141. package/dist/consumer-canonical/always-set/core-goals.overlay.md +74 -0
  142. package/dist/consumer-canonical/always-set/designerpunk-systems-overview.dispositions.yaml +16 -0
  143. package/dist/consumer-canonical/always-set/designerpunk-systems-overview.overlay.md +44 -0
  144. package/dist/consumer-canonical/always-set/spec-feedback-protocol.dispositions.yaml +21 -0
  145. package/dist/consumer-canonical/always-set/spec-feedback-protocol.overlay.md +44 -0
  146. package/dist/consumer-canonical/always-set/start-up-tasks.dispositions.yaml +15 -0
  147. package/dist/consumer-canonical/always-set/start-up-tasks.overlay.md +25 -0
  148. package/dist/consumer-canonical/always-set/task-completion-protocol.dispositions.yaml +19 -0
  149. package/dist/consumer-canonical/always-set/task-completion-protocol.overlay.md +116 -0
  150. package/dist/consumer-canonical/consumer-profile.yaml +9 -0
  151. package/dist/consumer-canonical/shared/always-set.yaml +113 -0
  152. package/dist/consumer-canonical/shared/field-dispositions.yaml +85 -0
  153. package/dist/consumer-canonical/shared/shared-catalog.yaml +19 -0
  154. package/dist/consumer-canonical/shared/skills-map.yaml +33 -0
  155. package/dist/consumer-canonical/skills/adaptive/SKILL.md +301 -0
  156. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  157. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  158. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  159. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  160. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +238 -0
  161. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  162. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  163. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +168 -0
  164. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +329 -0
  165. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  166. package/dist/consumer-canonical/skills/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  167. package/dist/consumer-canonical/skills/edge-to-edge/SKILL.md +426 -0
  168. package/dist/consumer-canonical/skills/impeccable/SKILL.md +237 -0
  169. package/dist/consumer-canonical/skills/impeccable/detector-exclusions.md +42 -0
  170. package/dist/consumer-canonical/skills/impeccable/reference/adapt.md +190 -0
  171. package/dist/consumer-canonical/skills/impeccable/reference/animate.md +194 -0
  172. package/dist/consumer-canonical/skills/impeccable/reference/audit.md +150 -0
  173. package/dist/consumer-canonical/skills/impeccable/reference/bolder.md +113 -0
  174. package/dist/consumer-canonical/skills/impeccable/reference/brand-dp.md +103 -0
  175. package/dist/consumer-canonical/skills/impeccable/reference/clarify.md +174 -0
  176. package/dist/consumer-canonical/skills/impeccable/reference/codex.md +105 -0
  177. package/dist/consumer-canonical/skills/impeccable/reference/cognitive-load.md +106 -0
  178. package/dist/consumer-canonical/skills/impeccable/reference/color-and-contrast.md +122 -0
  179. package/dist/consumer-canonical/skills/impeccable/reference/colorize.md +155 -0
  180. package/dist/consumer-canonical/skills/impeccable/reference/craft.md +123 -0
  181. package/dist/consumer-canonical/skills/impeccable/reference/critique.md +245 -0
  182. package/dist/consumer-canonical/skills/impeccable/reference/delight.md +302 -0
  183. package/dist/consumer-canonical/skills/impeccable/reference/distill.md +111 -0
  184. package/dist/consumer-canonical/skills/impeccable/reference/extract-dp.md +43 -0
  185. package/dist/consumer-canonical/skills/impeccable/reference/harden.md +347 -0
  186. package/dist/consumer-canonical/skills/impeccable/reference/heuristics-scoring.md +234 -0
  187. package/dist/consumer-canonical/skills/impeccable/reference/interaction-design.md +195 -0
  188. package/dist/consumer-canonical/skills/impeccable/reference/layout.md +141 -0
  189. package/dist/consumer-canonical/skills/impeccable/reference/live.md +622 -0
  190. package/dist/consumer-canonical/skills/impeccable/reference/motion-design.md +109 -0
  191. package/dist/consumer-canonical/skills/impeccable/reference/onboard.md +234 -0
  192. package/dist/consumer-canonical/skills/impeccable/reference/optimize.md +258 -0
  193. package/dist/consumer-canonical/skills/impeccable/reference/overdrive.md +130 -0
  194. package/dist/consumer-canonical/skills/impeccable/reference/personas.md +179 -0
  195. package/dist/consumer-canonical/skills/impeccable/reference/polish.md +242 -0
  196. package/dist/consumer-canonical/skills/impeccable/reference/product-dp.md +79 -0
  197. package/dist/consumer-canonical/skills/impeccable/reference/quieter.md +99 -0
  198. package/dist/consumer-canonical/skills/impeccable/reference/responsive-design.md +114 -0
  199. package/dist/consumer-canonical/skills/impeccable/reference/shape.md +165 -0
  200. package/dist/consumer-canonical/skills/impeccable/reference/spatial-design.md +100 -0
  201. package/dist/consumer-canonical/skills/impeccable/reference/typeset.md +126 -0
  202. package/dist/consumer-canonical/skills/impeccable/reference/typography.md +159 -0
  203. package/dist/consumer-canonical/skills/impeccable/reference/ux-writing.md +107 -0
  204. package/dist/consumer-canonical/skills/impeccable/scripts/detect.mjs +21 -0
  205. package/dist/consumer-canonical/skills/impeccable/scripts/detector/browser/injected/index.mjs +1725 -0
  206. package/dist/consumer-canonical/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
  207. package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4567 -0
  208. package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
  209. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
  210. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
  211. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
  212. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
  213. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  214. package/dist/consumer-canonical/skills/impeccable/scripts/detector/findings.mjs +12 -0
  215. package/dist/consumer-canonical/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
  216. package/dist/consumer-canonical/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  217. package/dist/consumer-canonical/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
  218. package/dist/consumer-canonical/skills/impeccable/scripts/detector/rules/checks.mjs +2316 -0
  219. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/color.mjs +156 -0
  220. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
  221. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  222. package/dist/consumer-canonical/skills/navigation-3/SKILL.md +110 -0
  223. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/index.md +38 -0
  224. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +498 -0
  225. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  226. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  227. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  228. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  229. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  230. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  231. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  232. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-advanced.md +155 -0
  233. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-basic.md +744 -0
  234. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  235. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  236. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  237. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  238. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  239. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +436 -0
  240. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  241. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +272 -0
  242. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  243. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  244. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  245. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  246. package/dist/consumer-canonical/skills/theming-styles/SKILL.md +220 -0
  247. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  248. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/fundamentals.md +420 -0
  249. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  250. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  251. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/theming.md +257 -0
  252. package/dist/generator/consumer-entry.js +5939 -0
  253. package/dist/generators/DTCGFormatGenerator.d.ts +14 -4
  254. package/dist/generators/DTCGFormatGenerator.js +35 -18
  255. package/dist/generators/TokenFileGenerator.js +13 -13
  256. package/dist/generators/generateTokenIndex.d.ts +14 -0
  257. package/dist/generators/generateTokenIndex.js +23 -0
  258. package/dist/generators/transformers/FigmaTransformer.d.ts +35 -0
  259. package/dist/generators/transformers/FigmaTransformer.js +101 -13
  260. package/dist/generators/types/DTCGTypes.d.ts +10 -0
  261. package/dist/mcp/application-mcp.js +1062 -261
  262. package/dist/mcp/docs-mcp.js +93 -13
  263. package/dist/mcp/product-mcp.js +539 -41
  264. package/dist/mcp/tool-manifest.json +184 -0
  265. package/dist/name-contract.json +4283 -0
  266. package/dist/tokens/BlurTokens.d.ts +3 -1
  267. package/dist/tokens/BlurTokens.js +6 -4
  268. package/dist/tokens/ShadowOffsetTokens.js +14 -14
  269. package/dist/tokens/SizingTokens.js +3 -3
  270. package/dist/tokens/TapAreaTokens.d.ts +13 -2
  271. package/dist/tokens/TapAreaTokens.js +19 -8
  272. package/dist/tokens/semantic/ColorTokens.js +50 -5
  273. package/dist/tokens/semantic/TypographyTokens.js +10 -10
  274. package/dist/tokens/themes/dark/SemanticOverrides.js +21 -4
  275. package/dist/tools/integrity/Invariants.d.ts +23 -8
  276. package/dist/tools/integrity/Invariants.js +27 -8
  277. package/dist/tools/integrity/cli/run-audit.js +1 -1
  278. package/dist/types/PrimitiveToken.d.ts +15 -1
  279. package/dist/types/generated/TokenTypes.d.ts +1 -1
  280. package/dist/types/generated/TokenTypes.js +1 -1
  281. package/dist/types/index.d.ts +1 -0
  282. package/governance/AI-Collaboration-Framework.md +19 -10
  283. package/governance/Component-Family-Navigation.md +2 -2
  284. package/governance/DTCG-Integration-Guide.md +63 -36
  285. package/governance/DesignerPunk-Integration-Guide.md +57 -61
  286. package/governance/Figma-Workflow-Guide.md +15 -8
  287. package/governance/Process-Integration-Methodology.md +5 -5
  288. package/governance/Process-Spec-Planning.md +179 -54
  289. package/governance/Product-Handoff-Protocol.md +27 -2
  290. package/governance/Test-Behavioral-Contract-Validation.md +5 -0
  291. package/governance/Test-Development-Standards.md +4 -4
  292. package/governance/Token-Family-Accessibility.md +18 -14
  293. package/governance/Token-Family-Blend.md +5 -4
  294. package/governance/Token-Family-Blur.md +8 -8
  295. package/governance/Token-Family-Color.md +40 -22
  296. package/governance/Token-Family-Glow.md +26 -24
  297. package/governance/Token-Family-Layering.md +1 -0
  298. package/governance/Token-Family-Motion.md +22 -13
  299. package/governance/Token-Family-Opacity.md +20 -34
  300. package/governance/Token-Family-Radius.md +4 -2
  301. package/governance/Token-Family-Responsive.md +4 -4
  302. package/governance/Token-Family-Shadow.md +69 -46
  303. package/governance/Token-Family-Spacing.md +22 -12
  304. package/governance/Token-Family-Typography.md +86 -85
  305. package/governance/Token-Governance.md +5 -1
  306. package/governance/Token-Quick-Reference.md +67 -63
  307. package/governance/Transformer-Development-Guide.md +5 -4
  308. package/governance/classification-map.md +597 -7
  309. package/governance/completion-documentation-guide.md +284 -2
  310. package/governance/platform-implementation-guidelines.md +2 -1
  311. package/mcp-server/src/index.ts +16 -12
  312. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +3 -3
  313. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +70 -49
  314. package/mcp-server/src/tools/find-docs.ts +1 -0
  315. package/mcp-server/src/tools/get-document-full.ts +1 -0
  316. package/mcp-server/src/tools/get-document-summary.ts +1 -0
  317. package/mcp-server/src/tools/get-index-health.ts +1 -0
  318. package/mcp-server/src/tools/get-section.ts +1 -0
  319. package/mcp-server/src/tools/list-cross-references.ts +1 -0
  320. package/mcp-server/src/tools/rebuild-index.ts +1 -0
  321. package/mcp-server/src/tools/validate-metadata.ts +1 -0
  322. package/package.json +75 -11
  323. package/src/cli/templates/mcp-config.json.template +15 -20
  324. package/src/components/core/Avatar-Base/platforms/android/AvatarPreview.kt +9 -2
  325. package/src/components/core/Container-Base/Container-Base.schema.yaml +9 -11
  326. package/src/components/core/Container-Base/platforms/android/ContainerBase.android.kt +5 -5
  327. package/src/components/core/Container-Base/platforms/ios/ContainerBase.ios.swift +5 -5
  328. package/src/components/core/Container-Card-Base/platforms/android/ContainerCardBase.android.kt +3 -3
  329. package/src/components/core/Container-Card-Base/platforms/ios/ContainerCardBase.ios.swift +2 -2
  330. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  331. package/src/components/core/Nav-Header-Base/component-meta.yaml +0 -1
  332. package/src/components/core/Nav-Header-Base/contracts.yaml +1 -1
  333. package/src/components/core/Nav-Header-Page/contracts.yaml +1 -1
  334. package/src/components/core/Nav-TabBar-Base/contracts.yaml +1 -1
  335. package/src/components/core/Progress-Bar-Base/contracts.yaml +1 -1
  336. package/src/tokens/BlurTokens.ts +6 -4
  337. package/src/tokens/ShadowOffsetTokens.ts +14 -14
  338. package/src/tokens/SizingTokens.ts +3 -3
  339. package/src/tokens/TapAreaTokens.ts +20 -8
  340. package/src/tokens/__tests__/BaselineGridAlignmentFlag.test.ts +116 -0
  341. package/src/tokens/__tests__/BlurTokens.test.ts +10 -2
  342. package/src/tokens/__tests__/SemanticColorContrast.test.ts +339 -0
  343. package/src/tokens/__tests__/ShadowOffsetTokens.test.ts +8 -7
  344. package/src/tokens/__tests__/SizingTokens.test.ts +10 -2
  345. package/src/tokens/__tests__/TokenCategories.test.ts +1 -1
  346. package/src/tokens/__tests__/neutral-partition.test.ts +28 -0
  347. package/src/tokens/semantic/AccessibilityTokens.README.md +2 -2
  348. package/src/tokens/semantic/ColorTokens.ts +50 -5
  349. package/src/tokens/semantic/TypographyTokens.ts +10 -10
  350. package/src/tokens/semantic/__tests__/ColorTokens.test.ts +8 -4
  351. package/src/tokens/themes/dark/SemanticOverrides.ts +23 -4
  352. package/src/types/PrimitiveToken.ts +15 -1
  353. package/token-index/meta.json +3 -0
  354. package/token-index/semantics.yaml +21 -15
  355. package/.kiro/agents/ada-prompt.md +0 -213
  356. package/.kiro/agents/ada-prompt.md.attribution.json +0 -45
  357. package/.kiro/agents/ada.json +0 -72
  358. package/.kiro/agents/ada.json.attribution.json +0 -13
  359. package/.kiro/agents/data-prompt.md +0 -324
  360. package/.kiro/agents/data-prompt.md.attribution.json +0 -53
  361. package/.kiro/agents/data.json +0 -51
  362. package/.kiro/agents/data.json.attribution.json +0 -13
  363. package/.kiro/agents/kenya-prompt.md +0 -309
  364. package/.kiro/agents/kenya-prompt.md.attribution.json +0 -53
  365. package/.kiro/agents/kenya.json +0 -46
  366. package/.kiro/agents/kenya.json.attribution.json +0 -13
  367. package/.kiro/agents/leonardo-prompt.md +0 -359
  368. package/.kiro/agents/leonardo-prompt.md.attribution.json +0 -45
  369. package/.kiro/agents/leonardo.json +0 -47
  370. package/.kiro/agents/leonardo.json.attribution.json +0 -13
  371. package/.kiro/agents/lina-prompt.md +0 -344
  372. package/.kiro/agents/lina-prompt.md.attribution.json +0 -53
  373. package/.kiro/agents/lina.json +0 -64
  374. package/.kiro/agents/lina.json.attribution.json +0 -13
  375. package/.kiro/agents/sparky-prompt.md +0 -312
  376. package/.kiro/agents/sparky-prompt.md.attribution.json +0 -53
  377. package/.kiro/agents/sparky.json +0 -56
  378. package/.kiro/agents/sparky.json.attribution.json +0 -13
  379. package/.kiro/agents/stacy-prompt.md +0 -304
  380. package/.kiro/agents/stacy-prompt.md.attribution.json +0 -45
  381. package/.kiro/agents/stacy.json +0 -46
  382. package/.kiro/agents/stacy.json.attribution.json +0 -13
  383. package/.kiro/agents/thurgood-prompt.md +0 -363
  384. package/.kiro/agents/thurgood-prompt.md.attribution.json +0 -45
  385. package/.kiro/agents/thurgood.json +0 -47
  386. package/.kiro/agents/thurgood.json.attribution.json +0 -13
  387. package/.kiro/steering/personal-note.md +0 -35
  388. package/designerpunk.config.ts +0 -27
  389. package/dist/android/DesignTokens.android.kt +0 -695
  390. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.d.ts +0 -26
  391. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.js +0 -224
  392. package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.d.ts +0 -30
  393. package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.js +0 -254
  394. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.d.ts +0 -44
  395. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.js +0 -376
  396. package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.d.ts +0 -38
  397. package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.js +0 -328
  398. package/dist/ios/DesignTokens.ios.swift +0 -697
  399. package/dist/web/DesignTokens.web.css +0 -929
  400. package/product-template/agents/README.md +0 -73
  401. package/product-template/agents/ada-prompt.md +0 -83
  402. package/product-template/agents/data-prompt.md +0 -74
  403. package/product-template/agents/kenya-prompt.md +0 -74
  404. package/product-template/agents/leonardo-prompt.md +0 -99
  405. package/product-template/agents/lina-prompt.md +0 -61
  406. package/product-template/agents/sparky-prompt.md +0 -66
  407. package/product-template/agents/stacy-prompt.md +0 -51
  408. package/product-template/agents/thurgood-prompt.md +0 -64
  409. package/src/TokenEngine.ts +0 -628
  410. package/src/__tests__/BuildSystemIntegration.test.ts +0 -485
  411. package/src/__tests__/ProductMCPIntegration.test.ts +0 -204
  412. package/src/__tests__/__mocks__/styleMock.js +0 -18
  413. package/src/__tests__/browser-distribution/build-error-handling.test.ts +0 -143
  414. package/src/__tests__/browser-distribution/bundle-loading.test.ts +0 -353
  415. package/src/__tests__/browser-distribution/bundler-resolution.test.ts +0 -223
  416. package/src/__tests__/browser-distribution/component-registration.test.ts +0 -217
  417. package/src/__tests__/browser-distribution/css-bundling.test.ts +0 -233
  418. package/src/__tests__/browser-distribution/demo-system.test.ts +0 -588
  419. package/src/__tests__/browser-distribution/mcp-format-compliance.property.test.ts +0 -379
  420. package/src/__tests__/browser-distribution/mcp-queryability.test.ts +0 -342
  421. package/src/__tests__/browser-distribution/minification-effectiveness.property.test.ts +0 -188
  422. package/src/__tests__/browser-distribution/registration-idempotency.property.test.ts +0 -372
  423. package/src/__tests__/browser-distribution/soft-ceiling-warning.test.ts +0 -161
  424. package/src/__tests__/browser-distribution/token-completeness.property.test.ts +0 -412
  425. package/src/__tests__/browser-distribution/token-loading.test.ts +0 -344
  426. package/src/__tests__/browser-distribution/umd-bundle-loading.test.ts +0 -169
  427. package/src/__tests__/console-allowlist.json +0 -14
  428. package/src/__tests__/console-fail-setup.ts +0 -169
  429. package/src/__tests__/examples/improved-test-example.test.ts +0 -120
  430. package/src/__tests__/expected-exports.json +0 -66
  431. package/src/__tests__/export-contracts.test.ts +0 -83
  432. package/src/__tests__/fixtures/acknowledged-differences.json +0 -127
  433. package/src/__tests__/fixtures/acknowledged-differences.schema.json +0 -113
  434. package/src/__tests__/fixtures/acknowledged-differences.types.ts +0 -230
  435. package/src/__tests__/fixtures/tokenFixtures.ts +0 -248
  436. package/src/__tests__/helpers/configModuleLoader.ts +0 -20
  437. package/src/__tests__/helpers/tsModuleLoader.ts +0 -24
  438. package/src/__tests__/helpers/web-component-test-utils.ts +0 -39
  439. package/src/__tests__/integration/BlendCrossPlatformConsistency.test.ts +0 -505
  440. package/src/__tests__/integration/BuildSystemCompatibility.test.ts +0 -551
  441. package/src/__tests__/integration/CrossPlatformConsistency.test.ts +0 -855
  442. package/src/__tests__/integration/EndToEndWorkflow.test.ts +0 -601
  443. package/src/__tests__/integration/ErrorHandling.test.ts +0 -459
  444. package/src/__tests__/integration/OpacityPlatformTranslation.test.ts +0 -364
  445. package/src/__tests__/integration/PerformanceValidation.test.ts +0 -887
  446. package/src/__tests__/integration/SemanticTokenGeneration.test.ts +0 -451
  447. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +0 -139
  448. package/src/__tests__/integration/TokenSystemIntegration.test.ts +0 -890
  449. package/src/__tests__/integration/ValidationPipeline.test.ts +0 -404
  450. package/src/__tests__/package-drift-validation.test.ts +0 -249
  451. package/src/__tests__/performance/GenerationPerformance.test.ts +0 -409
  452. package/src/__tests__/performance/OptimizationValidation.test.ts +0 -509
  453. package/src/__tests__/platform-parity/ProgressPlatformParity.test.ts +0 -546
  454. package/src/__tests__/spec073-opacity-architecture.test.ts +0 -344
  455. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +0 -520
  456. package/src/__tests__/stemma-system/composition-compliance-validation.test.ts +0 -162
  457. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +0 -184
  458. package/src/__tests__/stemma-system/contract-existence-validation.test.ts +0 -43
  459. package/src/__tests__/stemma-system/contract-test-reporter.ts +0 -269
  460. package/src/__tests__/stemma-system/cross-platform-consistency.test.ts +0 -564
  461. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +0 -710
  462. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +0 -298
  463. package/src/__tests__/stemma-system/mcp-component-integration.test.ts +0 -445
  464. package/src/analytics/PrimitiveTokenFallbackTracker.ts +0 -228
  465. package/src/analytics/SemanticTokenUsageTracker.ts +0 -193
  466. package/src/analytics/StrategicFlexibilityTracker.ts +0 -226
  467. package/src/analytics/TokenUsageTracker.ts +0 -177
  468. package/src/analytics/UsagePatternAnalyzer.ts +0 -177
  469. package/src/analytics/__tests__/UsageTracking.test.ts +0 -647
  470. package/src/analytics/index.ts +0 -42
  471. package/src/assets/fonts/__tests__/androidFontLoadingValidation.test.ts +0 -600
  472. package/src/assets/fonts/__tests__/fontLoading.test.ts +0 -341
  473. package/src/assets/fonts/__tests__/iosFontConfiguration.test.ts +0 -256
  474. package/src/assets/fonts/__tests__/iosFontLoadingValidation.test.ts +0 -465
  475. package/src/assets/fonts/inter/Inter-Bold.ttf +0 -0
  476. package/src/assets/fonts/inter/Inter-Bold.woff2 +0 -0
  477. package/src/assets/fonts/inter/Inter-Medium.ttf +0 -0
  478. package/src/assets/fonts/inter/Inter-Medium.woff2 +0 -0
  479. package/src/assets/fonts/inter/Inter-Regular.ttf +0 -0
  480. package/src/assets/fonts/inter/Inter-Regular.woff2 +0 -0
  481. package/src/assets/fonts/inter/Inter-SemiBold.ttf +0 -0
  482. package/src/assets/fonts/inter/Inter-SemiBold.woff2 +0 -0
  483. package/src/assets/fonts/inter/inter.css +0 -49
  484. package/src/blend/BlendCalculator.ts +0 -120
  485. package/src/blend/ColorSpaceUtils.ts +0 -325
  486. package/src/blend/OklchBlendCalculator.ts +0 -82
  487. package/src/blend/ThemeAwareBlendUtilities.web.ts +0 -323
  488. package/src/blend/__tests__/BlendCalculator.test.ts +0 -393
  489. package/src/blend/__tests__/BlendUtilities.property.test.ts +0 -600
  490. package/src/blend/__tests__/ColorSpaceUtils.test.ts +0 -885
  491. package/src/blend/__tests__/InteractionStateAudit.test.ts +0 -238
  492. package/src/blend/__tests__/OklchBlendCalculator.test.ts +0 -134
  493. package/src/blend/__tests__/ThemeAwareBlendUtilities.test.ts +0 -200
  494. package/src/blend/__tests__/ThemeSwitching.test.ts +0 -508
  495. package/src/blend/index.ts +0 -37
  496. package/src/browser-entry.ts +0 -270
  497. package/src/build/.gitkeep +0 -1
  498. package/src/build/BuildOrchestrator.ts +0 -663
  499. package/src/build/__tests__/AndroidBuildIntegration.test.ts +0 -437
  500. package/src/build/__tests__/AndroidMotionTokenGeneration.test.ts +0 -256
  501. package/src/build/__tests__/BuildOrchestrator.test.ts +0 -562
  502. package/src/build/__tests__/MotionTokenCrossPlatformIntegration.test.ts +0 -424
  503. package/src/build/__tests__/WebCSSTokenGeneration.test.ts +0 -271
  504. package/src/build/__tests__/WebMotionTokenGeneration.test.ts +0 -305
  505. package/src/build/__tests__/WebNPMPackageStructure.test.ts +0 -447
  506. package/src/build/__tests__/iOSMotionTokenGeneration.test.ts +0 -298
  507. package/src/build/errors/BuildError.ts +0 -140
  508. package/src/build/errors/ErrorDocumentation.ts +0 -638
  509. package/src/build/errors/ErrorHandler.ts +0 -406
  510. package/src/build/errors/ErrorReporter.ts +0 -573
  511. package/src/build/errors/PlatformGenerationError.ts +0 -201
  512. package/src/build/errors/README.md +0 -486
  513. package/src/build/errors/RecoveryStrategy.ts +0 -393
  514. package/src/build/errors/TokenGenerationError.ts +0 -196
  515. package/src/build/errors/TokenReferenceError.ts +0 -204
  516. package/src/build/errors/__tests__/BuildError.test.ts +0 -212
  517. package/src/build/errors/__tests__/ErrorDocumentation.example.ts +0 -272
  518. package/src/build/errors/__tests__/ErrorDocumentation.test.ts +0 -458
  519. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +0 -303
  520. package/src/build/errors/__tests__/ErrorHandler.test.ts +0 -502
  521. package/src/build/errors/__tests__/ErrorReporter.test.ts +0 -581
  522. package/src/build/errors/__tests__/MotionTokenErrors.test.ts +0 -392
  523. package/src/build/errors/__tests__/RecoveryStrategy.test.ts +0 -643
  524. package/src/build/errors/index.ts +0 -90
  525. package/src/build/index.ts +0 -73
  526. package/src/build/orchestration/IncrementalBuilder.ts +0 -532
  527. package/src/build/orchestration/ParallelExecutor.ts +0 -336
  528. package/src/build/orchestration/ProgressTracker.ts +0 -582
  529. package/src/build/orchestration/SequentialExecutor.ts +0 -305
  530. package/src/build/orchestration/__tests__/IncrementalBuilder.test.ts +0 -354
  531. package/src/build/orchestration/__tests__/ParallelExecutor.integration.test.ts +0 -295
  532. package/src/build/orchestration/__tests__/ParallelExecutor.test.ts +0 -493
  533. package/src/build/orchestration/__tests__/ProgressTracker.test.ts +0 -529
  534. package/src/build/orchestration/__tests__/SequentialExecutor.integration.test.ts +0 -202
  535. package/src/build/orchestration/__tests__/SequentialExecutor.test.ts +0 -232
  536. package/src/build/orchestration/index.ts +0 -35
  537. package/src/build/platforms/.gitkeep +0 -1
  538. package/src/build/platforms/AndroidBuilder.ts +0 -1366
  539. package/src/build/platforms/AndroidShadowGenerator.ts +0 -394
  540. package/src/build/platforms/IOSShadowGenerator.ts +0 -324
  541. package/src/build/platforms/PlatformBuilder.ts +0 -131
  542. package/src/build/platforms/WebBuilder.ts +0 -1414
  543. package/src/build/platforms/WebShadowGenerator.ts +0 -288
  544. package/src/build/platforms/__tests__/AndroidBuilder.tokenGeneration.test.ts +0 -146
  545. package/src/build/platforms/__tests__/AndroidShadowGenerator.test.ts +0 -195
  546. package/src/build/platforms/__tests__/IOSShadowGenerator.test.ts +0 -156
  547. package/src/build/platforms/__tests__/WebShadowGenerator.test.ts +0 -123
  548. package/src/build/platforms/__tests__/iOSBuilder.test.ts +0 -1599
  549. package/src/build/platforms/iOSBuilder.ts +0 -1746
  550. package/src/build/platforms/index.ts +0 -9
  551. package/src/build/product/ProductTokenGenerator.ts +0 -162
  552. package/src/build/product/TokenIndexReader.ts +0 -78
  553. package/src/build/product/__tests__/KotlinEmitter.test.ts +0 -109
  554. package/src/build/product/__tests__/ProductTokenGenerator.test.ts +0 -135
  555. package/src/build/product/__tests__/SwiftEmitter.test.ts +0 -90
  556. package/src/build/product/__tests__/TokenIndexReader.test.ts +0 -85
  557. package/src/build/product/__tests__/WebEmitter.test.ts +0 -111
  558. package/src/build/product/__tests__/fixtures/tokens/layout.yaml +0 -21
  559. package/src/build/product/__tests__/fixtures/tokens/motion.yaml +0 -11
  560. package/src/build/product/__tests__/fixtures/tokens/visualization.yaml +0 -8
  561. package/src/build/product/emitters/KotlinEmitter.ts +0 -83
  562. package/src/build/product/emitters/SwiftEmitter.ts +0 -95
  563. package/src/build/product/emitters/WebEmitter.ts +0 -69
  564. package/src/build/tokens/.gitkeep +0 -1
  565. package/src/build/tokens/__tests__/ClassInvariantGuard.test.ts +0 -167
  566. package/src/build/tokens/__tests__/ComponentTokenGenerator.test.ts +0 -285
  567. package/src/build/tokens/__tests__/TokenIntegrator.test.ts +0 -319
  568. package/src/build/tokens/__tests__/TokenSelector.test.ts +0 -264
  569. package/src/build/tokens/__tests__/UnitConverter.applyScaleWithRounding.test.ts +0 -160
  570. package/src/build/tokens/__tests__/UnitConverter.test.ts +0 -331
  571. package/src/build/tokens/__tests__/brand-dual-instance.test.ts +0 -135
  572. package/src/build/tokens/__tests__/defineComponentTokens.test.ts +0 -553
  573. package/src/build/types/.gitkeep +0 -1
  574. package/src/build/types/BuildConfig.ts +0 -123
  575. package/src/build/types/BuildOrchestrator.ts +0 -114
  576. package/src/build/types/BuildResult.ts +0 -125
  577. package/src/build/types/index.ts +0 -39
  578. package/src/build/validation/.gitkeep +0 -1
  579. package/src/build/validation/AndroidBuildValidator.ts +0 -630
  580. package/src/build/validation/CrossPlatformValidationReporter.ts +0 -1267
  581. package/src/build/validation/InterfaceContractValidator.ts +0 -417
  582. package/src/build/validation/InterfaceValidator.ts +0 -326
  583. package/src/build/validation/MathematicalConsistencyValidator.ts +0 -874
  584. package/src/build/validation/MethodSignatureValidator.ts +0 -374
  585. package/src/build/validation/PropertyTypeValidator.ts +0 -312
  586. package/src/build/validation/TokenComparator.ts +0 -796
  587. package/src/build/validation/ValidationReporter.example.ts +0 -310
  588. package/src/build/validation/ValidationReporter.ts +0 -745
  589. package/src/build/validation/WebBuildValidator.ts +0 -583
  590. package/src/build/validation/__tests__/AndroidBuildValidator.test.ts +0 -522
  591. package/src/build/validation/__tests__/CrossPlatformValidationReporter.test.ts +0 -593
  592. package/src/build/validation/__tests__/InterfaceContractValidator.test.ts +0 -647
  593. package/src/build/validation/__tests__/InterfaceValidation.functional.test.ts +0 -360
  594. package/src/build/validation/__tests__/InterfaceValidator.test.ts +0 -318
  595. package/src/build/validation/__tests__/MethodSignatureValidator.test.ts +0 -625
  596. package/src/build/validation/__tests__/MotionTokenCrossPlatformValidation.test.ts +0 -305
  597. package/src/build/validation/__tests__/MotionTokenValidation.test.ts +0 -309
  598. package/src/build/validation/__tests__/PropertyTypeValidator.test.ts +0 -557
  599. package/src/build/validation/__tests__/TokenComparator.test.ts +0 -358
  600. package/src/build/validation/__tests__/ValidationReporter.integration.test.ts +0 -424
  601. package/src/build/validation/__tests__/ValidationReporter.test.ts +0 -793
  602. package/src/build/validation/__tests__/WebBuildValidator.test.ts +0 -495
  603. package/src/build/validation/iOSBuildValidator.ts +0 -783
  604. package/src/build/validation/index.ts +0 -74
  605. package/src/build/validation/types/InterfaceDefinition.ts +0 -101
  606. package/src/build/validation/types/ValidationResult.ts +0 -114
  607. package/src/build/workflow/BuildMode.ts +0 -336
  608. package/src/build/workflow/CICDIntegration.ts +0 -503
  609. package/src/build/workflow/ConfigHelpers.example.ts +0 -317
  610. package/src/build/workflow/ConfigHelpers.ts +0 -834
  611. package/src/build/workflow/README.md +0 -327
  612. package/src/build/workflow/SourceMapGenerator.ts +0 -362
  613. package/src/build/workflow/__tests__/BuildMode.test.ts +0 -544
  614. package/src/build/workflow/__tests__/CICDIntegration.test.ts +0 -602
  615. package/src/build/workflow/__tests__/ConfigHelpers.test.ts +0 -559
  616. package/src/build/workflow/__tests__/SourceMapGenerator.test.ts +0 -421
  617. package/src/build/workflow/index.ts +0 -42
  618. package/src/cli/__tests__/Applier.test.ts +0 -202
  619. package/src/cli/__tests__/Classifier.test.ts +0 -187
  620. package/src/cli/__tests__/FileScanner.test.ts +0 -108
  621. package/src/cli/__tests__/IgnoreFilter.test.ts +0 -92
  622. package/src/cli/__tests__/Manifest.test.ts +0 -107
  623. package/src/cli/__tests__/PackageResolver.test.ts +0 -66
  624. package/src/cli/__tests__/Prompter.test.ts +0 -165
  625. package/src/cli/__tests__/Reporter.test.ts +0 -128
  626. package/src/cli/__tests__/backward-compat.test.ts +0 -142
  627. package/src/cli/__tests__/figma-extract.test.ts +0 -342
  628. package/src/cli/__tests__/figma-push.test.ts +0 -350
  629. package/src/cli/__tests__/init.test.ts +0 -293
  630. package/src/cli/__tests__/loadComponentTokens.test.ts +0 -187
  631. package/src/cli/__tests__/pipeline-independence.test.ts +0 -127
  632. package/src/cli/__tests__/product-only.test.ts +0 -130
  633. package/src/cli/__tests__/resolveTokens.test.ts +0 -88
  634. package/src/cli/__tests__/staleness.test.ts +0 -132
  635. package/src/cli/__tests__/sync.test.ts +0 -199
  636. package/src/cli/__tests__/validate.test.ts +0 -69
  637. package/src/cli/designerpunk.ts +0 -410
  638. package/src/cli/figma-extract.ts +0 -331
  639. package/src/cli/figma-push.ts +0 -288
  640. package/src/cli/generateProductTokens.ts +0 -69
  641. package/src/cli/init.ts +0 -481
  642. package/src/cli/loadComponentTokens.ts +0 -145
  643. package/src/cli/resolveTokens.ts +0 -123
  644. package/src/cli/shared/mcpDataRoots.ts +0 -122
  645. package/src/cli/shared/resolvePackageRoot.ts +0 -58
  646. package/src/cli/shared/transforms.ts +0 -18
  647. package/src/cli/staleness.ts +0 -81
  648. package/src/cli/sync/Applier.ts +0 -128
  649. package/src/cli/sync/Classifier.ts +0 -130
  650. package/src/cli/sync/FileScanner.ts +0 -64
  651. package/src/cli/sync/IgnoreFilter.ts +0 -44
  652. package/src/cli/sync/Manifest.ts +0 -64
  653. package/src/cli/sync/PackageResolver.ts +0 -40
  654. package/src/cli/sync/Prompter.ts +0 -173
  655. package/src/cli/sync/Reporter.ts +0 -78
  656. package/src/cli/sync/SteeringDirCheck.ts +0 -166
  657. package/src/cli/sync/index.ts +0 -115
  658. package/src/cli/validate.ts +0 -135
  659. package/src/cli/validateProductTokens.ts +0 -55
  660. package/src/color/OklchConverter.ts +0 -284
  661. package/src/color/OklchValidator.ts +0 -186
  662. package/src/color/__tests__/OklchConverter.test.ts +0 -232
  663. package/src/color/__tests__/OklchRegression.test.ts +0 -101
  664. package/src/color/__tests__/OklchValidator.test.ts +0 -199
  665. package/src/color/__tests__/WcagContrast.test.ts +0 -76
  666. package/src/components/__tests__/BlendTokenUsageValidation.test.ts +0 -726
  667. package/src/components/__tests__/DynamicImportGuard.test.ts +0 -226
  668. package/src/components/__tests__/ExtensionLintPolicy.test.ts +0 -113
  669. package/src/components/__tests__/TokenCompliance.test.ts +0 -921
  670. package/src/components/__tests__/colorInheritanceValidation.test.ts +0 -267
  671. package/src/components/__tests__/componentTypographyInheritance.test.ts +0 -326
  672. package/src/components/core/Avatar-Base/README.md +0 -366
  673. package/src/components/core/Avatar-Base/__tests__/.gitkeep +0 -3
  674. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +0 -597
  675. package/src/components/core/Avatar-Base/__tests__/Avatar.icon-integration.test.ts +0 -656
  676. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +0 -396
  677. package/src/components/core/Avatar-Base/__tests__/Avatar.lifecycle.test.ts +0 -545
  678. package/src/components/core/Avatar-Base/__tests__/Avatar.rendering.test.ts +0 -505
  679. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +0 -701
  680. package/src/components/core/Avatar-Base/avatar.tokens.ts +0 -373
  681. package/src/components/core/Avatar-Base/index.ts +0 -25
  682. package/src/components/core/Avatar-Base/platforms/ios/.gitkeep +0 -3
  683. package/src/components/core/Avatar-Base/platforms/web/.gitkeep +0 -3
  684. package/src/components/core/Avatar-Base/platforms/web/Avatar.styles.css +0 -595
  685. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +0 -892
  686. package/src/components/core/Avatar-Base/platforms/web/hexagon-clip.svg +0 -87
  687. package/src/components/core/Avatar-Base/tokens/.gitkeep +0 -4
  688. package/src/components/core/Avatar-Base/types.ts +0 -86
  689. package/src/components/core/Badge-Count-Base/README.md +0 -323
  690. package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.stemma.test.ts +0 -548
  691. package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.test.ts +0 -452
  692. package/src/components/core/Badge-Count-Base/__tests__/test-utils.ts +0 -244
  693. package/src/components/core/Badge-Count-Base/index.ts +0 -37
  694. package/src/components/core/Badge-Count-Base/platforms/ios/.gitkeep +0 -1
  695. package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.styles.css +0 -148
  696. package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.ts +0 -363
  697. package/src/components/core/Badge-Count-Base/types.ts +0 -150
  698. package/src/components/core/Badge-Count-Notification/README.md +0 -396
  699. package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.stemma.test.ts +0 -571
  700. package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.test.ts +0 -490
  701. package/src/components/core/Badge-Count-Notification/__tests__/test-utils.ts +0 -256
  702. package/src/components/core/Badge-Count-Notification/index.ts +0 -60
  703. package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.styles.css +0 -182
  704. package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.ts +0 -401
  705. package/src/components/core/Badge-Count-Notification/tokens.ts +0 -124
  706. package/src/components/core/Badge-Count-Notification/types.ts +0 -119
  707. package/src/components/core/Badge-Label-Base/README.md +0 -251
  708. package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.stemma.test.ts +0 -549
  709. package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.test.ts +0 -439
  710. package/src/components/core/Badge-Label-Base/__tests__/test-utils.ts +0 -269
  711. package/src/components/core/Badge-Label-Base/__tests__/tokens.test.ts +0 -88
  712. package/src/components/core/Badge-Label-Base/index.ts +0 -41
  713. package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.styles.css +0 -166
  714. package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.ts +0 -340
  715. package/src/components/core/Badge-Label-Base/tokens.ts +0 -80
  716. package/src/components/core/Badge-Label-Base/types.ts +0 -148
  717. package/src/components/core/Button-CTA/Button-CTA.tokens.ts +0 -79
  718. package/src/components/core/Button-CTA/README.md +0 -293
  719. package/src/components/core/Button-CTA/__tests__/ButtonCTA.alignment.test.ts +0 -355
  720. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +0 -698
  721. package/src/components/core/Button-CTA/__tests__/ButtonCTA.tokens.test.ts +0 -89
  722. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -209
  723. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -185
  724. package/src/components/core/Button-CTA/examples/BasicUsage.html +0 -133
  725. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +0 -219
  726. package/src/components/core/Button-CTA/examples/Variants.html +0 -263
  727. package/src/components/core/Button-CTA/examples/WithIcon.html +0 -166
  728. package/src/components/core/Button-CTA/index.ts +0 -20
  729. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +0 -395
  730. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +0 -644
  731. package/src/components/core/Button-CTA/platforms/web/__tests__/ButtonCTA.icon-integration.test.ts +0 -476
  732. package/src/components/core/Button-CTA/types.ts +0 -239
  733. package/src/components/core/Button-Icon/README.md +0 -371
  734. package/src/components/core/Button-Icon/__tests__/ButtonIcon.alignment.test.ts +0 -358
  735. package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties-8-13.test.ts +0 -953
  736. package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties.test.ts +0 -920
  737. package/src/components/core/Button-Icon/__tests__/ButtonIcon.stemma.test.ts +0 -622
  738. package/src/components/core/Button-Icon/__tests__/ButtonIcon.unit.test.ts +0 -560
  739. package/src/components/core/Button-Icon/__tests__/setup.test.ts +0 -361
  740. package/src/components/core/Button-Icon/__tests__/test-utils.ts +0 -248
  741. package/src/components/core/Button-Icon/buttonIcon.tokens.ts +0 -218
  742. package/src/components/core/Button-Icon/platforms/web/.gitkeep +0 -4
  743. package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.css +0 -600
  744. package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.ts +0 -625
  745. package/src/components/core/Button-Icon/types.ts +0 -186
  746. package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.ts +0 -112
  747. package/src/components/core/Button-VerticalList-Item/README.md +0 -450
  748. package/src/components/core/Button-VerticalList-Item/__tests__/.gitkeep +0 -2
  749. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.alignment.test.ts +0 -271
  750. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.failLoudly.test.ts +0 -106
  751. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.integration.test.ts +0 -480
  752. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.properties.test.ts +0 -634
  753. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.unit.test.ts +0 -746
  754. package/src/components/core/Button-VerticalList-Item/__tests__/rtlSupport.test.ts +0 -206
  755. package/src/components/core/Button-VerticalList-Item/__tests__/test-utils.ts +0 -297
  756. package/src/components/core/Button-VerticalList-Item/__tests__/visualStateMapping.test.ts +0 -419
  757. package/src/components/core/Button-VerticalList-Item/index.ts +0 -49
  758. package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItemTest.kt +0 -1109
  759. package/src/components/core/Button-VerticalList-Item/platforms/ios/.gitkeep +0 -2
  760. package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItemTests.swift +0 -794
  761. package/src/components/core/Button-VerticalList-Item/platforms/web/.gitkeep +0 -2
  762. package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.styles.css +0 -459
  763. package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts +0 -1030
  764. package/src/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.ts +0 -411
  765. package/src/components/core/Button-VerticalList-Item/types.ts +0 -338
  766. package/src/components/core/Button-VerticalList-Set/README.md +0 -578
  767. package/src/components/core/Button-VerticalList-Set/__tests__/.gitkeep +0 -5
  768. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.integration.test.ts +0 -676
  769. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property.test.ts +0 -786
  770. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property2.test.ts +0 -1109
  771. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.unit.test.ts +0 -924
  772. package/src/components/core/Button-VerticalList-Set/__tests__/animationTiming.test.ts +0 -182
  773. package/src/components/core/Button-VerticalList-Set/__tests__/crossPlatformConsistency.test.ts +0 -685
  774. package/src/components/core/Button-VerticalList-Set/__tests__/deriveItemStates.test.ts +0 -179
  775. package/src/components/core/Button-VerticalList-Set/__tests__/validation.test.ts +0 -275
  776. package/src/components/core/Button-VerticalList-Set/index.ts +0 -32
  777. package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetTest.kt +0 -961
  778. package/src/components/core/Button-VerticalList-Set/platforms/ios/.gitkeep +0 -0
  779. package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetTests.swift +0 -475
  780. package/src/components/core/Button-VerticalList-Set/platforms/web/.gitkeep +0 -4
  781. package/src/components/core/Button-VerticalList-Set/platforms/web/Button-VerticalList-Set.styles.css +0 -167
  782. package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts +0 -1446
  783. package/src/components/core/Button-VerticalList-Set/types.ts +0 -788
  784. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +0 -534
  785. package/src/components/core/Chip-Base/index.ts +0 -40
  786. package/src/components/core/Chip-Base/platforms/ios/.gitkeep +0 -3
  787. package/src/components/core/Chip-Base/platforms/web/.gitkeep +0 -5
  788. package/src/components/core/Chip-Base/platforms/web/ChipBase.styles.css +0 -280
  789. package/src/components/core/Chip-Base/platforms/web/ChipBase.web.ts +0 -480
  790. package/src/components/core/Chip-Base/types.ts +0 -189
  791. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +0 -592
  792. package/src/components/core/Chip-Filter/index.ts +0 -34
  793. package/src/components/core/Chip-Filter/platforms/web/ChipFilter.styles.css +0 -105
  794. package/src/components/core/Chip-Filter/platforms/web/ChipFilter.web.ts +0 -539
  795. package/src/components/core/Chip-Filter/types.ts +0 -47
  796. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +0 -472
  797. package/src/components/core/Chip-Input/index.ts +0 -35
  798. package/src/components/core/Chip-Input/platforms/ios/.gitkeep +0 -3
  799. package/src/components/core/Chip-Input/platforms/web/ChipInput.styles.css +0 -99
  800. package/src/components/core/Chip-Input/platforms/web/ChipInput.web.ts +0 -485
  801. package/src/components/core/Chip-Input/types.ts +0 -35
  802. package/src/components/core/Container-Base/README.md +0 -450
  803. package/src/components/core/Container-Base/__tests__/ContainerBase.test.ts +0 -712
  804. package/src/components/core/Container-Base/index.ts +0 -47
  805. package/src/components/core/Container-Base/platforms/web/ContainerBase.web.ts +0 -405
  806. package/src/components/core/Container-Base/platforms/web/styles.css +0 -198
  807. package/src/components/core/Container-Base/platforms/web/token-mapping.ts +0 -573
  808. package/src/components/core/Container-Base/tokens.ts +0 -241
  809. package/src/components/core/Container-Base/types.ts +0 -307
  810. package/src/components/core/Container-Card-Base/README.md +0 -506
  811. package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.composition.test.ts +0 -167
  812. package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.test.ts +0 -646
  813. package/src/components/core/Container-Card-Base/index.ts +0 -64
  814. package/src/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.ts +0 -373
  815. package/src/components/core/Container-Card-Base/tokens.ts +0 -224
  816. package/src/components/core/Container-Card-Base/types.ts +0 -332
  817. package/src/components/core/Icon-Base/README.md +0 -168
  818. package/src/components/core/Icon-Base/__tests__/IconBase.test.ts +0 -192
  819. package/src/components/core/Icon-Base/index.ts +0 -34
  820. package/src/components/core/Icon-Base/platforms/ios/ASSET_CATALOG_SETUP.md +0 -239
  821. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Contents.json +0 -6
  822. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/Contents.json +0 -9
  823. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/Contents.json +0 -15
  824. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/alert-circle.svg +0 -1
  825. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/Contents.json +0 -15
  826. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/arrow-down.svg +0 -1
  827. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/Contents.json +0 -15
  828. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/arrow-left.svg +0 -1
  829. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/Contents.json +0 -15
  830. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/arrow-right.svg +0 -1
  831. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/Contents.json +0 -15
  832. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/arrow-up.svg +0 -1
  833. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/Contents.json +0 -15
  834. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/award.svg +0 -1
  835. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/Contents.json +0 -15
  836. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/bell.svg +0 -1
  837. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/Contents.json +0 -15
  838. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/briefcase.svg +0 -1
  839. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/Contents.json +0 -15
  840. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/calendar.svg +0 -1
  841. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/Contents.json +0 -15
  842. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/check-circle.svg +0 -1
  843. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/Contents.json +0 -15
  844. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/check.svg +0 -1
  845. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/Contents.json +0 -15
  846. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/chevron-down.svg +0 -1
  847. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/Contents.json +0 -15
  848. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/chevron-left.svg +0 -1
  849. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/Contents.json +0 -15
  850. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/chevron-right.svg +0 -1
  851. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/Contents.json +0 -15
  852. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/circle.svg +0 -1
  853. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/Contents.json +0 -15
  854. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/clock.svg +0 -1
  855. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/Contents.json +0 -15
  856. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/credit-card.svg +0 -1
  857. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/Contents.json +0 -15
  858. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/dollar-sign.svg +0 -1
  859. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/Contents.json +0 -15
  860. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/external-link.svg +0 -1
  861. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/Contents.json +0 -15
  862. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/eye-off.svg +0 -1
  863. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/Contents.json +0 -15
  864. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/eye.svg +0 -1
  865. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/Contents.json +0 -15
  866. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/file-text.svg +0 -1
  867. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/Contents.json +0 -15
  868. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/filter.svg +0 -1
  869. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/Contents.json +0 -15
  870. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/globe.svg +0 -1
  871. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/Contents.json +0 -15
  872. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/heart.svg +0 -1
  873. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/Contents.json +0 -15
  874. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/info.svg +0 -1
  875. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/Contents.json +0 -15
  876. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/mail.svg +0 -1
  877. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/Contents.json +0 -15
  878. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/map-pin.svg +0 -1
  879. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/Contents.json +0 -15
  880. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/minus.svg +0 -1
  881. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/Contents.json +0 -15
  882. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/more-horizontal.svg +0 -1
  883. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/Contents.json +0 -15
  884. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/more-vertical.svg +0 -1
  885. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/Contents.json +0 -15
  886. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/phone.svg +0 -1
  887. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/Contents.json +0 -15
  888. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/plus.svg +0 -1
  889. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/Contents.json +0 -15
  890. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/refresh-cw.svg +0 -1
  891. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/Contents.json +0 -15
  892. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/save.svg +0 -1
  893. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/Contents.json +0 -15
  894. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/search.svg +0 -1
  895. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/Contents.json +0 -15
  896. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/settings.svg +0 -1
  897. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/Contents.json +0 -15
  898. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/share-2.svg +0 -1
  899. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/Contents.json +0 -15
  900. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/share.svg +0 -1
  901. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/Contents.json +0 -15
  902. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/shield.svg +0 -1
  903. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/Contents.json +0 -15
  904. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/smartphone.svg +0 -1
  905. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/Contents.json +0 -15
  906. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/smile.svg +0 -1
  907. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/Contents.json +0 -15
  908. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/star.svg +0 -1
  909. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/Contents.json +0 -15
  910. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/trending-up.svg +0 -1
  911. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/Contents.json +0 -15
  912. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/user-check.svg +0 -1
  913. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/Contents.json +0 -15
  914. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/user-x.svg +0 -1
  915. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/Contents.json +0 -15
  916. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/user.svg +0 -1
  917. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/Contents.json +0 -15
  918. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/users.svg +0 -1
  919. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/Contents.json +0 -15
  920. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/wifi.svg +0 -1
  921. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/Contents.json +0 -15
  922. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/x.svg +0 -1
  923. package/src/components/core/Icon-Base/platforms/web/IconBase.web.ts +0 -553
  924. package/src/components/core/Icon-Base/platforms/web/assets/alert-circle.svg +0 -1
  925. package/src/components/core/Icon-Base/platforms/web/assets/arrow-down.svg +0 -1
  926. package/src/components/core/Icon-Base/platforms/web/assets/arrow-left.svg +0 -1
  927. package/src/components/core/Icon-Base/platforms/web/assets/arrow-right.svg +0 -1
  928. package/src/components/core/Icon-Base/platforms/web/assets/arrow-up.svg +0 -1
  929. package/src/components/core/Icon-Base/platforms/web/assets/award.svg +0 -1
  930. package/src/components/core/Icon-Base/platforms/web/assets/bell.svg +0 -1
  931. package/src/components/core/Icon-Base/platforms/web/assets/briefcase.svg +0 -1
  932. package/src/components/core/Icon-Base/platforms/web/assets/calendar.svg +0 -1
  933. package/src/components/core/Icon-Base/platforms/web/assets/check-circle.svg +0 -1
  934. package/src/components/core/Icon-Base/platforms/web/assets/check.svg +0 -1
  935. package/src/components/core/Icon-Base/platforms/web/assets/chevron-down.svg +0 -1
  936. package/src/components/core/Icon-Base/platforms/web/assets/chevron-left.svg +0 -1
  937. package/src/components/core/Icon-Base/platforms/web/assets/chevron-right.svg +0 -1
  938. package/src/components/core/Icon-Base/platforms/web/assets/circle.svg +0 -1
  939. package/src/components/core/Icon-Base/platforms/web/assets/clock.svg +0 -1
  940. package/src/components/core/Icon-Base/platforms/web/assets/credit-card.svg +0 -1
  941. package/src/components/core/Icon-Base/platforms/web/assets/dollar-sign.svg +0 -1
  942. package/src/components/core/Icon-Base/platforms/web/assets/external-link.svg +0 -1
  943. package/src/components/core/Icon-Base/platforms/web/assets/eye-off.svg +0 -1
  944. package/src/components/core/Icon-Base/platforms/web/assets/eye.svg +0 -1
  945. package/src/components/core/Icon-Base/platforms/web/assets/file-text.svg +0 -1
  946. package/src/components/core/Icon-Base/platforms/web/assets/filter.svg +0 -1
  947. package/src/components/core/Icon-Base/platforms/web/assets/globe.svg +0 -1
  948. package/src/components/core/Icon-Base/platforms/web/assets/heart.svg +0 -1
  949. package/src/components/core/Icon-Base/platforms/web/assets/info.svg +0 -1
  950. package/src/components/core/Icon-Base/platforms/web/assets/mail.svg +0 -1
  951. package/src/components/core/Icon-Base/platforms/web/assets/map-pin.svg +0 -1
  952. package/src/components/core/Icon-Base/platforms/web/assets/minus.svg +0 -1
  953. package/src/components/core/Icon-Base/platforms/web/assets/more-horizontal.svg +0 -1
  954. package/src/components/core/Icon-Base/platforms/web/assets/more-vertical.svg +0 -1
  955. package/src/components/core/Icon-Base/platforms/web/assets/phone.svg +0 -1
  956. package/src/components/core/Icon-Base/platforms/web/assets/plus.svg +0 -1
  957. package/src/components/core/Icon-Base/platforms/web/assets/refresh-cw.svg +0 -1
  958. package/src/components/core/Icon-Base/platforms/web/assets/save.svg +0 -1
  959. package/src/components/core/Icon-Base/platforms/web/assets/search.svg +0 -1
  960. package/src/components/core/Icon-Base/platforms/web/assets/settings.svg +0 -1
  961. package/src/components/core/Icon-Base/platforms/web/assets/share-2.svg +0 -1
  962. package/src/components/core/Icon-Base/platforms/web/assets/share.svg +0 -1
  963. package/src/components/core/Icon-Base/platforms/web/assets/shield.svg +0 -1
  964. package/src/components/core/Icon-Base/platforms/web/assets/smartphone.svg +0 -1
  965. package/src/components/core/Icon-Base/platforms/web/assets/smile.svg +0 -1
  966. package/src/components/core/Icon-Base/platforms/web/assets/star.svg +0 -1
  967. package/src/components/core/Icon-Base/platforms/web/assets/trending-up.svg +0 -1
  968. package/src/components/core/Icon-Base/platforms/web/assets/user-check.svg +0 -1
  969. package/src/components/core/Icon-Base/platforms/web/assets/user-x.svg +0 -1
  970. package/src/components/core/Icon-Base/platforms/web/assets/user.svg +0 -1
  971. package/src/components/core/Icon-Base/platforms/web/assets/users.svg +0 -1
  972. package/src/components/core/Icon-Base/platforms/web/assets/wifi.svg +0 -1
  973. package/src/components/core/Icon-Base/platforms/web/assets/x.svg +0 -1
  974. package/src/components/core/Icon-Base/platforms/web/styles.css +0 -203
  975. package/src/components/core/Icon-Base/types.ts +0 -338
  976. package/src/components/core/Input-Checkbox-Base/README.md +0 -390
  977. package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.stemma.test.ts +0 -552
  978. package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.test.ts +0 -878
  979. package/src/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.ts +0 -37
  980. package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.css +0 -477
  981. package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.ts +0 -561
  982. package/src/components/core/Input-Checkbox-Base/types.ts +0 -399
  983. package/src/components/core/Input-Checkbox-Legal/README.md +0 -554
  984. package/src/components/core/Input-Checkbox-Legal/__tests__/InputCheckboxLegal.test.ts +0 -727
  985. package/src/components/core/Input-Checkbox-Legal/platforms/ios/.gitkeep +0 -2
  986. package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.css +0 -112
  987. package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.ts +0 -505
  988. package/src/components/core/Input-Checkbox-Legal/types.ts +0 -348
  989. package/src/components/core/Input-Radio-Base/.gitkeep +0 -2
  990. package/src/components/core/Input-Radio-Base/README.md +0 -427
  991. package/src/components/core/Input-Radio-Base/__tests__/.gitkeep +0 -1
  992. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.form.test.ts +0 -299
  993. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.stemma.test.ts +0 -543
  994. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.test.ts +0 -429
  995. package/src/components/core/Input-Radio-Base/platforms/ios/.gitkeep +0 -1
  996. package/src/components/core/Input-Radio-Base/platforms/web/.gitkeep +0 -1
  997. package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.css +0 -504
  998. package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.ts +0 -648
  999. package/src/components/core/Input-Radio-Base/radio-sizing.tokens.ts +0 -37
  1000. package/src/components/core/Input-Radio-Base/types.ts +0 -362
  1001. package/src/components/core/Input-Radio-Set/README.md +0 -373
  1002. package/src/components/core/Input-Radio-Set/__tests__/.gitkeep +0 -0
  1003. package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.stemma.test.ts +0 -493
  1004. package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.test.ts +0 -499
  1005. package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.css +0 -99
  1006. package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.ts +0 -790
  1007. package/src/components/core/Input-Radio-Set/types.ts +0 -301
  1008. package/src/components/core/Input-Text-Base/README.md +0 -258
  1009. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +0 -311
  1010. package/src/components/core/Input-Text-Base/__tests__/keyboardNavigation.test.ts +0 -444
  1011. package/src/components/core/Input-Text-Base/__tests__/labelAssociation.test.ts +0 -418
  1012. package/src/components/core/Input-Text-Base/__tests__/screenReaderSupport.test.ts +0 -405
  1013. package/src/components/core/Input-Text-Base/__tests__/setup.ts +0 -17
  1014. package/src/components/core/Input-Text-Base/__tests__/stateManagement.test.ts +0 -718
  1015. package/src/components/core/Input-Text-Base/__tests__/test-utils.ts +0 -81
  1016. package/src/components/core/Input-Text-Base/__tests__/touchTargetSizing.test.ts +0 -319
  1017. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.ts +0 -241
  1018. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.css +0 -293
  1019. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.ts +0 -448
  1020. package/src/components/core/Input-Text-Base/stateManagement.ts +0 -267
  1021. package/src/components/core/Input-Text-Base/tokens.ts +0 -210
  1022. package/src/components/core/Input-Text-Base/types.ts +0 -114
  1023. package/src/components/core/Input-Text-Email/README.md +0 -252
  1024. package/src/components/core/Input-Text-Email/__tests__/validation.test.ts +0 -127
  1025. package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.ts +0 -276
  1026. package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.ts +0 -319
  1027. package/src/components/core/Input-Text-Email/stateManagement.ts +0 -160
  1028. package/src/components/core/Input-Text-Email/tokens.ts +0 -33
  1029. package/src/components/core/Input-Text-Email/types.ts +0 -72
  1030. package/src/components/core/Input-Text-Email/validation.ts +0 -130
  1031. package/src/components/core/Input-Text-Password/README.md +0 -360
  1032. package/src/components/core/Input-Text-Password/__tests__/validation.test.ts +0 -362
  1033. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.ts +0 -434
  1034. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +0 -512
  1035. package/src/components/core/Input-Text-Password/stateManagement.ts +0 -244
  1036. package/src/components/core/Input-Text-Password/tokens.ts +0 -32
  1037. package/src/components/core/Input-Text-Password/types.ts +0 -177
  1038. package/src/components/core/Input-Text-Password/validation.ts +0 -207
  1039. package/src/components/core/Input-Text-PhoneNumber/README.md +0 -276
  1040. package/src/components/core/Input-Text-PhoneNumber/__tests__/validation.test.ts +0 -301
  1041. package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.ts +0 -370
  1042. package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.ts +0 -393
  1043. package/src/components/core/Input-Text-PhoneNumber/stateManagement.ts +0 -250
  1044. package/src/components/core/Input-Text-PhoneNumber/tokens.ts +0 -33
  1045. package/src/components/core/Input-Text-PhoneNumber/types.ts +0 -135
  1046. package/src/components/core/Input-Text-PhoneNumber/validation.ts +0 -302
  1047. package/src/components/core/Nav-Header-App/README.md +0 -29
  1048. package/src/components/core/Nav-Header-App/index.ts +0 -5
  1049. package/src/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.ts +0 -37
  1050. package/src/components/core/Nav-Header-App/types.ts +0 -32
  1051. package/src/components/core/Nav-Header-Base/README.md +0 -21
  1052. package/src/components/core/Nav-Header-Base/index.ts +0 -12
  1053. package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.styles.css +0 -75
  1054. package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.ts +0 -120
  1055. package/src/components/core/Nav-Header-Base/types.ts +0 -63
  1056. package/src/components/core/Nav-Header-Page/README.md +0 -34
  1057. package/src/components/core/Nav-Header-Page/__tests__/NavHeaderPage.test.ts +0 -250
  1058. package/src/components/core/Nav-Header-Page/index.ts +0 -12
  1059. package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.styles.css +0 -90
  1060. package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.ts +0 -169
  1061. package/src/components/core/Nav-Header-Page/types.ts +0 -55
  1062. package/src/components/core/Nav-SegmentedChoice-Base/README.md +0 -327
  1063. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.android.test.ts +0 -218
  1064. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.interaction.test.ts +0 -419
  1065. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.ios.test.ts +0 -207
  1066. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.visual.test.ts +0 -371
  1067. package/src/components/core/Nav-SegmentedChoice-Base/index.ts +0 -38
  1068. package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.styles.css +0 -160
  1069. package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.ts +0 -477
  1070. package/src/components/core/Nav-SegmentedChoice-Base/types.ts +0 -65
  1071. package/src/components/core/Nav-TabBar-Base/README.md +0 -264
  1072. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.android.test.ts +0 -270
  1073. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.ios.test.ts +0 -221
  1074. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.test.ts +0 -421
  1075. package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.html +0 -2
  1076. package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.tsx +0 -2
  1077. package/src/components/core/Nav-TabBar-Base/index.ts +0 -20
  1078. package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.styles.css +0 -281
  1079. package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.ts +0 -420
  1080. package/src/components/core/Nav-TabBar-Base/types.ts +0 -43
  1081. package/src/components/core/Progress-Bar-Base/README.md +0 -31
  1082. package/src/components/core/Progress-Bar-Base/__tests__/ProgressBarBase.test.ts +0 -202
  1083. package/src/components/core/Progress-Bar-Base/index.ts +0 -6
  1084. package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.styles.css +0 -52
  1085. package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.ts +0 -135
  1086. package/src/components/core/Progress-Bar-Base/types.ts +0 -46
  1087. package/src/components/core/Progress-Indicator-Connector-Base/README.md +0 -169
  1088. package/src/components/core/Progress-Indicator-Connector-Base/index.ts +0 -33
  1089. package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.styles.css +0 -50
  1090. package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.ts +0 -141
  1091. package/src/components/core/Progress-Indicator-Connector-Base/types.ts +0 -67
  1092. package/src/components/core/Progress-Indicator-Label-Base/README.md +0 -191
  1093. package/src/components/core/Progress-Indicator-Label-Base/index.ts +0 -28
  1094. package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.styles.css +0 -81
  1095. package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.ts +0 -174
  1096. package/src/components/core/Progress-Indicator-Label-Base/types.ts +0 -64
  1097. package/src/components/core/Progress-Indicator-Node-Base/README.md +0 -206
  1098. package/src/components/core/Progress-Indicator-Node-Base/__tests__/VisualStates.test.ts +0 -259
  1099. package/src/components/core/Progress-Indicator-Node-Base/index.ts +0 -36
  1100. package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.styles.css +0 -193
  1101. package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.ts +0 -226
  1102. package/src/components/core/Progress-Indicator-Node-Base/types.ts +0 -142
  1103. package/src/components/core/Progress-Pagination-Base/README.md +0 -290
  1104. package/src/components/core/Progress-Pagination-Base/__tests__/PaginationBase.test.ts +0 -290
  1105. package/src/components/core/Progress-Pagination-Base/index.ts +0 -40
  1106. package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.styles.css +0 -80
  1107. package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.ts +0 -293
  1108. package/src/components/core/Progress-Pagination-Base/types.ts +0 -112
  1109. package/src/components/core/Progress-Stepper-Base/README.md +0 -311
  1110. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +0 -345
  1111. package/src/components/core/Progress-Stepper-Base/index.ts +0 -43
  1112. package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.styles.css +0 -49
  1113. package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.ts +0 -288
  1114. package/src/components/core/Progress-Stepper-Base/types.ts +0 -175
  1115. package/src/components/core/Progress-Stepper-Detailed/README.md +0 -401
  1116. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +0 -481
  1117. package/src/components/core/Progress-Stepper-Detailed/index.ts +0 -48
  1118. package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.styles.css +0 -106
  1119. package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.ts +0 -336
  1120. package/src/components/core/Progress-Stepper-Detailed/types.ts +0 -195
  1121. package/src/composition/BlendComposition.ts +0 -46
  1122. package/src/composition/BlendCompositionParser.ts +0 -215
  1123. package/src/composition/OpacityComposition.ts +0 -62
  1124. package/src/composition/OpacityCompositionParser.ts +0 -308
  1125. package/src/composition/__tests__/BlendCompositionParser.test.ts +0 -431
  1126. package/src/composition/__tests__/OpacityCompositionParser.test.ts +0 -539
  1127. package/src/composition/index.ts +0 -20
  1128. package/src/config/ConfigLoader.ts +0 -143
  1129. package/src/config/__resolution-matrix__/README.md +0 -76
  1130. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/compiled/defineConfig.js +0 -9
  1131. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/designerpunk.config.ts +0 -20
  1132. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/my-overrides.ts +0 -8
  1133. package/src/config/__resolution-matrix__/fixtures/faithful-esm/compiled/defineConfig.js +0 -11
  1134. package/src/config/__resolution-matrix__/fixtures/faithful-esm/designerpunk.config.ts +0 -23
  1135. package/src/config/__resolution-matrix__/fixtures/faithful-esm/my-overrides.ts +0 -6
  1136. package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/designerpunk.config.ts +0 -11
  1137. package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/src/config/index.ts +0 -15
  1138. package/src/config/__resolution-matrix__/fixtures/source-dir-esm/designerpunk.config.ts +0 -15
  1139. package/src/config/__resolution-matrix__/fixtures/source-dir-esm/src/config/index.ts +0 -13
  1140. package/src/config/__resolution-matrix__/run-matrix.js +0 -107
  1141. package/src/config/__resolution-matrix__/runner.js +0 -153
  1142. package/src/config/__resolution-matrix__/verify-real-loadconfig.js +0 -122
  1143. package/src/config/__tests__/ConfigLoader.test.ts +0 -115
  1144. package/src/config/defineConfig.ts +0 -71
  1145. package/src/config/index.ts +0 -7
  1146. package/src/config/scopedTsRequire.ts +0 -62
  1147. package/src/constants/BaselineGrid.ts +0 -41
  1148. package/src/constants/SpacingTokens.ts +0 -55
  1149. package/src/figma/ComponentAnalysis.ts +0 -292
  1150. package/src/figma/ComponentAnalysisGenerator.ts +0 -444
  1151. package/src/figma/ConsoleMCPClient.ts +0 -168
  1152. package/src/figma/ConsoleMCPClientImpl.ts +0 -1034
  1153. package/src/figma/DesignExtractor.ts +0 -3620
  1154. package/src/figma/TokenSyncWorkflow.ts +0 -915
  1155. package/src/figma/TokenTranslator.ts +0 -891
  1156. package/src/figma/VariantAnalyzer.ts +0 -712
  1157. package/src/figma/__tests__/ComponentAnalysisGenerator.json.test.ts +0 -429
  1158. package/src/figma/__tests__/ComponentAnalysisGenerator.markdown.test.ts +0 -428
  1159. package/src/figma/__tests__/ConsoleMCPClient.bugfix.test.ts +0 -261
  1160. package/src/figma/__tests__/ConsoleMCPClient.preservation.test.ts +0 -395
  1161. package/src/figma/__tests__/ConsoleMCPClient.test.ts +0 -375
  1162. package/src/figma/__tests__/DesignExtractor.boundVariableResolution.test.ts +0 -580
  1163. package/src/figma/__tests__/DesignExtractor.buildNodeTree.test.ts +0 -535
  1164. package/src/figma/__tests__/DesignExtractor.captureComponentScreenshot.test.ts +0 -176
  1165. package/src/figma/__tests__/DesignExtractor.detectBehavioralContracts.test.ts +0 -263
  1166. package/src/figma/__tests__/DesignExtractor.detectComponentTokenDecisions.test.ts +0 -379
  1167. package/src/figma/__tests__/DesignExtractor.detectCompositionPatterns.test.ts +0 -507
  1168. package/src/figma/__tests__/DesignExtractor.detectPlatformParity.test.ts +0 -406
  1169. package/src/figma/__tests__/DesignExtractor.queryContext.test.ts +0 -214
  1170. package/src/figma/__tests__/DesignExtractor.readFigmaComponent.test.ts +0 -431
  1171. package/src/figma/__tests__/DesignExtractor.readStyles.test.ts +0 -204
  1172. package/src/figma/__tests__/DesignExtractor.readTokenBindings.test.ts +0 -268
  1173. package/src/figma/__tests__/DesignExtractor.reconstructCompositeTokens.test.ts +0 -403
  1174. package/src/figma/__tests__/DesignExtractor.resolveUnknownVariableIds.test.ts +0 -259
  1175. package/src/figma/__tests__/DesignExtractor.translateTokens.test.ts +0 -433
  1176. package/src/figma/__tests__/DesignExtractor.validateModes.test.ts +0 -350
  1177. package/src/figma/__tests__/TokenSyncWorkflow.batch.test.ts +0 -277
  1178. package/src/figma/__tests__/TokenSyncWorkflow.drift.test.ts +0 -187
  1179. package/src/figma/__tests__/TokenSyncWorkflow.preservation.test.ts +0 -544
  1180. package/src/figma/__tests__/TokenSyncWorkflow.styles.test.ts +0 -245
  1181. package/src/figma/__tests__/TokenSyncWorkflow.sync.test.ts +0 -217
  1182. package/src/figma/__tests__/TokenTranslator.test.ts +0 -757
  1183. package/src/figma/__tests__/VariantAnalyzer.detectConflicts.test.ts +0 -126
  1184. package/src/figma/__tests__/VariantAnalyzer.test.ts +0 -633
  1185. package/src/figma/__tests__/error-reporting.test.ts +0 -254
  1186. package/src/figma/__tests__/preflight.test.ts +0 -94
  1187. package/src/figma/error-reporting.ts +0 -260
  1188. package/src/figma/index.ts +0 -98
  1189. package/src/figma/portCleanup.ts +0 -86
  1190. package/src/figma/preflight.ts +0 -120
  1191. package/src/generators/BlendUtilityGenerator.ts +0 -847
  1192. package/src/generators/BlendValueGenerator.ts +0 -198
  1193. package/src/generators/DTCGFormatGenerator.ts +0 -1355
  1194. package/src/generators/DTCGGeneratorConfig.ts +0 -46
  1195. package/src/generators/ModeResolvedTokens.ts +0 -58
  1196. package/src/generators/ResponsiveGridGenerator.ts +0 -273
  1197. package/src/generators/TokenFileGenerator.ts +0 -2075
  1198. package/src/generators/__tests__/AccessibilityTokenGeneration.test.ts +0 -350
  1199. package/src/generators/__tests__/BlendUtilityGenerator.test.ts +0 -829
  1200. package/src/generators/__tests__/BlendValueGenerator.test.ts +0 -200
  1201. package/src/generators/__tests__/BreakpointTokenGeneration.test.ts +0 -172
  1202. package/src/generators/__tests__/CSSThemeScoping.test.ts +0 -153
  1203. package/src/generators/__tests__/DTCGConfigOptions.test.ts +0 -271
  1204. package/src/generators/__tests__/DTCGErrorHandling.test.ts +0 -139
  1205. package/src/generators/__tests__/DTCGFormatGenerator.integration.test.ts +0 -346
  1206. package/src/generators/__tests__/DTCGFormatGenerator.property.test.ts +0 -497
  1207. package/src/generators/__tests__/DTCGFormatGenerator.test.ts +0 -469
  1208. package/src/generators/__tests__/FigmaTransformer.styles.test.ts +0 -398
  1209. package/src/generators/__tests__/FigmaTransformer.variables.test.ts +0 -540
  1210. package/src/generators/__tests__/GridSpacingTokenGeneration.test.ts +0 -254
  1211. package/src/generators/__tests__/IconTokenGeneration.test.ts +0 -452
  1212. package/src/generators/__tests__/KotlinThemeTypes.test.ts +0 -110
  1213. package/src/generators/__tests__/ModeAwareGeneration.test.ts +0 -160
  1214. package/src/generators/__tests__/NativeOklchOutput.test.ts +0 -56
  1215. package/src/generators/__tests__/OklchExport.test.ts +0 -71
  1216. package/src/generators/__tests__/ProductRepoSimulation.test.ts +0 -91
  1217. package/src/generators/__tests__/ResponsiveGridGeneration.test.ts +0 -291
  1218. package/src/generators/__tests__/Spec076TokenMigration.test.ts +0 -106
  1219. package/src/generators/__tests__/Spec077ModesVerification.test.ts +0 -52
  1220. package/src/generators/__tests__/SwiftThemeTypes.test.ts +0 -122
  1221. package/src/generators/__tests__/TokenFileGenerator.test.ts +0 -914
  1222. package/src/generators/__tests__/TransformerRegistry.test.ts +0 -118
  1223. package/src/generators/__tests__/WcagValueExportSupport.test.ts +0 -84
  1224. package/src/generators/__tests__/WcagValueInfrastructure.test.ts +0 -122
  1225. package/src/generators/__tests__/WebOklchOutput.test.ts +0 -72
  1226. package/src/generators/__tests__/generateTokenIndex.test.ts +0 -204
  1227. package/src/generators/__tests__/helpers/defaultSemanticOptions.ts +0 -24
  1228. package/src/generators/generateTokenFiles.ts +0 -337
  1229. package/src/generators/generateTokenIndex.ts +0 -258
  1230. package/src/generators/oklch/OklchExportUtils.ts +0 -57
  1231. package/src/generators/oklch/OklchTokenIndexMetadata.ts +0 -30
  1232. package/src/generators/transformers/FigmaTransformer.ts +0 -912
  1233. package/src/generators/transformers/ITokenTransformer.ts +0 -56
  1234. package/src/generators/transformers/TransformerRegistry.ts +0 -63
  1235. package/src/generators/transformers/index.ts +0 -52
  1236. package/src/generators/types/DTCGTypes.ts +0 -101
  1237. package/src/integration/BuildErrorHandler.ts +0 -440
  1238. package/src/integration/BuildSystemInterface.ts +0 -338
  1239. package/src/integration/PlatformFileSelector.ts +0 -288
  1240. package/src/integration/RegistryCoordinator.ts +0 -404
  1241. package/src/integration/TranslationCoordinator.ts +0 -458
  1242. package/src/integration/TreeShakingOptimizer.ts +0 -350
  1243. package/src/integration/ValidationCoordinator.ts +0 -780
  1244. package/src/integration/__tests__/ComponentTokenValidation.test.ts +0 -762
  1245. package/src/integration/__tests__/ValidationCoordinator.test.ts +0 -609
  1246. package/src/integration/__tests__/performance/ComponentTokenValidationPerformance.test.ts +0 -161
  1247. package/src/integration/index.ts +0 -55
  1248. package/src/naming/NamingConventionManager.ts +0 -318
  1249. package/src/naming/PlatformNamingRules.ts +0 -278
  1250. package/src/naming/__tests__/NamingConventions.test.ts +0 -224
  1251. package/src/naming/index.ts +0 -23
  1252. package/src/parent-completion.md +0 -1
  1253. package/src/performance/CachingStrategy.ts +0 -426
  1254. package/src/performance/FileGenerationOptimizer.ts +0 -294
  1255. package/src/performance/PerformanceMonitor.ts +0 -185
  1256. package/src/performance/PerformanceOptimizer.ts +0 -348
  1257. package/src/performance/index.ts +0 -30
  1258. package/src/providers/AndroidFileOrganizer.ts +0 -241
  1259. package/src/providers/AndroidFormatGenerator.ts +0 -750
  1260. package/src/providers/AndroidUnitConverter.ts +0 -177
  1261. package/src/providers/FormatProvider.ts +0 -187
  1262. package/src/providers/PathProvider.ts +0 -197
  1263. package/src/providers/UnitProvider.ts +0 -106
  1264. package/src/providers/WebFileOrganizer.ts +0 -121
  1265. package/src/providers/WebFormatGenerator.ts +0 -611
  1266. package/src/providers/WebUnitConverter.ts +0 -116
  1267. package/src/providers/__tests__/AndroidAccessibilityTokens.test.ts +0 -86
  1268. package/src/providers/__tests__/AndroidFormatGenerator-semantic.test.ts +0 -494
  1269. package/src/providers/__tests__/FormatProviders.test.ts +0 -828
  1270. package/src/providers/__tests__/InsetTokenGeneration.test.ts +0 -627
  1271. package/src/providers/__tests__/PathProviders.test.ts +0 -512
  1272. package/src/providers/__tests__/PlatformOutputFormat.test.ts +0 -252
  1273. package/src/providers/__tests__/UnitProviders.test.ts +0 -721
  1274. package/src/providers/__tests__/WebFormatGenerator-semantic.test.ts +0 -293
  1275. package/src/providers/__tests__/iOSFormatGenerator-semantic.test.ts +0 -410
  1276. package/src/providers/iOSFileOrganizer.ts +0 -162
  1277. package/src/providers/iOSFormatGenerator.ts +0 -599
  1278. package/src/providers/iOSUnitConverter.ts +0 -125
  1279. package/src/providers/index.ts +0 -26
  1280. package/src/registries/ComponentTokenRegistry.ts +0 -292
  1281. package/src/registries/IRegistry.ts +0 -170
  1282. package/src/registries/__tests__/ComponentTokenRegistry.test.ts +0 -446
  1283. package/src/registries/__tests__/IRegistry.test.ts +0 -250
  1284. package/src/registries/__tests__/PrimitiveTokenRegistry.test.ts +0 -342
  1285. package/src/registries/__tests__/SemanticTokenRegistry.test.ts +0 -444
  1286. package/src/resolvers/AndroidColorResolver.ts +0 -333
  1287. package/src/resolvers/ModeThemeResolver.ts +0 -152
  1288. package/src/resolvers/SemanticOverrideResolver.ts +0 -155
  1289. package/src/resolvers/SemanticValueResolver.ts +0 -133
  1290. package/src/resolvers/WebColorResolver.ts +0 -240
  1291. package/src/resolvers/__tests__/AndroidColorResolver.test.ts +0 -507
  1292. package/src/resolvers/__tests__/ModeThemeResolver.test.ts +0 -411
  1293. package/src/resolvers/__tests__/SemanticOverrideResolver.test.ts +0 -186
  1294. package/src/resolvers/__tests__/WebColorResolver.test.ts +0 -405
  1295. package/src/resolvers/__tests__/iOSColorResolver.test.ts +0 -432
  1296. package/src/resolvers/iOSColorResolver.ts +0 -224
  1297. package/src/resolvers/index.ts +0 -11
  1298. package/src/security/AIAgentRestrictions.ts +0 -298
  1299. package/src/security/ContaminationAuditor.ts +0 -393
  1300. package/src/security/ContaminationPrevention.ts +0 -275
  1301. package/src/security/DocumentationGuard.ts +0 -258
  1302. package/src/security/FlexibilityTokenGuard.ts +0 -256
  1303. package/src/security/HumanApprovalWorkflow.ts +0 -319
  1304. package/src/security/__tests__/AIAgentRestrictions.test.ts +0 -482
  1305. package/src/security/__tests__/ContaminationPrevention.test.ts +0 -424
  1306. package/src/security/__tests__/SecurityIntegration.test.ts +0 -505
  1307. package/src/security/index.ts +0 -48
  1308. package/src/testing/__tests__/utilities.test.ts +0 -175
  1309. package/src/testing/index.ts +0 -154
  1310. package/src/testing/jest-preset.ts +0 -62
  1311. package/src/testing/style-mock.ts +0 -7
  1312. package/src/testing/validators.ts +0 -10
  1313. package/src/themes/ResolvedThemeSet.ts +0 -22
  1314. package/src/themes/ThemeRegistry.ts +0 -97
  1315. package/src/themes/__tests__/ThemeRegistry.test.ts +0 -162
  1316. package/src/tools/ThemeFileGenerator.ts +0 -109
  1317. package/src/tools/integrity/DiskFreshGenerator.ts +0 -36
  1318. package/src/tools/integrity/GenerationIntegrityCheck.ts +0 -132
  1319. package/src/tools/integrity/Invariants.ts +0 -228
  1320. package/src/tools/integrity/Normalizer.ts +0 -94
  1321. package/src/tools/integrity/SemanticComparator.ts +0 -127
  1322. package/src/tools/integrity/__tests__/GenerationIntegrityCheck.test.ts +0 -132
  1323. package/src/tools/integrity/__tests__/Invariants.test.ts +0 -142
  1324. package/src/tools/integrity/__tests__/Normalizer.test.ts +0 -65
  1325. package/src/tools/integrity/__tests__/SemanticComparator.test.ts +0 -62
  1326. package/src/tools/integrity/__tests__/consumer-package-mode.test.ts +0 -205
  1327. package/src/tools/integrity/cli/run-audit.ts +0 -150
  1328. package/src/tools/integrity/inventory.ts +0 -51
  1329. package/src/tools/integrity/manifest.ts +0 -56
  1330. package/src/tools/integrity/types/index.ts +0 -183
  1331. package/src/types/ComponentTypes.ts +0 -76
  1332. package/src/types/TranslationOutput.ts +0 -105
  1333. package/src/types/ValidationResult.ts +0 -74
  1334. package/src/types/__tests__/ComponentTypes.test.ts +0 -73
  1335. package/src/types/css.d.ts +0 -35
  1336. package/src/types/generated/TokenTypes.ts +0 -142
  1337. package/src/types/index.ts +0 -42
  1338. package/src/validators/BaselineGridValidator.ts +0 -119
  1339. package/src/validators/CompositionPatternValidator.ts +0 -259
  1340. package/src/validators/CrossPlatformConsistencyValidator.ts +0 -498
  1341. package/src/validators/ErrorValidator.ts +0 -998
  1342. package/src/validators/IValidator.ts +0 -273
  1343. package/src/validators/MathematicalRelationshipParser.ts +0 -434
  1344. package/src/validators/ModeParity.ts +0 -123
  1345. package/src/validators/PassValidator.ts +0 -533
  1346. package/src/validators/PlatformConstraintHandler.ts +0 -453
  1347. package/src/validators/PrimitiveReferenceValidator.ts +0 -284
  1348. package/src/validators/SemanticTokenValidator.ts +0 -496
  1349. package/src/validators/StemmaComponentNamingValidator.ts +0 -524
  1350. package/src/validators/StemmaErrorGuidanceSystem.ts +0 -1600
  1351. package/src/validators/StemmaPropertyAccessibilityValidator.ts +0 -823
  1352. package/src/validators/StemmaTokenUsageValidator.ts +0 -651
  1353. package/src/validators/SyntaxValidator.ts +0 -537
  1354. package/src/validators/ThreeTierValidator.ts +0 -822
  1355. package/src/validators/ToleranceCalculator.ts +0 -324
  1356. package/src/validators/ValidationReasoning.ts +0 -464
  1357. package/src/validators/WCAGValidator.ts +0 -219
  1358. package/src/validators/WarningValidator.ts +0 -626
  1359. package/src/validators/__tests__/BaselineGridValidator.test.ts +0 -292
  1360. package/src/validators/__tests__/BorderWidthValidation.test.ts +0 -595
  1361. package/src/validators/__tests__/CompositionPatterns.test.ts +0 -463
  1362. package/src/validators/__tests__/CrossPlatformConsistency.test.ts +0 -834
  1363. package/src/validators/__tests__/IValidator.test.ts +0 -258
  1364. package/src/validators/__tests__/MathematicalRelationshipParser.test.ts +0 -465
  1365. package/src/validators/__tests__/PlatformConstraints.test.ts +0 -486
  1366. package/src/validators/__tests__/SemanticTokenValidator.test.ts +0 -723
  1367. package/src/validators/__tests__/StemmaComponentNamingValidator.test.ts +0 -597
  1368. package/src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts +0 -717
  1369. package/src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts +0 -349
  1370. package/src/validators/__tests__/StemmaTokenUsageValidator.test.ts +0 -432
  1371. package/src/validators/__tests__/SyntaxValidator.test.ts +0 -360
  1372. package/src/validators/__tests__/ThreeTierValidator.test.ts +0 -906
  1373. package/src/validators/__tests__/ValidationReasoning.test.ts +0 -636
  1374. package/src/validators/__tests__/WCAGValidator.test.ts +0 -243
  1375. package/src/validators/buildValidation.ts +0 -170
  1376. package/src/validators/index.ts +0 -144
  1377. package/src/workflows/ConsistencyValidator.ts +0 -339
  1378. package/src/workflows/TokenGenerationWorkflow.ts +0 -460
  1379. package/src/workflows/ValidationPipeline.ts +0 -284
  1380. package/src/workflows/WorkflowErrorHandler.ts +0 -441
@@ -9,7 +9,7 @@ aliases: classification map register, rule classification, boundary call, verifi
9
9
  # Classification Map
10
10
 
11
11
  **Date**: 2026-07-14
12
- **Last Reviewed**: 2026-08-02
12
+ **Last Reviewed**: 2026-09-29
13
13
  **Purpose**: The living register of per-rule classification decisions — boundary call, verification disposition + owner, and education disposition — so enforcement ownership is decided once and cited thereafter instead of re-litigated per agent, per prompt, per session
14
14
  **Organization**: process-standard
15
15
  **Scope**: cross-project
@@ -41,6 +41,8 @@ This is the **classification-map register**: one entry per governance/design rul
41
41
  3. **Roll-up reading** (ballot Decision 0): a criterion is MET iff MET in every EVALUABLE segment with ≥1 evaluable; empty or under-populated segments never force INDETERMINATE.
42
42
  4. **Applicability scoring**: actions that never become applicable score N/A, not ABSENT.
43
43
  5. **Campaign window parameters** (ballot Decision (c), P1–P3): N=10 observed PRs per wave window; re-accretion (W2) and churn (W3) per-wave; first-push failure rate (W1) on ONE shared campaign window with a single pre-campaign baseline; waves may overlap; **campaign-endogenous events (wave prunes, wave ballots, register/roster PRs) do not segment the shared window — exogenous events only (new check armings, outside regenerations touching pruned surfaces, required-check-set changes), bounded at K=3** (Peter's ruling, 2026-08-02). A pruned pattern reappearing on a GENERATED surface without a source change is an anomaly finding, never a re-accretion hit.
44
+ 6. **The (e) point for a windowless wave is the unit's MERGE** (recorded 2026-09-17, wave 4 — Stacy consult condition C2; ratified at the wave-4 PR's merge). 5.W(e) presumes a window close that a rows-only wave never has; without a general determination the wave's completion point — wave record, chafe line, task tick, completion docs — is undefined *by construction*, and the gap recurs per rows-only wave (it bit wave 3, whose record landed retrospectively at wave 4). No window → no window-close event → the unit merge is the wave's last defined event and is therefore its (e) point. A windowless wave's chafe line reports the steward's LIVED friction over the wave's working period, labeled with an instrument note — never "none-observed" from an instrument that did not exist (a null there is an absence of collection, not a measured zero — the pilot closeout §"chafe" finding, binding on the 5.Z dial reading).
45
+ 7. **Campaign-close determination for windowless final waves** (recorded 2026-09-17, wave 4 — Stacy consult B2; **put to Peter as an explicit ratification ask — his merge of the wave-4 PR ratifies the recommended reading; a contrary ruling amends this note by dated entry**). The ratified close condition ("the campaign window closes at the close of the FINAL wave's window") is literally unsatisfiable when the final waves open no windows — the triggering event cannot occur. Two readings were stated with their W1 consequences: **(i)** the campaign window closed 2026-08-27 at the last real window's close (pass 3) — then PRs merged after it are out-of-window and the shared dataset's OPEN status was stale for the campaign's final month; **(ii, RECOMMENDED)** the campaign window closes at the final wave's UNIT MERGE — preserves event-denomination, keeps the campaign's own tail measured, and makes the untranscribed #150+ range in-window (the recorded measurement debt in campaign-window-dataset.md then binds 5.6). Under (ii), the wave-4 PR's merge is the campaign-window close event and 5.6's trigger fires at it.
44
46
 
45
47
  ---
46
48
 
@@ -94,6 +96,12 @@ Every entry is a `### <entry-id>` heading followed by **one fenced YAML block**
94
96
  - `check_state`: `none | proposed | armed | dormant | retired`
95
97
  - **`dormant`** (the DORMANT state, Req 1.3) records an **armed, blocking check whose selection is empty or stale** — it runs and passes while verifying nothing. The corpus demonstrably produces this state; a register that cannot record it misrepresents the corpus.
96
98
  - `checks`: list of the concrete check name(s), when armed (e.g. `["122-sweep-1-refs"]`)
99
+ - `armed_at`: **optional** qualifier on `armed` — `pr-gate | tool-time | build-time`. **Default: `pr-gate`.** Ratified 2026-09-17 (open item O-8; ballot `.kiro/docs/ballots/2026-09-17-spec-127-outline-settle.md` **§ 10**). Three rules govern it:
100
+ - **Existing rows are untouched.** An `armed` row with no `armed_at` means a required PR check, which is what every pre-2026-09-17 `armed` in this register already meant. Omission is not a defect.
101
+ - **A non-PR-gate armed check MUST carry the field explicitly.** `tool-time` = the check blocks at its point of use (a CLI workflow refusing to proceed); `build-time` = it blocks the build. If an `armed` check does not block a PR, the row says so in the field — never only in prose.
102
+ - **Counting rule**: gate-registration arithmetic (`tools/agent-generator/verify-gate-registration.sh`'s `EXPECTED_CONTEXTS`) counts **required PR check contexts only**. Rows qualified `tool-time` or `build-time` are **excluded from that arithmetic** — they register no PR context, so counting them would manufacture the drift the count-assert exists to catch.
103
+ - Like `check_state` and `checks`, `armed_at` is **per-scope** on a scoped row (a rule can be PR-gated on one surface and tool-time on another).
104
+ - *Upgrade path, noted not adopted*: if tool-time/build-time gates multiply, the field becomes **mandatory on every `armed` row** — at which point the default disappears and omission becomes a schema defect. That is a later amendment with its own record, not an inference from this one.
97
105
  - `scope[]`: **optional** per-surface qualifier — but **REQUIRED when the rule's boundary is surface-dependent** (for such rules a scalar disposition is not simplification, it is wrong). Entries without multi-surface needs stay scalar (the lens-not-columns guard). Each scope entry carries:
98
106
  - `surface`: the surface this line governs
99
107
  - `disposition`: `barrier | record-check | warn | none` (scalar dispositions only — never `scoped`)
@@ -122,6 +130,10 @@ verification:
122
130
  owner: thurgood
123
131
  check_state: armed # none | proposed | armed | dormant | retired
124
132
  checks: ["122-sweep-1-refs"] # the concrete check(s), when armed
133
+ # armed_at: pr-gate | tool-time | build-time — OPTIONAL
134
+ # qualifier on `armed`, DEFAULT pr-gate (omit it on
135
+ # required-PR-check rows); a non-pr-gate armed check MUST
136
+ # carry it, and is excluded from EXPECTED_CONTEXTS counting
125
137
  scope: # OPTIONAL; REQUIRED when the boundary is surface-dependent
126
138
  - surface: "consumption sites"
127
139
  disposition: barrier
@@ -162,7 +174,7 @@ verification:
162
174
  disposition: barrier
163
175
  check_state: proposed
164
176
  checks: []
165
- rationale: "PR-approval-as-ratification (branch protection + CODEOWNERS -> Peter) — delivered by 125-B U3; until it arms, the standing carve-out (Task-Completion-Protocol § The Merge Rule, :126) keeps these paths Peter-merged as the closest ratification proxy"
177
+ rationale: "PR-approval-as-ratification (branch protection + CODEOWNERS -> Peter) — delivered by 125-B U3; until it arms, the standing carve-out (Task-Completion-Protocol § The Merge Rule, :126) keeps these paths Peter-merged as the closest ratification proxy. FACT REFRESH, INLINE BY DESIGN (wave 4, 2026-09-17 — placed here rather than history-only because the misread happens while reading THIS rationale; the C8 armed_semantics_note precedent): a .github/CODEOWNERS file EXISTS since Spec 118 Task 9.1 and it is NOT this scope's deliverable — it is scope-disjoint (package.json + package-lock.json only, the tsx pin-bump review gate; its own header: 'NOT a repo-wide ownership map'), it self-documents as ADVISORY until Peter enables required code-owner review in branch protection (a Settings action with no committed record found), AND its routing is unproven even on its own two paths (the file's own :24-28 caveat: the @3fn owner handle could not be verified against a real GitHub identity, and 'an unresolvable CODEOWNERS entry silently fails to route'). U3's arming marker (proposed -> armed) therefore inherits a NAMED PRECONDITION: a CODEOWNERS that verifiably routes. Existence of the file is not arrival of U3"
166
178
  - surface: "ungated artifacts — governance changes outside the PR gate's reach"
167
179
  disposition: record-check
168
180
  check_state: armed
@@ -173,6 +185,9 @@ education:
173
185
  crossRef: "canonical/shared/shared-catalog.yaml#record-first-ratification"
174
186
  history:
175
187
  - { date: 2026-07-14, change: "entry created from Experiment 2 (authority-row resolution), U1 pilot — evidence: .kiro/specs/125-B-classification-map/completion/pilot/exp2-authority-row-record.md", by: thurgood }
188
+ - { date: 2026-09-17, change: "Wave 4 (5.5) STATE CONFIRMATION — barrier scope HOLDS at `proposed`: U3 has not run (tasks.md Task 6 still a gated placeholder), NO delegation of merge-on-green exists in any of the 11 committed ballots (TCP:125 requires a recorded rule; absent it, agents-open-Peter-merges and the :126 carve-out both stand, verified verbatim), and no record enables required code-owner review. The Spec-118 CODEOWNERS fact refresh is recorded INLINE on the barrier scope's rationale (see there) — existence of that file is not arrival of U3, and its unproven @3fn routing is a named U3 precondition. The ungated record-check scope re-verified OPERATIVE: the Spec-127 outline-settle ballot executed record-first days before this entry (#166), and this wave's own rows ratify record-first at merge. Education KEEP re-verified across the row's FULL surface list (Stacy consult condition A3.1 — not just TCP:93/:126: TCP:153 verified verbatim; ballots README + the shared-catalog canonical statement verified via Stacy's check-worded sweep of the ARMED record-check scope's vocabulary — 7 hits, all already enumerated on this row, zero new imposter candidates). METHOD FINDING routed to 5.6 (Stacy A3.3): the two-blade test DEGENERATES on record-check dispositions — the 'armed check' is an agent mechanically verifying a committed record at point of use, so deleting the education deletes the check; blade 1 cannot discriminate. Recurs for every future record-check row. Consult: wave-4-consult-stacy.md; evidence: wave-4-assessment.md §3", by: thurgood }
189
+ - { date: 2026-09-18, change: "5.6 CLOSEOUT SITTING — the wave-4 Settings assumptions VERIFIED BY PETER (branch-protection screenshots; closeout ballot D6): (1) 'Require review from Code Owners' is NOT enabled — and is structurally unavailable at present, because 'Require a pull request before merging' is itself UNCHECKED and code-owner review is a nested option under it. U3's arming path is therefore TWO Settings toggles (require-PR, then code-owner review) plus the pre-existing @3fn handle-resolution precondition. (2) NO required-approvals rule exists — a steward inference at the sitting ('Peter reviews each PR' read as platform-enforced approval) was FALSIFIED by the screenshots and is corrected here rather than recorded: the platform merge gate on main is required-status-checks (18 contexts, verified exact) + 'Do not allow bypassing' (admin-enforced) + 'Require linear history' (ON); 'Peter merges on green' remains the CONVENTION recorded in Task-Completion-Protocol, mechanically supported by checks+no-bypass, not a platform approval requirement. Evidence: .kiro/docs/ballots/2026-09-18-u1b-campaign-closeout-verdict.md D6; completion/u1b/campaign-closeout.md", by: thurgood }
190
+ - { date: 2026-09-18, change: "SITTING FOLLOW-THROUGH (same day, after the D6 answers): Peter ENABLED 'Require a pull request before merging' on main (screenshot-verified; ALL sub-options deliberately OFF — Require approvals, Dismiss stale approvals, Require review from Code Owners, most-recent-push approval). Effect: the direct-push-of-a-green-SHA edge is closed by configuration, and U3's two-toggle path is now HALF MET (toggle 1 of 2). The D6 entry above's 'structurally unavailable' clause is thereby SUPERSEDED for toggle-availability — code-owner review is now configurable but remains OFF, and MUST remain off until U3 resolves the AUTHORING-IDENTITY constraint first recorded at this sitting: every PR is authored by Peter's own token and GitHub forbids self-approval, so code-owner review (an approval) cannot function until agent PRs come from a distinct identity (machine account / GitHub App). Full precondition ledger: .kiro/specs/125-B-classification-map/inbound-to-u3-from-5-6.md", by: thurgood }
176
191
  ```
177
192
 
178
193
  ### npm-test-before-complete
@@ -223,14 +238,24 @@ boundary_call:
223
238
  class: operational
224
239
  rationale: "Protects the primitive→semantic→component hierarchy and namespace coherence — workflow integrity (the sanctioned path by which vocabulary enters the system), not the math and not ideology; the contested reading ('functional — protects the math') is recorded and rejected: a functional rule is machine-checkable against a token's value, and 'was this sanctioned' is not a value property"
225
240
  verification:
226
- disposition: warn
241
+ disposition: scoped
227
242
  owner: ada
228
- check_state: proposed
229
- checks: []
243
+ scope:
244
+ - surface: "the 17 LOCKED token families — literal NAME-SET locks (red on creation, rename, AND removal): primitive opacity (14 names), blend (5), motion duration/easing/scale (3/4/6), shadow offset X/Y (9/5), border width (4), semantic accessibility (3); CARDINALITY locks (red on creation and removal; silent on rename): primitive color (54 tokens / 15 families), sizing (14), blur (9), font weight (9), font size (11), line height (11), radius strategic-flex (5), semantic opacity (4), semantic blend (8), semantic border width (4), semantic icon (11/12)"
245
+ disposition: barrier
246
+ check_state: armed
247
+ checks: ["family-integrity assertions across 12 suites in lane-functional-root (a required context, verify-gate-registration.sh:65) — strongest single citation src/tokens/__tests__/OpacityTokens.test.ts:56-78 (toEqual([...14 literal names...]) + toHaveLength(14) + Object.keys equality): a new opacity112 REDs the lane at four assertion sites without the author touching a test. Full per-family citation table: wave-4-consult-ada.md §1.4. Selection verified BY EXECUTION (jest --listTests, 2026-09-17); assertions verified live-not-skipped (4 suites / 136 tests green). ARMED BY INCIDENT, NOT DESIGN: these are per-family math/shape regression tests authored at various times for other reasons — nobody designed a token-creation gate. The register records what mechanically bites, not what was intended (the no-disabled-states four-origins precedent, same wave)"]
248
+ rationale: "What the locks verify, stated precisely (Ada's own counter-argument, folded): they detect that a token APPEARED — they red equally on a sanctioned addition, and the author clears them by editing one test literal in the same PR. So they are a barrier against SILENT appearance, not against unsanctioned creation: the mechanical property is that a token addition cannot land without surfacing as a reviewable, named test-literal diff hunk on the PR. The row's own clean split predicted exactly this mechanism class — 'a check may detect that a token appeared; it never verifies that its creation was sanctioned'"
249
+ - surface: "everything else — PRIMITIVE spacing (the flagship family: its formula assertion passes any new token that satisfies the formula), radius, density, breakpoint, tapArea, glowOpacity, shadowOpacity, scale; font family + letter spacing (locks exist but are SELF-REFERENTIAL — names array vs. object keys, a token added to both passes); 11 semantic families (color, spacing, radius, typography, motion, layering, shadow, elevation, gridSpacing, style, zIndex); and ALL component tokens (defineComponentTokens() — no inventory assertion anywhere)"
250
+ disposition: warn
251
+ check_state: proposed
252
+ checks: []
253
+ rationale: "A new token here lands entirely silently (each family checked individually, negative results reported — wave-4-consult-ada.md §1.4). Non-detecting mechanisms verified and NOT credited: DTCG validateTokenCounts and the property-test floor are FLOORS (detect removal, never creation); canonical/generated.lock has no token coupling. BEST-SHAPED CANDIDATE MECHANISM, named for whoever arms this: npm run audit:theme-drift WOULD red on a new theme-varying semantic token (diffs the generated skeleton against the dark overrides) but is a manual script — in no workflow, not build-wired. U3 diff-gate territory otherwise unchanged"
230
254
  education:
231
- disposition: "KEEP — education owns mathematical fit, semantic/tier correctness, and the approval itself (token-governance autonomy levels + Component Development Guide's token-selection framework; generated prompts teach right-token / right-tier / mathematical fit). The clean split (Part 1 of the evidence): a check may detect that a token appeared; it never verifies that its creation was sanctioned or that it is mathematically/semantically correct — those stay education's job."
255
+ disposition: "KEEP — education owns mathematical fit, semantic/tier correctness, and the approval itself (token-governance autonomy levels + Component Development Guide's token-selection framework; generated prompts teach right-token / right-tier / mathematical fit). The clean split (Part 1 of the evidence): a check may detect that a token appeared; it never verifies that its creation was sanctioned or that it is mathematically/semantically correct — those stay education's job. RE-VERIFIED AT WAVE 4 (owner pass, all five citations verbatim-accurate and current): core-goals.md:55-59 the four-tier autonomy ladder; Token-Governance.md:180-186 the canonical statement + creation checkpoint + decision matrix; Rosetta-System-Architecture.md:512 (correctly scoped to component tokens); Figma-Workflow-Guide.md:446 ('create it through the spec process' — the highest-pressure minting temptation); canonical/agents/ada.md:11/:14-27 -> all generated prompts. IMPOSTER QUESTION RE-RUN against the newly recorded armed scope (the blade-1-fails-by-construction reasoning no longer applies — an armed gate now exists): none of the five citations restates any locked inventory; they teach the APPROVAL PATH and TIER SELECTION, categorically what the locks cannot supply. Blade 1 fails ON THE MERITS rather than by construction — same destination, honest route (Ada, wave 4). STRENGTHENING FACT (Ada, wave 4): this education layer is itself MECHANICALLY PINNED — canonical/agents/ada.md:19-27 declares a mustContain assert (claim: creation-requires-human-review) against Token-Governance.md § 'Token Creation Governance'; editing that sentence out fails the generator's claim assertion, and the agent-generator gates are required contexts. The cleanest example in the register of education-as-the-load-bearing-layer, mechanically protected as such — an armed guard on the education layer of a row whose verification layer was, until this wave, recorded as having none."
232
256
  history:
233
257
  - { date: 2026-07-14, change: "entry created from Experiment 3 (token-approval boundary call + feasibility spike), U2 — boundary call and FP/FN adjudication are Ada's (token-owner judgment); Thurgood audited the evidence and landed this entry. Evidence: .kiro/specs/125-B-classification-map/completion/u2/exp3-spike-evidence.md", by: thurgood }
258
+ - { date: 2026-09-17, change: "Wave 4 (5.5) state work — the FACT BASE FELL (Ada BLOCKING, invoking the assessment's own falsification clause): the draft's 'no detection mechanism exists' was WRONG. Armed, blocking, required-lane token-creation detection exists and is broad — literal name-set locks on 6 families + cardinality locks on 11, all in lane-functional-root; scalar warn/proposed restructured to scoped[] (barrier/armed-by-incident on the 17 locked families; warn/proposed on the remainder incl. the flagship spacing family, 11 semantic families, and ALL component tokens). METHOD FINDING (Ada, routed to 5.6 with W4-8): the steward's sweep S4 hunted the RULE's vocabulary (createToken|new.token) where the wave's own S3 discipline requires hunting the CHECK's (toEqual([|toHaveLength() — the mechanisms are named family-integrity tests, nothing calls itself a token-creation check. Fourth consecutive under-recording of arming across the campaign; the failure class is sweep-vocabulary selection, not only roster decay. Mutation bite-proof NOT run (consult was no-edit; bite entailed by reading — toEqual([...14 names...]) cannot pass with 15 keys; recipe recorded in wave-4-consult-ada.md §1.5 for belt-and-braces). Education KEEP re-verified + mechanically-pinned fact added. Consult: wave-4-consult-ada.md §1-2; evidence: wave-4-assessment.md §4 + §12", by: thurgood }
234
259
  ```
235
260
 
236
261
  ### console-fail-root-lanes
@@ -305,6 +330,7 @@ education:
305
330
  disposition: "KEEP as the citable WATCH record — no prose predecessor to prune. Candidate mechanism noted for whoever picks this up."
306
331
  history:
307
332
  - { date: 2026-07-14, change: "entry created (U2, Task 4.4) recording the known-deferred incremental-build / inverse-drift hazard at WATCH (check_state: proposed) — evidence: 125-B-backlog.md item 5; .kiro/specs/125-mechanical-enforcement-strategy/inbound-to-125-B-from-125-A.md §3 (STACY R1 item 4). Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
333
+ - { date: 2026-09-17, change: "Wave 4 (5.5) WATCH CONFIRMATION — proposed/none HOLDS: no incremental-path integrity check exists anywhere (workflows + suites swept); the masking property stands by CI construction (lane-functional-root builds from a clean checkout every run). The corpus remains silent at rule grain — one incidental watch-mode dependency note (Process-Spec-Planning:2146, not this rule), zero imperatives, zero claimed checks (no phantom-gate class hit). ADJACENT DEVELOPMENT noted, not folded: PR #163 (2026-09-15) wired docs/tokens.css regeneration into the build — stale-artifact class, which narrows one practical consequence surface of this hazard without being an incremental-path check; the candidate mechanism remains undesigned. Evidence: wave-4-assessment.md §5 + §7 S5", by: thurgood }
308
334
  ```
309
335
 
310
336
  ### wcag-required-refs
@@ -318,7 +344,7 @@ verification:
318
344
  disposition: barrier
319
345
  owner: lina
320
346
  check_state: armed
321
- checks: ["behavioral-contract-validation.test.ts 'accessibility-related contracts should have WCAG references' (root functional lane) — re-armed at the canonical allowlist matcher (Req 12.1-12.3). Match-count floor: aggregate selection > 0 (69 selected at Task 4.2's audit) PLUS per-literal presence for interaction_focusable (7 live), interaction_focus_ring (10 live), state_error (4 live). state_disabled is EXCLUDED from the per-literal floor pending the Button-CTA disabled-state adjudication (Peter, 2026-07-14 amendment) — the matcher itself is unchanged: state_disabled contracts (currently 1 live, Button-CTA) are still selected and still must carry a valid wcag ref, proven live via a gate-bite mutation (Task 4.3)"]
347
+ checks: ["behavioral-contract-validation.test.ts 'accessibility-related contracts should have WCAG references' (root functional lane) — re-armed at the canonical allowlist matcher (Req 12.1-12.3). Match-count floor: aggregate selection > 0 (69 selected at Task 4.2's audit) PLUS per-literal presence for interaction_focusable (7 live), interaction_focus_ring (10 live), state_error (4 live). state_disabled is EXCLUDED from the per-literal floor — an exclusion now PERMANENT-BY-OUTCOME (the Button-CTA disabled-state adjudication RULED REMOVE 2026-07-15; ZERO live state_disabled contracts exist corpus-wide, so nothing can be floored); the matcher's WCAG_REQUIRED_EXACT still lists state_disabled DELIBERATELY: any reintroduced contract is still selected and still must carry a valid wcag ref — which makes this check the REINTRODUCTION BACKSTOP for governance/classification-map.md § 'no-disabled-states' scope 6 (the 25 components with no philosophy guard), a format check that at least forces a reintroduction to surface. Floor proven live via gate-bite mutation (Task 4.3)"]
322
348
  education:
323
349
  disposition: "WAVE-2 ROW (5.3, 2026-08-25) — prune CANDIDATE pending ratification: corpus-wide sweep (steward + owner enumerations converged) found 3 imposter deletions (CDS:686 and CDS:513 checklist restatements — CDS:513 dual-rule with wcag-format-validity; PIG:468 review-template restatement inside a decorative yaml fence) + 2 contradiction REWRITES (CDS:824 wrong-trigger line; CSR:183 field-table 'null if not applicable' — instructs the exact form that reds the gate for allowlisted contracts). KEEP set: CDS:612 why-education; CDS:823 accurate schema field list; CMDT:681 out-of-territory (validates the family-doc table, which the gate never reads); TBCV:63/:67 the genuine teacher; CDG wcag-THEME (different concept); CSR:152/:185 schema reference. EDUCATION-DRIFT HAZARD (recorded per the owner consult — the strongest methodology finding of the campaign: a KEEP-classified education surface can defeat an armed gate WITHOUT restating it): Component-Templates.md :699-849 teaches SEVEN retired pre-063 contract names (focusable, pressable, hoverable, error_state, success_state, loading_state, focus_ring) that the allowlist matcher cannot select — a scaffolding author produces contracts the gate never checks; CIS:79-90 legacy names + wrong count; family-doc tables name accessibility contracts WITHOUT the accessibility_ prefix (routing around the matcher); CDS:804-829 block lists post-063-removed schema fields. The per-literal floor is a corpus-liveness alarm, NOT per-component coverage — it will not fire on new drift. Repair = Lina's ballot items (Component-Templates FIRST), sequenced per the Peter ruling recorded at ratification. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md; consult: wave-2-consult-lina.md (R1+R2). PRIOR STATE (U2, retained): no prose predecessor taught the six-name trigger; the adjudication table (.kiro/specs/125-B-classification-map/completion/u2/stemma-pre-arm-adjudication.md) records the 7 nulls resolved and the DD3 floor-input correction (true live counts 7/10/1/4)."
324
350
  history:
@@ -327,6 +353,7 @@ history:
327
353
  - { date: 2026-08-25, change: "Wave 2 (5.3) classification: candidate diff produced (3 deletions + 2 rewrites, three surfaces — CDS/PIG/CSR), education-drift hazard recorded (Component-Templates seven retired names, CIS, family-doc unprefixed tables, CDS stale block), consumed unchanged by (b)'s probe+trial and applied only as ratified at (c). An R1 roster-bounded sweep reported rows-only and was FALSIFIED by the owner consult (Lina, BLOCKING x4) — the corpus-wide re-sweep found the candidates on surfaces the roster never named; both rounds + steward verification: wave-2-consult-lina.md. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md", by: thurgood }
328
354
  - { date: 2026-08-25, change: "STALE-PENDING DISCHARGE (register currency, steward catch at wave 2): the 2026-07-14 floor amendment's state_disabled exclusion cites the Button-CTA disabled-state adjudication as 'pending' — it RESOLVED 2026-07-15, RULED REMOVE, implemented (.kiro/issues/button-cta-disabled-state-adjudication.md; CIS:90 records DesignerPunk does not support disabled states by design). The exclusion's rationale is therefore SETTLED, not pending: state_disabled stays outside the per-literal floor because no live instances exist by design; the matcher's WCAG_REQUIRED_EXACT still lists it (harmless — selects nothing; any future state_disabled contract is still selected and checked)", by: thurgood }
329
355
  - { date: 2026-08-25, change: "Wave 2 rows + candidate diff RATIFIED (Peter, 2026-08-25, record-first, in-session at step (a) completion): the 5-hunk diff approved as the (b) probe+trial input (prune application still gated on (b) evidence + the wave ballot at (c)); roster/register amendment APPROVED (wcag-format-validity education layer rostered into wave 2 + contract-platforms-specified row created); sequencing RULED — Lina's Component-Templates repair lands BEFORE/WITH the wave-2 prune merge (option (a) of assessment §5.4)", by: thurgood }
356
+ - { date: 2026-09-17, change: "Wave 4 (5.5) checks[]-FIELD FACT REFRESH — deliberately NOT a second discharge (Lina's framing correction, owner consult: the 2026-08-25 STALE-PENDING DISCHARGE entry above already discharged the pending correctly and completely; two discharge records for one event would itself be a register defect): what remained stale was the checks[] prose ('pending … currently 1 live'), now rewritten to the settled facts — adjudication RULED REMOVE 2026-07-15, live count ZERO corpus-wide (verified mechanically at wave 4: all 21 state_disabled keys sit under exclusion sections, none under contracts:), floor exclusion permanent-by-outcome. CROSS-REFERENCE ADDED both ways with the new no-disabled-states row: this check's still-selecting matcher is the reintroduction backstop for that row's unguarded scope 6. Companion stale comment at behavioral-contract-validation.test.ts:390-397 ('pending') — owner Lina confirmed and takes the repair, batched with her wave-4 component-side repairs. Consult: wave-4-consult-lina.md W4-5; evidence: wave-4-assessment.md §6", by: thurgood }
330
357
  ```
331
358
 
332
359
  ### validation-criteria-completeness
@@ -455,6 +482,120 @@ history:
455
482
  - { date: 2026-08-02, change: "row RATIFIED (Peter, 2026-08-02, in-session record-first; post-consult revision reviewed) — classification approved; prune application still gated on 5.W(b) verification + the wave ballot", by: thurgood }
456
483
  ```
457
484
 
485
+ ### never-hand-edit-122-generated
486
+
487
+ ```yaml
488
+ rule: "Spec-122 generated outputs (CLAUDE.md, .claude/agents/**, .kiro/agents/**, .claude|.kiro/skills/**, canonical/manifests/**, canonical/coverage-map.yaml + coverage-manifest.yaml, canonical/registry/**, canonical/_fixture-output/**) are NEVER hand-edited — the edit goes to the canonical source and the pipeline regenerates (the C7 wave-3 row)"
489
+ boundary_call:
490
+ class: functional
491
+ rationale: "Whether a guarded output's bytes equal what the generator would produce is a mechanical property of the artifact pair (regenerate into a temp tree, compare bidirectionally) — no judgment; the diff-guard's bidirectional compare means a hand-edit, a stale extra, and a missing output all fail identically"
492
+ verification:
493
+ disposition: barrier
494
+ owner: thurgood
495
+ check_state: armed
496
+ checks: ["122-diff-guard (required check) — tools/agent-generator/diff-guard.ts: regenerates everything into a temp tree via the SAME generateAll path real regeneration uses, then compares BIDIRECTIONALLY over guardedRoots(repoRoot) (static substrate roots + the cutover-ledger-derived per-agent files); any delta fails loud. Fast no-op via canonical/generated.lock (input-closure hash + output hash). Verified live this pass: guarded roots enumerated at tools/agent-generator/generate.ts:433-450, closure roots at diff-guard.ts:36-46", "adjacent, not this rule's what: 122-canonical-vs-truth + 122-sweep-1..8 (reference resolution, skills round-trip, ambient/declaration/disposition properties — they verify source correctness, not output-equals-regeneration)"]
497
+ guard_is_ledger_conditional: "THE GUARDED SET IS DERIVED, NOT STATIC (Lina consult, amendment 2 — recorded because the checks[] line above otherwise reads as a fixed enumeration). guardedRoots(repoRoot) derives the per-agent files from canonical/cutover-ledger.yaml, 'from an agent's ledger entry forward'. All 8 agents are currently in the ledger (ada, lina, thurgood, sparky, leonardo, data, kenya, stacy — verified), so today the guarded set covers every .claude/agents/*.md and .kiro/agents/*.{json,-prompt.md} and N-unguarded = 0. But a FUTURE agent whose runtime artifacts exist BEFORE its ledger entry is an unguarded generated output, where a hand-edit IS silent until cutover. Structural condition, not a current defect — recorded so a ninth agent is not the moment someone discovers the set was derived all along"
498
+ education:
499
+ disposition: "ROWS-ONLY (wave-3 finding, 2026-09-13, CORPUS-WIDE sweep at source grain — .kiro/steering/ 9 docs + governance/ 83 docs + canonical/agents/ 9 + canonical/shared/ 4 + skills/, four independent vocabularies: hand-edit|never edit|do not edit|regenerat; diff-guard|122-sweep|generated output|guarded root|.claude/agents|canonical/agents; SSOT|source of truth|NEVER hand|by hand|hand-place|GENERATED OUTPUT; overwritten|clobber|will be lost|edit the source|generated artifact). ZERO imposters — and the stronger finding: ZERO imperative statements of this rule exist anywhere in the education corpus at source grain. The rule's only imperative home is the GENERATOR'S OWN EMITTED BANNER (tools/agent-generator/adapters/cc.ts:422-425 'GENERATED FILE — do not hand-edit … a hand-edit here will be overwritten and caught by the diff-guard'; coverage-map.ts:182/:193) — TOOLING, outside the education corpus, self-disclosing at the point of hazard (the wave-1 complete-task.sh echo-disclosure class; retained, nothing to prune). Scored KEEP (descriptive, not imperative; each supplies routing the gate cannot): canonical/shared/skills-map.yaml:23 ('.kiro/skills/** is a GENERATED OUTPUT of this table … Kiro is not the source') — names the SOURCE, which the gate never does; canonical/agents/{ada,lina,thurgood}.md:5-6 hand-port/never-clobbered reconciliation headers and {kenya,sparky,data,stacy,leonardo}.md cutover-status headers (provenance comments); canonical/agents/_fixture.md:7 ('sits inside C6's guarded surface'); canonical/agents/stacy.md:169 coverage-of-coverage routing cue. EDUCATION-ABSENCE HAZARD (recorded, NOT actioned — authoring is out of this wave's prune mandate and would be its own proposal): (i) the generated .claude/agents/*.md and .kiro/agents/*.json carry NO do-not-edit banner at all — CC agent files open with required frontmatter, so the cc adapter's banner lands only on CLAUDE.md; (ii) Civitas-System-Overview.md:41-44 describes agent configs/prompt files without naming them generator output or routing to canonical/** — the one always-loaded surface where an author would look. Cost of both is FRICTION (a loud diff-guard failure), never a silent defeat — the inverse of wave 2's C4 hazard, where education aimed authors PAST a correctly-aimed gate. THE 'FRICTION, NEVER SILENT' CLAIM WAS FALSIFICATION-TESTED AND SURVIVED (Lina consult — recorded because a tested claim and an asserted one are different evidence): the fast no-op path was the hypothesized silent-pass route, and tools/agent-generator/sweeps/noop-probe.ts:22-25 compares BOTH legs (lock.inputClosure AND lock.outputs, the latter a sorted (path, content-hash) set over the guarded surface), so a hand-edit flips the output leg -> noop=false -> the full diff-guard runs; .github/workflows/agent-generator.yml is `on: pull_request` with NO path filter (declared law: the latency remedy is caching/parallelism, never path-filtering); all 8 agents are ledger-entered. TWO CONTINGENCIES the claim depends on, both now visible rather than implicit: (1) [Ada consult] the cost claim is downstream of those paths staying inside guardedRoots — if a file ever leaves the guarded set, its hand-edit cost silently becomes a DEFEAT, not friction; (2) see verification.guard_is_ledger_conditional. AMENDMENT TO (i)'s CAUSE [Lina consult, amendment 1]: the banner absence is a PLACEMENT choice, not a format constraint. The frontmatter-must-open constraint is real (verified: .claude/agents/lina.md opens '---\\nname: lina'), but it bars only the FIRST line — a comment as the first BODY line after the closing '---' is unconstrained, and .kiro/agents/*.json can carry a '_generated' key (JSON has no comments; the extra-key idiom is standard, though Kiro schema tolerance is UNVERIFIED). That moves O-3's decision from 'accept the friction' to 'a small adapter change', which is a different decision — and it carries a real recurring cost recorded on both sides: a body banner is prose every agent reads every session, on 8 files, forever, to protect against a hazard that already fails loud. Lina's lean (recorded, not adopted): the (ii) Civitas-System-Overview gap is the more valuable half — zero recurring cost, and it is the one ALWAYS-LOADED surface an author consults before touching an agent config. CONCRETE HARM SHAPE for (i)+(ii) together: an agent that 'fixes' its own routing in its generated file gets a loud failure (correct) but never learns WHERE to fix it, because neither the file nor any always-loaded doc names canonical/agents/** as the source — and those same files carry live C9 imperatives (lina.md:459, kenya.md:406, data.md:411, sparky.md:434). MISROUTING HUNT (a class this wave did not originally look for — prose aiming authors AT a guarded output, the wave-2 C4 hazard shape, which is strictly worse than a missing prohibition): swept by the Lina consult as pass 11; 3 hits, none an instruction (MCP-Evolution-Roadmap.md:217 historical record; DesignerPunk-Integration-Guide.md:238/:983 a CONSUMER repo's .kiro/agents/, out of territory) — NO C7 misrouting exists in the corpus. CHECK-WORDED RE-SWEEP (pass 10b, steward, post-consult — the pass-7 vocabulary-gap lesson applied to C7): 6 hits across the education corpus (Process-Hook-Operations.md:30, BUILD-SYSTEM-SETUP.md:128, canonical/shared/skills-map.yaml:57, canonical/shared/always-set.yaml:19, canonical/agents/stacy.md:190, canonical/agents/_fixture.md:108), ALL scored KEEP — descriptive provenance, tool routing, or illustrative; zero restate the guard's what as an instruction. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-3-assessment.md §2 + §6 (pass 10); consult records: wave-3-consult-ada.md §3.1, wave-3-consult-lina.md §4."
500
+ history:
501
+ - { date: 2026-09-13, change: "entry created (U1b wave 3, Task 5.4 step (a)) as a ROWS-ONLY candidate finding; corpus-wide sweep record + reproducible commands in wave-3-assessment.md §2/§6; DRAFTED PRE-CONSULT (disclosed process inversion — the wave-2 U2 lesson: Ada's central consult and Lina's C9-scope consult run AFTER this draft and may falsify it, as Lina's wave-2 consult falsified an identical rows-only first pass). Pending Peter's record-first row ratification", by: thurgood }
502
+ - { date: 2026-09-13, change: "CONSULT FOLD (Ada + Lina, both returned; ROWS-ONLY SURVIVED both falsification attempts on this rule — zero counter-citations). Row amended, not reclassified: (1) verification.guard_is_ledger_conditional added [Lina amdt 2] — the guarded set is cutover-ledger-derived, not static; (2) the 'friction, never a silent defeat' claim recorded as TESTED-AND-SURVIVED with its two contingencies made explicit [Lina falsification + Ada item 9]; (3) education-absence cause (i) corrected — the missing banner is a PLACEMENT choice, not a format constraint, with the recurring-context-cost counter recorded on the same line [Lina amdt 1]; (4) pass-11 misrouting hunt recorded CLEAN; (5) pass-10b check-worded re-sweep added (6 hits, all KEEP) — the pass-7 vocabulary-gap lesson applied to this rule. KEEP set and the ROWS-ONLY disposition unchanged; both education-absence findings independently re-verified by Ada and remain RECORDED-UNACTIONED (O-3 is Peter's). Consults: wave-3-consult-ada.md, wave-3-consult-lina.md", by: thurgood }
503
+ ```
504
+
505
+ ### never-hand-edit-generated-token-outputs
506
+
507
+ ```yaml
508
+ rule: "Generated token / platform outputs are never hand-edited — the edit goes to the token source and the pipeline regenerates (the C8 wave-3 row). The rule governs FIVE artifact classes with opposite treatments; the per-class reality is in scope[]"
509
+ boundary_call:
510
+ class: functional
511
+ rationale: "Output-equals-regeneration is the same mechanical artifact-pair property as never-hand-edit-122-generated (regenerate, compare) — no judgment; but the class only BINDS where a committed copy exists to compare against, so the boundary is surface-dependent and the per-class realities are stated in scope[] (Ada ruling, 2026-09-13: 'PROVISIONAL' dropped — the scope[] now says exactly where a committed copy exists)"
512
+ verification:
513
+ disposition: scoped
514
+ owner: ada
515
+ gate_adjudication: "RULED by Ada (token-pipeline owner) at the wave-3 consult, 2026-09-13 — disposition (B) `scoped`, NOT (A) and not flat (C). Rejection of (A): `disposition: none` 'would record a comfortable fiction about a surface that is demonstrably lying to the public today' — docs/tokens.css is not abandoned residue, it is a LIVE PUBLISHED consumer-facing surface (see the scope entry). Rejection of flat (C): one `proposed` scalar cannot simultaneously say 'guard this published file', 'never guard these fixtures', and 'no gate is POSSIBLE for dist/' — five classes needing opposite treatments; (C) survives INSIDE (B) as the check_state on the one guardable in-repo surface. Record of the consult's own counter-argument, carried because it is pre-authorized (see the docs/tokens.css elimination path): (A) is genuinely defensible if docs/tokens.css is read as a showcase-site asset rather than a token output — then the right move is to DELETE the committed copy and have the Pages build generate it, the last in-repo committed generated token output disappears, and this row correctly collapses to (A) by removing the exception rather than guarding it. Ada ruled (B) anyway on the principle that the register records the repo AS IT IS AT RATIFICATION, not as it will be after a fix. Full ruling: wave-3-consult-ada.md §1"
516
+ scope:
517
+ - surface: "dist/** (DesignTokens.{web.css,ios.swift,android.kt,dtcg.json,figma.json}, ComponentTokens.*, dist/browser/tokens.css) and src/types/generated/TokenTypes.ts"
518
+ disposition: none
519
+ check_state: none
520
+ checks: []
521
+ rationale: "UNTRACKED by construction — .gitignore:7 'dist/', :14 'src/types/generated/'; `git ls-files dist` = 0 and `git ls-files src/types/generated` = 0 (re-verified at the consult). Generator output paths: scripts/generate-platform-tokens.ts:34 -> dist/, scripts/generate-token-types.ts:63. No committed copy exists to diff against, so no PR-gate guard CAN exist; a hand-edit is destroyed by the next build and can never reach main. Enforcement here is BUILD EPHEMERALITY — a property of the build, not a gate. (Ada adopted the steward's (A) reasoning verbatim FOR THIS CLASS ONLY)"
522
+ - surface: "docs/tokens.css — the committed, PUBLISHED GitHub Pages token stylesheet"
523
+ disposition: barrier
524
+ check_state: proposed
525
+ checks: []
526
+ rationale: "A LIVE PUBLISHED SURFACE, not residue — three independent checks: (1) docs/_config.yml url https://3fn.github.io + baseurl /DesignerPunk, and docs/_layouts/{default,deep-dive}.html:8 both emit <link rel=stylesheet href={{ '/tokens.css' }}> — every showcase page loads it (614 custom properties); (2) stale by a measurable amount — last regenerated 6163cf00 (2026-03-24), header stamp 2026-03-19, with 19 subsequent commits touching src/tokens/ of which 4 touch COLOR sources (#153 6825c954, #152 528120b6, v12.0.0 OKLCH migration 71120a5d, Spec 104 73661332); (3) IT IS PUBLISHING A VALUE THAT WAS FIXED AS AN ACCESSIBILITY FAILURE — source `color.feedback.success.text` -> green500 = rgba(0,204,110,1) (src/tokens/semantic/ColorTokens.ts:103-106), published docs/tokens.css:443 = rgba(0,255,136,1) = green400, the pre-#152 value; PR #152 (2026-09-12) is titled 'Fix color.feedback.success.text WCAG AA failure'. Same failure family as the open dual-color-source divergence issue, on a second, PUBLIC surface. MECHANISM (named, unbuilt — hence `proposed`): regenerate-and-diff on the 122-diff-guard pattern, or a Pages-publish-path regeneration. PRE-AUTHORIZED AMENDMENT PATH (Ada's own counter-argument, carried on the row so an amendment is not a surprise): this surface may be ELIMINATED rather than guarded — if the Pages build generates it and the committed copy is dropped, the artifact leaves the class entirely and THIS ENTRY AMENDS TO `disposition: none` with a dated history line. The defect itself is tracked independently of this row: .kiro/issues/2026-09-13-docs-tokens-css-stale-published.md (F-1, HIGH). Scope honesty from the consult: ONE value drift was confirmed by hand (no node_modules in the consult worktree, so no regenerate-and-diff was possible); the exhaustive drift diff is the FIX's first deliverable, not the ruling's precondition"
527
+ - surface: "final-verification/DesignTokens.{web.css,web.js,ios.swift,android.kt}"
528
+ disposition: none
529
+ check_state: none
530
+ checks: []
531
+ rationale: "Out of scope PENDING DELETION — abandoned completed-spec verification residue with ZERO corpus references (consult sweep A: `grep -rniE 'docs/tokens\\.css|final-verification|demos/tokens\\.css' governance/ .kiro/steering/ canonical/` -> zero hits). Three DISTINCT vintages, not one (correcting the draft's 'same vintage' claim — Ada A-5): web.js 2025-10-23, ios.swift/android.kt 2026-02-07, web.css 2026-01-14, an ~8-month spread. Disposition F-2 (DELETE, MEDIUM) in the routed issue; deleting removes the guard question entirely"
532
+ - surface: "deliberately-frozen spec fixtures — .kiro/specs/094-portable-pipeline-and-theme-registry/fixtures/pre-migration/DesignTokens.* + ComponentTokens.web.css; .kiro/specs/web-format-cleanup/baseline-DesignTokens.web.css"
533
+ disposition: none
534
+ check_state: none
535
+ checks: []
536
+ rationale: "EXCLUDED BY DESIGN — their entire value is that they do NOT regenerate. Recorded explicitly because a naive regenerate-and-diff guard over 'committed generated token outputs' would RED on them: this is the strongest concrete argument against the unqualified (B) sketch, and it was ABSENT from the pre-consult draft (Ada BLOCKING B-1). Any future guard MUST carry this exclusion"
537
+ - surface: "Figma Variables + Styles (out-of-repo generated token output)"
538
+ disposition: barrier
539
+ check_state: armed
540
+ armed_at: tool-time
541
+ checks: ["figma:push drift detection (TOOL-TIME, NOT A PR GATE — see `armed_at: tool-time` on this scope entry; the O-8 schema qualifier ratified 2026-09-17 replaced this row's former inline `armed_semantics_note` prose): the TokenSyncWorkflow compares current Figma state against expected and BLOCKS the sync on drift ('Drift detected: 3 variables have been edited in Figma since last push'), with `--force` as the documented override. Pipeline: Rosetta TS -> DTCG -> FigmaTransformer -> dist/DesignTokens.figma.json -> TokenSyncWorkflow -> Figma Variables + Styles (Figma-Workflow-Guide.md:125-132); gate + resolution block at :170-185, override at :140-141"]
542
+ rationale: "C8's rule, ARMED, on a non-repo surface — a whole artifact class the pre-consult draft did not mention at all (Ada BLOCKING B-2). Its education is NOT an imposter: Figma-Workflow-Guide.md:172-185 describes the mechanism AND supplies resolution routing the gate cannot ('if these values should be tokens, create them through the spec process first') — the retained-teaching class, KEEP"
543
+ - surface: "NOT IN CLASS (recorded so the boundary is checkable, not re-derived): demos/tokens.css and src/tokens/platforms/{ios/MotionTokens.swift,android/MotionTokens.kt}"
544
+ disposition: none
545
+ check_state: none
546
+ checks: []
547
+ rationale: "demos/tokens.css is a committed SYMLINK -> ../dist/browser/tokens.css (verified) — a pointer, not a generated file; editing 'through' it edits untracked, ephemeral dist/. Consequence worth one line: demos/ is broken in a fresh clone until `npm run build` — the known worktree-needs-generated-artifacts class, not a C8 defect (F-4, note only). MotionTokens.swift/.kt are HAND-AUTHORED source with platform-shaped names, confirmed from their own headers by both the steward and Ada"
548
+ education:
549
+ disposition: "ROWS-ONLY (wave-3 candidate finding, 2026-09-13, CORPUS-WIDE sweep — same four vocabularies as never-hand-edit-122-generated plus a token-specific pass: dist/|DesignTokens.(web|ios|android)|generated (token|css|swift|kotlin)|platform output|token output). ZERO imposters. The finding is structural, not incidental: with no armed gate owning this rule's what (see gate_adjudication), the two-blade imposter test cannot classify ANY C8 prose as an imposter — the education layer is the only layer that exists for this rule today. Scored KEEP, all read-routing or descriptive, none an edit-imperative: Platform-Resource-Map.md:58 ('dist/ contains build artifacts — not source files. Do not reference for implementation work.') — an imperative, but it governs which file an agent READS, which no check owns, and it is the corpus's clearest statement of the source/output boundary; Platform-Resource-Map.md:41 the source-of-truth table and :57 the component-meta provenance line; canonical/agents/{sparky:57,:65; kenya:53,:62; data:66,:75}.md negative cues ('do NOT read the built … snapshot — it is a stale generated artifact, not the source of truth') — staleness routing, and note they independently corroborate finding (2) above; Rosetta-System-Architecture.md:405-429 Stage 6 platform-output architecture; Token-Semantic-Structure.md:364-399/:541 verify-generated-output procedure; BUILD-SYSTEM-SETUP.md:31/:121/:140/:184-188 build-before-testing-generated-output dev-loop guidance (the wave-1 retained-class precedent: no gate exists at that grain); DesignerPunk-Integration-Guide.md:289-296/:1000 consumer-repo regeneration flags (a DIFFERENT repo's pipeline — out of territory); Token-Resolution-Patterns.md:177/:208, Transformer-Development-Guide.md:173/:190/:265, MCP-Integration-Guide.md:381-404, DTCG-Integration-Guide.md code examples (illustrative use, blade-2 protected). ADJACENT GAP SURFACED, routed not folded (the wave-2 contract-platforms-specified precedent — a gap found by scoring a KEEP line): component-meta.yaml is a THIRD generated-artifact class — 39 tracked files produced by scripts/extract-component-meta.ts, taught with a real edit-prohibition imperative (component-meta-authoring-guide.md:55/:97 'Do not edit directly in meta file — edit the family doc and run npm run extract:meta'), with NO regenerate-and-diff guard and no register row. Not C8 (component metadata, Lina's domain) and not C7 (outside guardedRoots); recorded here so it is not lost, routed as a wave-3 open item — Lina ENDORSED route-don't-fold and took the surface, and her consult added the sharper defect: the extractor's preservation predicate is array LENGTH, not content (extract-component-meta.ts:343, :371), so a sanctioned hand-edit that REWRITES usage entries without adding one is silently clobbered by the next `npm run extract:meta` — the guide (:217 step 5) sanctions an edit the tooling does not durably preserve. Tracked as .kiro/issues/2026-09-13-component-meta-extractor-clobbers-handedits.md (owner: Lina); its future row needs FIELD-GRAIN scope[] (purpose+contexts unconditionally derived; usage+alternatives hand-editable-with-preservation), a parsed-YAML field-grain guard rather than the byte-grain 122 pattern, and the predicate repair as a precondition. THE §6 FALSIFICATION CLAUSE FIRED AND THE FINDING HELD (recorded because a clause that fires and is then silently dropped is worse than no clause): §6 said C8 falsifies if Ada lands on (B), because Platform-Resource-Map.md:58 and the three platform-agent negative cues must then be RE-SCORED against a real scope. Ada landed on (B) and re-scored all four — ALL REMAIN KEEP, unchanged: PRM:58 governs which file an agent READS; the ruled barrier governs whether a COMMITTED file equals regeneration — different what, no overlap, no imposter; the sparky/kenya/data cues are staleness routing about UNTRACKED dist/, the class ruled `none`. ADA'S OWN SWEEPS (B/C/D, verbatim in wave-3-consult-ada.md §2.1) found ZERO C8-territory imperatives on any token-domain surface, including the two the roster named and this row's KEEP set does not cite: Token-Governance.md:235/:249/:261/:270 and Token-Quick-Reference.md:119/:137-138 are declarative architecture and routing; Token-Quick-Reference.md:115 ('Product teams … do NOT edit these files') IS an imperative but governs base-source-vs-product-source, not source-vs-output — out of territory entirely. That omission was checked, not assumed. CHECK-WORDED RE-SWEEP (pass 10c, steward, post-consult): hits are the Figma drift-detection block (KEEP, retained-teaching, now a scope[] entry), component-meta-authoring-guide.md:31/:34/:55/:97/:214 (the O-4 gap, no guard -> blade 1 fails -> KEEP), Transformer-Development-Guide.md:343/:364 (descriptive pipeline), Platform-Resource-Map.md:57 (provenance). ZERO imposters. ADVISORIES routed to Ada's own queued Token-Family claims-vs-source pass, NOT wave items: Token-Quick-Reference.md:73/:87 cite dist/DesignTokens.web.css BY LINE NUMBER as evidence for a token's emitted value — unresolvable by construction in a fresh clone, and generated line numbers shift with every token addition; DTCG-Integration-Guide.md:231 shows `color.feedback.success.text -> {color.green400}`, the same stale value as the docs/tokens.css defect, corroborating that #152 did not propagate to its documentation surfaces. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-3-assessment.md §3 + §6 (pass 10); consult: wave-3-consult-ada.md."
550
+ history:
551
+ - { date: 2026-09-13, change: "entry created (U1b wave 3, Task 5.4 step (a)) as a ROWS-ONLY candidate finding with the GATE FIELD DELIBERATELY OPEN — 'TBD, Ada adjudication pending' per the ratified roster (tasks.md 5.4 fill slots: 'gate TBD at classification, Ada adjudicates'); the steward established the artifact facts and enumerated candidate dispositions without settling the call. Drafted pre-consult (disclosed process inversion, wave-2 U2 lesson). Evidence + reproducible sweep commands: wave-3-assessment.md §3/§6. Pending Ada's gate adjudication, then Peter's record-first row ratification", by: thurgood }
552
+ - { date: 2026-09-13, change: "GATE ADJUDICATION CLOSED by Ada (owner ruling at the wave-3 consult) and FOLDED: disposition none -> **scoped** (B), boundary_call 'PROVISIONAL' dropped, gate_adjudication rewritten from an open question to the ruling + its own pre-authorized elimination path. The pre-consult fact base did NOT survive (Ada BLOCKING x3 on this row): TWO artifact classes were missing — deliberately-frozen SPEC FIXTURES (excluded by design; a naive guard would RED on them) and FIGMA Variables/Styles (an armed, tool-time hand-edit gate) — and the row's framing question ('in-scope artifacts, or abandoned fixtures to delete?') was answered NEITHER for docs/tokens.css, which is a LIVE PUBLISHED surface currently serving a value fixed one day earlier as a WCAG AA failure. Five-class scope[] adopted verbatim-in-substance; armed_semantics_note added (this row is the first needing PR-gate vs point-of-use `armed`, with the schema clarification PROPOSED not applied — O-8). Stale-residue defect chartered as an INDEPENDENT issue (.kiro/issues/2026-09-13-docs-tokens-css-stale-published.md, F-1..F-4, session-paired with the dual-color-source divergence issue) — deliberately NOT made the row's vehicle: the defect exists whether or not this row ratifies, and 'the row says proposed' must not become a reason the fix waits. ROWS-ONLY survived (zero counter-citations); the §6 falsification clause FIRED on (B) and the re-scored KEEP set held unchanged. Consult: wave-3-consult-ada.md", by: thurgood }
553
+ - { date: 2026-09-17, change: "O-8 EXECUTED (Peter's ruling at the Spec 127 outline-settle sitting, 2026-09-15..17, option (c) OPTIONAL QUALIFIER; ballot .kiro/docs/ballots/2026-09-17-spec-127-outline-settle.md). The Entry Schema gained the optional `armed_at: pr-gate | tool-time | build-time` field (default pr-gate; existing rows untouched; non-pr-gate rows carry it explicitly; qualified non-pr-gate rows excluded from EXPECTED_CONTEXTS arithmetic). THIS ROW'S CHANGE IS REPRESENTATIONAL, NOT CLASSIFICATORY: the `armed_semantics_note` prose is REMOVED and its content is now carried by `armed_at: tool-time` on the Figma Variables + Styles scope entry; the checks[] cross-reference was re-aimed from the removed note to the field. No disposition, check_state, owner, scope membership or education disposition changed — the Figma gate was tool-time before this edit and is tool-time after it", by: thurgood }
554
+ ```
555
+
556
+ ### no-hardcoded-color
557
+
558
+ ```yaml
559
+ rule: "Color values in component and product implementations come from color tokens — no hard-coded hex/rgb literals (the C9 wave-3 row; the NAMED classify-only commitment carried from 125-B's Exclusions section: the row lands, no lint task ships in 125-B)"
560
+ boundary_call:
561
+ class: functional
562
+ rationale: "The boundary is surface-dependent (a color literal is a DEFECT in a component implementation and the POINT of a token definition, a theme override, or a doc example), so per-surface realities are stated in scope[]. MACHINE-DETECTABILITY IS NARROWER THAN 'a color value' (corrected post-consult, Lina W3-4 — the pre-consult line said 'a hex literal … is machine-detectable by regex against the file's own bytes', which overstated it): the existing detector sees UNQUOTED hex, and rgb/rgba/hsl only in `property:` position; it does NOT see `oklch(...)` — the project's OWN current color-source format, per the open dual-color-source divergence issue — nor CSS named colors (`rebeccapurple`), nor any color inside a string literal. So the class is functional (a mechanical property of the bytes) but the CURRENT instrument's reach is a strict subset of the rule's what; a future lint task must not inherit a detector that misses the house format"
563
+ verification:
564
+ disposition: scoped
565
+ owner: ada
566
+ scope:
567
+ - surface: "the 7 components carrying a *.stemma.test.ts (Badge-Count-Base, Badge-Count-Notification, Badge-Label-Base, Button-Icon, Input-Checkbox-Base, Input-Radio-Base, Input-Radio-Set) — and within them, ONLY color occurrences in UNQUOTED position in the `.web.ts` file (i.e. multi-line template-literal CSS body lines). String-literal, attribute-quoted, and comment forms are all skipped"
568
+ disposition: barrier
569
+ check_state: dormant
570
+ checks: ["the per-component stemma assertion it('should not have hardcoded color values') — validateTokenUsage(webComponentSource, WEB_COMPONENT_PATH) filtered to code HARDCODED_COLOR | INLINE_STYLE_COLOR, expect(colorErrors).toHaveLength(0); detector src/validators/StemmaTokenUsageValidator.ts:220 hexColor /#[0-9a-fA-F]{3,8}\\b/g flagged at :436-452, plus INLINE_STYLE_COLOR at :415-424 from INLINE_STYLE_PATTERNS[platform].color (:135-143). Runs in the functional lane (verified BY EXECUTION, twice independently: `npx jest --config jest.functional.config.js --listTests | grep -c stemma.test.ts` -> 7) -> the lane-functional-root required check, registered at .github/workflows/lane-timing.yml:149-150"]
571
+ rationale: "THE CHECK IS LIVE AND BLOCKING, AND IT CURRENTLY DETECTS NOTHING REAL — both halves are the finding, and the second half is why check_state is `dormant`, not `armed`. (1) DETECTION FORM: both color paths apply isInsideString(line, matchIndex) (:350-359 — counts quotes BEFORE the match on that line only; odd => skip) and the per-line loop first `continue`s on isCommentLine (:396-398). In a .ts file a color literal lives almost exclusively inside a string, a template literal, or a comment, so the reachable form is a CSS declaration line in multi-line template-literal BODY position. Probed forms that are SKIPPED (Lina + Ada ran the real exported validateTokenUsage): `const F = '#3B82F6';`, `el.setAttribute('fill','#123456')`, `el.style.color='#abcdef'`, `<div style=\"color: #fff\">` inside a template (the attribute's own quote makes the count odd), and `getToken('color.primary') ?? '#3B82F6'`. (2) THE GUARDED FILE ARCHITECTURALLY HOLDS NO SUCH LINE: all 7 import their CSS as a string from an external file and interpolate it (`import s from './X.web.css'` -> `<style>${s}</style>`); the steward re-counted unquoted CSS-declaration lines across all 7 guarded .web.ts files and found **0 of 7** — STEWARD CONTEST, recorded: Lina's consult reported 2 such lines in InputCheckboxBase.web.ts; on inspection those are :420 and :426 `color: 'inherit'`, JS object properties with QUOTED values (and therefore skipped anyway), so the correct count is 0, not 2. The contest makes her own finding STRONGER, not weaker. (3) EMPIRICAL: running the real detector over all 34 components' .web.ts and every component .css flags ZERO files. So the barrier is a tripwire on the wrong file type — the styling it exists to police lives in the unguarded external .css. WHY `dormant` AND NOT `armed` (the steward's call, which NEITHER consult proposed — both asked only that the surface line be narrowed; contestable by either owner and by Peter): the register defines `dormant` as 'an armed, blocking check whose selection is empty or STALE — it runs and passes while verifying nothing'. Jest selection is non-empty (7 suites run), so this is an EXTENSION of `dormant` from 'empty selection' to 'selection stale relative to where the governed content now lives' — which the definition's own word 'stale' admits. It is recorded as an extension rather than smuggled: `armed` is a true statement about CI state and a misleading one about coverage, and this register exists to be read as settled fact by future waves. `proposed` was REJECTED outright — the check is built and running; recording `proposed` would repeat, inverted, the roster's original 'none armed' error. WHAT WOULD FALSIFY `dormant` (revert to `armed`): any guarded .web.ts gaining a template-literal CSS region (one such line restores real bite), or the assertion being re-pointed at the .css file — which is also the cheapest available repair. Contrast with the ORIGINAL roster claim: 'none armed (a proposed-check row)' remains WRONG; an armed, blocking check does exist, and that correction stands"
572
+ - surface: "the other 27 of 34 core components (no stemma test) and ALL component CSS files, including the 7's"
573
+ disposition: none
574
+ check_state: proposed
575
+ checks: []
576
+ rationale: "No check reaches these. For the covered 7 the CSS file — the place the styling actually lives — is asserted only for `tokenReferencesFound > 0` (that a token reference EXISTS), never for color-literal ABSENCE. LATENT, NOT LIVE (Lina W3-6, and it favours the education layer): all 34 .web.ts, all component .css and all 34 .ios.swift are color-literal clean today — the unguarded ~80% is COMPLIANT, so the gap is latent risk rather than an active defect, which is the strongest available evidence that the KEEP-scored education is working"
577
+ - surface: "iOS and Android platform implementations (34 .ios.swift + 34 .android.kt)"
578
+ disposition: none
579
+ check_state: proposed
580
+ checks: []
581
+ rationale: "CORRECTED POST-CONSULT (Lina BLOCKING W3-2 — the pre-consult row said 'no detector at all', which is FALSE and cost-misleading): the detector HAS platform color patterns (INLINE_STYLE_PATTERNS.ios.color: `Color(red:`, `Color(#`, `UIColor(`, `.foregroundColor(Color(`, `.background(Color(`; .android.color: `Color(0x…)`, `Color(red=`, `Color.rgb(`, `Color.argb(`) and the platform-agnostic hexColor regex applies to any path. What is missing is ASSERTION WIRING on 68 existing files, not detection — 'wire existing detection' and 'build detection' are an order of magnitude apart, and this row is what a future arming decision will read. EMPIRICAL (existing detector over all 68): 3 files flag today — Avatar-Base/platforms/android/AvatarPreview.kt:319 `Color(0xFFFF9800) /* orange400 */`, a GENUINE literal duplicating a token value; Input-Radio-Base/platforms/ios/InputRadioBase.ios.swift:563 `.background(Color(.systemGray6))` and Input-Text-Password/platforms/ios/InputTextPassword.ios.swift:336 `.foregroundColor(Color(UIColor.secondaryLabel))` — the latter two are PLATFORM SEMANTIC COLORS, plausibly sanctioned idiom and therefore false positives for the rule as written. PRECONDITION for arming, recorded so it is not discovered late: the platform-system-color question must be adjudicated first, and it collides with the corpus's ONLY sanctioned hardcode carve-out (cross-platform-vs-platform-specific-decision-framework.md:143, 'When platform-native animations may use hard-coded values' + 4 permitted cases + 'document rationale') — same structural shape as the component-meta partial sanction: a partial permission defeats a naive guard. Note the illustration this hands the register for free: Input-Radio-Base is one of the COVERED 7 and carries an unflagged hit on an uncovered platform — the scope gap is visible inside a 'covered' component"
582
+ - surface: "component demo pages (demos/**), component READMEs, and color values passed INTO a component's public props from consumer code"
583
+ disposition: none
584
+ check_state: none
585
+ checks: []
586
+ rationale: "ADDED POST-CONSULT (Lina W3-5) so scope[] stops implying its enumeration is complete — and unlike component source, these surfaces are NOT clean. Live instances, routed to Lina, not pruned here: demos/icon-base-demo.html:244,248,252,269,273,279,283 pass raw hex into `<icon-base color=\"#FF6B9D\">`, contradicting the component's own documented contract (Icon-Base/types.ts:257-258 documents the prop as 'inherit' | token-reference); demos/progress-pagination-demo.html:25,28,29,35,45,46,60 carry `var(--color-text-subtle, #999)`-style fallbacks — the taught silent-fallback anti-pattern, LIVE, in CSS form (and `#999` would be flagged by the existing detector today; nothing scans demos/). Component READMEs teach hex directly (Icon-Base/README.md:33 `color=\"#A855F7\"`; Badge-Count-Notification/README.md 4 hexes). THE METHOD'S CEILING, stated once and plainly: a component prop that accepts a color string is a bypass route NO file-scanning detector can ever cover, because the literal lives in consumer code — this is a permanent `none`, not an unbuilt `proposed`"
587
+ - surface: "token definitions, theme overrides, DTCG/Figma export, and documentation examples"
588
+ disposition: none
589
+ check_state: none
590
+ checks: []
591
+ rationale: "Literals by design — a hex here is the source value or the illustration, not a bypass (the two-blade illustrative-use sub-rule)"
592
+ education:
593
+ disposition: "ROWS-ONLY — and for this rule rows-only is ENTAILED, not merely observed, on two independent grounds either of which suffices. (1) The committed classify-only exclusion: no lint task ships in 125-B. (2) The imposter test requires an ARMED gate owning the rule's what FOR THE SURFACE THE PROSE ADDRESSES — every prose surface found teaches the rule across all platforms and all components, which is orders of magnitude wider than the one reachable detection form in scope[]; and post-consult that form is recorded `dormant` (it detects nothing real today), which makes the entailment stronger still, not weaker. No clause can be an imposter by construction. Scored KEEP with reasons, not waved through: core-goals.md:50/:53/:71 (the token-selection priority ladder — teaches the ORDER and the escalation, which no detector supplies); Component-Development-Guide.md:183 ('Never use hard-coded values' — the loudest imperative in C9 territory, scoped to component tokens where NO detector runs), :913/:1746 authoring checklists, :1598-1692 the anti-pattern section incl. the silent-fallback example (:1692 getToken('color.primary') ?? '#3B82F6') — KEEP, AND THE PRE-CONSULT REASON WAS EMPIRICALLY FALSE AND IS REPLACED (Lina W3-3 + Ada, both probed it): the draft kept it partly on the irony that 'a naive presence regex would flag it as the very violation it warns against'. The REAL detector does NOT flag it — three quotes precede the hex, so isInsideString skips it. The KEEP is therefore STRONGER, not merely unchanged: the corpus teaches the one C9 failure mode the armed check provably cannot see. (Recorded at this length because it is a claim ABOUT THE DETECTOR, which is the one thing this row is authoritative for — a wrong reason on a right disposition is still a register defect); platform-implementation-guidelines.md:410-422 (the prohibition PLUS which token family replaces each bypass — the how the gate cannot supply, and it addresses iOS/Android where nothing is armed); Web-Authoring-Standards.md:92/:235 ('There is no hard-code and move on path' + the product-token escalation), :361/:373 examples; Component-Family-Chip.md:35 family-principle statement; Test-Development-Standards.md:116/:138/:177 (the evergreen-vs-temporary worked example USES hardcoded-color detection as its specimen — deleting it would break the teaching model, the wave-2 TDS:1472 precedent), :1213/:1574 validator inventory; Token-Semantic-Structure.md:594 names-not-values guidance; family-doc hex in examples (Badge:283-284, Icon:197-222) illustrative. CROSS-RULE INTERACTION, disclosed: all 7 stemma color assertions open with `if (!webComponentSource) { console.warn(...); return; }` — a missing file makes the assertion pass VACUOUSLY (a dormancy path inside an armed check). It is currently backstopped by accident: that console.warn is not in src/__tests__/console-allowlist.json, so the vacuous path reds the lane via console-fail-root-lanes. An allowlist entry added later would silently remove the backstop. Lina takes the repair (`expect(fileExists(WEB_COMPONENT_PATH)).toBe(true)` — fail on absence rather than skip on it, removing the dependency on an unrelated check) and notes it interacts with the dormancy finding: a component whose styles moved fully into .css already makes the assertion near-vacuous WITHOUT the file being missing, so the skip path is the second-order version of a first-order problem. CLAUSES ADDED POST-CONSULT, all scored KEEP (they were swept but UNSCORED in the pre-consult draft — Lina BLOCKING W3-7): canonical/agents/lina.md:459 ('Hard-coded values — only as last resort. Requires user approval. Always flag these.'), kenya.md:406 / data.md:411 / sparky.md:434 ('Never hard-code values that have token equivalents' — carried by the iOS, Android and web-product agents, i.e. EXACTLY the platforms with zero armed coverage), ada.md:326 (the cross-agent flag protocol). All KEEP: no armed gate owns any of those platforms, so blade 1 fails for a cut. ALSO SCORED KEEP (Lina W3-9): cross-platform-vs-platform-specific-decision-framework.md:143 — 'When platform-native animations may use hard-coded values' plus four permitted cases and 'document rationale' — the ONLY clause in the entire territory that PERMITS hardcoding, and the collision any future iOS/Android arming meets on day one (already materialized as the two iOS platform-semantic-color hits in scope[]). Motion rather than color, included on the same treatment the row already gives multi-family clauses (core-goals:50/:53/:71, CDG:183, PIG:410-422). PASS 10 — THE CHECK-WORDED RE-SWEEP (the wave's most important methodological correction, Lina BLOCKING W3-8): pass 7's vocabulary was RULE-worded (hard.?cod|hex value|#[0-9a-f]{6}), but an imposter restates the CHECK and can do so without ever using the rule's noun — so 'zero imposters corpus-wide' was an UNSUPPORTED claim on a clause class the method structurally could not see. Re-swept post-consult with check-worded vocabulary (validateTokenUsage|Stemma.*[Vv]alidator|stemma.*(test|suite)|HARDCODED_COLOR); the hits it surfaced and pass 7 could never return, each scored: Test-Development-Standards.md:1482 '- [ ] Token Usage: validateTokenUsage() passes' — UNFENCED (fence parity verified even at that line; structurally the wave-2 CDS:686 shape) but scored KEEP because it sits under 'For New Components', and a new component has NO stemma suite until someone writes one — this line is the corpus's only mechanism by which coverage gets CREATED, addressing components that by definition have no gate; TDS:1490 '- [ ] Linting: All validators still pass' (For Component Updates) — KEEP, local pre-merge dev-loop guidance spanning four validators of which only the token one is partially wired, the BUILD-SYSTEM-SETUP retained class; Component-Development-Standards.md:1092/:1096/:1100 (the validator_integration block) — INSIDE a ```yaml fence (parity verified odd at :1092), a template wearing code formatting, KEEP per the wave-2 fence-fact class; TDS:1213 validator inventory, :1560/:1573/:1783/:1786/:1814 code examples, :1987-1989 command block, :1498-1512 source-file cross-reference list, Badge:466 / Chip:419 'Stemma validator tests verifying contract compliance', PIG:512, DesignerPunk-Integration-Guide.md:498-503 (a CONSUMER repo, out of territory), a-vision-of-the-future.md:346 — all KEEP (inventory, illustrative, or out of territory). **PASS 10 RESULT: ZERO IMPOSTERS. The ROWS-ONLY verdict HELD under the vocabulary that could have overturned it.** ACCURACY DEFECT found by pass 10 and routed, NOT an imposter (a distinct class worth naming — prose teaching a check that DOES NOT EXIST, the mirror image of an imposter): TDS:1987-1989 documents `npm run lint:stemma`, `lint:stemma:naming` and `lint:stemma:tokens`; `grep stemma package.json` returns NOTHING — no such script exists. Routed as open item O-9, not fixed here (TDS is a governance doc; edits ride the ballot model). Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-3-assessment.md §4 + §6 (pass 10); consults: wave-3-consult-lina.md (1)(2)(5), wave-3-consult-ada.md §3.2."
594
+ history:
595
+ - { date: 2026-09-13, change: "entry created (U1b wave 3, Task 5.4 step (a)) discharging the NAMED classify-only commitment from 125-B's Exclusions section (carried forward by the [ADA R1] named-inclusions requirement at Task 5.1 so a prior commitment could not silently drop). ROWS-ONLY as committed — no lint task in 125-B. MATERIAL CORRECTION to the ratified roster: the roster recorded 'none armed (a proposed-check row)'; the sweep found an ARMED, partially-scoped barrier already blocking in lane-functional-root (7 of 34 components, web TS only), which is why this row is scoped[] rather than scalar. Drafted pre-consult (disclosed process inversion); Lina consults on scope[] accuracy (the stemma-test surface is hers), Ada owns the row. Pending Peter's record-first row ratification", by: thurgood }
596
+ - { date: 2026-09-13, change: "CONSULT FOLD — the scope[] fact base did NOT survive (Lina BLOCKING x4, Ada BLOCKING x1, all in the OVERSTATED direction the draft's own falsification clause failed to anticipate — it only anticipated understatement). Changes: (1) surface 1 rewritten to the detector's ACTUAL bite (unquoted/template-literal-body position only; isInsideString + isCommentLine skip every other form) and its check_state moved **armed -> dormant** — a STEWARD CALL neither owner proposed, recorded as an explicit EXTENSION of the register's `dormant` definition from 'empty selection' to 'selection stale relative to where the governed content lives', with a falsification clause and an open invitation to contest; `proposed` was rejected (the check is built and running). (2) iOS/Android split into their own scope entry: 'no detector at all' STRUCK as factually wrong — the detector has platform color patterns, the WIRING is missing on 68 files, with 3 current hits and the platform-semantic-color adjudication recorded as an arming precondition. (3) A fourth scope entry added for demos/**, component READMEs and prop-passed color values — including the method's permanent ceiling (a color-accepting prop is undetectable by file scanning IN PRINCIPLE). (4) boundary_call rationale softened: oklch() — the project's own source format — and named colors are undetected. (5) The CDG:1692 irony reason replaced: the real detector does NOT flag it (both owners probed), which strengthens the KEEP. (6) STEWARD CONTEST recorded against the consult: Lina's '2 unquoted color declarations in InputCheckboxBase.web.ts' are `color: 'inherit'` JS object properties — the correct count is 0 of 7, which makes her own hollow-barrier finding stronger. (7) Five canonical agent clauses (lina:459, kenya:406, data:411, sparky:434, ada:326) and the sanctioned-carve-out clause (cross-platform-vs-platform-specific-decision-framework.md:143) scored KEEP — swept but unscored pre-consult. (8) PASS 10 (check-worded vocabulary) run post-consult: ZERO imposters, ROWS-ONLY HELD. (9) Top-level check_state/checks removed per the scoped-row convention (record-first-ratification precedent). The roster correction ('none armed' was wrong) STANDS. Consults: wave-3-consult-lina.md, wave-3-consult-ada.md §3.2", by: thurgood }
597
+ ```
598
+
458
599
  ### contract-platforms-specified
459
600
 
460
601
  ```yaml
@@ -472,3 +613,452 @@ education:
472
613
  history:
473
614
  - { date: 2026-08-25, change: "entry created (U1b wave 2, Task 5.3 step (a)) per Peter's roster/register amendment ruling (2026-08-25, record-first, in-session — approved together with rostering wcag-format-validity's education layer into wave 2). Found by Lina at consult R2-2; drafted and landed by Thurgood per the register-writes-stay-with-the-steward convention. Related open question (5.6 closeout checklist item): whether the remaining non-C1-C11 armed rows are rostered anywhere. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md; wave-2-consult-lina.md R2-2", by: thurgood }
474
615
  ```
616
+
617
+ ### no-disabled-states
618
+
619
+ ```yaml
620
+ rule: "DesignerPunk components MUST NOT declare or implement a disabled state — state_disabled lives under contracts.yaml `excludes:` with the standardized reason, never under `contracts:`; unavailable actions are handled by state_loading (in-flight async), validate-on-press/blur (invalid input), or not rendering the component (ruled corpus-wide with ZERO exceptions, Peter 2026-07-15, .kiro/issues/button-cta-disabled-state-adjudication.md — the U1b C10 row, discharging U2's logged philosophy-conformance candidate)"
621
+ boundary_call:
622
+ class: functional
623
+ rationale: "All detection forms in scope are mechanical properties of artifact bytes or observed runtime behavior — which section of a YAML file a key sits under, whether a literal appears in a source file, whether a substring appears in a built bundle, whether a property setter throws. None requires adjudication (the no-hardcoded-color pattern: 'a color literal is a DEFECT in a component implementation' — same structure, same class, and sibling-row consistency is itself worth something). The DESIGN CONVICTION — why DesignerPunk has no disabled states — is philosophy and stays education's job; the checks detect presence, never adjudicate whether a disabled state would have been right. That split is how the row survives the settled reframe ('CI validates functional/operational requirements, never ideology'): what arms is the ruled corpus invariant, not the ideology. Counter-reading recorded and answered (Lina, wave 4): `operational` ('forbidden by ruled law') misidentifies what is measured — the RULING is the law and is why the row exists; the CHECK measures artifacts. STATED PLAINLY so a future arming decision inherits no false reach (the wave-3 discipline): mechanical detectability is a STRICT SUBSET of the rule's what — the prop guard misses isDisabled; the contracts guards read one YAML spelling of three; the CSS bundle guard sees :disabled|--disabled but not a .foo--inactive class doing disabled work; nothing scans iOS/Android for 30 of 34 components"
624
+ verification:
625
+ disposition: scoped
626
+ owner: lina
627
+ scope:
628
+ - surface: "Input-Text-Base / -Email / -Password / -PhoneNumber (4 of 34) — contracts.yaml exclusion presence + platform implementations, the deepest coverage in the corpus"
629
+ disposition: barrier
630
+ check_state: armed
631
+ checks: ["cross-platform-consistency.test.ts:529 'all form input components should exclude disabled state per design philosophy' (contracts-presence, all 4); form-inputs-contracts.test.ts:370-375 contracts-presence duplicate (Input-Text-Base ONLY — const component at :235; the 4-component contracts coverage rests on the cross-platform suite alone, a single point of failure recorded as such); form-inputs-contracts.test.ts:383-402 DISABLED_EXCLUSION_GUARD_PATTERNS raw-source scan over ALL THREE platform implementations of all 4 (isDisabled, disabledBlend, aria-disabled, cursor:\\s*not-allowed, \\.disabled\\( — the last added per the iOS readOnly B-prime ruling, Peter 2026-07-15); :448-457 iOS .disabled( absence; :526 Android enabled\\s*=\\s*false absence (Base only). All selected by jest --listTests into lane-functional-root (required), verified by execution 2026-09-17"]
632
+ rationale: "Contracts grain + implementation grain + all three platforms — but note the contracts assertion matches the literal string 'excludes', which two of the corpus's three exclusion-key spellings do not contain (the W4-2 defect; a form input adopting a drifted spelling false-REDs while philosophically compliant)"
633
+ - surface: "Button-CTA — the one component that ever violated the philosophy, guarded against reintroduction by its own test block"
634
+ disposition: barrier
635
+ check_state: armed
636
+ checks: ["ButtonCTA.test.ts:288-331 describe('No Disabled State (philosophy exclusion)'): contracts SECTION-SPLIT check (:294-306 — state_disabled absent above ^excludes:, present below; structurally STRONGER than the form-inputs includes() check), API-surface (:308-313 — no disabled in observedAttributes, no disabled property), runtime ignore-silently (:315-331 — consumer-set disabled attribute stripped, press still fires). In lane-functional-root, verified by execution"]
637
+ rationale: "The reintroduction guard, authored at the 2026-07-15 removal"
638
+ - surface: "Button-VerticalList-Item — throw RETIRED to the canonical guard shape (parity ballot, 2026-09-19)"
639
+ disposition: barrier
640
+ check_state: armed
641
+ checks: ["ButtonVerticalListItem .unit/.integration/.failLoudly suites, REWRITTEN at the parity ruling to the Button-CTA canonical shape: 'disabled' not in observedAttributes, no disabled property exposed, consumer-set attribute leaves the control fully functional"]
642
+ rationale: "PARITY RESOLVED (Peter, 2026-09-19, ballot .kiro/docs/ballots/2026-09-19-disabled-input-parity.md — ruling (d), ignore-at-runtime/surface-at-dev): the architectural divergence this entry originally recorded is CLOSED — BVLI's ~30-line bespoke throw (the corpus's ONLY executable disabled-handling code, per the decision package's corrected fact base) retired; runtime behavior is uniformly ignore-inert corpus-wide. Decisive facts in the ballot: the divergence was one-sided (33 default-by-absence + 1 outlier) and web-only; the throw's authority was a tasks.md bullet vs the ignore's 2026-07-15 ruling; and the throw NEVER enforced on the markup path — verified by browser EXECUTION at the sitting (setAttribute returns normally to the caller; only the imperative property setter threw). The TBCV:321 contradiction DISSOLVED with the throw's retirement — the clause stands as written, plus one D2 dev-warn clause"
643
+ - surface: "Button-Icon, Input-Checkbox-Base, Input-Radio-Base — types.ts prop-absence guards (NARROW)"
644
+ disposition: barrier
645
+ check_state: armed
646
+ checks: ["ButtonIcon.stemma.test.ts:362, InputCheckboxBase.stemma.test.ts:477, InputRadioBase.stemma.test.ts:468 — it('should not have disabled prop (by design)'): /disabled\\s*[?:]/ against types.ts source. Bite probed (synthetic append): catches disabled?: boolean; MISSES isDisabled?: boolean and observedAttributes registration"]
647
+ rationale: "types.ts-only — nothing about contracts.yaml, observedAttributes, runtime, or CSS. VACUOUS-SKIP PATH REPAIRED (parity batch PR, 2026-09-19): the three cited assertions now FAIL on a missing types.ts (expect(fileExists).toBe(true)) instead of console.warn-and-return — the accidental console-fail backstop is no longer load-bearing for them. Honest residual, recorded at the repair: OTHER tests in the same describe blocks share the identical skip pattern and were deliberately NOT silently expanded into scope — flagged in the batch charter as a follow-up"
648
+ - surface: "ALL web components' shipped CSS — corpus-wide, build-artifact grain (the only corpus-wide guard)"
649
+ disposition: barrier
650
+ check_state: armed
651
+ checks: ["css-bundling.test.ts:186-192 'should not contain disabled state styles (no-disabled-states philosophy)' — expect(bundleContent).not.toMatch(/:disabled|--disabled/) against the built browser ESM bundle, i.e. the shipped CSS of EVERY web component in the browser entry, not a named component list. armed_at omitted deliberately (pr-gate default is correct — it is a lane-functional-root test), but the arming DEPENDS ON THE LANE'S BUILD STEP: lane-timing.yml:182-183 runs npm run build (includes build:browser) BEFORE npm test at :209. Its beforeAll THROWS if dist/browser is absent — it fails loudly rather than going silently dormant if the build step is ever removed, the design property that is the OPPOSITE of the no-hardcoded-color dormancy failure mode, recorded because it is worth copying"]
652
+ rationale: "Sees :disabled pseudo-selectors and --disabled custom properties in output CSS; does not see a renamed class doing disabled work. EDUCATION-ABSENCE (Lina, wave 4): governance/browser-distribution-guide.md — the doc that owns this bundle — contains ZERO disabled hits; the corpus's only corpus-wide guard is documented nowhere, so an author who reds it gets a regex failure against a bundle and no route to the rule. Friction-class, recorded not actioned"
653
+ - surface: "the remaining 25 components at contract / API / runtime grain; iOS + Android implementations for all but the 4 Input-Texts; token/blend layer"
654
+ disposition: none
655
+ check_state: proposed
656
+ checks: []
657
+ rationale: "The real gap. A new state_disabled contract here is SELECTED by wcag-required-refs and forced to carry a valid WCAG ref — a format check, not a philosophy check, but deliberately recorded as the REINTRODUCTION BACKSTOP (cross-referenced on that row). TOKEN/BLEND (corrected at wave 4, Ada): blend.disabledDesaturate + the three platform wrappers are DEPRECATED (2026-07-15) but still EMITTED — committed docs/tokens.css:805, three platform blend utility APIs, and DTCG/Figma export by default (DTCGGeneratorConfig.ts:41 includeDeprecated: true; deprecation metadata correctly attached; the validator no longer suggests it) — a consumer can still CONSUME disabled-state styling from shipped output today; closes at the next @3fn/core major, not by a gate. COUNTER-PULLING GATE DEFECT (Lina MISS-4) — REPAIRED at the parity batch PR (2026-09-19): the BlendTokenUsageValidation disabled-blend requirements on Button-CTA and Input-Text-Base (:274/:390/:704, green only via two verified accidents, the mirror image of a phantom-gate claim) retired to explanatory comments per the InteractionStateAudit calculator-capability-only model. Honest residual: Button-CTA's iOS (:314) and Android (:348) per-platform siblings carry the same requirement, were NOT cited in the charter item, and were deliberately not silently scope-expanded — flagged in the batch charter as a follow-up. PROPOSED MECHANISM for this scope (Peter's U2 instinct, now with an empty allowlist): extend the exclusion + banned-pattern guard corpus-wide. BOTH NAMED PRECONDITIONS NOW MET (2026-09-19): (1) the W4-2 vocabulary normalization LANDED (#169 — all five drifted components' exclusions verified serving live in the MCP post-merge); (2) the parity adjudication RULED (ballot 2026-09-19, option (d)) — the guard is WRITABLE as one uniform assertion ('disabled' not in observedAttributes AND no disabled accessor, across all web components), WITH ONE NAMED CARVE-OUT the guard must encode rather than red on: Input-Radio-Base observes 'disabled' SOLELY to neutralize it (the ruling's own D1 — form-associated element; attribute stripped in attributeChangedCallback, formDisabledCallback no-op, form value proven retained by test — closing the H1 silent-form-data-loss hazard). Building the guard remains future arming work (the enforcement-spec candidate's territory), now unblocked. COVERAGE, corrected post-consult: ~26% of components at component grain (9 of 34) plus the corpus-wide web-CSS surface — assembled by FOUR independent historical origins with zero coordination (Spec 066 form-input cleanup; the Button-CTA removal's test flip; a stemma-scaffold template; a 2025-era BVLI accessibility requirement) — no scope decision anyone recorded, which is the 5.6 finding"
658
+ education:
659
+ disposition: "KEEP everywhere — ZERO imposters across rule-worded (S2, 60 hits, every hit scored), check-worded (S3 + Lina's L9 pass over the NEWLY-FOUND checks' vocabulary — css-bundling|failLoudly|disabled prop (by design)|BlendTokenUsageValidation|observedAttributes — vocabulary the draft's sweeps could not have returned), and zero-live-contract (S1) passes. ROWS-ONLY HELD post-consult — by SURVIVED SCRUTINY, not entailment (Lina's correction: the draft's 'entailed' reasoning rested on a 5-component armed scope that does not exist; with the scope corrected to 9 + corpus-wide CSS, blade 1 newly applied to family-doc clauses and they were RE-SCORED, all KEEP). The scored set: CDG:501-512 (the loudest imperative + the ALTERNATIVES — state_loading / validate-on-press / don't render — which no presence check supplies; also the only source of the standardized excludes: YAML block, now load-bearing for the W4-2 normalization); Component-Templates:751-781/:1083 (the reference implementation — how coverage gets CREATED for new components, the TDS:1482 class); TBCV:305-346 KEEP with the REASON REPLACED (Lina — the draft's 'no gate exists for 29 components' premise fell; the KEEP rests on four things no armed check supplies: the standardized reason: string (:317 — no check asserts the wording), the iOS/Android checklist rows (armed on 4 of 34), the Philosophy Alternatives block (:343-345 — the clearest blade-2 pass in the wave), and the provenance paragraph (:307); a wrong reason on a right disposition is still a register defect — the wave-3 CDG:1692 lesson, applied to ourselves); EXCEPT TBCV:321, scored at wave 4 as a CONTRADICTION not an imposter (it instructed removing the observedAttributes entry BVLI's then-armed check required) — DISSOLVED 2026-09-19 by the parity ruling retiring the throw: the clause stands as written, gained a provenance note + one D2 dev-warn clause (parity batch PR); family docs re-scored against the corrected scope: CFB:34 KEEP (characteristics bullet — describes what the family HAS, no check states the positive list), CFFI:118 KEEP (carries the ruling citation + the alternative), Component-Family-Chip:39 KEEP (zero Chip components guarded, verified), CIS:90/:155/:624 + Component-Family-Navigation:35/:117/:146 + stemma-system-principles:164/:558/:580/:714 (illustrative) + CSR:106/:162 (concept-catalog data — state_disabled must remain NAMEABLE for the exclusion to be expressible) + CDS:322-324 (fence-fact) all KEEP; PTTD:433 KEEP (historical precedent citation); Token-Family-Blend:31/:72/:171/:431-433 KEEP — already reconciled, THE MODEL. CONTRADICTION-CLASS DRIFT routed to owners, NOT cut here (the wave stays rows-only; the wave-2 #132 precedent does not fire — no prune, so no compound-exposure window to sequence against, stated explicitly per Stacy; the owner fix PRs are ORDINARY observed PRs when they land): (1) platform-implementation-guidelines:169 — the a11y-mapping row whose THREE cells were ALL gate-banned literals, the strongest contradiction case the campaign produced — REWRITE LANDED at the parity batch PR (2026-09-19): the replacement row (unavailable action -> do not render, + ruling citation and alternatives) applied verbatim as chartered; verification obligation DISCHARGED (post-rewrite re-sweep returned prohibition-framed content only); (2) Token-Family-Opacity — a full disabled-states section authored PRE-philosophy and never reconciled, whose ✅ CORRECT example (:451-468) instructs aria-disabled (a banned pattern), and whose CONTRADICTION SITS IN THE MCP DISCOVERY LAYER (frontmatter description :5 — find_docs routes 'disabled states' queries INTO the ✅ example; Token-Quick-Reference:44/:289 compound the funnel) — Ada RULED REWRITE on the Blend model, chartered as its own issue (14 hits enumerated, repair scope in the charter; the tokens themselves are NOT deprecated) — VERIFICATION OBLIGATION stated per Stacy B4: NO gate verifies token-doc territory; verification is the charter's own post-rewrite re-sweep + discovery-path re-query, and whether a reconciliation-rewrite of pre-philosophy content requires wave-(b) machinery is PUT TO PETER on the charter (proceeds on the repair reading unless he rules otherwise). EDUCATION-ABSENCE, recorded not actioned: the philosophy lives entirely in governance/ — zero hits in .kiro/steering/ or canonical/agents/ (including Lina's own prompt); a scaffolding agent meets the rule only if it opens CDG or Component-Templates; plus the browser-distribution-guide gap (scope 5). Evidence: wave-4-assessment.md §2 + §7 + §12; consults: wave-4-consult-lina.md (all sections), wave-4-consult-ada.md §3-4."
660
+ history:
661
+ - { date: 2026-09-17, change: "entry created (U1b wave 4, Task 5.5 step (a)) discharging U2's logged philosophy-conformance candidate (task-4-parent-completion.md item 3 — 'red on presence of a disabled-state declaration outside an allowlist, Peter's instinct'). Two facts moved since the logging: the allowlist is now EMPTY (Button-CTA adjudication RULED REMOVE 2026-07-15; zero live state_disabled contracts, verified mechanically) and PARTIAL ARMING already happened. MATERIAL CORRECTION to the ratified roster (the fourth consecutive under-recording of arming): campaign-plan.md C10 recorded 'none armed (candidate row)'; reality at wave time was NINE guarded components + a corpus-wide CSS-bundle guard. Drafted pre-consult at 5 components (disclosed process inversion); the owner consult FALSIFIED the armed scope in the UNDERSTATED direction (Lina BLOCKING x4 — the wave-3 falsification ran the other way, so the campaign has now produced both error signs) and the scope[] was rebuilt 3 -> 6 entries. Ownership ACCEPTED by Lina; boundary class functional CONCURRED with her instruments-narrower-than-the-rule sharpening; entry-id verified unique + non-substring by her own script against all 20 existing ids. Repairs and adjudications routed (Lina's batch charter: W4-2 normalization first, vacuous-skip paths, the MISS-4 counter-pulling assertion, the wcag test comment, PIG:169 + TBCV:321 rewrites behind the parity ballot; Ada's Opacity reconciliation charter). Pending Peter's record-first row ratification at the wave-4 PR's merge. Consults: wave-4-consult-lina.md, wave-4-consult-ada.md; evidence: wave-4-assessment.md §2 + §12", by: thurgood }
662
+ - { date: 2026-09-19, change: "PARITY ADJUDICATION RULED + REPAIR BATCH LANDED (the PR carrying this entry): Peter ruled OPTION (d) — ignore-at-runtime, surface-at-dev — on Lina's decision package at the 2026-09-19 sitting (ballot .kiro/docs/ballots/2026-09-19-disabled-input-parity.md, RATIFIED record-first; the package CORRECTED the chartered question: one-sided divergence, web-only, throw-authority a tasks.md bullet, and the markup-path uncatchability claim VERIFIED BY BROWSER EXECUTION at the sitting before ruling). Row changes: scope 3 rewritten (BVLI throw + 7 test cases retired to the canonical guard shape); scope 4 vacuous-skip repaired (fail-on-absence); scope 6 BOTH preconditions met (W4-2 normalization #169; parity ruled) + the D1 Input-Radio-Base neutralization carve-out named for the future guard + MISS-4 counter-pulling assertions retired; education: TBCV:321 contradiction dissolved (stands + D2 clause), PIG:169 rewrite landed with its verification discharged. H1 (form-associated silent data loss) CLOSED by D1; H2 (consumer CSS on the host attribute) recorded in the ballot, deliberately not actioned. Honest residuals flagged in the batch charter, not silently expanded: sibling vacuous-skip tests, Button-CTA iOS/Android blend-assertion siblings, the strict-key parser hardening, the D2 scaffold-template touchpoint. Charter: .kiro/issues/2026-09-17-disabled-guard-corpus-repairs.md (items 1-7 + D1 now complete)", by: thurgood }
663
+ ```
664
+
665
+ ### consumer-guard-lane
666
+
667
+ ```yaml
668
+ rule: "The published package SHALL load and function in a faithful consumer repo — consumer-config subprocess guard (ESM + CJS fixtures), dynamic-import smoke, scoped web-source lint, MCP boot/smoke and browser boot/smoke, run against BUILT bundles (the Spec 118 guard set)"
669
+ boundary_call:
670
+ class: functional
671
+ rationale: "Whether the built package loads and boots in a consumer-shaped environment is a mechanical property of the artifacts — subprocess exit codes, boot sentinels, customElements registration; no judgment"
672
+ verification:
673
+ disposition: barrier
674
+ owner: thurgood
675
+ check_state: armed
676
+ checks: ["Consumer Guard / consumer-guard (.github/workflows/consumer-guard.yml — Spec 118 Tasks 3.1/3.2/4.1/4.2/5.1a/5.1b; required context, in verify-gate-registration.sh EXPECTED_CONTEXTS)"]
677
+ education:
678
+ disposition: "RECORD-ONLY entry (the wcag-format-validity Req 12.7 / contract-platforms-specified class): created by the 5.6 closeout audit — this check was armed, blocking, required, and in NO register row (an armed-but-unregistered gap, the audit's target class). Education layer NOT swept this pass; the territory (consumer onboarding, module-resolution, distribution guides) sweeps with any future wave touching its surfaces. Known adjacent teaching, cited not scored: the Module-Resolution Contract (rosetta-system-architecture) and DesignerPunk-Integration-Guide govern the same territory descriptively."
679
+ history:
680
+ - { date: 2026-09-18, change: "entry created (U1b 5.6 closeout, §5.6 armed-but-unregistered audit — the wave-2 checklist item): 18 live required contexts mapped to rows, TWO gaps found (this + package-name-scope-drift), both rowed record-only, ratified at the closeout PR's merge. Evidence: completion/u1b/campaign-closeout.md §6", by: thurgood }
681
+ ```
682
+
683
+ ### package-name-scope-drift
684
+
685
+ ```yaml
686
+ rule: "Every package-scope reference (governance/, .kiro/steering/, src/, .kiro/agents/, dist/) SHALL match package.json's name scope — no stale-scope references survive a scope change (Spec 101 publish-readiness)"
687
+ boundary_call:
688
+ class: functional
689
+ rationale: "String-match of scope references against package.json's name field — machine-checkable by construction (scripts/check-package-name-drift.js)"
690
+ verification:
691
+ disposition: barrier
692
+ owner: thurgood
693
+ check_state: armed
694
+ checks: ["Check package name drift (.github/workflows/package-name-drift.yml -> scripts/check-package-name-drift.js — the repo's OLDEST CI check, Spec 101; required context, in verify-gate-registration.sh EXPECTED_CONTEXTS)"]
695
+ education:
696
+ disposition: "RECORD-ONLY entry (same class and same audit as consumer-guard-lane). Education layer NOT swept this pass; territory sweeps with any future wave. The npm-publish playbook knowledge (scope-mapping pitfall) is adjacent teaching, out of the served corpus."
697
+ history:
698
+ - { date: 2026-09-18, change: "entry created (U1b 5.6 closeout, §5.6 armed-but-unregistered audit) — see consumer-guard-lane's entry; the two gaps were found and rowed together. Evidence: completion/u1b/campaign-closeout.md §6", by: thurgood }
699
+ - { date: 2026-10-02, change: "rule enumeration updated under ballot 2026-09-28-123-b-u2 (Spec 123 Req 14.5.5): product-template/ removed — Task 17 deleted the tree and 17.1 removed it from SCAN_DIRS; governance/ added — the check has scanned it since the Spec 119-A relocation, and the rule had not said so", by: thurgood }
700
+ ```
701
+
702
+ ### completion-criteria-parity
703
+
704
+ ```yaml
705
+ rule: "A parent completion doc SHALL reproduce every success criterion its tasks.md defines for that parent — verbatim, exact set, with a Status mark and a non-empty Evidence cell per row, the forced-negative line, and the Additional verification section where the parent declares Primary Artifacts or a merge gate"
706
+ boundary_call:
707
+ class: functional
708
+ rationale: "String-equality of a completion-doc cell against a tasks.md bullet after four fixed normalizations is mechanical by construction — no judgment enters the predicate. The dimensions that DO require judgment (is the ✅ true, is the evidence real) are deliberately a different row: completion-verification-honesty"
709
+ verification:
710
+ disposition: barrier
711
+ owner: thurgood
712
+ check_state: proposed
713
+ checks: ["completion-criteria-parity (.github/workflows/completion-criteria-parity.yml -> npm run check:completion-criteria-parity; context name FIXED at authoring; built by Spec 127 U2 and introduced NON-REQUIRED)"]
714
+ education:
715
+ disposition: "AUTHOR, do not prune — this rule has no prose predecessor to prune; it has a prose DEFECT to repair. Three surfaces are authored in the same change as this row: completion-documentation-guide § 'Parent Success-Criteria Fidelity' (the full rule, its normalization list, the mutation classes, the honest-reach statement); Process-Spec-Planning Tier 3 + the replacement worked example (the measured template defect — M4 = 0/22 because the standard offered no failure vocabulary outside the Blocked Task format); Task-Completion-Protocol's two parent sequences (POINTER ONLY, per the Wave-1 prune-scar constraint). RE-ASSESS at the first claims pass after arming: if the check keeps biting, the docs may be teaching the wrong thing — that is the return edge, and it runs on the EDUCATION route."
716
+ history:
717
+ - { date: 2026-09-19, change: "entry created at the Spec 127 law ballot (.kiro/docs/ballots/2026-09-19-completion-claims-integrity.md). check_state: proposed — the checker is BUILT by U2 and lands NON-REQUIRED; the required flip is Q2's decision, guarded by (i) release-prep start and (ii) convention shipped AND Tier-3 worked example fixed AND N >= 5 in-scope parents completed with M2 measured BY AUDIT, not by the checker. owner: thurgood resolves friction (a) on the register's own schema ground — `owner` fuses decision and check, and for an armed barrier the decision IS the check, so the field records who keeps the instrument true (settle ballot § 11.3). The uncheckable residual attaches to completion-verification-honesty (owner: stacy), the row whose entire purpose is that no check owns it", by: thurgood }
718
+ - { date: 2026-09-19, change: "GATE-BITE OUTSTANDING, recorded at row creation rather than after the fact: Req 6.4 requires the check be proven RED on a throwaway PR with a deliberately defective completion doc before any required flip. That proof does not exist at this row's creation and is NOT claimed. It rides with the arming — proven at the flip, cited on this row in the same recorded change that adds the context to verify-gate-registration.sh's EXPECTED_CONTEXTS (count-assert included). Until then this row asserts a proposed check with no bite proof, stated as such", by: thurgood }
719
+ - { date: 2026-09-19, change: "FIRST-INSTANCE PRECEDENT, named so a later mechanical count is not silently wrong (Stacy A-5): this is the register's only `proposed` row carrying a NON-EMPTY `checks[]` — verified 1 of 15 proposed rows at creation. Lawful under a stated condition and only under it: the CI check-context name is fixed at authoring (Req 6.1 requires it be fixed AND cited on the row, and no other schema field exists to hold it), and the string carries its own not-yet-required qualifier in-line. THE CONSEQUENCE, stated rather than left to be discovered: any future query that counts armed or required checks by counting populated `checks[]` will over-count by this row. Count `check_state: armed` instead — `checks[]` records identity, not arming", by: thurgood }
720
+ - { date: 2026-10-02, change: "ARMING SITTING, RECORDED (Q2, ballot .kiro/docs/ballots/2026-09-19-completion-claims-integrity.md R2; RELEASE-FLOW.md step 5b). DECISION: ARMED. The required flip lands AFTER the v15.0.0 tag, as its own PR; this entry records the decision and does not flip anything: check_state stays proposed, no context is added to EXPECTED_CONTEXTS, and no branch-protection change is made by this merge. PETER'S RULING, 2026-10-02, verbatim: 'Go with A, arm now and land the flip after the tag'. THE GUARDS: (i) release-prep start, concretely the creation of the version-bump PR; the sitting fires at 15.0.0 release-prep and names that PR (chore/release-v15.0.0) as its anchor event, dated 2026-10-02, the PR itself not yet open at recording. (ii) the Q1 convention has been law since Spec 127 U1 merged (the ballot above, applied by #180); the Tier-3 worked example is fixed at 9bcc114e (#180), the table-form template and the replacement worked example in governance/Process-Spec-Planning.md; N >= 5 in-scope parents with M2 measured BY AUDIT, not by the checker: N = 21 (Spec 123's 18 parents plus Spec 127's 3), 236 of 236 criteria verbatim under normalization rules (i)-(iii), by Stacy's own comparison script independent of the checker, record .kiro/specs/123-consumer-distribution/completion/q2-m2-audit-2026-10-02.md (checker results, 123's 21 of 21, are NOT counted toward N). THE AUTHORING-TIME CHECK: .kiro/hooks/complete-task.sh's parity check stays ADVISORY (Peter's PR #205 note, which this same sitting was to decide, is satisfied by this entry). OWED ACTS, none done by this entry, each its own recorded step: (1) the gate-bite proof this row's 2026-09-19 GATE-BITE OUTSTANDING entry requires, the check proven RED on a throwaway PR with a deliberately defective completion doc, Stacy specifying the falsification fixtures and Thurgood building and running them, with the run URLs cited in the flip PR's recorded change, not here; (2) EXPECTED_CONTEXTS +1 with its count-assert in tools/agent-generator/verify-gate-registration.sh, in the same recorded change as the check_state flip; (3) an issue-row grant for that PR (.github/** where touched, verify-gate-registration.sh, canonical/generated.lock), a new required context being a named-and-admitted act under ballot 2026-09-27-ci-regime-standing-scope section 3; (4) Peter's branch-protection act adding the context. FRAMING, binding every reader: a green completion-criteria-parity gate is NOT evidence of claim honesty; any future reading of it as such is the error Spec 127 exists to prevent, and arming removes nothing from the claims-pass audit duty. This is the recording of Peter's ruling, not a ruling", by: thurgood }
721
+ ```
722
+
723
+ ### promised-artifact-exists
724
+
725
+ ```yaml
726
+ rule: "Every path a parent declares under **Primary Artifacts:** SHALL exist at the merge of the PR that ticks that parent — or be declared deferred in the fixed form `Artifact deferred: <path> -> <unit>` (the law TEACHES the arrow as `->` rendered as a right-arrow glyph; the ASCII form is what is ACCEPTED at parse and is used here for YAML safety — cite the guide, not this line, for the taught spelling)"
727
+ boundary_call:
728
+ class: functional
729
+ rationale: "Path existence at a named commit is a filesystem fact. The check's whole design keeps it factual: it is delta-scoped to the ticking PR, it strips annotation suffixes by rule, and every case it cannot decide is EMITTED rather than silently skipped"
730
+ verification:
731
+ disposition: barrier
732
+ owner: stacy
733
+ check_state: proposed
734
+ checks: []
735
+ education:
736
+ disposition: "AUTHOR the input-side convention, which ships with this row's law: the fixed deferral form `Artifact deferred: <path> -> <unit>` is taught in completion-documentation-guide § 'Parent Success-Criteria Fidelity' (Additional verification), and the authoring note that a Primary-Artifacts line bundling platforms does NOT decompose (it has its own remedy in the artifact forced-negative line) is taught beside it. Nothing is pruned — the promised-artifact dimension had no prose predecessor at all, which is why it escaped twice to consumers."
737
+ history:
738
+ - { date: 2026-09-19, change: "entry created at the Spec 127 law ballot. SCOPE, as ruled: DELTA-SCOPED — fires on the PR that ticks the parent, against that parent's declared paths only; later file moves are repository evolution, not claims. Parsing strips annotation suffixes and EMITS its exclusions (`skipped — not a path`) rather than silently skipping; an AV-declared deferral in the fixed form is an EMITTED EXCLUSION, not a red (mechanically decidable because the form is fixed — B-6 ruled option 1). VERDICT PHRASING IS NORMATIVE: 'task text and reality disagree', never 'work was not done'. NAMED READER for the emissions: the CLOSEOUT claims pass reads this check's emission lines for the closing spec — once the check is built; UNTIL THEN THE PASS OWNS PROMISED-ARTIFACT GAPS AS JUDGMENT. The PR summary line carries the exclusion count", by: thurgood }
739
+ - { date: 2026-09-19, change: "OWNER RULED AT THIS BALLOT — Peter, 2026-09-19, option (B), and the openness is recorded as openness: this row was split out of the settle ballot's three-row enumeration, so its owner was genuinely open rather than silently defaulted. The drafter surfaced a fork rather than picking one, being a named party to the cut. RULED: `owner: stacy` NOW — the honest record of the present. The row is `proposed` and unbuilt; the dimension is held today by Stacy's claims pass as judgment (Req 5.3's interim clause), and both sibling rows created in this same ballot carry `owner: stacy` while unbuilt. PRE-COMMITTED TRANSITION, decided now so it is a transition and not a later argument: WHEN the check is built and wired, the owner flips to `thurgood` in ONE row edit with its own dated history entry, on the instrument-owner ground § 11.3 established for the parity row (`owner` fuses decision and check; for an armed barrier the decision IS the check, so the field records who keeps the instrument true). THE FLIP IS REPRESENTATIONAL, NOT CLASSIFICATORY — no disposition, boundary call, check_state or education disposition changes with it, and a later reader must not read the handover as a reclassification. RECORDED ALTERNATIVE (option A, argued by the drafter and not taken): assign `thurgood` from creation, on the ground that the row's destination is a mechanical PR-gate instrument; its stated residual was that this records a FUTURE state on a row that is proposed today, naming an owner of an instrument that does not exist while the real holder appears only in prose", by: thurgood }
740
+ ```
741
+
742
+ ### promised-artifact-shipped
743
+
744
+ ```yaml
745
+ rule: "An artifact a task text annotates as `(modified)` SHALL appear in that task's shipped diff — the Spec 112 task-3.3 signature, where a tested utility is created and the seam it was meant to modify is never touched"
746
+ boundary_call:
747
+ class: functional
748
+ rationale: "Diff membership is mechanical. The reason this row is deferred is not classification doubt — it is that the check's natural firing grain is wrong at PR time, which is a scheduling property, not a boundary one"
749
+ verification:
750
+ disposition: barrier
751
+ owner: stacy
752
+ check_state: proposed
753
+ checks: []
754
+ education:
755
+ disposition: "NOTHING AUTHORED, NOTHING PRUNED at this ballot — the row is registered so the dimension is visible as unowned-by-machinery rather than invisible. The teaching this dimension needs already lands on completion-criteria-parity's surfaces (the AV section's artifact forced-negative line and the fixed deferral form). RE-ASSESS if the dry run promotes the row to built."
756
+ history:
757
+ - { date: 2026-09-19, change: "entry created at the Spec 127 law ballot; build DEFERRED. MUST NOT FIRE PER-PR (ruled): a later unit can legitimately deliver a prior unit's promised artifact, so a per-PR grain would red-light lawful sequencing. Its events are CLOSEOUT and RELEASE — never the PR gate. owner: stacy, ratified at settle ballot § 11.2 and confirmed in her § 16.2 duty table. PROMOTION EVIDENCE, recorded honestly: a retrospective DRY RUN over merged history — a PROCEDURE, NOT A FIRING TRIGGER. That distinction is acceptable only because nothing here is armed; if this row ever moves toward `armed`, the dry run must be replaced by a real trigger with a real event, and this note is the reason why", by: thurgood }
758
+ ```
759
+
760
+ ### completion-verification-honesty
761
+
762
+ ```yaml
763
+ rule: "A completion claim SHALL be true — the ✅ reflects a check actually performed against shipped source, and the Evidence cell points at something real"
764
+ boundary_call:
765
+ class: ideological
766
+ rationale: "Whether a mark is HONEST is not decidable from any artifact a check can read. A false ✅ with a plausible path is green to every mechanical predicate that exists or could exist here; the dimension is held by practice, culture and audit, or it is not held at all. CARRIED VERBATIM, AS RULED (Req 5.5): Any future reading of these numbers that treats a green gate as evidence of claim honesty will have made the error this spec exists to prevent."
767
+ verification:
768
+ disposition: none
769
+ owner: stacy
770
+ check_state: none
771
+ checks: []
772
+ education:
773
+ disposition: "AUTHOR the honest-reach statement, and never author anything that implies mechanization. completion-documentation-guide § 'Parent Success-Criteria Fidelity' carries the instrument's limits explicitly: a plausible-looking Evidence path is green regardless of truth; for iOS and Android 'command + result' evidence is trust-the-reported-result for any verifier in this environment (charter: .kiro/issues/2026-09-17-platform-build-verification-harness-candidate.md); artifact truth is owned by the claims pass today. PRUNE NOTHING and ADD NO CHECK — ever. M3 (evidence quality), M4 (forced-negative adoption) and M5 (failure markers) are AUDIT output, produced by claims passes, and no check owns them."
774
+ history:
775
+ - { date: 2026-09-19, change: "entry created at the Spec 127 law ballot. NO CHECK OWNS THIS ROW — EVER; that is the row's purpose, not a gap in it. The ruled sentence is carried verbatim in boundary_call.rationale above. Recorded with it, because a barrier's own metric is trivially 100% once armed: M2 measures nothing after arming, and the informative metrics are exactly the ones no check owns", by: thurgood }
776
+ ```
777
+
778
+ ### parent-completion-docs-present
779
+
780
+ ```yaml
781
+ rule: "Every ticked parent task SHALL have a completion doc and a summary doc — the Spec 112 F6 class, where four required documents were simply never written"
782
+ boundary_call:
783
+ class: functional
784
+ rationale: "File existence at a path family is mechanical. It is registered `proposed` rather than built because its naive form has a KNOWN false-positive class, stated below — and a check that red-lights lawful behaviour on day one is how a barrier earns distrust in its first week"
785
+ verification:
786
+ disposition: barrier
787
+ owner: stacy
788
+ check_state: proposed
789
+ checks: []
790
+ education:
791
+ disposition: "KEEP the existing teaching, which is already correct and already single-homed: completion-documentation-guide § 'When to Create Each Document' (subtask = detailed doc; parent = detailed doc AND summary doc) and Task-Completion-Protocol's two parent sequences. NOTHING NEW IS AUTHORED for this row — the docs say the right thing; what is missing is a detector, not a lesson."
792
+ history:
793
+ - { date: 2026-09-19, change: "entry created at the Spec 127 law ballot; build and arming DEFERRED. owner: stacy WHILE UNBUILT/IDEOLOGICAL (settle ballot § 11.2's conditional, carried at strength) — the doc-presence dimension is claims-pass judgment until a check exists to own it. KNOWN FALSE-POSITIVE CLASS, stated at creation rather than discovered at arming: completion docs land AT PARENT COMPLETION, which under the coherent-unit rule can be BEFORE the unit's PR opens — so a naive `test -f` at PR time reds a parent that is behaving exactly as the law requires. INTERIM: the parity checker names this surface explicitly. A ticked parent with no completion doc is neither red nor silent there; it EMITS `completion doc not found — not evaluated (doc presence is parent-completion-docs-present's surface, proposed/unbuilt; interim owner: the claims pass)` — red would build this row by the back door, silence would be the forbidden dormancy, and the named emission is the honest division of labour. The CLOSEOUT pass reads those emissions", by: thurgood }
794
+ ```
795
+
796
+ ### owned-artifact-authorship
797
+
798
+ ```yaml
799
+ rule: "A decide-grade artifact owned by an agent SHALL be authored in that agent's seat — the orchestration loop briefs, relays and verifies, and does not author in an owner's seat"
800
+ boundary_call:
801
+ class: ideological
802
+ rationale: "NO CHECK CAN VERIFY AUTHORSHIP FROM THE ARTIFACT. Nothing in a requirements.md, a design.md or a ballot distinguishes owner-authored from loop-authored text; the `Author:`/`Drafted by:` field is self-attested, and self-attestation is not verification (Spec 127's founding finding). PRECISION CLAUSE, stated so the row is not read as wider than it is: the undecidability is about the ARTIFACT. An ACT-TIME aid — something that surfaces the ownership question at the moment of writing rather than inferring authorship afterwards — remains possible and is UNPROPOSED here; this row forecloses artifact-side detection, not future act-time design. Precedent for the shape: completion-verification-honesty, an undetectable truth-property of an artifact held by practice and audit rather than by any check. CLASSIFICATION STRENGTHENED BY AN ADVERSE ADJUDICATION (F15, 2026-09-19): asked to take a standing authorship dimension onto the claims-pass template, Stacy DECLINED and went further than this row had — she holds that NO JUDGMENT can own this surface defensibly, not merely that no check can, because an idiom finding is unfalsifiable by the accused, carries no repair path, and sitting beside counted findings teaches readers to discount the counted ones. She did not oppose this row ('exactly what the register is for'). An ideological call made by its own author is cheap; the same call reached independently by the seat that would have inherited the judgment is not"
803
+ verification:
804
+ disposition: none
805
+ owner: thurgood
806
+ check_state: none
807
+ checks: []
808
+ education:
809
+ disposition: "ONE HOME, single-homed deliberately: `.kiro/steering/Agent-Directory.md` § 'Primary Agent (Orchestrator)' — second person, always-loaded, stating the loop's own scope and artifacts and routing everything else to an owner. Every other surface POINTS or stays silent; `start-up-tasks.md` #6 carries only the whether-to-delegate trigger and deliberately does NOT restate ownership. THE ROW'S MOST IMPORTANT CONTENT IS ITS OWN LIMITS, and the education must teach them: the only available detector is a CLAIMS-PASS IDIOM OBSERVATION — an auditor noticing that an artifact's idiom does not match its declared author — which is subjective, per-spec, at CLOSEOUT, and AFTER THE FACT. It is weak. A reader who treats this row's existence as coverage has made the error the row exists to prevent. PRUNE nothing and ADD no third surface: the accreted alternatives (a tiering-rule bullet, a path/glob-keyed routing rule, an `Author:` template field, a mechanical hook) were each tested against the imposter standard at the 2026-09-19 reassessment and dropped."
810
+ history:
811
+ - { date: 2026-09-19, change: "entry created by the orchestrator-role reassessment (.kiro/docs/ballots/2026-09-19-orchestrator-role-and-row.md). ORIGIN: one incident — Spec 127's formalization docs were authored by the main session in Thurgood's seat, with the format difference observed by Peter. THE DIAGNOSIS THAT MATTERS, recorded because it disproved the obvious remedy: Agent-Directory ALREADY assigned spec formalization to Thurgood in three places (:56 Owns, :60 the Q5 charter cut ratified 2026-09-17, :126 routing table), all Layer-1 and always-loaded, and it did not bind — so AVAILABILITY WAS NEVER THE FAILURE and adding more always-loaded text treats a disproven cause. What was missing was a statement of the ORCHESTRATOR'S OWN scope; the Agent-Directory claimed to cover 'all DesignerPunk AI agents' and omitted the one agent that directs the other eight. F11 RULED BY PETER: the section ships on the COMPLETENESS ground (a verified defect in a doc on its own stated terms), NOT on the hypothesis that second-person identity binds better than third-person ownership — that claim is recorded AS A HYPOTHESIS and is falsifiable: recurrence of seat-drift after this lands is evidence, routed to the claims-pass idiom dimension. NO ESCALATION IS PRE-COMMITTED, because there is nothing artifact-side to escalate to; proposing one would be the dishonesty this row is about. F15 adjudication: declined at Stacy's seat, 2026-09-19 — record: the standards-package ballot's annex (PR #185), both on main after both PRs merge. UNCOVERED RESIDUAL, recorded rather than absorbed: the sharpest case — owner-named work carrying NO delegated-tier note at all — is silent on every surface either seat owns (a missing note is not a false note), and both sessions hold that an idiom observation there would manufacture appearance-of-coverage, which is worse than the stated gap", by: thurgood }
812
+ - { date: 2026-09-28, change: "ONE HOME section AMENDED by the orchestrator consult-first ballot (.kiro/docs/ballots/2026-09-28-orchestrator-consult-first.md), RATIFIED by Peter 2026-09-28, population (iii) (record-first). Agent-Directory § 'Primary Agent (Orchestrator)' gains three paragraphs: consult before you recommend or brief (M1: owned surface / plan change / law); present one class-level option (M2); leave the record, the **Consulted**: line (M3). This adds EVALUATION alongside authorship. This rule, its boundary call and its verification are UNCHANGED; the Consulted line has its own entry, orchestrator-consult-line", by: thurgood }
813
+ ```
814
+
815
+ ### delegated-tier-capture
816
+
817
+ ```yaml
818
+ rule: "Every parent completion doc SHALL carry exactly one fixed-form `**Delegated-tier**:` line — `plan held`, or the planned→actual divergence form with its class — so that silence about WHO EXECUTED is not a recordable state"
819
+ boundary_call:
820
+ class: functional
821
+ rationale: "THE SPLIT IS THE CLASSIFICATION'S SUBSTANCE: line PRESENCE and FORM are mechanically decidable (one anchored regex over the doc's header block — the grammar is fixed in the guide); line TRUTH is not — a false `plan held` is artifact-undetectable, and that residue belongs to owned-artifact-authorship (ideological, no check ever), not to this row. This row is the FALSIFIABLE PERIMETER around that ideological surface: it converts the F15 residual's passive half (omission — a missing note is not a false note) into visible non-compliance. TWO residual paths stay open, stated at the ballot's § 4: deliberate written falsification (owned-artifact-authorship's), and the truthful-`plan held`-against-an-accommodating-plan path — planning-time, NAMED AND UNOWNED by deliberate decision (a quietly widened seat is the F15 error re-run). ORIGIN: the F15 adjudication (2026-09-19) — Stacy declined the unfalsifiable idiom dimension and named delegated-tier accuracy as the under-used falsifiable surface inside her cut; Peter directed the duty drafted the same session"
822
+ verification:
823
+ disposition: audit
824
+ owner: stacy
825
+ check_state: none
826
+ checks: []
827
+ # The audit: every claims pass verifies presence+form on every parent doc in the population
828
+ # (missing/free-prose = a FINDING on the authoring agent), verifies divergence forms against
829
+ # tasks.md execution routes + the planned `**Agent**:` stamp + git evidence, and spot-checks
830
+ # `plan held` lines at the pass's stated sample fraction. MECHANIZATION NAMED AND UNPROPOSED
831
+ # (the S-package precedent): completion-criteria-parity already parses every parent doc; a
832
+ # missing/malformed-line EMISSION (never a red — the doc-not-found shape) is cheap and remains
833
+ # a separate, registered proposal with a Stacy fixture if wanted.
834
+ education:
835
+ disposition: "Law home: completion-documentation-guide § 'The delegated-tier line — unconditional' (forms, grammar, rationale, honest reach). Pointer-grade: Task-Completion-Protocol's Key-Rules bullet (rewritten from exception-based). The audit duty: canonical/agents/stacy.md § 'The claims-pass record' (the delegated-tier read + counting row). HONEST-REACH TEACHING RIDES THE LAW HOME: corpus-wide `plan held` is not evidence seats are respected — the active-falsification case is owned-artifact-authorship's, uncovered by design here"
836
+ history:
837
+ - { date: 2026-09-19, change: "entry created by the delegated-tier-capture ballot (.kiro/docs/ballots/2026-09-19-delegated-tier-capture.md), drafted at Peter's in-session direction from the F15 adjudication's un-absorbed residual. The amendment: TCP's capture goes exception-based → UNCONDITIONAL ('a plan that held needs no note' was the missing-note gap's root — silence was ambiguous between plan-held and unrecorded divergence). The forced-negative pattern's third application (unmet criteria → promised artifacts → who-executed). Non-substring sweep at authoring: 28 live ids + this one, relations 0, dupes 0. Stacy's verifier-half review recorded in the ballot § 6 before submission", by: thurgood }
838
+ ```
839
+
840
+ ### tasks-row-write-scope-grant
841
+
842
+ ```yaml
843
+ rule: "A parent task's assignment row in a MERGED tasks.md grants its PRIMARY and tiered secondary agents write access to exactly that parent's listed Primary Artifacts, on that unit's branch, expiring when the unit merges — additive to charter write scope, conveying no ratification authority; an out-of-list edit is a claims-pass finding; every listed artifact must trace to requirements or design"
844
+ boundary_call:
845
+ class: functional
846
+ rationale: "THE AUDITED PROPERTY IS MECHANICALLY DECIDABLE: a unit PR's edit paths against the union of its parents' Primary Artifacts lists is a set comparison over git and tasks.md. It is held by AUDIT, not by a check, because no check exists yet and the grant's first application (Spec 123) is its calibration — MECHANIZATION NAMED AND UNPROPOSED (a completion-criteria-parity-style EMISSION, never a red, is the cheap later form). TWO RESIDUALS STAY JUDGMENT, stated so the functional call is not read as wider than it is: (a) clause 7's TRACE (does a listed artifact trace to requirements/design?) is a tasks-round judgment, and (b) OVER-BROAD GLOBS in a Primary Artifacts list grant a directory — the tasks round is the only check on breadth. ENFORCEMENT IS POST-MERGE: an out-of-list edit is caught as a FINDING, not prevented"
847
+ verification:
848
+ disposition: audit
849
+ owner: stacy
850
+ check_state: none
851
+ checks: []
852
+ # The audit (clause 6): each claims pass whose population includes a unit executed under the
853
+ # grant compares the unit's edit paths (the unit PR's diff) with the union of its parents'
854
+ # Primary Artifacts lists; a path outside the union, outside the editing agent's charter scope,
855
+ # is a FINDING on the executing agent. Clause 7 (trace) rides the tasks-round LENS.
856
+ education:
857
+ disposition: "LAW HOME, single: .kiro/docs/ballots/2026-09-26-tasks-row-write-scope-grant.md § 2 (the seven-clause rule). POINTER-GRADE: Task-Completion-Protocol § 'Coherent Units' (one bullet, pointing here — S-6 copy set: none; a pointer, not a copy). NOT EDITED, DELIBERATELY: the charters' `## Write scope` blocks (clause 5 — charter scopes unchanged; a charter line would read as a permanent grant for temporary work, the NOT-TAKEN fork (A)'s own defect). APPLICATION HOME: each spec's tasks.md § 'Delegated-tier plan' preamble names the grant; its Primary Artifacts lists are the grant's exact extent"
858
+ history:
859
+ - { date: 2026-09-26, change: "entry created by the tasks-row write-scope ballot (.kiro/docs/ballots/2026-09-26-tasks-row-write-scope-grant.md), RATIFIED by Peter at the Spec 123 tasks-round sitting (record-first; PR-atomic). ORIGIN: Lina R1 T-L3 — most Spec 123 seats sat outside their agent's declared charter write scope, so the seated agents would have had to decline their own work. FORK: (A) charter-widening ballot NOT TAKEN — counter recorded: permanent scope for temporary work; (B) SELECTED. PETER'S CLARIFICATION RECORDED: the rule grants authorization records, not scope self-expansion — activation is Peter's merge of the tasks.md. KNOWINGLY ACCEPTED: the tasks author as scope-granter outside the per-case ballot path, mitigated by activation-at-merge and the tasks feedback round. FIRST APPLICATION: Spec 123's five units. Non-substring sweep at authoring: 29 live ids + this one, relations 0, dupes 0", by: thurgood }
860
+ - { date: 2026-10-01, change: "POPULATION NARROWED BY POINTER, not by edit (ballot .kiro/docs/ballots/2026-10-01-signing-act-chain.md § 2; DRAFT at authoring, in force at its ratification merge R = `2da74864` (#243), record-first): a C1 signing or confirming act — confined to the row's signature/confirmation sub-object (refuse included) and its sheet section, by c1Seat(row), for a row on the branch's freshness stale list — is authorized by the C1 function and is NOT a write-scope act under this grant. It is neither granted by a row nor an out-of-list edit; it is audited under signing-act-consistency. Every other field (disposition, destination, removals, cites, overlay text, operative-set items, canonical sources, a seat's own charter) stays authoring under this grant or charter scope. ORIGIN: Spec 123 Task 15's signing fan-out ran under a row that named only Thurgood and Lina — one Medium finding against the plan (Stacy), no retroactive grant (Peter, 2026-09-30). The 2026-09-26 ballot itself is a record and is not edited", by: thurgood }
861
+ ```
862
+
863
+ ### publish-rail-guard
864
+
865
+ ```yaml
866
+ rule: "Every @3fn/core release SHALL be verified live on registry.npmjs.org — including the tarball's actual host, not only the version string — before it is announced; verification runs as a mandatory step in the release recipe (RELEASE-FLOW.md step 6), never as a PR check, because the event it verifies (registry publication) cannot exist before the release it verifies"
867
+ boundary_call:
868
+ class: functional
869
+ rationale: "The artifact half is a mechanical fact: a direct, unauthenticated HTTP GET against registry.npmjs.org's version endpoint, parsed with node -e, with named per-assertion exit codes (10 version / 11 host / 12 self-test / 13 empty-tarball) — no judgment enters the predicate, and no npm CLI or .npmrc is ever consulted (erratum 2026-09-27, Stacy R1-1: the earlier npm-view form plus its required hermetic env vars broke every release and would not have been hermetic even fixed). The ORDERING half of the rule ('before it is announced'; 'runs as a mandatory step') is OPERATIONAL, not functional (Stacy R1-7, by this register's own npm-test-before-complete precedent) — carried by the committed evidence file and the RELEASE claims pass, not by this check itself"
870
+ verification:
871
+ disposition: barrier
872
+ owner: thurgood
873
+ check_state: armed
874
+ armed_at: tool-time
875
+ checks: ["scripts/verify-publish-rail.sh, invoked as a mandatory step in .kiro/hooks/RELEASE-FLOW.md's release sequence, step 6 (landing in the same commit as this row); under scripts/__bites__/: one COMMITTED MEASUREMENT (a real PASS against the live registry for 14.1.0, pass-real-version.txt) plus THREE RECORDED BITES (a real HTTP-404 red for VERSION=99.99.99, exit 10; the host check firing through the PRODUCTION path via a PATH-shimmed curl, exit 11; an unset VERSION, exit 2, the named USAGE error) — Task 7.2. HONEST REACH (Stacy R1-3, required in-field): tool-time here = the script's non-zero exit halts the human-run recipe before announcement — it runs after publish (it cannot un-publish), no downstream tool consumes its exit code, and a skipped run is not mechanically prevented; a skipped or failed run is detected post hoc by Stacy's RELEASE claims pass reading the committed evidence file (see education). A 404 in the first minutes after publish may be registry indexing lag, not a real failure — the script's own message says so, and the fix is a manual re-run, never an automatic retry."]
876
+ education:
877
+ disposition: "AUTHOR: RELEASE-FLOW.md step 6 (this ballot § 3) and this row are the two artifacts Req 6.4/6.5 require, landing in the same commit; both are new — no prose predecessor to prune. ADJUDICATED, STATED EXPLICITLY (Req 6.5): a future ARMING-event reader of this register — and verify-gate-registration.sh's EXPECTED_CONTEXTS arithmetic, from which armed_at: tool-time already excludes this row (audit:coverage-map does NOT read this register at all — Stacy R1-4, correcting her own earlier requirements-round S-A4 imprecision at feedback/requirements.md:420, which had named audit:coverage-map as the reader) — should read this row as accounted-for, never as an unmarked gap inviting repair into a required PR check, which Req 6.6 forbids outright. LIVENESS SPLIT (Req 6.7): whether the guard actually ran on a given release, and what it returned, is read by Stacy's RELEASE claims pass from the committed docs/releases/<v>/publish-verification.txt (renamed from .log, erratum 2026-09-27, Stacy R1-2 — the gitignored extension would have silently dropped every release's evidence file) — never by this row, and never by re-deciding the guard's verdict. REQ 6.1 IS NOT VERIFIED BY THIS ROW (Stacy R1-5, correcting the prior draft's overclaim): this check's own queries touch only the public registry, never a consumer-facing document, so it establishes nothing about whether GitHub Packages appears in one. Two live Req 6.1 findings exist independently of this check, both routed rather than left as an unrecorded 'reported separately': governance/DesignerPunk-Integration-Guide.md's install section (committed issue: .kiro/issues/2026-09-27-integration-guide-install-section-stale.md, PR #214, routed to Task 19.4) and CHANGELOG.md's now-DELETED Publishing section (Stacy Review 2, C3 — removed in this same Task 7 rework rather than reworded, since no consumer-facing behavior belonged in that file to begin with)"
878
+ history:
879
+ - { date: 2026-09-27, change: "entry created at the B-U1 ballot (.kiro/docs/ballots/2026-09-27-123-b-u1-publish-rail.md), Spec 123 Task 7.3, REWORKED same day after Stacy's first review (completion/task-7-3-stacy-review.md, ACCEPT-WITH-CHANGES). R1-1 [Critical, Peter ruled]: the npm-view form + its required hermetic npm_config_* env vars made npm 10.9.3 exit before resolving config, false-redding a live release (reproduced by Stacy at head); even fixed, the isolation would not have excluded the project's own .npmrc @3fn scope mapping. Peter's ruling: drop npm entirely for a direct HTTP GET against registry.npmjs.org, parsed with node -e — no npm CLI, no npmrc, ever consulted. R1-2 [Critical]: the .log paste target is gitignored and named no route to protected main — fixed via the .txt rename and a named post-publish release-record PR (RELEASE-FLOW.md step 6). R1-3..R1-7 applied as required/recommended (see this ballot § 0). Cross-references the T1-(B) ballot (.kiro/docs/ballots/2026-09-26-tasks-row-write-scope-grant.md, RATIFIED Peter 2026-09-26, merged 314dbaa7, PR #199). Non-substring sweep at authoring: 30 live ids + this one (31 total), relations 0, dupes 0", by: thurgood }
880
+ - { date: 2026-09-27, change: "REWORKED a second time same day, after Stacy's re-check (completion/task-7-3-stacy-review.md, 'Re-check addendum,' commit 2d83f266) returned ACCEPT with five non-blocking fixes, applied here: (1) curl -q added as the script's first argument, so ~/.curlrc is never read either — the phrase 'hermetic-from-config' is corrected wherever it appeared (this history line included) to the precise claim: no npm CLI, no npm config, no curl config file is read, and standard proxy env vars are DELIBERATELY HONOURED, not overridden; (2) an unset VERSION now exits 2 (a named USAGE error) instead of bash's own unbound-variable exit 1, with a fourth bite recorded; (3) the FAIL[version] message and RELEASE-FLOW.md step 6's own text each carry one short, no-auto-retry note that a 404 in the first minutes after publish may be registry indexing lag; (4) checks no longer calls the live PASS a 'bite' — it is a committed measurement, distinct from the three recorded reds. STACY'S ARMED RULING (the fork her first review surfaced): check_state: armed STANDS — both her conditions are met (row + step 6 land in one commit; R1-1 fixed, evidenced by a real PASS) and, unlike completion-criteria-parity, no separate later gate exists here. BINDING CONDITION, hers, carried verbatim: if application is ever split, with the row committed without step 6, the row lands as proposed — only the same-commit case earns armed. Re-ran the real 14.1.0 PASS after the -q change; re-committed pass-real-version.txt", by: thurgood }
881
+ ```
882
+
883
+ ### issue-row-write-scope-grant
884
+
885
+ ```yaml
886
+ rule: "A MERGED chartered issue under .kiro/issues/ whose body carries a **Grant paths**: list grants its named owner write access to exactly those paths, on the fixing PR's branch, expiring when that PR merges — activated only by Peter's merge of a PR whose body names the grant; the fixing PR is diffed against the list as it stood at that merge; never a governance-law path; a .github/** or verify-gate-registration.sh grant carries M1's excluded acts unless the issue names the act and Peter's merge admits it"
887
+ boundary_call:
888
+ class: functional
889
+ rationale: "THE AUDITED PROPERTY IS MECHANICALLY DECIDABLE: the fixing PR's git diff --name-only against the list as it stood at the activating merge (git show <activating-merge>:<issue path>) is a set comparison. Held by AUDIT, not by a check — the tasks-row-write-scope-grant shape applied to issues"
890
+ verification:
891
+ disposition: audit
892
+ owner: stacy
893
+ check_state: none
894
+ checks: []
895
+ # The audit (ballot § 3 clause 6): the fixing PR's path list against the activating-merge list;
896
+ # a path outside it is a FINDING on the executing agent — read at ARMING when the grant covers a
897
+ # .github/** path (ruling 4, 2026-09-28; Stacy's ARMING row, edit site 4), otherwise at the next
898
+ # RELEASE pass. Clause 7 (trace) rides the monthly health-check walk.
899
+ education:
900
+ disposition: "LAW HOME, single: .kiro/docs/ballots/2026-09-27-ci-regime-standing-scope.md § 3 (the seven-clause rule). POINTER-GRADE: .kiro/issues/README.md § 'The convention' item 8 (one item, pointing here)"
901
+ history:
902
+ - { date: 2026-09-28, change: "entry created by the CI-regime standing-scope ballot (.kiro/docs/ballots/2026-09-27-ci-regime-standing-scope.md § 3, M2), RATIFIED by Peter 2026-09-28 'as recommended on all five forks' (record-first). ORIGIN: B-CI named a CI-regime owner with no standing scope, and issues assigned CI work the owner's charter forbade (the test:scripts issue). Stacy R1 changes to clauses 4, 5 and 6 incorporated at THURGOOD R2. Non-substring sweep at authoring: 31 live ids + this one + instrument-rows-disposed-not-fixed, relations 0, dupes 0", by: thurgood }
903
+ - { date: 2026-10-01, change: "POPULATION NARROWED BY POINTER (ballot .kiro/docs/ballots/2026-10-01-signing-act-chain.md § 2; DRAFT at authoring, in force at its ratification merge R = `2da74864` (#243), record-first): a C1 signing or confirming act needs no **Grant paths**: entry — an issue whose fix moves signed hashes grants its owner the change, and each affected row's C1 seat re-signs under the C1 function, not under the issue. Pointer-grade education: .kiro/issues/README.md rule 8 gains one trailing clause. ORIGIN: the VALVE-1 issue (.kiro/issues/2026-09-30-valve-1-per-trim-spans.md) as drafted granted the seats' profile paths to its owner, who signs none of them — the grant could not cover the acts the issue described (Stacy, consult 2). The 2026-09-27 ballot itself is a record and is not edited", by: thurgood }
904
+ ```
905
+
906
+ ### instrument-rows-disposed-not-fixed
907
+
908
+ ```yaml
909
+ rule: "An instrument that surfaces rows (the 122 sweeps, audit:coverage-map and its lanes section, the completion-criteria-parity checker) ships in a PR carrying no fix outside its own extent; each surfaced row is, in that PR, adjudicated under the instrument's sweep: key in canonical/adjudications.yaml or routed to its owner as a chartered item (owner + named trigger + a unique expiry string in the adjudication record, which the fix PR removes citing grep -c → 0); fixes ship under the owner's standing scope in their own PR — except where Peter's ruling recorded in that PR admits a named, text-preserving normalization of the instrument's own input that the instrument's change turns red (no criterion text changed; #211's shape)"
910
+ boundary_call:
911
+ class: functional
912
+ rationale: "THE AUDITED PROPERTY IS MECHANICALLY DECIDABLE: the instrument PR's diff against the instrument's own extent is a set comparison, and each surfaced row's disposition is a presence check (an adjudication row under the sweep: key, or a root issue file with owner + named trigger + the expiry string). Held by AUDIT"
913
+ verification:
914
+ disposition: audit
915
+ owner: stacy
916
+ check_state: none
917
+ checks: []
918
+ # The fix PR's allowance (ruling 5, 2026-09-28): it may remove exactly the adjudication rows whose
919
+ # record carries its expiry string (the adjudications.yaml diff removes only those and adds nothing,
920
+ # cited) and commit the canonical/generated.lock written by a green diff-guard.ts run in the same PR.
921
+ education:
922
+ disposition: "LAW HOME, single: .kiro/docs/ballots/2026-09-27-ci-regime-standing-scope.md § 4 (M3). POINTER-GRADE: .kiro/issues/README.md § 'The convention' item 7. CITED, NOT EDITED: 122's C8 adjudication row form (the canonical/adjudications.yaml header)"
923
+ history:
924
+ - { date: 2026-09-28, change: "entry created by the CI-regime standing-scope ballot (.kiro/docs/ballots/2026-09-27-ci-regime-standing-scope.md § 4, M3), RATIFIED by Peter 2026-09-28 'as recommended on all five forks' (record-first). ORIGIN: Peter's 2026-09-27 holistic-path ruling on the PR-2 grant question (PR-2 instrument-only). The exception's shape is #211 (parser fix + text-preserving tasks.md normalization under Peter's ruling (d)). Non-substring sweep at authoring: 31 live ids + issue-row-write-scope-grant + this one, relations 0, dupes 0", by: thurgood }
925
+ ```
926
+
927
+ ### orchestrator-consult-line
928
+
929
+ ```yaml
930
+ rule: "Every options message the orchestrator presents to Peter, every brief it sends an agent that meets an M1 trigger (owned surface / plan change / law), and every PR whose diff touches a trigger surface carries **Consulted**: <Agent> — <one-line read>[; <Agent> — <one-line read>]* or **Consulted**: none needed — <reason>; options messages also carry **Class option**: <option> — cost: <cost> or **Class option**: none — <reason> (the Class option half is checked by Peter at reading only — NOT AUDITED)"
931
+ boundary_call:
932
+ class: functional
933
+ rationale: "Presence and grammar of the line on a PR body are decidable (regex over `gh pr view <n> --json body`, never the squash message, which GitHub hard-wraps at ~72 columns), and the population is decidable from the diff; the TRUTH of the one-line read is not — a wrong 'none needed' reads like a right one"
934
+ verification:
935
+ disposition: audit
936
+ owner: stacy
937
+ check_state: none
938
+ checks: []
939
+ # Population (Peter's ruling (iii), 2026-09-28): every PR whose diff touches a trigger surface —
940
+ # governance/**, .kiro/steering/**, .kiro/docs/ballots/**, canonical/agents/**, a spec's
941
+ # requirements.md or design.md, a spec's tasks.md other than checkbox-only hunks,
942
+ # canonical/adjudications.yaml.
943
+ # Checkbox-only classifier: every changed tasks.md line matches ^[-+]\s*- \[[ x]\] with the
944
+ # rest of the line unchanged.
945
+ # Grammar: ^\*\*Consulted\*\*: (?:none needed — .+|(?:Ada|Lina|Thurgood|Stacy|Leonardo|Sparky|Kenya|Data) — [^;]+(?:; (?:Ada|Lina|Thurgood|Stacy|Leonardo|Sparky|Kenya|Data) — [^;]+)*)$
946
+ # The claims pass reads: presence + grammar on the population; the 'none needed' COUNT on
947
+ # trigger-surface PRs (the anomaly), overall rate as baseline only; a spot-check fraction
948
+ # tracing each named read to a committed record — untraced reads counted SELF-ATTESTED, not
949
+ # findings. Never a gate. Mechanizable as a PR-body lint; not proposed (a new required
950
+ # context is Peter's). The M2 (Class option) half: Peter at reading only — not audited.
951
+ # Residual: trigger (a) on CODE surfaces is outside the path list — checked only in messages
952
+ # and briefs; owned-artifact-authorship governs authorship there.
953
+ education:
954
+ disposition: "ONE HOME: .kiro/steering/Agent-Directory.md § 'Primary Agent (Orchestrator)' (the 'Leave the record' paragraph, shared with owned-artifact-authorship's ONE HOME). LAW RECORD: .kiro/docs/ballots/2026-09-28-orchestrator-consult-first.md §§ 2–4. AUDIT HOME: Stacy's charter counting block, item 'orchestrator consult line' (ballot edit site 4)"
955
+ history:
956
+ - { date: 2026-09-28, change: "entry created by the orchestrator consult-first ballot (.kiro/docs/ballots/2026-09-28-orchestrator-consult-first.md), RATIFIED by Peter 2026-09-28, population fork (iii) as both seats recommended (record-first). ORIGIN: Peter's proposal (consult the appropriate agents when evaluating options; present at least one holistic, vetted option). Evidence: four skipped consults in one day, each changing the plan (#219 x2, #225, #226/#228). The subject (the orchestrator) was consulted and did not author; Stacy R1 changes incorporated at THURGOOD R2. The disposition audit value follows the tasks-row-write-scope-grant precedent (register schema-currency note). Non-substring sweep at authoring: 33 live ids + this one, relations 0, dupes 0", by: thurgood }
957
+ ```
958
+
959
+ ### parent-instrument-existence
960
+
961
+ ```yaml
962
+ rule: "Before a parent's first subtask starts, its PRIMARY commits the parent's Instruments block (one row per instrument each success criterion's evidence depends on: exists with a fit clause / built here / MISSING and routed, a MISSING row never overwritten); any MISSING stops the dependent subtasks before code; later-found gaps are appended by kind (unlisted / misfit), never silently fixed; the parent completion doc carries the fixed-form **Instruments**: line naming the block"
963
+ boundary_call:
964
+ class: functional
965
+ rationale: "Presence, grammar, arithmetic, own-path, exists-row sha resolution and line-vs-block count agreement are decidable; whether an 'exists' row's fit clause is TRUE, and whether the block is complete, are not — a shallow block reads like a thorough one until a gap surfaces, which the unlisted and misfit counts record"
966
+ verification:
967
+ disposition: audit
968
+ owner: stacy
969
+ check_state: none
970
+ checks: []
971
+ # Grammar: ^\*\*Instruments\*\*: (?:none — success criteria declared none|(\d+) listed — exists (\d+) · built-here (\d+) · missing (\d+) · unlisted (\d+) — \.kiro/specs/[^/\s]+/completion/task-[0-9]+-instruments\.md)$
972
+ # Cross-checks: N = E + B + M over final-state rows; U = Found-later entries dated on or before the parent doc; the path
973
+ # names the doc's own spec + parent; each exists row's sha passes git cat-file -e <sha>:<path> and is an ancestor of the commit that wrote
974
+ # that state — the block's adding commit for an original row, the resolving commit for a → resolved state (commands / CI contexts: the defining file).
975
+ # The claims pass reads (Stacy's charter item 'The instruments read'): presence + grammar (missing vs malformed), the
976
+ # cross-checks, gaps by kind (unlisted / misfit) x source (self-reported / pass-found — pass-found gaps are recorded in
977
+ # the pass, never appended to the block); self-reported share = honesty signal; missing 0 · unlisted 0 beside a
978
+ # pass-found gap = ritual-stub signal. Never a gate.
979
+ # Binding: per-parent criteria mode; exclusions by name — the ratification commit lists the parents started but not merged at R
980
+ # (any subtask ticked or any completion doc committed on a unit branch, incl. a parent complete on an unmerged branch).
981
+ # Tasks-round precursor: Stacy's LENS question 6 (existence only, never fit).
982
+ # M4 (ballot § 4a; ruled 2026-09-29): plan-time **Instruments:** rows in tasks.md (exists @ review-base / built here — capability /
983
+ # built earlier — capability / none), no fit at plan; the execution file carries the pasted command-output existence delta, one
984
+ # fit line per stable row id, rows found at the cut, and Found later; a restated state/path, or a delta line without its command
985
+ # output, is malformed. Effective from the first tasks round after P (the parser PR's squash SHA); P and the specs still on M1's
986
+ # form are recorded in this history at P. The parser PR carries the primaryArtifacts-exclusion bite and the A-6 declared-row
987
+ # resolver (existence + order, never fit; advisory at the tasks round; binds nothing before P; first cut if the PR passes a day).
988
+ # Deferred (M3, owner thurgood): a tasks-round mechanical pass over criteria-named paths/commands — trigger: the first of
989
+ # (a) ten committed blocks, (b) the second unlisted-kind entry whose instrument the criterion named at the tasks round and
990
+ # which did not resolve at the review base. Retires LENS question 6 to reading its emissions.
991
+ education:
992
+ disposition: "ONE HOME: .kiro/steering/start-up-tasks.md item 8 (per fork F-3). FORMAT HOME: governance/completion-documentation-guide.md § 'The instruments line and block'. LAW RECORD: .kiro/docs/ballots/2026-09-28-parent-instrument-existence-check.md §§ 2-4. AUDIT HOME: Stacy's charter, § 'The claims-pass record', item 'The instruments read' (edit site 5). TASKS-ROUND HOME: Stacy's charter, the LENS trigger row, question 6 (edit site 5b)"
993
+ history:
994
+ - { date: 2026-09-29, change: "entry created by ballot 2026-09-28-parent-instrument-existence-check, RATIFIED by Peter 2026-09-29 (record-first). ORIGIN: Peter's direction after three instances in Spec 123 in four days (11.4 #220; Task 13 read-ahead; Task 14 → 15.0 amendment). Stacy required reviewer (R1 C1-C8 at THURGOOD R2; R2 A1-A4 at THURGOOD R3). Rulings: F-1 (a) + M4 (adopted on the seats' unanimous read), F-2 no, F-3 (a), A-6 (ii). Unbound by name: Spec 123 Tasks 13, 14, 15.", by: thurgood }
995
+ ```
996
+
997
+ ### signing-act-consistency
998
+
999
+ ```yaml
1000
+ rule: "A C1 signing or confirming act — a write by c1Seat(row) confined to the row's signature or confirmation sub-object (refuse included) and its sheet section, for a row on the branch's freshness stale list (taken before signing, re-taken per round, pasted into the PR) — needs no write grant; every other field is authoring; it is valid only if its whole chain holds (stale list; hunk and commit inside the signer's objects; signer = c1Seat = Agent:; exactly one subagent transcript created the commit; its meta and parent tool_use name the signer; its prompt_snapshot equals the spawn-time charter; each signed row's rendered line appears in a tool result; sampled judgment), and a missing link is never green; verify-signing-chain checks the git links in CI and the harness links on audit — consistency, not identity"
1001
+ boundary_call:
1002
+ class: functional
1003
+ rationale: "Per-surface realities are stated in scope[]. The git links (1-3) are decidable over git and the freshness sweep. The harness links (4-7) are decidable over the harness store, but the store is user-writable and its formats (prompt_snapshot, commit output) are unowned, so a complete chain is evidence of CONSISTENCY among records, never of identity. Link 8 (did the brief direct the outcome; does a blind fresh seat agree) is judgment and is only sampled"
1004
+ verification:
1005
+ disposition: scoped
1006
+ owner: thurgood
1007
+ # owner = who keeps the instrument true (the completion-criteria-parity precedent: for a barrier the decision IS the
1008
+ # check). The walk's VERDICTS are Stacy's to read and record (Q5); Peter walks Stacy-signed acts (the collapse-seat rule).
1009
+ scope:
1010
+ - surface: "git links 1-3: the stale-list bound, commit-grain containment (for a merge, a signing object — a row's signature, a sheet `## ` section or preamble, a record unit's canonicalHash — fails link 2 when its result equals no parent's version of it), signer = c1Seat = Agent: — verify-signing-chain --ci, one step of the existing required context 122-diff-guard"
1011
+ disposition: barrier
1012
+ check_state: armed
1013
+ checks: ["122-diff-guard (existing required check, no new context, EXPECTED_CONTEXTS unchanged) — step 'Signing chain — verify-signing-chain --ci (sweep first; links 1–3; never skips on noop)' at .github/workflows/agent-generator.yml:178, running npx tsx tools/agent-generator/regrounding/verify-signing-chain.ts --ci: the full freshness sweep first on every PR, then git links 1-3 over base.sha..head.sha (merge-base(main, head)..head on workflow_dispatch), link 1 decided per signing commit; fails loud on shallow or unreadable history; carries no noop condition (the C6 carve-out) and its own un-gated setup (checkout at fetch-depth: 0, Node, npm ci — lines 157-177)"]
1014
+ # Planned check identity, NOT populated (checks[] records identity, and counting it would over-count — the
1015
+ # completion-criteria-parity first-instance note): the step 'verify-signing-chain --ci' inside 122-diff-guard
1016
+ # (.github/workflows/agent-generator.yml); no new context, EXPECTED_CONTEXTS unchanged. Built under the grant issue
1017
+ # .kiro/issues/2026-10-01-verify-signing-chain-ci-step.md. NOT gated by the no-op probe (the C6 carve-out: the lock
1018
+ # may skip generation checks, never signing checks); runs the full freshness sweep; reads base.sha..head.sha at full
1019
+ # depth with its own un-gated setup (checkout at fetch-depth: 0, Node, npm ci — under noop the job's own setup steps are
1020
+ # skipped) and fails loud on shallow history. ORDER: the full freshness sweep runs FIRST on every PR, independent of the
1021
+ # floor; then the history walk, which prints rows checked and fails on zero when canonical/profiles/** is touched. Link 1
1022
+ # is decided per signing commit (a re-sign must move the pinned canonicalHash or renderedHash), never from head.
1023
+ # Arming: proposed -> armed in the fixing PR itself, only with F1-F14, F12' and the controls passing and the CI-path
1024
+ # bites (F9, F10, F11) recorded red on that PR's own runs (the publish-rail-guard same-commit precedent; if split, the
1025
+ # row stays proposed). THE FLIP POPULATES checks[] with the step's identity. ARMING fires at the fixing PR's merge into
1026
+ # U2b's unit branch (Stacy).
1027
+ rationale: "Set comparisons and string equality over git and the sweep's output — no judgment in the predicate. The fixtures (Stacy specifies, Thurgood builds): F1 trailer != signer, F2 no trailer, F3 two trailers, F4 hunk edits disposition or another seat's object, F5 a re-sign with canonicalHash/renderedHash unchanged, F6 a seat commit through a merged side branch (PASS), F7 a merge's conflict resolution edits a signature, F8 a later commit with a different trailer rewrites the hunk, F9 F1 under a refreshed lock (noop=true), F10 depth-1 checkout (fail loud), F11 a stale unit under a hand-computed matching lock, from a canonical edit touching no canonical/profiles/** path, F12 the 65563985 shape (a seat-trailered signing commit that also edits a path outside the seat's objects), F12' F12 split across two commits with the same trailer, F13 a conflicted merge whose signature-path result equals neither parent's blob, F14 a row staled only by merging main, then re-signed (PASS); controls: a clean assent and a clean refuse (PASS)"
1028
+ - surface: "harness links 4-7: the creating transcript (the lookup rule), meta agentType + parent tool_use, prompt_snapshot = charter at the spawn-time branch head (fallback: the charter blob at the parent of the seat's earliest commit; unresolvable -> record absent 6), each signed row's rendered line in a tool result — verify-signing-chain --audit --pr N (or --branch <unit-branch>), local, every act"
1029
+ disposition: audit
1030
+ check_state: none
1031
+ checks: []
1032
+ # Post-acceptance, never blocking. Reads refs/pull/N/head (survives the squash) and the harness store by agent-<id>.
1033
+ # LOOKUP RULE (Stacy's): a candidate is the first git log line after a SUCCESSFUL git commit in the same tool call (one
1034
+ # per pass in a loop), or the [<branch> <sha>] <subject> line printed by that git commit in the same tool call, showing
1035
+ # a prefix of the full SHA and the exact subject. SUCCESS EVIDENCE IS A CLOSED SET: (a) that commit's [<branch> <sha>]
1036
+ # line; (b) a git log joined by && or under set -e; anything else reads anomaly. From R, seat briefs commit as
1037
+ # git commit ... && git log -1 --format='%H %s'. One candidate in a
1038
+ # subagent transcript -> walk 5-7; candidates only in the main session -> FAIL; several -> anomaly; none -> record absent
1039
+ # (unanchored for a Kiro-run seat). REPORTING: one verdict per act from {anchored, unanchored, record absent, FAIL,
1040
+ # anomaly}, link-numbered, verbatim in the claims-pass record, never rolled up. Fixtures: H1 a rebased seat commit ->
1041
+ # record absent; H2a creator + a quoting transcript -> one candidate; H2b a quiet primary commit followed by the seat's
1042
+ # failed commit + '; git log -1' -> anomaly; H3 a main-session commit -> FAIL; H4 meta agentType != signer -> FAIL 5;
1043
+ # H5 prompt_snapshot != charter -> FAIL 6; H6 the row's rendered line absent -> FAIL 7; H7 meta missing -> record absent 5.
1044
+ # CADENCE: Stacy walks every PR merged since her last walk at MIDPOINT, CLOSEOUT and RELEASE, every act in it; Peter
1045
+ # walks Stacy-signed acts. MERGE-ONLY RULE (Lina's): seat commits enter a unit branch by --no-ff or fast-forward merge
1046
+ # only — never rebased, amended, cherry-picked, merge --squash-ed or re-committed.
1047
+ rationale: "Decidable over the harness store, but the store is writable by any local session and its formats are owned by no one here; a complete chain shows the records agree, not who typed. A format change reads loudly as record absent on every act"
1048
+ - surface: "link 8, judgment: check 4 (the brief did not direct the outcome) and the blind fresh seat — the J sample"
1049
+ disposition: audit
1050
+ check_state: none
1051
+ checks: []
1052
+ # J rate: every refuse; every flip (assent<->refuse or a changed surviving); >= 1 act per distinct non-Stacy signer seat
1053
+ # per PR; one blind assent per seat per render population, preferring full-survival assents. Check 4 is judged once per
1054
+ # brief or continuation, not per act. A blind-seat disagreement is 'divergent': never green, never a finding against the
1055
+ # first seat, counted. Peter samples Stacy-signed acts; written 'Peter sample (Stacy-signed): k / N', '0 / N' when empty,
1056
+ # never omitted. WIDENING: a FAIL, an anomaly, spawnDepth != 1 or an off-plan model sends that seat's acts in the PR to J;
1057
+ # in a pre-ratification observation walk widening is recorded, not run, and J runs at the base rate.
1058
+ rationale: "Judgment is not decidable; it is sampled, and a hollow assent is sampled, not prevented"
1059
+ education:
1060
+ disposition: "LAW HOME, single: .kiro/docs/ballots/2026-10-01-signing-act-chain.md §§ 2-6 (the rule, the chain, the instrument with its lookup and reporting rules and fixtures, the merge-only rule, the cadence and J, the one-time acts incl. the C6 carve-out). POINTER-GRADE: .kiro/issues/README.md rule 8 (one trailing clause). CARRIED RIDERS, NOT EDITED NOW (ballot § 11, F-2): the Task-Completion-Protocol 'Coherent Units' grant-bullet pointer rides the next TCP edit that already stales #coherent-units-the-merge-granularity (simulated on U2b: one TCP clause stales the operative set, Stacy's signature and the overlay — three acts by two seats); Stacy places the walk in her own charter at her discretion, in her own commit. AUDIT HOME until then: the claims-pass record of each MIDPOINT / CLOSEOUT / RELEASE. BOUNDARY: identity is owed by no one today; trigger (a)-(d) in the ballot § 8 charters it"
1061
+ history:
1062
+ - { date: 2026-10-01, change: "entry created by ballot 2026-10-01-signing-act-chain (DRAFT at authoring; in force at its ratification merge R = `2da74864` (#243) — the Status flip commit was recorded after that merge, discharging the recording defect the ballot's own Status line anticipated). ORIGIN: Peter's 2026-09-30 rulings — the merged authorization rule APPROVED in direction (consult 2: Stacy, Thurgood, Lina, Kenya; converged at round 2 on the function-derived form with Lina's stale-list bound and Stacy's audit); the condition that the rule carry identity assurance or an honest account of why it is out of reach; the direction to scale the six layers back. The holistic design (Thurgood R2 synthesis) APPROVED with Stacy's R2 residual (lookup rule, H2b, F12', A4 before U2b merges; check 4 per brief; pre-ratification observation) and Lina's (F13; merge-only) folded. Retires the A-round's A1 (-> --ci), A2 (gone), A3 scripted checks + 1c (-> --audit, every act), A3 judgment (-> J) and the step-up (-> the widening rule); A4 stays one-time. Owner thurgood (instrument); verdicts Stacy's. Non-substring sweep at authoring: 35 live ids + this one, relations 0, dupes 0. BALLOT ROUND (same day, pre-ratification): Stacy R1 APPROVE-WITH-AMENDMENTS folded at THURGOOD R2 — the closed success-evidence set and seat commit convention, F5 reworded, F11 extended, F14 and H4-H7 added, H2b reads anomaly, the sweep first on every PR with its own un-gated setup, the link-6 fallback, checks[] populated at the flip", by: thurgood }
1063
+ - { date: 2026-10-01, change: "ARMED at the fixing PR #245's merge into U2b (issue 2026-10-01-verify-signing-chain-ci-step step 5; ballot § 4.1). Bite evidence on the PR's own CI: F10 red run 36879685299; F11 red run 36880277736; F9 red via the stacked route, PR #246 closed unmerged, run 36885636467 (noop=true then FAIL link 3); final green 36880556269 with operative-set-freshness PASS 373 units. Fixtures: 30 by id, 59 Jest tests green on the U2b-merged tree. Stacy's ARMING read records the extent and the F9 extra-cause question.", by: thurgood }
1064
+ ```