@3fn/core 13.0.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/.kiro/agents/ada-prompt.md +80 -132
  2. package/.kiro/agents/ada-prompt.md.attribution.json +45 -0
  3. package/.kiro/agents/ada.json +44 -59
  4. package/.kiro/agents/ada.json.attribution.json +13 -0
  5. package/.kiro/agents/data-prompt.md +83 -74
  6. package/.kiro/agents/data-prompt.md.attribution.json +53 -0
  7. package/.kiro/agents/data.json +31 -38
  8. package/.kiro/agents/data.json.attribution.json +13 -0
  9. package/.kiro/agents/kenya-prompt.md +83 -72
  10. package/.kiro/agents/kenya-prompt.md.attribution.json +53 -0
  11. package/.kiro/agents/kenya.json +27 -35
  12. package/.kiro/agents/kenya.json.attribution.json +13 -0
  13. package/.kiro/agents/leonardo-prompt.md +176 -234
  14. package/.kiro/agents/leonardo-prompt.md.attribution.json +45 -0
  15. package/.kiro/agents/leonardo.json +28 -36
  16. package/.kiro/agents/leonardo.json.attribution.json +13 -0
  17. package/.kiro/agents/lina-prompt.md +110 -151
  18. package/.kiro/agents/lina-prompt.md.attribution.json +53 -0
  19. package/.kiro/agents/lina.json +46 -59
  20. package/.kiro/agents/lina.json.attribution.json +13 -0
  21. package/.kiro/agents/sparky-prompt.md +89 -72
  22. package/.kiro/agents/sparky-prompt.md.attribution.json +53 -0
  23. package/.kiro/agents/sparky.json +37 -37
  24. package/.kiro/agents/sparky.json.attribution.json +13 -0
  25. package/.kiro/agents/stacy-prompt.md +74 -48
  26. package/.kiro/agents/stacy-prompt.md.attribution.json +45 -0
  27. package/.kiro/agents/stacy.json +28 -30
  28. package/.kiro/agents/stacy.json.attribution.json +13 -0
  29. package/.kiro/agents/thurgood-prompt.md +94 -138
  30. package/.kiro/agents/thurgood-prompt.md.attribution.json +45 -0
  31. package/.kiro/agents/thurgood.json +31 -35
  32. package/.kiro/agents/thurgood.json.attribution.json +13 -0
  33. package/.kiro/steering/AI-Collaboration-Principles.md +3 -3
  34. package/.kiro/steering/Civitas-System-Overview.md +5 -5
  35. package/.kiro/steering/DesignerPunk-Systems-Overview.md +6 -6
  36. package/.kiro/steering/Task-Completion-Protocol.md +98 -17
  37. package/.kiro/steering/core-goals.md +3 -3
  38. package/.kiro/steering/personal-note.md +1 -1
  39. package/.kiro/steering/start-up-tasks.md +14 -3
  40. package/application-mcp-server/src/index.ts +26 -0
  41. package/dist/ComponentTokens.android.kt +1 -1
  42. package/dist/ComponentTokens.ios.swift +1 -1
  43. package/dist/ComponentTokens.web.css +1 -1
  44. package/dist/DesignTokens.android.kt +1 -1
  45. package/dist/DesignTokens.dtcg.json +8 -5
  46. package/dist/DesignTokens.figma.json +2 -2
  47. package/dist/DesignTokens.ios.swift +1 -1
  48. package/dist/DesignTokens.web.css +1 -1
  49. package/dist/android/DesignTokens.android.kt +1 -1
  50. package/dist/blend/OklchBlendCalculator.js +1 -0
  51. package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +13 -2
  52. package/dist/blend/ThemeAwareBlendUtilities.web.js +6 -1
  53. package/dist/browser/designerpunk.esm.js +22 -81
  54. package/dist/browser/designerpunk.esm.min.js +29 -32
  55. package/dist/browser/designerpunk.umd.js +22 -81
  56. package/dist/browser/designerpunk.umd.min.js +42 -45
  57. package/dist/browser/tokens.css +1 -1
  58. package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.js +24 -5
  59. package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +16 -28
  60. package/dist/components/core/Button-CTA/examples/BasicUsage.js +18 -43
  61. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +3 -15
  62. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +9 -58
  63. package/dist/components/core/Button-CTA/types.d.ts +0 -24
  64. package/dist/components/core/Button-CTA/types.js +6 -0
  65. package/dist/components/core/Input-Text-Base/types.d.ts +13 -1
  66. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +11 -2
  67. package/dist/generators/DTCGFormatGenerator.js +8 -0
  68. package/dist/integration/BuildErrorHandler.js +2 -2
  69. package/dist/ios/DesignTokens.ios.swift +1 -1
  70. package/dist/mcp/application-mcp.js +24 -0
  71. package/dist/mcp/docs-mcp.js +130 -15
  72. package/dist/mcp/product-mcp.js +25 -0
  73. package/dist/tokens/OpacityTokens.js +1 -1
  74. package/dist/tokens/semantic/BlendTokens.d.ts +10 -3
  75. package/dist/tokens/semantic/BlendTokens.js +17 -5
  76. package/dist/tokens/semantic/OpacityTokens.d.ts +4 -4
  77. package/dist/tokens/semantic/OpacityTokens.js +4 -4
  78. package/dist/types/ComponentTypes.d.ts +1 -1
  79. package/dist/types/generated/TokenTypes.d.ts +1 -1
  80. package/dist/types/generated/TokenTypes.js +1 -1
  81. package/dist/validators/StemmaTokenUsageValidator.js +3 -2
  82. package/dist/web/DesignTokens.web.css +1 -1
  83. package/governance/Component-Development-Guide.md +22 -12
  84. package/governance/Component-Development-Standards.md +2 -2
  85. package/governance/Component-Family-Avatar.md +0 -1
  86. package/governance/Component-Family-Badge.md +0 -1
  87. package/governance/Component-Family-Button.md +4 -17
  88. package/governance/Component-Family-Chip.md +0 -1
  89. package/governance/Component-Family-Container.md +0 -1
  90. package/governance/Component-Family-Data-Display.md +1 -2
  91. package/governance/Component-Family-Divider.md +1 -2
  92. package/governance/Component-Family-Form-Inputs.md +5 -5
  93. package/governance/Component-Family-Icon.md +1 -2
  94. package/governance/Component-Family-Loading.md +1 -2
  95. package/governance/Component-Family-Modal.md +1 -2
  96. package/governance/Component-Family-Navigation.md +0 -1
  97. package/governance/Component-Family-Progress.md +0 -1
  98. package/governance/Component-Inheritance-Structures.md +195 -76
  99. package/governance/Component-MCP-Document-Template.md +6 -5
  100. package/governance/Component-Primitive-vs-Semantic-Philosophy.md +1 -1
  101. package/governance/Component-Quick-Reference.md +33 -33
  102. package/governance/Component-Readiness-Status.md +54 -38
  103. package/governance/Component-Templates.md +32 -36
  104. package/governance/Contract-System-Reference.md +6 -6
  105. package/governance/MCP-Integration-Guide.md +1 -1
  106. package/governance/Process-Cross-Reference-Standards.md +31 -13
  107. package/governance/Process-Development-Workflow.md +49 -59
  108. package/governance/Process-File-Organization.md +24 -24
  109. package/governance/Process-Hook-Operations.md +19 -7
  110. package/governance/Process-Orchestration-Model-Selection.md +92 -0
  111. package/governance/Process-Spec-Planning.md +91 -39
  112. package/governance/Process-Task-Type-Definitions.md +80 -4
  113. package/governance/Product-Handoff-Protocol.md +2 -0
  114. package/governance/Rosetta-System-Architecture.md +6 -6
  115. package/governance/Test-Behavioral-Contract-Validation.md +38 -31
  116. package/governance/Test-Failure-Audit-Methodology.md +1 -1
  117. package/governance/Token-Family-Accessibility.md +1 -2
  118. package/governance/Token-Family-Blend.md +18 -16
  119. package/governance/Token-Family-Blur.md +0 -1
  120. package/governance/Token-Family-Border.md +1 -2
  121. package/governance/Token-Family-Color.md +0 -1
  122. package/governance/Token-Family-Glow.md +1 -2
  123. package/governance/Token-Family-Layering.md +0 -1
  124. package/governance/Token-Family-Motion.md +1 -2
  125. package/governance/Token-Family-Opacity.md +0 -1
  126. package/governance/Token-Family-Radius.md +1 -2
  127. package/governance/Token-Family-Responsive.md +1 -2
  128. package/governance/Token-Family-Shadow.md +1 -2
  129. package/governance/Token-Family-Sizing.md +0 -1
  130. package/governance/Token-Family-Spacing.md +1 -2
  131. package/governance/Token-Family-Typography.md +1 -2
  132. package/governance/Token-Governance.md +8 -8
  133. package/governance/Token-Quick-Reference.md +21 -21
  134. package/governance/Token-Resolution-Patterns.md +1 -1
  135. package/governance/Token-Semantic-Structure.md +1 -1
  136. package/governance/Web-Authoring-Standards.md +5 -5
  137. package/governance/browser-distribution-guide.md +1 -4
  138. package/governance/classification-map.md +368 -0
  139. package/governance/completion-documentation-guide.md +11 -8
  140. package/governance/component-meta-authoring-guide.md +1 -1
  141. package/governance/cross-platform-vs-platform-specific-decision-framework.md +1 -1
  142. package/governance/platform-implementation-guidelines.md +1 -1
  143. package/governance/release-management-system.md +2 -2
  144. package/governance/rosetta-system-principles.md +8 -6
  145. package/governance/stemma-system-principles.md +18 -17
  146. package/mcp-server/src/index.ts +24 -6
  147. package/mcp-server/src/indexer/DocumentIndexer.ts +119 -9
  148. package/mcp-server/src/indexer/__tests__/bare-id-crossrefs.test.ts +250 -0
  149. package/mcp-server/src/indexer/cross-ref-parser.ts +29 -1
  150. package/mcp-server/src/indexer/index-health.ts +27 -2
  151. package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +11 -26
  152. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +72 -5
  153. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +81 -24
  154. package/mcp-server/src/tools/list-cross-references.ts +2 -2
  155. package/package.json +23 -21
  156. package/src/__tests__/browser-distribution/css-bundling.test.ts +6 -4
  157. package/src/__tests__/console-allowlist.json +14 -0
  158. package/src/__tests__/console-fail-setup.ts +169 -0
  159. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +16 -0
  160. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +70 -17
  161. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +28 -0
  162. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +223 -16
  163. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +298 -0
  164. package/src/blend/OklchBlendCalculator.ts +3 -0
  165. package/src/blend/ThemeAwareBlendUtilities.android.kt +3 -0
  166. package/src/blend/ThemeAwareBlendUtilities.ios.swift +3 -0
  167. package/src/blend/ThemeAwareBlendUtilities.web.ts +9 -1
  168. package/src/blend/__tests__/InteractionStateAudit.test.ts +12 -9
  169. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +8 -0
  170. package/src/build/errors/__tests__/ErrorHandler.test.ts +5 -0
  171. package/src/build/workflow/__tests__/CICDIntegration.test.ts +12 -1
  172. package/src/cli/__tests__/init.test.ts +45 -11
  173. package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +1 -1
  174. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +121 -7
  175. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +3 -0
  176. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +15 -6
  177. package/src/components/core/Avatar-Base/contracts.yaml +11 -1
  178. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +24 -5
  179. package/src/components/core/Badge-Count-Base/contracts.yaml +1 -1
  180. package/src/components/core/Badge-Label-Base/contracts.yaml +1 -1
  181. package/src/components/core/Button-CTA/Button-CTA.schema.yaml +2 -12
  182. package/src/components/core/Button-CTA/README.md +3 -6
  183. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +35 -89
  184. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -2
  185. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -2
  186. package/src/components/core/Button-CTA/contracts.yaml +6 -29
  187. package/src/components/core/Button-CTA/examples/BasicUsage.html +2 -14
  188. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +17 -44
  189. package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +12 -20
  190. package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +12 -51
  191. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +2 -26
  192. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +18 -71
  193. package/src/components/core/Button-CTA/types.ts +10 -28
  194. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +13 -0
  195. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +13 -0
  196. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +13 -0
  197. package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +30 -2
  198. package/src/components/core/Input-Text-Base/README.md +25 -2
  199. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +16 -15
  200. package/src/components/core/Input-Text-Base/contracts.yaml +90 -0
  201. package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +26 -12
  202. package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +195 -59
  203. package/src/components/core/Input-Text-Base/types.ts +13 -1
  204. package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +5 -1
  205. package/src/components/core/Input-Text-Email/README.md +8 -7
  206. package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +1 -4
  207. package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +2 -16
  208. package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +10 -3
  209. package/src/components/core/Input-Text-Password/README.md +9 -8
  210. package/src/components/core/Input-Text-Password/contracts.yaml +5 -0
  211. package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +17 -7
  212. package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +22 -20
  213. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +11 -2
  214. package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +5 -1
  215. package/src/components/core/Input-Text-PhoneNumber/README.md +9 -8
  216. package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +2 -5
  217. package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +3 -17
  218. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  219. package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +1 -1
  220. package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +1 -1
  221. package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +1 -1
  222. package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +1 -1
  223. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +5 -2
  224. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +5 -2
  225. package/src/generators/DTCGFormatGenerator.ts +6 -0
  226. package/src/generators/__tests__/DTCGConfigOptions.test.ts +14 -5
  227. package/src/integration/BuildErrorHandler.ts +2 -2
  228. package/src/tokens/OpacityTokens.ts +1 -1
  229. package/src/tokens/__tests__/OpacityTokens.test.ts +3 -1
  230. package/src/tokens/semantic/BlendTokens.ts +26 -5
  231. package/src/tokens/semantic/OpacityTokens.ts +4 -4
  232. package/src/tools/release/__tests__/ReleasePipeline.test.ts +1 -1
  233. package/src/types/ComponentTypes.ts +1 -1
  234. package/src/types/generated/TokenTypes.ts +1 -1
  235. package/src/validators/StemmaTokenUsageValidator.ts +3 -2
  236. package/token-index/semantics.yaml +1 -2
@@ -8,8 +8,8 @@ description: Operational law for ending a task — when to write completion docs
8
8
  # Task Completion Protocol
9
9
 
10
10
  **Date**: 2026-06-29
11
- **Last Reviewed**: 2026-06-29
12
- **Purpose**: The end-of-task operational sequence (completion docs, tiers, parent vs. subtask, stop-and-wait) — operational law, always loaded
11
+ **Last Reviewed**: 2026-07-14
12
+ **Purpose**: The end-of-task operational sequence (completion docs, tiers, parent vs. subtask, stop-and-wait, PR flow) — operational law, always loaded
13
13
  **Organization**: process-standard
14
14
  **Scope**: cross-project
15
15
  **Layer**: 1
@@ -37,23 +37,99 @@ get_section({ path: "completion-documentation-guide", heading: "Documentation Ti
37
37
  1. [ ] Run targeted tests relevant to the change (not the full suite)
38
38
  2. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-M-completion.md`
39
39
  3. [ ] Mark subtask complete (use the `taskStatus` tool)
40
- 4. [ ] **STOP** and wait for user authorization
40
+ 4. [ ] **Commit is optional and judgment-based — not mechanical per subtask.** When you commit, **commit AND push the unit branch** (`task/<spec>-<unit-slug>` or `task/<spec>-<N>-<slug>`, created at the first subtask — `git switch -c` or the completion tooling's equivalent); the two stay coupled because the push is the off-machine backup guarantee (a local-only commit is not backed up). Commit-and-push at a **checkpoint** (delicate or potentially-breaking work — a restore point worth having), when **backup-worthy work has accumulated** (a unit branch is longer-lived than a single task, so more unpushed work sits at risk between merges — push before the pile grows), or at a **session/handoff boundary**. Do NOT commit mechanically after every trivial subtask — the unit squash-merges anyway, so subtask granularity is cosmetic to `main`'s history. No PR opens and no required checks fire until unit completion. Subtasks do NOT open PRs. Never commit to `main`.
41
+ 5. [ ] **STOP** and wait for user authorization
41
42
 
42
43
  ### For PARENT TASKS (Implementation or Architecture type)
43
- 1. [ ] Run full validation (`npm test`) — see Start Up Tasks for test-command selection
44
- 2. [ ] Mark parent task complete (use the `taskStatus` tool) **AFTER** validation passes
45
- 3. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-completion.md`
46
- 4. [ ] Create summary doc: `docs/specs/[spec]/task-N-summary.md`
47
- 5. [ ] Commit changes: `./.kiro/hooks/commit-task.sh "Task N Complete: Description"` (runs release analysis automatically)
48
- 6. [ ] **STOP** and wait for user authorization
44
+ 1. [ ] Local validation: the unit PR's required checks run the full suite at the gate — validating locally first catches failures before they block the merge (test-command selection: Start Up Tasks)
45
+ 2. [ ] Mark parent task complete (use the `taskStatus` tool) — the status change commits with the work and takes effect at merge; a failing suite blocks that merge at the gate
46
+ 3. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-completion.md` (on the task branch)
47
+ 4. [ ] Create summary doc: `docs/specs/[spec]/task-N-summary.md` (on the task branch)
48
+ 5. [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."`.
49
+ - **If this parent IS its own merge unit** (a standalone task, or a small single-unit spec): the tooling opens the PR and reports the URL.
50
+ - **If this parent is one of several in a declared multi-parent unit** (see the spec's tasks.md unit grouping): the tooling commits the completion+summary docs on the branch — **no PR yet**. The PR opens when the UNIT completes (its final/gating parent).
51
+ 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR; never push to `main`.
49
52
 
50
53
  ### For PARENT TASKS (Setup or Documentation type)
51
54
  1. [ ] Verify artifacts created/updated as specified
52
55
  2. [ ] Mark parent task complete (use the `taskStatus` tool)
53
- 3. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-completion.md`
54
- 4. [ ] Create summary doc: `docs/specs/[spec]/task-N-summary.md`
55
- 5. [ ] Commit changes: `./.kiro/hooks/commit-task.sh "Task N Complete: Description"` (runs release analysis automatically)
56
- 6. [ ] **STOP** and wait for user authorization
56
+ 3. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-completion.md` (on the task branch)
57
+ 4. [ ] Create summary doc: `docs/specs/[spec]/task-N-summary.md` (on the task branch)
58
+ 5. [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."`.
59
+ - **If this parent IS its own merge unit**: the tooling opens the PR and reports the URL.
60
+ - **If this parent is one of several in a declared multi-parent unit** (spec's tasks.md unit grouping): the tooling commits the completion+summary docs on the branch — **no PR yet**; the PR opens at UNIT completion.
61
+ 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR; never push to `main`.
62
+
63
+ ---
64
+
65
+ ## Completion State in the PR Flow
66
+
67
+ *Law source: the ratified workflow-law ballot (Spec 125-A Task 1 — `.kiro/specs/125-A-pr-gate-mechanical-arming/task-1-workflow-ballot.md`, RATIFIED Peter, 2026-07-05).*
68
+
69
+ Branch → PR → required checks → merge.
70
+
71
+ **The merge unit is the coherent unit.** A PR carries a **coherent unit** — the smallest chunk of a spec's work that is coherent on its own AND reviewable as a single diff. For a small spec the unit is the whole spec (one PR). For a large spec the units are **declared in that spec's own tasks.md** as a task grouping (e.g., a substrate group / each per-agent cutover / a closeout) — named up front, never judged at merge time. One branch per unit; the unit's completion opens the PR; Peter merges the unit.
72
+
73
+ 1. Work happens on a **task branch**, never on `main`. The branch is created at the task's first subtask (or at task start): plain `git switch -c task/<spec>-<N>-<slug>`, or the completion tooling's equivalent.
74
+ 2. **Subtask mechanics** (one rule — commit method, push semantics, branch creation, PR timing): subtask commits are **optional and judgment-based, not mechanical per subtask** — and when made, they **commit AND push the branch** with plain git (the two stay coupled; the push is the off-machine backup). Commit-and-push at a **checkpoint** (delicate or potentially-breaking work), when **backup-worthy work has accumulated** (a unit branch is longer-lived than a single task — push before the unpushed pile grows), or at a **session/handoff boundary** — not after every trivial subtask, since the unit squash-merges anyway and subtask granularity is cosmetic to `main`. No PR opens and no required checks fire until unit completion; subtasks do NOT open PRs.
75
+ **AMENDED FROM THE OLD FLOW — a deliberate process change (Peter, 2026-07-05), not a carry-over.** Under the outgoing law, subtasks had NO commit/push step at all: the commit+push hook fired at PARENT completion only, so subtask work stayed local until the parent finished. Subtask commits-and-pushes are NEW behavior, justified forward-looking: (a) branches remove the old reason not to push — nothing lands on `main`; (b) a pushed branch is off-machine backup of in-progress work; (c) optional visibility for Peter on GitHub; (d) zero cost — pre-PR branch pushes trigger no pull_request workflows, and post-PR pushes re-running checks is already the change-request/failed-check resume path (points 7–8 below).
76
+ **Hook ergonomics**: one completion command, context-aware (`./.kiro/hooks/complete-task.sh`) — invoked for a subtask (at a judgment-based checkpoint, not mechanically) it commits and pushes the branch (no PR); invoked for a parent that is NOT the unit's final parent it commits the completion docs on the branch (no PR); invoked at **unit completion** (a single-parent unit, or the final/gating parent of a multi-parent unit) it commits, pushes, and opens the PR.
77
+ 3. **Dependent tasks branch from `main` after the prior task's PR merges.** Starting a dependent task before the prior merge is not sanctioned by default — this composes with stop-and-wait (Peter's go for the next task typically follows his merge of the prior one), so the wait costs nothing in practice. Exception, only on Peter's explicit direction: branch from the prior task branch and declare `Stacked-on: #<PR>` in the PR body; stacked PRs merge in base-first order.
78
+ 4. At **unit** completion (a standalone task, a small single-unit spec, or the final/gating parent of a declared multi-parent unit), the tooling commits, pushes the branch, **opens a PR**, and reports the PR URL. A parent completing *inside* a multi-parent unit commits its completion+summary docs on the branch and does NOT open a PR — its acceptance is the unit's merge.
79
+ 5. Required checks run on the PR. A failing check blocks merge at the platform.
80
+ 6. **Peter merges on green** (see The Merge Rule below). **Squash-merge is the ONLY merge method** — the repository is configured to allow squash-merge only (method drift closed by configuration, not convention). The PR collapses to one commit on `main`, preserving the atomic-commit-per-task history the release tool scans; the PR title becomes the commit subject.
81
+ 7. Direct pushes to `main` are rejected by branch protection, **admins included**.
82
+
83
+ **A task is complete at MERGE, not at PR-open.** The PR is the submission; the merge is the acceptance.
84
+
85
+ 1. The agent finishes the work and runs tier-appropriate validation locally.
86
+ 2. Completion documentation (and the summary doc, for parent tasks) is written **on the task branch** — it traverses the gate with the work it documents.
87
+ 3. The agent marks the task complete (`taskStatus` tool / tasks.md checkbox) **on the branch** — the status change is part of the work product and lands with it. For a parent *inside* a multi-parent unit this happens at parent completion (docs + status on the branch, no PR); for the unit's final parent it happens before the PR opens. Until the UNIT merges, every such status is an assertion awaiting acceptance, not a fact about `main`.
88
+ 4. The agent opens the PR, **reports the PR URL, and STOPS.** Opening a PR is submission for authorization, not completion.
89
+ 5. **Peter's merge is the authorization act.** It accepts the whole UNIT — every task in it AND their completion claims — into `main` in one platform-verified action. A parent task inside a multi-parent unit is **done-on-branch** at its own completion and **accepted at the unit's merge**; the unit merge is the single acceptance event.
90
+ 6. **Stop-and-wait composes unchanged**: authorization to START the next task remains a separate, explicit grant (Start Up Tasks #3). A merge accepts the finished task; it does not, by itself, instruct the agent to begin the next one. Direction for what follows typically arrives with or after the merge; absent it, the agent remains stopped.
91
+ 7. **A change request is authorization to resume, not a completion.** If Peter reviews the PR and requests changes instead of merging, the change request authorizes the agent to resume on that branch: fix, push, re-report the PR URL, and STOP again.
92
+ 8. If required checks fail, the task is not complete and not mergeable: fix on the same branch. If the PR is green but unmergeable (the branch conflicts with an advanced `main`), update the branch from `main` on the same branch. Every push re-runs the checks.
93
+ 9. **A checks-only merge is NOT ratification.** For governance-law changes, the record-first ballot protocol (`.kiro/docs/ballots/README.md`) remains the ratification mechanism throughout 125-A — the gate verifies mechanics, not authority. PR-approval-as-ratification arrives with 125-B's CODEOWNERS layer.
94
+
95
+ ### Coherent Units (the merge granularity)
96
+
97
+ - **What a unit is**: the smallest chunk of a spec that is coherent on its own AND reviewable as a single diff. The merge of a unit's PR is the completion event for every task the unit contains.
98
+ - **Small spec → one unit → one PR** (the default and common case; equals the 125-A single-parent behavior).
99
+ - **Large spec → units DECLARED in tasks.md**: the spec's tasks.md names its units as a task grouping (substrate / each cutover / closeout, etc.). Units are named up front and reviewed in the tasks feedback round — never judged at merge time.
100
+ - **One branch per unit**: subtasks commit+push the branch at judgment-based checkpoints (not mechanically per subtask); parent completions commit their docs on the branch; the unit's completion opens the PR; Peter merges (squash).
101
+ - **Dependent units branch from `main` after the prior unit's PR merges** — the unit is the dependency grain (stacking only on Peter's explicit direction, `Stacked-on: #<PR>`).
102
+ - **On merge, the unit's branch is deleted** (remote auto-deleted by repo setting; local deleted on return to `main`); stale/unmerged branches are swept in the monthly Civitas health check — see § "Branch Cleanup".
103
+
104
+ ### Branch Cleanup
105
+
106
+ 125-A left branch lifecycle-end unspecified. Longer-lived unit branches make that gap costly, so cleanup is a first-class rule:
107
+
108
+ - **On merge — remote branch auto-deleted.** GitHub's **"Automatically delete head branches"** repo setting is enabled, so every squash-merge removes the merged unit's remote branch. This is a **repo Settings toggle Peter enables** (Settings → General), a config action like branch protection and squash-only — not something an agent commits.
109
+ - **On merge — local branch deleted.** On returning to `main` after a merge, the completion tooling / agent deletes the merged local unit branch (`git branch -d <branch>`).
110
+ - **Stale/unmerged branches** (abandoned or superseded units) are pruned as part of the **monthly Civitas health check** (Thurgood's cadence). This prevents the failure mode where one long-lived branch quietly accumulates unrelated later work into a tangled divergence from `main`.
111
+ - **Tooling follow-up (optional)**: `complete-task.sh` may auto-prune the local unit branch once it detects the merge — a convenience, not a hard requirement; the manual `git branch -d` step is not blocked on it.
112
+
113
+ ### Branch and PR Conventions
114
+
115
+ - **The `<spec>` token, defined once**: everywhere in this law, `<spec>` is the **spec ID** — the leading identifier segment of the spec directory name (`125-A` from `125-A-pr-gate-mechanical-arming`; `052` from `052-badge-count-base`). Branch names and PR titles use the spec ID; the PR body's `Spec:` field carries the full directory name.
116
+ - **Branch names**: `task/<spec>-<task-number>-<short-slug>` for spec tasks (e.g., `task/125-A-2-commit-task-rework`, `task/052-4-web-implementation`); `fix/<slug>` or `chore/<slug>` for non-spec work.
117
+ - **PR title** = the commit-message standard, spec-suffixed: `Task <N> Complete: <Description> (<spec>)` (e.g., `Task 2 Complete: Rework task tooling for PR flow (125-A)`). Because squash-merge makes the title the commit subject, title discipline IS commit-message discipline.
118
+ - **PR body** MUST carry: `Spec:` (spec directory name), `Task:` (task number + name), `Agent:` (authoring agent, or `Peter` for human-direct work), path(s) to the completion doc(s) on the branch, and a one-line validation note (which tier/commands ran locally).
119
+ - **Unit-grain naming (multi-parent units)**: a unit spanning multiple parents uses a unit slug — branch `task/<spec>-<unit-slug>` (e.g., `task/122-substrate`, `task/122-cutover-ada`); PR title `<Unit description> (<spec>)`. A single-parent unit keeps the unchanged `task/<spec>-<N>-<slug>` branch and `Task <N> Complete: <Description> (<spec>)` title.
120
+ - **PR body** additionally carries a `Unit:` field (the declared merge unit, or the task for single-parent units) alongside the existing `Spec:` / `Task:` / `Agent:` / completion-doc-path / validation-note fields.
121
+
122
+ ### The Merge Rule
123
+
124
+ - **Agents open PRs; Peter merges on green** during bake-in (Spec 125-A Task 5's gate). Agents NEVER merge their own PRs and NEVER push to `main`.
125
+ - Any later **delegation of merge-on-green must be a recorded rule** (ballot or committed record with date and scope) — never a verbal grant. The relayed-authority lesson: authority is a record.
126
+ - **Standing carve-out, surviving any delegation**: PRs touching governance law (`governance/**`, `.kiro/steering/**`, `.kiro/docs/ballots/**`, agent prompts/configs) stay Peter-merged — the closest ratification proxy until 125-B's CODEOWNERS layer.
127
+
128
+ ### Emergency Procedure
129
+
130
+ When the gate must be bypassed (broken gate, urgent fix the checks themselves block): **Peter temporarily lifts branch protection in Settings → Branches, performs the change, re-enables protection immediately, and logs the use in 125-A's findings ledger** with entry type `EMERGENCY-BYPASS`: date, reason, what was pushed, protection-off duration, and the follow-up PR if the change needs regularizing. No agent may request the lift as a convenience path; repeated use of the emergency path for non-emergencies is itself a findings-ledger entry.
131
+
132
+ **In-repo rollback is not exempt**: rollback procedures illustrated in the release-tool consumer docs end in `git push origin main` — valid for consumer repos, rejected in this repo. An in-repo rollback traverses a PR or this emergency path.
57
133
 
58
134
  ---
59
135
 
@@ -67,7 +143,12 @@ get_section({ path: "completion-documentation-guide", heading: "Documentation Ti
67
143
 
68
144
  ## Key Rules
69
145
 
70
- - **Implementation / Architecture tasks**: validation MUST pass before marking complete.
71
- - **All parent tasks**: create BOTH the completion doc AND the summary doc.
72
- - **All tasks**: STOP after completion — never auto-proceed to the next task. Authorization to START the next task is governed by Start Up Tasks.
73
- - **Parent vs. subtask** is the load-bearing distinction: subtasks get targeted tests + a completion doc; parents get full validation + completion doc + summary doc + commit.
146
+ - **Implementation / Architecture tasks**: the unit's required checks enforce a green suite at merge — local validation before completion catches failures early.
147
+ - **All parent tasks**: create BOTH the completion doc AND the summary doc, on the task branch.
148
+ - **All tasks**: STOP after completion — never auto-proceed to the next task. Authorization to START the next task is governed by Start Up Tasks; the merge that completes this task is not that authorization.
149
+ - **Parent vs. subtask** is the load-bearing distinction: subtasks get targeted tests + a completion doc + an **optional, judgment-based** branch commit-and-push (at a checkpoint, on backup-worthy accumulation, or at a session/handoff boundary — not mechanically per subtask); parents get full validation + completion doc + summary doc, committed on the branch.
150
+ - **The merge unit is the coherent unit** — the smallest chunk that is coherent-on-its-own AND reviewable as a single diff, DECLARED in the spec's tasks.md (a small spec = one unit = one PR; a large spec declares internal units). The unit's completion opens the PR; a parent inside a multi-parent unit is done-on-branch, accepted at the unit's merge.
151
+ - **A task is accepted at the MERGE of its unit.** Agents open PRs at unit completion; Peter merges on green. Never merge your own PR; never push to `main` (branch protection rejects it, admins included).
152
+ - **On merge, the unit's branch is cleaned up** — remote auto-deleted by repo setting; local deleted on return to `main`; stale/unmerged branches swept in the monthly Civitas health check.
153
+ - **A checks-only merge is NOT ratification**: governance-law changes still ratify via the record-first ballot protocol (`.kiro/docs/ballots/README.md`).
154
+ - **Delegated-tier capture (exception-based)**: if the agent/model that actually did the work **diverged** from the task's planned `**Agent**: <agent> (<Model>)` — a different tier, or additional agents pulled in — record the delta and a one-line reason in the completion doc. A plan that held needs no note. This is a cheap data-point, **not** a justification to defend (overriding a stale or rote stamp is the *correct* move) — it feeds model-tier recalibration and process audits. Agent-evolution (routing/scope estimate was off) and model-evolution (cognitive-demand estimate was off) are distinct signals — note which. See `process-orchestration-model-selection`.
@@ -6,7 +6,7 @@ inclusion: always
6
6
  # Core Goals
7
7
 
8
8
  **Date**: 2025-10-20
9
- **Last Reviewed**: 2026-01-05
9
+ **Last Reviewed**: 2026-07-05
10
10
  **Purpose**: Core project context and development practices for DesignerPunk design system
11
11
  **Organization**: process-standard
12
12
  **Scope**: cross-project
@@ -38,8 +38,8 @@ DesignerPunk is a True Native cross-platform design system with mathematical fou
38
38
 
39
39
  **Task Completion:**
40
40
  - Follow systematic workflow with automated git integration
41
- - Use hook system: `./.kiro/hooks/commit-task.sh "Task Name"`
42
- - Repository: https://github.com/3fn/DesignerPunkv2 (single-branch workflow on main)
41
+ - Complete tasks via the PR flow: `./.kiro/hooks/complete-task.sh "Task Name"` opens the task PR; Peter merges on green — the merge is the authorization act (see Task-Completion-Protocol)
42
+ - Repository: https://github.com/3fn/DesignerPunk (PR-gated workflow: branch protection on `main`, admins included)
43
43
 
44
44
  **For detailed workflow guidance, see:**
45
45
  - Task completion: `Process-Development-Workflow.md` (Layer 2)
@@ -6,7 +6,7 @@ inclusion: always
6
6
  # Personal Note
7
7
 
8
8
  **Date**: 2025-10-20
9
- **Last Reviewed**: 2025-12-15
9
+ **Last Reviewed**: 2026-07-09
10
10
  **Purpose**: Collaboration principles and partnership values for Human-AI collaboration
11
11
  **Organization**: process-standard
12
12
  **Scope**: cross-project
@@ -8,7 +8,7 @@ description: Essential pre-task checklist — date verification, governance heal
8
8
  # Start Up Tasks
9
9
 
10
10
  **Date**: 2025-10-20
11
- **Last Reviewed**: 2026-07-03
11
+ **Last Reviewed**: 2026-07-09
12
12
  **Purpose**: Essential pre-task checklist for every task (date check, governance health, Jest commands, test selection, authorization-to-start). End-of-task sequence: see Task Completion Protocol.
13
13
  **Organization**: process-standard
14
14
  **Scope**: cross-project
@@ -19,7 +19,7 @@ description: Essential pre-task checklist — date verification, governance heal
19
19
 
20
20
  2. **Civitas Governance Health Check**
21
21
 
22
- IF it's been >30 days since last governance health check **[2026-06-29]**, THEN flag: "Governance health check overdue — Thurgood (Civitas steward) should run the monthly health check before proceeding."
22
+ IF it's been >30 days since last governance health check **[2026-08-02]**, THEN flag: "Governance health check overdue — Thurgood (Civitas steward) should run the monthly health check before proceeding."
23
23
 
24
24
  *Only Thurgood runs the health check. All agents check the date and flag if overdue.*
25
25
 
@@ -107,7 +107,18 @@ description: Essential pre-task checklist — date verification, governance heal
107
107
 
108
108
  **Default assumption**: Use `npm test` for parent tasks unless working on release tool or performance systems.
109
109
 
110
- 6. **Ending a task: see Task Completion Protocol**
110
+ 6. **Model-tier calibration — when this task will delegate to subagents**
111
+
112
+ Before delegating to a subagent, choose its model tier by the task's cognitive demand — do NOT let it silently inherit the session model:
113
+ - **Implementing** an already-settled design/spec/contract → the cheaper capable tier (currently **Sonnet**).
114
+ - **Deciding** — architecture, consequential/hard-to-reverse calls, cross-cutting tradeoffs, multiple failure modes → the higher tier (currently **Opus**). An escalation on a concrete signal, not a default-when-unsure.
115
+ - Calibrate in BOTH directions relative to the session model: **downgrade** for implementation, **upgrade** for a decide task. Omitting the tier inherits the session's — a silent default, so decide it consciously.
116
+ - **Always independently verify subagent output** before trusting it — delegate-then-verify is the guardrail, not the tier.
117
+ - **Verify placement, not just content**, when you delegate a **file edit**: hand the subagent **absolute paths** to the intended tree, and after it reports done **confirm the edit landed there** (a subagent can act on a different working tree and still report success — in Claude Code, nested worktrees let its relative paths resolve into the parent repo).
118
+
119
+ Full policy + per-harness field mechanics: query `process-orchestration-model-selection` via the docs MCP.
120
+
121
+ 7. **Ending a task: see Task Completion Protocol**
111
122
 
112
123
  The end-of-task sequence (when to write completion docs, which tier, the parent-vs-subtask distinction, and the stop-and-wait-for-authorization rule) is **operational law in the always-loaded Task Completion Protocol** — it is already in context. Follow it when completing any task or subtask.
113
124
 
@@ -363,6 +363,32 @@ class ComponentMCPServer {
363
363
  this.stalenessGate.markIndexed();
364
364
  await this.server.connect(transport);
365
365
  console.error(`[${SERVER_NAME}] Server running on stdio`);
366
+ this.setupShutdownHandlers();
367
+ }
368
+
369
+ /**
370
+ * Self-exit on stdin EOF and fatal signals. A stdio MCP server whose parent client
371
+ * died (or gracefully closed the pipe) has no one to serve, but the file watcher
372
+ * keeps the event loop alive forever — found live at Spec 122 U3 (~230 orphaned
373
+ * servers accumulated across harness runs). Exiting on EOF also makes graceful
374
+ * client closes immediate: the MCP SDK's StdioClientTransport.close() ends stdin
375
+ * and waits up to 2s for exactly this exit before escalating to SIGTERM.
376
+ */
377
+ private setupShutdownHandlers(): void {
378
+ let shuttingDown = false;
379
+ const shutdown = async (): Promise<void> => {
380
+ if (shuttingDown) return;
381
+ shuttingDown = true;
382
+ console.error(`[${SERVER_NAME}] Shutting down...`);
383
+ this.fileWatcher.stop();
384
+ await this.server.close();
385
+ process.exit(0);
386
+ };
387
+
388
+ process.on('SIGINT', shutdown);
389
+ process.on('SIGTERM', shutdown);
390
+ process.stdin.on('end', shutdown);
391
+ process.stdin.on('close', shutdown);
366
392
  }
367
393
 
368
394
  private registerHandlers(): void {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Component Tokens
3
- * Generated: 2026-07-05T14:35:59.916Z
3
+ * Generated: 2026-08-12T03:23:17.012Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  *
@@ -1,6 +1,6 @@
1
1
  ///
2
2
  /// DesignerPunk Design System - Component Tokens
3
- /// Generated: 2026-07-05T14:35:59.916Z
3
+ /// Generated: 2026-08-12T03:23:17.012Z
4
4
  /// Version: 1.0.0
5
5
  /// Platform: iOS (Swift Constants)
6
6
  ///
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Component Tokens
3
- * Generated: 2026-07-05T14:35:59.916Z
3
+ * Generated: 2026-08-12T03:23:17.012Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Web (CSS Custom Properties)
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Android Tokens
3
- * Generated: 2026-07-05T14:35:59.902Z
3
+ * Generated: 2026-08-12T03:23:16.999Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  */
@@ -3,8 +3,8 @@
3
3
  "$extensions": {
4
4
  "designerpunk": {
5
5
  "version": "1.0.0",
6
- "generatedAt": "2026-07-05T14:35:59.917Z",
7
- "rosettaVersion": "13.0.0"
6
+ "generatedAt": "2026-08-12T03:23:17.012Z",
7
+ "rosettaVersion": "14.0.0"
8
8
  }
9
9
  },
10
10
  "space": {
@@ -1742,7 +1742,7 @@
1742
1742
  "opacity048": {
1743
1743
  "$value": 0.48,
1744
1744
  "$type": "number",
1745
- "$description": "Disabled state - faded, very strong overlay",
1745
+ "$description": "Very strong transparency - background scrims and modal overlays (referenced by opacity.heavy)",
1746
1746
  "$extensions": {
1747
1747
  "designerpunk": {
1748
1748
  "formula": "base × 6 = 0.08 × 6 = 0.48",
@@ -3695,13 +3695,16 @@
3695
3695
  "blend.disabledDesaturate": {
3696
3696
  "$value": "{blend.blend300}",
3697
3697
  "$type": "number",
3698
- "$description": "Blend for disabled states with desaturation (12% less saturated) - creates muted, inactive appearance indicating non-interactive state",
3698
+ "$description": "DEPRECATED (2026-07-15): DesignerPunk does not support disabled states — if an action is unavailable, do not render the component. Formerly: blend for disabled states with desaturation (12% less saturated). Scheduled for removal in the next major version.",
3699
3699
  "$extensions": {
3700
3700
  "designerpunk": {
3701
3701
  "family": "blend",
3702
3702
  "primitiveRefs": {
3703
3703
  "value": "blend300"
3704
- }
3704
+ },
3705
+ "deprecated": true,
3706
+ "deprecatedSince": "2026-07-15",
3707
+ "deprecatedReason": "No-disabled-states philosophy holds corpus-wide (Button-CTA adjudication, 2026-07-15). Unavailable actions should not be rendered; state_loading covers in-flight async actions."
3705
3708
  }
3706
3709
  }
3707
3710
  },
@@ -1455,7 +1455,7 @@
1455
1455
  "dark": 0.48,
1456
1456
  "wcag": 0.48
1457
1457
  },
1458
- "description": "Disabled state - faded, very strong overlay | Formula: base × 6 = 0.08 × 6 = 0.48"
1458
+ "description": "Very strong transparency - background scrims and modal overlays (referenced by opacity.heavy) | Formula: base × 6 = 0.08 × 6 = 0.48"
1459
1459
  },
1460
1460
  {
1461
1461
  "name": "opacity/056",
@@ -3673,7 +3673,7 @@
3673
3673
  "aliasOf": "blend/300"
3674
3674
  }
3675
3675
  },
3676
- "description": "Blend for disabled states with desaturation (12% less saturated) - creates muted, inactive appearance indicating non-interactive state"
3676
+ "description": "DEPRECATED (2026-07-15): DesignerPunk does not support disabled states — if an action is unavailable, do not render the component. Formerly: blend for disabled states with desaturation (12% less saturated). Scheduled for removal in the next major version."
3677
3677
  },
3678
3678
  {
3679
3679
  "name": "blend/containerHoverDarker",
@@ -1,6 +1,6 @@
1
1
  ///
2
2
  /// DesignerPunk Design System - iOS Tokens
3
- /// Generated: 2026-07-05T14:35:59.899Z
3
+ /// Generated: 2026-08-12T03:23:16.997Z
4
4
  /// Version: 1.0.0
5
5
  /// Platform: iOS (Swift Constants)
6
6
  ///
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Web Tokens
3
- * Generated: 2026-07-05T14:35:59.888Z
3
+ * Generated: 2026-08-12T03:23:16.987Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Web (CSS Custom Properties)
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Android Tokens
3
- * Generated: 2026-07-05T13:53:05.378Z
3
+ * Generated: 2026-08-02T19:49:06.784Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  */
@@ -22,6 +22,7 @@ exports.INTERACTION_THRESHOLDS = {
22
22
  hover: { deltaL: { min: 0.02, max: 0.05 }, deltaC: 0 },
23
23
  pressed: { deltaL: { min: 0.05, max: 0.10 }, deltaC: 0 },
24
24
  focused: { deltaL: 0, deltaC: { min: 0.02 } },
25
+ // deprecated 2026-07-15 (no-disabled-states philosophy) — removal at next major
25
26
  disabled: { deltaL: 0, deltaC: { min: 0.03 } },
26
27
  };
27
28
  class OklchBlendCalculator {
@@ -41,7 +41,11 @@ export declare const BlendTokenValues: {
41
41
  readonly pressedDarker: 0.12;
42
42
  /** Focus state saturation increase - blend200 (8%) */
43
43
  readonly focusSaturate: 0.08;
44
- /** Disabled state desaturation - blend300 (12%) */
44
+ /**
45
+ * Disabled state desaturation - blend300 (12%)
46
+ * @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
47
+ * is unavailable, do not render the component. Scheduled for removal at the next major.
48
+ */
45
49
  readonly disabledDesaturate: 0.12;
46
50
  /** Icon optical balance lightening - blend200 (8%) */
47
51
  readonly iconLighter: 0.08;
@@ -72,6 +76,9 @@ export interface BlendUtilitiesResult {
72
76
  * Calculate disabled color by desaturating the base color
73
77
  * @param baseColor - Base color as hex string (e.g., "#A855F7")
74
78
  * @returns Desaturated hex color string for disabled state
79
+ * @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
80
+ * is unavailable, do not render the component. For non-disabled desaturation, use the
81
+ * generic desaturate() utility. Scheduled for removal at the next major.
75
82
  */
76
83
  disabledColor: (baseColor: string) => string;
77
84
  /**
@@ -191,7 +198,11 @@ declare const _default: {
191
198
  readonly pressedDarker: 0.12;
192
199
  /** Focus state saturation increase - blend200 (8%) */
193
200
  readonly focusSaturate: 0.08;
194
- /** Disabled state desaturation - blend300 (12%) */
201
+ /**
202
+ * Disabled state desaturation - blend300 (12%)
203
+ * @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
204
+ * is unavailable, do not render the component. Scheduled for removal at the next major.
205
+ */
195
206
  readonly disabledDesaturate: 0.12;
196
207
  /** Icon optical balance lightening - blend200 (8%) */
197
208
  readonly iconLighter: 0.08;
@@ -29,7 +29,11 @@ exports.BlendTokenValues = {
29
29
  pressedDarker: 0.12,
30
30
  /** Focus state saturation increase - blend200 (8%) */
31
31
  focusSaturate: 0.08,
32
- /** Disabled state desaturation - blend300 (12%) */
32
+ /**
33
+ * Disabled state desaturation - blend300 (12%)
34
+ * @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
35
+ * is unavailable, do not render the component. Scheduled for removal at the next major.
36
+ */
33
37
  disabledDesaturate: 0.12,
34
38
  /** Icon optical balance lightening - blend200 (8%) */
35
39
  iconLighter: 0.08
@@ -145,6 +149,7 @@ function createBlendUtilities() {
145
149
  hoverColor: (baseColor) => darkerBlend(baseColor, exports.BlendTokenValues.hoverDarker),
146
150
  pressedColor: (baseColor) => darkerBlend(baseColor, exports.BlendTokenValues.pressedDarker),
147
151
  focusColor: (baseColor) => saturate(baseColor, exports.BlendTokenValues.focusSaturate),
152
+ // deprecated 2026-07-15 (no-disabled-states philosophy) — removal at next major
148
153
  disabledColor: (baseColor) => desaturate(baseColor, exports.BlendTokenValues.disabledDesaturate),
149
154
  iconColor: (baseColor) => lighterBlend(baseColor, exports.BlendTokenValues.iconLighter),
150
155
  // Generic blend functions for custom usage