@3fn/core 14.0.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.kiro/steering/Civitas-System-Overview.md +3 -12
- package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
- package/.kiro/steering/Task-Completion-Protocol.md +7 -7
- package/.kiro/steering/start-up-tasks.md +4 -4
- package/dist/ComponentTokens.android.kt +12 -12
- package/dist/ComponentTokens.ios.swift +12 -12
- package/dist/ComponentTokens.web.css +3 -3
- package/dist/DesignTokens.android.kt +1 -1
- package/dist/DesignTokens.dtcg.json +2 -2
- package/dist/DesignTokens.ios.swift +1 -1
- package/dist/DesignTokens.web.css +1 -1
- package/dist/android/DesignTokens.android.kt +1 -1
- package/dist/browser/designerpunk.esm.js +14 -9
- package/dist/browser/designerpunk.esm.min.js +7 -7
- package/dist/browser/designerpunk.umd.js +14 -9
- package/dist/browser/designerpunk.umd.min.js +12 -12
- package/dist/browser/tokens.css +3 -3
- package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
- package/dist/build/tokens/defineComponentTokens.js +26 -0
- package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +21 -26
- package/dist/components/core/Avatar-Base/avatar.tokens.js +31 -34
- package/dist/components/core/Avatar-Base/index.d.ts +1 -1
- package/dist/components/core/Avatar-Base/index.js +2 -2
- package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +28 -14
- package/dist/components/core/Button-Icon/buttonIcon.tokens.js +35 -20
- package/dist/generators/TokenFileGenerator.js +7 -2
- package/dist/ios/DesignTokens.ios.swift +1 -1
- package/dist/tokens/component/progress.d.ts +65 -5
- package/dist/tokens/component/progress.js +79 -18
- package/dist/types/generated/TokenTypes.d.ts +1 -1
- package/dist/types/generated/TokenTypes.js +1 -1
- package/dist/web/DesignTokens.web.css +1 -1
- package/governance/BUILD-SYSTEM-SETUP.md +1 -2
- package/governance/Component-Development-Guide.md +1 -1
- package/governance/Component-Development-Standards.md +19 -18
- package/governance/Component-Family-Avatar.md +6 -6
- package/governance/Component-Family-Badge.md +19 -19
- package/governance/Component-Family-Button.md +26 -26
- package/governance/Component-Family-Chip.md +14 -14
- package/governance/Component-Family-Container.md +12 -12
- package/governance/Component-Family-Form-Inputs.md +61 -61
- package/governance/Component-Family-Icon.md +8 -8
- package/governance/Component-Family-Navigation.md +1 -1
- package/governance/Component-Inheritance-Structures.md +29 -28
- package/governance/Component-Readiness-Status.md +6 -7
- package/governance/Component-Templates.md +26 -26
- package/governance/Contract-System-Reference.md +1 -1
- package/governance/Process-Development-Workflow.md +4 -4
- package/governance/Process-File-Organization.md +1 -4
- package/governance/Process-Hook-Operations.md +6 -7
- package/governance/Process-Spec-Planning.md +8 -14
- package/governance/Rosetta-System-Architecture.md +7 -5
- package/governance/Token-Quick-Reference.md +35 -22
- package/governance/Web-Authoring-Standards.md +1 -1
- package/governance/classification-map.md +109 -3
- package/governance/completion-documentation-guide.md +14 -31
- package/governance/platform-implementation-guidelines.md +1 -2
- package/governance/release-management-system.md +28 -63
- package/package.json +2 -6
- package/src/build/tokens/__tests__/defineComponentTokens.test.ts +113 -0
- package/src/build/tokens/defineComponentTokens.ts +43 -1
- package/src/components/core/Avatar-Base/avatar.tokens.ts +31 -34
- package/src/components/core/Avatar-Base/index.ts +1 -1
- package/src/components/core/Button-Icon/buttonIcon.tokens.ts +43 -27
- package/src/generators/TokenFileGenerator.ts +7 -2
- package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +5 -3
- package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +11 -11
- package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +22 -20
- package/src/tokens/component/progress.ts +83 -21
- package/src/types/generated/TokenTypes.ts +1 -1
- package/token-index/components.yaml +8 -8
- package/src/tools/release/__tests__/ChangeClassifier.test.ts +0 -133
- package/src/tools/release/__tests__/ChangeExtractor.test.ts +0 -222
- package/src/tools/release/__tests__/GitHubPublisher.test.ts +0 -240
- package/src/tools/release/__tests__/NotesRenderer.test.ts +0 -142
- package/src/tools/release/__tests__/NpmPublisher.test.ts +0 -289
- package/src/tools/release/__tests__/PipelineIntegration.test.ts +0 -188
- package/src/tools/release/__tests__/ReleasePipeline.test.ts +0 -192
- package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +0 -49
- package/src/tools/release/__tests__/SummaryScanner.test.ts +0 -141
- package/src/tools/release/__tests__/TagResolver.test.ts +0 -91
- package/src/tools/release/__tests__/VersionCalculator.test.ts +0 -270
- package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +0 -80
- package/src/tools/release/cli/ReleasePipeline.ts +0 -165
- package/src/tools/release/cli/release-tool.ts +0 -107
- package/src/tools/release/pipeline/ChangeClassifier.ts +0 -61
- package/src/tools/release/pipeline/ChangeExtractor.ts +0 -87
- package/src/tools/release/pipeline/NotesRenderer.ts +0 -66
- package/src/tools/release/pipeline/SummaryScanner.ts +0 -70
- package/src/tools/release/pipeline/TagResolver.ts +0 -40
- package/src/tools/release/pipeline/VersionCalculator.ts +0 -375
- package/src/tools/release/publishers/GitHubPublisher.ts +0 -228
- package/src/tools/release/publishers/NpmPublisher.ts +0 -196
- package/src/tools/release/release-config.json +0 -5
- package/src/tools/release/types/index.ts +0 -282
- package/src/tools/release/validators/SemanticVersionValidator.ts +0 -67
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: process-hook-operations
|
|
3
3
|
inclusion: manual
|
|
4
4
|
name: Process-Hook-Operations
|
|
5
|
-
description: Agent hook operational guidance — dependency chains, execution order, automatic file organization, troubleshooting, and best practices. Load when debugging hook issues, setting up or modifying hooks, or troubleshooting automation failures. NOTE - Release detection sections are
|
|
5
|
+
description: Agent hook operational guidance — dependency chains, execution order, automatic file organization, troubleshooting, and best practices. Load when debugging hook issues, setting up or modifying hooks, or troubleshooting automation failures. NOTE - Release detection sections are historical; the Spec-065 release CLI was RETIRED 2026-08-12 (Q6 ballot) in favor of the manual release recipe. See Release Management System for current process.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Hook Operations Guide
|
|
@@ -25,7 +25,7 @@ This document provides detailed operational guidance for working with Kiro agent
|
|
|
25
25
|
>
|
|
26
26
|
> **2. "Task completion" now means merge (125-A PR-gate).** Since the ratified 125-A workflow, a task is accepted when its unit's **PR is merged** — not when a local status flips. The completion tool is `./.kiro/hooks/complete-task.sh` (opens the PR), which **superseded** the old commit-on-completion tooling. Work reaches `main` only through a merged, branch-protected PR. So the troubleshooting guidance below that frames "direct git commits" as *bypassing hooks* (versus using the `taskStatus` tool) is **Kiro-IDE-specific and predates the branch→PR→merge flow** — under the current workflow, committing and pushing a branch is a *correct, expected* step, not an error to avoid.
|
|
27
27
|
>
|
|
28
|
-
> **3. Release detection here is historical.**
|
|
28
|
+
> **3. Release detection here is historical.** The Spec-065 release CLI was itself RETIRED on 2026-08-12 (Q6 ballot: `.kiro/docs/ballots/2026-08-12-q6-release-manager-retirement.md`), and the `release-manager.sh` hook described below was DELETED the same day; this content is retained solely as Kiro-hook operational history. See [Release Management System](release-management-system) for the current release recipe.
|
|
29
29
|
>
|
|
30
30
|
> This doc is preserved for Kiro-runtime hook operations and history. A cross-runtime rework belongs with the 122 agent-generator work (OB-7), not here.
|
|
31
31
|
|
|
@@ -1187,11 +1187,10 @@ Release detection triggers automatically when parent task summary documents are
|
|
|
1187
1187
|
- `.kiro/` directory is filtered from Kiro IDE file watching (hooks don't trigger there)
|
|
1188
1188
|
|
|
1189
1189
|
**Quick Reference**:
|
|
1190
|
-
- **Summary docs**: `docs/specs/[spec-name]/task-N-summary.md` (
|
|
1190
|
+
- **Summary docs**: `docs/specs/[spec-name]/task-N-summary.md` (release-note source material)
|
|
1191
1191
|
- **Detailed docs**: `.kiro/specs/[spec-name]/completion/task-N-parent-completion.md` (internal)
|
|
1192
|
-
- **Manual trigger**: `./.kiro/hooks/release-manager.sh auto`
|
|
1193
1192
|
|
|
1194
|
-
**For
|
|
1193
|
+
**For the current release process** (the manual recipe; the detection hook was deleted 2026-08-12, Q6 ballot), query Release Management System via MCP:
|
|
1195
1194
|
|
|
1196
1195
|
```
|
|
1197
1196
|
get_document_full({ path: "release-management-system" })
|
|
@@ -1199,8 +1198,8 @@ get_document_full({ path: "release-management-system" })
|
|
|
1199
1198
|
|
|
1200
1199
|
Or query specific sections:
|
|
1201
1200
|
```
|
|
1202
|
-
get_section({ path: "release-management-system", heading: "Release
|
|
1203
|
-
get_section({ path: "release-management-system", heading: "
|
|
1201
|
+
get_section({ path: "release-management-system", heading: "The Release Recipe" })
|
|
1202
|
+
get_section({ path: "release-management-system", heading: "Discovering What Changed and Why" })
|
|
1204
1203
|
```
|
|
1205
1204
|
|
|
1206
1205
|
---
|
|
@@ -403,8 +403,8 @@ During spec formalization (design-outline → requirements.md), Thurgood will id
|
|
|
403
403
|
**Completion Documentation**:
|
|
404
404
|
- Two documents per primary task:
|
|
405
405
|
- Detailed: `.kiro/specs/[spec-name]/completion/task-[N]-parent-completion.md` (comprehensive internal documentation)
|
|
406
|
-
- Summary: `docs/specs/[spec-name]/task-[N]-summary.md` (concise public-facing summary
|
|
407
|
-
- Detailed docs preserve comprehensive knowledge; summary docs
|
|
406
|
+
- Summary: `docs/specs/[spec-name]/task-[N]-summary.md` (concise public-facing summary — source material for hand-authored release notes)
|
|
407
|
+
- Detailed docs preserve comprehensive knowledge; summary docs serve as release-note source material
|
|
408
408
|
|
|
409
409
|
**Sub-tasks**:
|
|
410
410
|
- Focus on implementation steps
|
|
@@ -2227,25 +2227,20 @@ Developers can now:
|
|
|
2227
2227
|
|
|
2228
2228
|
### Parent Task Summary Documents
|
|
2229
2229
|
|
|
2230
|
-
**Purpose**: Create concise, commit-style summaries of parent task completion that serve as
|
|
2230
|
+
**Purpose**: Create concise, commit-style summaries of parent task completion that serve as source material for hand-authored release notes.
|
|
2231
2231
|
|
|
2232
2232
|
**Location**: `docs/specs/[spec-name]/task-N-summary.md`
|
|
2233
2233
|
|
|
2234
2234
|
**When to Create**: After completing a parent task and writing detailed completion documentation in `.kiro/specs/[spec-name]/completion/task-N-parent-completion.md`
|
|
2235
2235
|
|
|
2236
|
-
**
|
|
2237
|
-
- **
|
|
2238
|
-
- **Manual trigger**: Required for AI-assisted workflows after summary document creation
|
|
2239
|
-
|
|
2240
|
-
**Rationale**:
|
|
2241
|
-
- **Hook Triggering**: The `.kiro/` directory is filtered from Kiro IDE's file watching system, preventing hooks from triggering on files created there. Summary documents in `docs/specs/` directory enable automatic release detection for manual file operations.
|
|
2242
|
-
- **Dual Purpose**: Summary documents serve both as hook triggers and as concise, public-facing release note content.
|
|
2236
|
+
**Rationale**:
|
|
2237
|
+
- **Dual Purpose**: Summary documents are the concise, public-facing record of each parent task — the source material the release recipe reads when authoring release notes.
|
|
2243
2238
|
- **Clear Separation**: Detailed completion docs (internal knowledge preservation) remain in `.kiro/`, while summaries (public-facing) live in `docs/`.
|
|
2244
|
-
-
|
|
2239
|
+
- *(Historical: `docs/`-placement also served a Kiro release-detection hook and its manual trigger, deleted 2026-08-12 — Q6 ballot. The public/internal split stands on its own.)*
|
|
2245
2240
|
|
|
2246
2241
|
**Forward-Looking Note**: This summary document workflow applies to new specs going forward. Existing completion documents don't need changes.
|
|
2247
2242
|
|
|
2248
|
-
**Release
|
|
2243
|
+
**Release notes**: hand-authored per the release recipe (Release Management System) — the author derives the delta from squash titles since the last tag and reads summary docs for each change's substance. (The automated release tool was retired 2026-08-12, Q6 ballot.)
|
|
2249
2244
|
|
|
2250
2245
|
**Format Template**:
|
|
2251
2246
|
|
|
@@ -2294,7 +2289,7 @@ Developers can now:
|
|
|
2294
2289
|
- 🟡 **Ecosystem** — new tools, agents, MCPs, build system changes, or third-party integrations. Surfaced prominently.
|
|
2295
2290
|
- 🔵 **Internal** — governance updates, process changes, infrastructure work. Included as context.
|
|
2296
2291
|
|
|
2297
|
-
When present, the release
|
|
2292
|
+
When present, the release-notes author uses this for accurate classification. Include when your task delivers artifacts that should appear in release notes.
|
|
2298
2293
|
|
|
2299
2294
|
**Example - Task 1 Summary**:
|
|
2300
2295
|
|
|
@@ -2503,7 +2498,6 @@ When creating cross-references, calculate relative paths based on the source doc
|
|
|
2503
2498
|
- Manual task status updates → `complete-task.sh` on the task branch → No agent hooks triggered
|
|
2504
2499
|
- **Benefit**: Simpler, direct control
|
|
2505
2500
|
- **Use when**: Quick fixes, non-spec work, or when agent hooks aren't needed
|
|
2506
|
-
- **Note**: Run `npm run release:analyze` for on-demand release analysis
|
|
2507
2501
|
|
|
2508
2502
|
---
|
|
2509
2503
|
|
|
@@ -313,10 +313,11 @@ Semantic color tokens are resolved into light and dark mode sets before generati
|
|
|
313
313
|
│ MODE RESOLUTION SUBSYSTEM │
|
|
314
314
|
├─────────────────────────────────────────────────────────────────────────────┤
|
|
315
315
|
│ │
|
|
316
|
-
│ Level 1: Primitive
|
|
317
|
-
│ ├── Primitives
|
|
318
|
-
│ ├──
|
|
319
|
-
│
|
|
316
|
+
│ Level 1: Primitive Value Resolution (no mode variance) │
|
|
317
|
+
│ ├── Primitives are single OKLCH triples — NO mode dimension (Spec 112) │
|
|
318
|
+
│ ├── No dark override → token falls back to the base (light) reference, │
|
|
319
|
+
│ │ resolving to the SAME value in both modes │
|
|
320
|
+
│ ├── The common case — see npm run audit:mode-parity for the live split │
|
|
320
321
|
│ └── Resolved by: SemanticValueResolver │
|
|
321
322
|
│ │
|
|
322
323
|
│ Level 2: Semantic Overrides │
|
|
@@ -334,7 +335,8 @@ Semantic color tokens are resolved into light and dark mode sets before generati
|
|
|
334
335
|
│ │
|
|
335
336
|
│ Fallback Behavior │
|
|
336
337
|
│ ├── Absent dark override → token uses base (light) primitive reference │
|
|
337
|
-
│
|
|
338
|
+
│ │ — the ONLY fallback that fires; primitives have no mode values to │
|
|
339
|
+
│ │ fall back from (legacy ColorTokens.ts is deprecated, Spec 115) │
|
|
338
340
|
│ ├── Fallback is graceful degradation, not build failure │
|
|
339
341
|
│ └── Mode parity audit reports fallback usage: npm run audit:mode-parity │
|
|
340
342
|
│ │
|
|
@@ -13,7 +13,7 @@ description: Token documentation routing table — maps token types to their MCP
|
|
|
13
13
|
**Scope**: cross-project
|
|
14
14
|
**Layer**: 2
|
|
15
15
|
**Relevant Tasks**: component-development, token-selection, styling
|
|
16
|
-
**Last Reviewed**: 2026-
|
|
16
|
+
**Last Reviewed**: 2026-08-25
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -52,32 +52,50 @@ This document serves as a routing table for token documentation—it helps AI ag
|
|
|
52
52
|
|
|
53
53
|
Semantic color tokens support light/dark mode through a two-level resolution system. Use this guide to determine how a token behaves across modes.
|
|
54
54
|
|
|
55
|
+
**Prerequisite fact (Spec 112).** Color primitives have **no mode dimension**. A primitive is a single OKLCH triple (`{ l, c, h }`) composed from channel references in `src/tokens/color/` — the same value in light and dark. Mode differentiation therefore happens **only** at the semantic tier, via a theme override. Zero primitives in the system carry differing light/dark values.
|
|
56
|
+
|
|
55
57
|
### Does My Token Need a Dark Override?
|
|
56
58
|
|
|
57
59
|
| Question | Answer | Resolution Level |
|
|
58
60
|
|----------|--------|-----------------|
|
|
59
|
-
| Is the token mode-invariant (print, glow, scrim, contrast.onLight/onDark)? | Yes → same value in both modes | Mode-invariant — no
|
|
60
|
-
|
|
|
61
|
-
| Does the token need a *different primitive
|
|
61
|
+
| Is the token mode-invariant *by design* (print, glow, scrim, contrast.onLight/onDark)? | Yes → same value in both modes, declared as intentional | Mode-invariant — listed in `MODE_INVARIANT_TOKENS` (`src/validators/ModeParity.ts`); no theme-file entry needed |
|
|
62
|
+
| Is the same value correct in both modes? | Yes → no override | **Level 1** — leave the token **commented out** in the dark theme file; it falls back to the base (light) reference |
|
|
63
|
+
| Does the token need a *different primitive* in dark mode (role remapping)? | Yes → override needed | **Level 2** — add an active entry to the appropriate theme's SemanticOverrides |
|
|
64
|
+
|
|
65
|
+
> **Level 1 does not mean "the primitive handles it."** No primitive varies by mode. Level 1 means *the token deliberately resolves to the same value in both modes*, and the commented-out theme-file line is the record of that decision. A token that must actually change in dark mode needs a Level 2 override — there is no other mechanism.
|
|
62
66
|
|
|
63
|
-
### Level 1 Example (
|
|
67
|
+
### Level 1 Example (Falls Back to Base — Same Value in Both Modes)
|
|
64
68
|
|
|
65
|
-
`color.
|
|
69
|
+
`color.feedback.error.text` references `pink400`. It has no active dark override; the entry sits commented out in the dark theme file (`src/tokens/themes/dark/SemanticOverrides.ts:27`):
|
|
70
|
+
```typescript
|
|
71
|
+
// color.feedback.error.text: { value: 'pink400' }
|
|
66
72
|
```
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
`pink400` resolves to one OKLCH value used in both modes — `l` 0.55 (`channels/lightness/chromatic.ts`), `c` 0.203 (`channels/chroma/chromatic.ts`), `h` 10 (`channels/hues.ts`). The emitted CSS carries a single value with no `light-dark()` wrapper (`dist/DesignTokens.web.css:527`):
|
|
74
|
+
```css
|
|
75
|
+
--color-feedback-error-text: oklch(0.55 0.203 10);
|
|
69
76
|
```
|
|
70
|
-
No semantic override needed — the primitive handles differentiation.
|
|
71
77
|
|
|
72
78
|
### Level 2 Example (Semantic Override)
|
|
73
79
|
|
|
74
|
-
`color.
|
|
80
|
+
`color.structure.canvas` references `white100` in light mode, but dark mode needs `gray400` (a different primitive). The dark theme overrides the reference (`src/tokens/themes/dark/SemanticOverrides.ts:163`):
|
|
75
81
|
```typescript
|
|
76
82
|
// Dark theme SemanticOverrides
|
|
77
83
|
export const darkSemanticOverrides: SemanticOverrideMap = {
|
|
78
|
-
'color.
|
|
84
|
+
'color.structure.canvas': { primitiveReferences: { value: 'gray400' } },
|
|
79
85
|
};
|
|
80
86
|
```
|
|
87
|
+
Because the modes now resolve to different values, the generator emits a mode-aware value (`dist/DesignTokens.web.css:559`):
|
|
88
|
+
```css
|
|
89
|
+
--color-structure-canvas: light-dark(oklch(1 0 260), oklch(0.42 0.018 260));
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Which File Actually Changes a Color?
|
|
93
|
+
|
|
94
|
+
| Goal | Edit | Note |
|
|
95
|
+
|------|------|------|
|
|
96
|
+
| Make a semantic token differ by mode | The theme's `SemanticOverrides.ts` (Level 2) | The only mechanism that produces mode variance |
|
|
97
|
+
| Change a primitive's color value | `src/tokens/color/channels/**` (lightness / chroma / hue) | Changes the primitive in **both** modes and every theme; composed into named primitives in `src/tokens/color/primitives/**` |
|
|
98
|
+
| — | ~~`src/tokens/ColorTokens.ts`~~ | **Deprecated (Spec 115).** `SemanticValueResolver.resolveColorPrimitive()` consults `composedColorMap` first, so for all 50 OKLCH primitives the legacy `light`/`dark`/`wcag` slots are never read on the CSS/Swift/Kotlin path. Only the four shadow primitives (`shadowBlack100`, `shadowBlue100`, `shadowOrange100`, `shadowGray100`) still fall through to it. It *is* still the sole source for DTCG/Figma primitive export — see `.kiro/issues/2026-08-25-dual-color-source-divergence.md`. |
|
|
81
99
|
|
|
82
100
|
### Context Resolution
|
|
83
101
|
|
|
@@ -297,25 +315,20 @@ Returns targeted content (~2,000 tokens) for specific information:
|
|
|
297
315
|
```
|
|
298
316
|
// Get color concept tokens by category
|
|
299
317
|
get_section({ path: "token-family-color", heading: "Feedback Concept" })
|
|
300
|
-
get_section({ path: "token-family-color", heading: "Identity
|
|
301
|
-
get_section({ path: "token-family-color", heading: "Action Concept" })
|
|
302
|
-
get_section({ path: "token-family-color", heading: "Contrast Concept" })
|
|
303
|
-
get_section({ path: "token-family-color", heading: "Structure Concept" })
|
|
304
|
-
|
|
305
|
-
// Get component-specific color tokens
|
|
306
|
-
get_section({ path: "token-family-color", heading: "Component Tokens" })
|
|
318
|
+
get_section({ path: "token-family-color", heading: "Identity, Action, Contrast, Structure, Progress" })
|
|
307
319
|
|
|
308
320
|
// Get primitive color families
|
|
309
|
-
get_section({ path: "token-family-color", heading: "
|
|
321
|
+
get_section({ path: "token-family-color", heading: "Neutral Partition" })
|
|
322
|
+
get_section({ path: "token-family-color", heading: "Chromatic Families" })
|
|
310
323
|
|
|
311
324
|
// Get spacing scale values
|
|
312
|
-
get_section({ path: "token-family-spacing", heading: "Spacing
|
|
325
|
+
get_section({ path: "token-family-spacing", heading: "Primitive Spacing Tokens" })
|
|
313
326
|
|
|
314
327
|
// Get typography composition patterns
|
|
315
|
-
get_section({ path: "token-family-typography", heading: "Typography
|
|
328
|
+
get_section({ path: "token-family-typography", heading: "Typography Token Categories" })
|
|
316
329
|
|
|
317
330
|
// Get shadow elevation levels
|
|
318
|
-
get_section({ path: "token-family-shadow", heading: "Shadow
|
|
331
|
+
get_section({ path: "token-family-shadow", heading: "Shadow Semantic Tokens" })
|
|
319
332
|
|
|
320
333
|
// Get radius values
|
|
321
334
|
get_section({ path: "token-family-radius", heading: "Primitive Radius Tokens" })
|
|
@@ -397,7 +397,7 @@ get_document_full({ path: "web-authoring-standards" })
|
|
|
397
397
|
For specific sections:
|
|
398
398
|
```
|
|
399
399
|
get_section({ path: "web-authoring-standards", heading: "Hard Rules" })
|
|
400
|
-
get_section({ path: "web-authoring-standards", heading: "Token Priority" })
|
|
400
|
+
get_section({ path: "web-authoring-standards", heading: "3. Token Priority" })
|
|
401
401
|
get_section({ path: "web-authoring-standards", heading: "Product Token Authoring (Sparky)" })
|
|
402
402
|
get_section({ path: "web-authoring-standards", heading: "Naming Schema" })
|
|
403
403
|
```
|
|
@@ -192,6 +192,8 @@ education:
|
|
|
192
192
|
history:
|
|
193
193
|
- { date: 2026-07-14, change: "entry created from Experiment 1 classification (Task 1.4); per-surface assessments + candidate prune diff: .kiro/specs/125-B-classification-map/completion/pilot/pilot-row-assessment.md; prune candidate produced, not applied", by: thurgood }
|
|
194
194
|
- { date: 2026-07-14, change: "prune applied via U1-p ballot (.kiro/docs/ballots/2026-07-14-npm-test-imperative-prune.md), staged on task/125-B-u1-p; probe (NO GROSS LOSS DETECTED) + trial (NO-DIFFERENCE-DETECTED) evidence attached; A2-pattern zero-hits + Jest-education-intact independently re-verified; awaiting Peter's ratification and the U1-p merge (which opens the Task 3.1 observation window)", by: thurgood }
|
|
195
|
+
- { date: 2026-08-25, change: "Wave-1 deferred adjudication of Test-Development-Standards ~:1468-1474 CLOSED (Wave 2, 5.3): the four-stage validation-timing list ('Pre-Merge: Complete validation suite / All linting passes / All tests pass / Manual review complete') RULED KEEP intact — lifecycle-taxonomy education parallel to the pilot's retained lane-selection teaching, not a standalone imperative; deleting stage 4 would break the four-stage model (blade-1 fails). FLAG recorded, not actioned: 'All linting passes' describes a gate that does not exist (no lint required check) — known aspirational content, cited here so it is not silent drift. Owner consult AGREE (wave-2-consult-lina.md §4). Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md §3", by: thurgood }
|
|
196
|
+
- { date: 2026-08-25, change: "REGISTER-INTEGRITY repair (separate entry per the wave-2 consult nit): wave 1's typecheck-build-green-at-merge disposition claimed the TDS:1472 deferral was 'recorded on npm-test-before-complete's history' at wave-1 time — that history line never landed (the deferral lived only in the C3 row's own disposition). The preceding entry closes the deferral; this one records the dangling cross-reference and its repair, explicitly rather than silently", by: thurgood }
|
|
195
197
|
```
|
|
196
198
|
|
|
197
199
|
### tool-boot-smoke
|
|
@@ -210,6 +212,7 @@ education:
|
|
|
210
212
|
disposition: "nothing to prune — no prose predecessor"
|
|
211
213
|
history:
|
|
212
214
|
- { date: 2026-07-14, change: "entry created (U1-s pilot substrate, Task 1.6); check wired: .github/workflows/tool-boot-smoke.yml + tests/tool-boot-smoke.test.ts; local run 49/49 passing incl. Product MCP passing index-empty (Req 5.2); side-effect confirmation + gate-bite proof plan recorded in .kiro/specs/125-B-classification-map/completion/task-1-6-completion.md", by: thurgood }
|
|
215
|
+
- { date: 2026-08-21, change: "context 125B-tool-boot-smoke added to verify-gate-registration.sh EXPECTED_CONTEXTS (drift reconciliation — the 2026-07-14 arming never updated the count-assert in the same recorded change; record: .kiro/issues/2026-08-21-gate-registration-drift-reconciliation.md, applied via this entry's PR)", by: thurgood }
|
|
213
216
|
```
|
|
214
217
|
|
|
215
218
|
### no-autonomous-token-creation
|
|
@@ -243,9 +246,10 @@ verification:
|
|
|
243
246
|
check_state: armed
|
|
244
247
|
checks: ["root functional lane — src/__tests__/console-fail-setup.ts wired via jest.config.js setupFilesAfterEnv; every root-lane test file; gate-bite proven live during Task 4.4 (clean tests pass, an injected unallowlisted console.error/console.warn fails the test)"]
|
|
245
248
|
education:
|
|
246
|
-
disposition: "nothing to prune — no prose predecessor. The allowlist itself (src/__tests__/console-allowlist.json) is the citable record: each entry carries its own { suite, pattern, reason } — the adjudication lives with the data, not in steering prose."
|
|
249
|
+
disposition: "nothing to prune — no prose predecessor. The allowlist itself (src/__tests__/console-allowlist.json) is the citable record: each entry carries its own { suite, pattern, reason } — the adjudication lives with the data, not in steering prose. ROWS-ONLY (wave-2 finding, recorded 2026-08-25, CORPUS-WIDE sweep — owner-run, steward-spot-verified): every console hit in the education corpus outside this register is illustrative code inside a guide (Transformer-Development-Guide, MCP-Integration-Guide, browser-distribution-guide, Test-Failure-Audit-Methodology, Token-Resolution-Patterns, CDG:1713, TDS:1533/:1958) — no prose console rule exists ANYWHERE; the no-prose-predecessor claim holds corpus-wide, not just on the rostered surface. DISCLOSURE (wave-1 tooling-echo class, steward-verified): Progress web implementations console.warn on their clamp paths and the guard throws only when NODE_ENV==='development' — under Jest ('test') the WARN branch runs (ProgressPaginationBase.web.ts:191-201; Stepper equivalent); no allowlist entry exists; LATENT until someone writes a clamp-path test, which then needs an allowlist entry or a spy. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md §2; consult: wave-2-consult-lina.md (U4/U5)."
|
|
247
250
|
history:
|
|
248
251
|
- { date: 2026-07-14, change: "entry created (U2, Task 4.4): hook wired; allowlist seeded with 12 entries (10 from PR #39's adjudicated jsdom-stylesheet-limitation and deliberate-error-path-logging classes, discharging the pending jsdom-stylesheet-limitation doc-addition chip [125-B-backlog.md item 5]; 2 net-new — figma-extract.test.ts / figma-push.test.ts CLI-output classes discovered during this task's own full-suite gate-bite run); full root suite green (377 suites / 8987 tests). Mechanism built and row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
|
|
252
|
+
- { date: 2026-08-25, change: "Wave 2 (5.3) rows-only finding recorded on CORPUS-WIDE evidence (owner-run sweep, steward-spot-verified) — zero imposter clauses in C6 territory; no prose console rule exists anywhere in the education corpus. Progress clamp-path console.warn latent tension disclosed (steward-verified: test env takes the WARN branch, not the throw branch). Owner consult: Lina R1+R2 (wave-2-consult-lina.md, U4/U5). Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md §2", by: thurgood }
|
|
249
253
|
```
|
|
250
254
|
|
|
251
255
|
### console-fail-subpackage-deferred
|
|
@@ -282,6 +286,7 @@ education:
|
|
|
282
286
|
disposition: "nothing to prune — no prose predecessor. Record-only entry (Req 12.7): the check's already-armed state needed a citable register row; this is it."
|
|
283
287
|
history:
|
|
284
288
|
- { date: 2026-07-14, change: "entry created (U2, Task 4.4, Req 12.7) — record-only: verified already armed/blocking since 125-A, no work performed. Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-4-completion.md", by: thurgood }
|
|
289
|
+
- { date: 2026-08-25, change: "ROSTERED into U1b wave 2 by Peter's amendment ruling (2026-08-25, record-first — this row was armed but rostered in NO campaign wave; gap found at consult U6). Education layer classified with wave 2: its only found imposter is the shared dual-rule clause CDS:513 ('Contracts reference valid WCAG criteria' — restates this rule AND wcag-required-refs in one line), cut as hunk W2-2 of the ratified wave-2 candidate diff; trial coverage via the informational R1'-fv line. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md", by: thurgood }
|
|
285
290
|
```
|
|
286
291
|
|
|
287
292
|
### inverse-drift-incremental-build
|
|
@@ -315,10 +320,13 @@ verification:
|
|
|
315
320
|
check_state: armed
|
|
316
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)"]
|
|
317
322
|
education:
|
|
318
|
-
disposition: "
|
|
323
|
+
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)."
|
|
319
324
|
history:
|
|
320
325
|
- { date: 2026-07-14, change: "entry created (U2, Task 4.2 audit -> Task 4.3 arm): check re-armed, replacing the legacy 6-name trigger (behavioral-contract-validation.test.ts, formerly :325-350) with the normative allowlist matcher (C7) copied verbatim from .kiro/specs/125-B-classification-map/completion/u2/wcag-required-matcher.ts. State transition: DORMANT (armed-but-aimed-at-6-retired-legacy-names, discovered 125-B design-outline §3.3) -> armed (re-pointed at canonical allowlist; audit-clean per 4 WCAG-ref fixes + 3 legitimate-null 'N/A' exemptions applied to contracts.yaml BEFORE arming). Aggregate floor: 69 selected at audit. Bite-tested live (4 mutate/red/restore/green cycles). Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
|
|
321
326
|
- { date: 2026-07-14, change: "Per-literal floor set to THREE literals (interaction_focusable, interaction_focus_ring, state_error) per Peter's in-session amendment to DD3's originally-recorded four (design.md still records four; this entry is the citable deviation record). state_disabled EXCLUDED from the per-literal floor pending the Button-CTA disabled-state adjudication — the matcher's WCAG_REQUIRED_EXACT set is UNCHANGED: state_disabled contracts (1 live, Button-CTA) are still selected and still must carry a valid wcag ref; the amendment narrows the floor assertion only, not the selection. This defuses the razor's-edge coupling risk Lina raised as a PETER-ESCALATION in Task 4.2's adjudication table (.kiro/specs/125-B-classification-map/completion/u2/stemma-pre-arm-adjudication.md §7). Drafted by Lina; landed by Thurgood — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
|
|
327
|
+
- { 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
|
+
- { 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
|
+
- { 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 }
|
|
322
330
|
```
|
|
323
331
|
|
|
324
332
|
### validation-criteria-completeness
|
|
@@ -334,9 +342,10 @@ verification:
|
|
|
334
342
|
check_state: armed
|
|
335
343
|
checks: ["behavioral-contract-validation.test.ts 'all contracts should have validation criteria' (root functional lane), formerly :435 -- promoted from toBeGreaterThan(0) to expect(contractsWithoutValidation).toBe(0); inherited-contract skip preserved. Bite-tested live: emptying a non-inherited contract's validation array reds the check; restored to green."]
|
|
336
344
|
education:
|
|
337
|
-
disposition: "nothing to prune -- no prose predecessor. DD4's no-exemption-mechanism rationale (a zero-validation contract is defective by definition; escalate, don't self-exempt) is the citable design rationale, not restated in steering prose."
|
|
345
|
+
disposition: "nothing to prune -- no prose predecessor. DD4's no-exemption-mechanism rationale (a zero-validation contract is defective by definition; escalate, don't self-exempt) is the citable design rationale, not restated in steering prose. ROWS-ONLY (wave-2 finding, recorded 2026-08-25, CORPUS-WIDE sweep — steward + owner enumerations converged after the owner consult falsified a roster-bounded first pass): zero imposter clauses. Scored KEEPs beyond the roster: Test-Behavioral-Contract-Validation.md:63/:67 ('Every behavioral contract MUST pass these validation criteria:' — heads the section defining what good criteria CONTAIN, the how the gate cannot supply; the genuine teacher, owner-defended) and Component-Development-Standards.md:823 (fenced schema field list, accurate — the CSR:185 class). Rostered-surface hits are the category taxonomy (CSR:37/:85), the schema field table (CSR:185), example YAML, or component-capability descriptions (CIS — a different sense of 'validation'). No prune action exists for this rule; the clean state rests on corpus-wide enumeration. Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md §2; consult: wave-2-consult-lina.md."
|
|
338
346
|
history:
|
|
339
347
|
- { date: 2026-07-14, change: "entry created (U2, Task 4.2 inventory -> Task 4.3 promotion): pre-promotion inventory (Task 4.2) found 234 non-inherited contracts, 0 without validation -- zero fixes, zero DD4 escalations needed (no trigger existed). Assertion promoted audit-first per Req 12.6 / Peter's 2026-07-13 approval. Flagged by Lina as beyond the explicit (a)/(b) drafting scope (one-rule-per-entry: this promotion governs a distinct assertion from wcag-required-refs) and accepted for landing on that basis. Row drafted by Lina; landed by Thurgood per the Task 4.1 register-writes-stay-with-the-steward convention — evidence: .kiro/specs/125-B-classification-map/completion/task-4-3-completion.md", by: thurgood }
|
|
348
|
+
- { date: 2026-08-25, change: "Wave 2 (5.3) rows-only finding recorded on CORPUS-WIDE evidence — zero imposter clauses in C5 territory (two beyond-roster candidates scored KEEP: TBCV:63/:67 owner-defended teacher; CDS:823 accurate fenced schema list). Owner consult: Lina R1+R2 (wave-2-consult-lina.md). Evidence: .kiro/specs/125-B-classification-map/completion/u1b/wave-2-assessment.md §2", by: thurgood }
|
|
340
349
|
```
|
|
341
350
|
|
|
342
351
|
### certainty-calibration
|
|
@@ -366,3 +375,100 @@ attribution:
|
|
|
366
375
|
history:
|
|
367
376
|
- { date: 2026-08-02, change: "entry created (119-B Task 1, unit U1 — window-free per R1 AC1; lands pre-measurement under the ratified R11 AC2 exception, with the keyword-shadowing check scheduled in the U2 case-study findings). Cite as governance/classification-map.md § 'certainty-calibration' (entry-id grammar, never count/position — R1 AC4). Drafted and landed by Thurgood per the steward-writes-register convention; pending Peter's ratification at the U1 merge. Evidence: .kiro/specs/119-B-capability-routing-measurement/completion/task-1-completion.md", by: thurgood }
|
|
368
377
|
```
|
|
378
|
+
|
|
379
|
+
### section-citation-resolution
|
|
380
|
+
|
|
381
|
+
```yaml
|
|
382
|
+
rule: "A get_section heading citation in served or steering docs must resolve — the doc id must be MCP-served and the heading must exist on it"
|
|
383
|
+
boundary_call:
|
|
384
|
+
class: functional
|
|
385
|
+
rationale: "Whether a citation resolves is a mechanical property of the artifact pair (id served + heading present) — no judgment; a dead citation silently withholds teaching from every agent that follows it"
|
|
386
|
+
verification:
|
|
387
|
+
disposition: barrier
|
|
388
|
+
owner: thurgood
|
|
389
|
+
check_state: armed
|
|
390
|
+
checks: ["scripts/check-section-citations.ts (`npm run check:section-citations`), CI job .github/workflows/section-citations.yml, check context \"Section Citation Guard / section-citations\" — resolver-chain-aware (doc id -> indexed key -> frozen legacy manifest, reusing the runtime's own resolution helpers: extractFrontmatterInfo, FROZEN_LEGACY_MANIFEST), exact trimmed-string heading matching, identity-doc awareness (a citation targeting a never-served identity doc is a defect by construction), template-placeholder allowlist (`[family-name]`-style). Deliberate deviation from the D5 recipe: aliases do NOT pass resolution — resolveRef never consults them (alias is a find_docs scoring signal only), so an alias-only match fails at runtime; the checker flags it as a defect with a fix hint rather than treating it as resolved."]
|
|
391
|
+
education:
|
|
392
|
+
disposition: "No prose prune — this row records a NET-NEW verification need. Known defect class recorded 2026-08-12: first-ever scan found ~14 dead citations of 135 (Token-Quick-Reference ~10 [Ada], Component-Readiness-Status 1 [Lina], identity-doc self-MCP-query examples in Spec-Feedback-Protocol + Civitas-System-Overview [Thurgood — identity docs are deliberately never MCP-served, so those example blocks teach a failing action]). Fixes + checker build completed 2026-08-12 via PR #122 — full execution record (re-scan counts, per-owner adjudications, deviations): .kiro/issues/2026-08-12-section-citation-defects-and-checker.md § 'Execution record'"
|
|
393
|
+
history:
|
|
394
|
+
- { date: 2026-08-12, change: "entry created (steward, window-free — the certainty-calibration precedent) from the Q6-execution consult incident (Stacy caught two dead citations only because safeguard-2 happened to run) + the same-day corpus scan proving 14 pre-existing silent instances; evidence + adjudication table in the linked issue; check_state proposed — Peter ratifies the row at this PR's merge, the ARMING remains his separate flip", by: thurgood }
|
|
395
|
+
- { date: 2026-08-12, change: "row ratified at PR #122's merge (per the creation entry's own terms). PR #122 built the checker and fixed all 18 defects found by the resolver-chain-aware re-scan (183 citations checked; the issue table's ~15 plus one new exact-match catch, row 16 / Web-Authoring-Standards) — post-fix corpus 173 citations, 0 defects. Gate-bite proven red on throwaway PR #121 (one deliberate dead citation; run https://github.com/3fn/DesignerPunk/actions/runs/31608088052/job/94152123200), closed unmerged. Peter flipped \"Section Citation Guard\" required on main branch protection the same day, BEFORE U1b wave 1's prune merges — measurement-free per campaign law (no window open yet; not a boundary-event charge). check_state: proposed -> armed", by: thurgood }
|
|
396
|
+
- { date: 2026-08-21, change: "context \"Section Citation Guard\" added to verify-gate-registration.sh EXPECTED_CONTEXTS (drift reconciliation — the 2026-08-12 arming never updated the count-assert in the same recorded change; record: .kiro/issues/2026-08-21-gate-registration-drift-reconciliation.md, applied via this entry's PR)", by: thurgood }
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### commit-to-main-via-pr-only
|
|
400
|
+
|
|
401
|
+
```yaml
|
|
402
|
+
rule: "Work never lands on main directly — commits ride task branches and land via PR merge (the C1 wave-1 row)"
|
|
403
|
+
boundary_call:
|
|
404
|
+
class: operational
|
|
405
|
+
rationale: "A workflow-topology requirement (where work is allowed to land), mechanically owned by branch protection since 125-A — the gate rejects the PUSH (a local commit on main is non-durable and detected at push); the imperative restatements add no durable behavior the platform does not force"
|
|
406
|
+
verification:
|
|
407
|
+
disposition: barrier
|
|
408
|
+
owner: thurgood
|
|
409
|
+
check_state: armed
|
|
410
|
+
checks: ["branch protection on main, admins included (platform gate, 125-A; admin-rejection proven in 125-A records; re-verified live 2026-08-02)"]
|
|
411
|
+
education:
|
|
412
|
+
disposition: "PRUNED (wave 1, applied via ballot 2026-08-12-wave-1-workflow-gate-prune at the wave PR's merge) — six C1 hunks across TWO surfaces (wave-1-assessment.md §2): FOUR deletions (W1-1; W1-2/3 half-clauses; W1-4 half-clause) + one rewrite-to-descriptive (W1-5) on Task-Completion-Protocol, + one half-clause deletion (W1-9, consult catch) on Process-Development-Workflow § Troubleshooting. Clause-grain cuts justified per Req 10.2: the compound sentences' 'Never merge your own PR' halves are NOT gate-owned until U3 and are retained verbatim on every surface. Retained education: 'Direct pushes to main are rejected by branch protection, admins included' and all branch/PR-flow how-to prose (per-surface hit counts in the assessment). DISCLOSED: .kiro/hooks/complete-task.sh:372 echoes the compound imperative at completion time — tooling, outside the education corpus, retained (weak trial confound recorded)."
|
|
413
|
+
history:
|
|
414
|
+
- { date: 2026-08-02, change: "entry created (U1b wave 1, Task 5.2 step (a)); clause scoring + candidate diff: .kiro/specs/125-B-classification-map/completion/u1b/wave-1-assessment.md + wave-1-candidate-diff.patch; Stacy process-owner consult recorded in the assessment; pending Peter's record-first row ratification", by: thurgood }
|
|
415
|
+
- { date: 2026-08-12, change: "rows ratified (Peter, record-first — commit 3c729da2); candidate diff RE-DERIVED post-#118 (context-only delta, assessment §3 note); step (b) verdicts: probe NO GROSS LOSS DETECTED + trial NO-DIFFERENCE-DETECTED (1 valid pair, zero voids, relevance gate passed on R1'-C1; evidence: wave-1-probe-evidence.md + wave-1-trial-diff-table.md); prune applied via ballot 2026-08-12-wave-1-workflow-gate-prune (record-first) at the wave-1 PR's merge — the wave-1 window (N=10) opens at that merge", by: thurgood }
|
|
416
|
+
- { 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 }
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### squash-merge-only
|
|
420
|
+
|
|
421
|
+
```yaml
|
|
422
|
+
rule: "Squash-merge is the only merge method (the C2 wave-1 row)"
|
|
423
|
+
boundary_call:
|
|
424
|
+
class: operational
|
|
425
|
+
rationale: "A repo-configuration fact (merge-method policy) — closed by configuration since 125-A; prose about it is almost entirely consequence-education (atomic history, PR title becomes the commit subject)"
|
|
426
|
+
verification:
|
|
427
|
+
disposition: barrier
|
|
428
|
+
owner: thurgood
|
|
429
|
+
check_state: armed
|
|
430
|
+
checks: ["repository merge-method configuration: squash-only (platform config, 125-A)"]
|
|
431
|
+
education:
|
|
432
|
+
disposition: "REWRITTEN (wave 1, applied via ballot 2026-08-12-wave-1-workflow-gate-prune at the wave PR's merge) — one rewrite only (W1-6: TCP:80's imperative-shaped lead becomes descriptive; the education after the dash is retained verbatim). All other squash prose (TCP:100/:117, PDW:130/:250) scored KEEP as retained-class education. Low prune yield expected and recorded up front."
|
|
433
|
+
history:
|
|
434
|
+
- { date: 2026-08-02, change: "entry created (U1b wave 1, Task 5.2 step (a)); scoring + candidate hunk in wave-1-assessment.md / wave-1-candidate-diff.patch; pending Peter's record-first row ratification", by: thurgood }
|
|
435
|
+
- { date: 2026-08-12, change: "row ratified + TRIAL-EXEMPTION RULED (Peter, record-first, commit 3c729da2): C2 unscoreable by construction in a control arm (agents never merge); the single content-preserving rewrite rides on probe evidence + the window backstop — per-case exemption, never-prune-untested stands for trial-coverable rules. Probe evidence: symmetric silence on merge method + textual verification that the rewrite retains the full education (wave-1-probe-evidence.md). W1-6 context re-derived post-#118 (assessment §3). Rewrite applied via ballot 2026-08-12-wave-1-workflow-gate-prune at the wave-1 PR's merge", by: thurgood }
|
|
436
|
+
- { date: 2026-08-02, change: "row RATIFIED + TRIAL-EXEMPTION RULED (Peter, 2026-08-02, in-session record-first): C2 is unexercisable by agent trials by construction (merges are Peter-performed platform acts) — its single content-preserving rewrite (W1-6) rides on probe evidence + the window backstop, per-case exemption; the never-prune-untested rule stands for every trial-coverable rule (wave-1-assessment.md §4)", by: thurgood }
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### typecheck-build-green-at-merge
|
|
440
|
+
|
|
441
|
+
```yaml
|
|
442
|
+
rule: "Full typecheck and build-validate must be green to merge (the C3 wave-1 row)"
|
|
443
|
+
boundary_call:
|
|
444
|
+
class: functional
|
|
445
|
+
rationale: "The artifact requirement (tsc + build:validate green) is functional and owned by the armed lanes; no workflow imperative restating it survives in prose, so only the artifact half remains to classify — the DIVERGENCE from the twin row npm-test-before-complete (operational) is deliberate: that row classifies a surviving workflow imperative, this one classifies the artifact requirement alone"
|
|
446
|
+
verification:
|
|
447
|
+
disposition: barrier
|
|
448
|
+
owner: thurgood
|
|
449
|
+
check_state: armed
|
|
450
|
+
checks: ["lane-typecheck (required check, armed 2026-07-10, frozen 18-context set)", "lane-build-validate (required check, armed 2026-07-10, frozen 18-context set)"]
|
|
451
|
+
education:
|
|
452
|
+
disposition: "ROWS-ONLY (wave-1 finding, recorded 2026-08-02): the sweep found ZERO imposter clauses — TCP:44/:146/:149 are the pilot's own retained/rewritten education (untouched); BUILD-SYSTEM-SETUP:188/:210 are KEEP (local dev-loop guidance, no gate at that grain — the retained subtask-targeted-tests precedent); PTD/PSP hits are task-template examples. Late-found adjacent hit Test-Development-Standards:1472 is DEFERRED to Wave 2 with its surface (explicit call, recorded on npm-test-before-complete's history). No prune action exists for this rule; the row documents the clean state so future waves do not re-litigate it."
|
|
453
|
+
history:
|
|
454
|
+
- { date: 2026-08-02, change: "entry created (U1b wave 1, Task 5.2 step (a)) as a rows-only finding; enumeration record in wave-1-assessment.md §5; pending Peter's record-first row ratification", by: thurgood }
|
|
455
|
+
- { 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
|
+
```
|
|
457
|
+
|
|
458
|
+
### contract-platforms-specified
|
|
459
|
+
|
|
460
|
+
```yaml
|
|
461
|
+
rule: "All behavioral contracts SHALL specify platforms — armed assertion behavioral-contract-validation.test.ts:275 'all contracts should specify platforms' (root functional lane)"
|
|
462
|
+
boundary_call:
|
|
463
|
+
class: functional
|
|
464
|
+
rationale: "A machine-checkable presence check against a contract's own platforms field — the validation-criteria-completeness class"
|
|
465
|
+
verification:
|
|
466
|
+
disposition: barrier
|
|
467
|
+
owner: lina
|
|
468
|
+
check_state: armed
|
|
469
|
+
checks: ["behavioral-contract-validation.test.ts:275 'all contracts should specify platforms' (root functional lane) — armed since 125-A; no implementation work performed in wave 2"]
|
|
470
|
+
education:
|
|
471
|
+
disposition: "record-only entry (the wcag-format-validity Req 12.7 class): the check was armed but UNREGISTERED until wave 2's scoring of CDS:823 surfaced it (owner consult R2-2 — a gap-mode finding produced by adjudicating a KEEP line). Education layer: CDS:823's fenced schema field list (KEEP, wave 2) is the only known prose naming the obligation — accurate, retained. No imposters known; the territory sweeps with any future wave that touches its surfaces."
|
|
472
|
+
history:
|
|
473
|
+
- { 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
|
+
```
|
|
@@ -24,9 +24,9 @@ This guide consolidates all guidance for creating completion documentation, incl
|
|
|
24
24
|
- What content to include (documentation tiers)
|
|
25
25
|
- Where to place files (directory structure)
|
|
26
26
|
- How to name files (naming conventions)
|
|
27
|
-
- Why summary docs matter (release
|
|
27
|
+
- Why summary docs matter (release-note source material)
|
|
28
28
|
|
|
29
|
-
**Key Principle**: Parent task completion requires TWO documents - a detailed completion doc for internal knowledge preservation and a summary doc
|
|
29
|
+
**Key Principle**: Parent task completion requires TWO documents - a detailed completion doc for internal knowledge preservation and a summary doc as public-facing release-note source material.
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
@@ -39,12 +39,12 @@ Parent task completion produces two complementary documents:
|
|
|
39
39
|
| Document Type | Location | Purpose | Audience |
|
|
40
40
|
|---------------|----------|---------|----------|
|
|
41
41
|
| **Detailed Completion Doc** | `.kiro/specs/[spec-name]/completion/` | Comprehensive internal documentation | Internal team, knowledge preservation |
|
|
42
|
-
| **Summary Doc** | `docs/specs/[spec-name]/` | Concise, commit-style summary | Public-facing, release
|
|
42
|
+
| **Summary Doc** | `docs/specs/[spec-name]/` | Concise, commit-style summary | Public-facing, release-note source |
|
|
43
43
|
|
|
44
44
|
**Rationale**:
|
|
45
|
-
- **
|
|
46
|
-
- **Dual Purpose**: Summary documents serve both as hook triggers and as concise, public-facing release note content.
|
|
45
|
+
- **Dual Purpose**: Summary documents are the concise, public-facing record of each parent task — the source material the release recipe reads when authoring release notes.
|
|
47
46
|
- **Clear Separation**: Detailed completion docs (internal knowledge preservation) remain in `.kiro/`, while summaries (public-facing) live in `docs/`.
|
|
47
|
+
- *(Historical: the `docs/`-placement also served a Kiro release-detection hook, deleted 2026-08-12 — Q6 ballot. The placement stays: the public/internal split earns it on its own.)*
|
|
48
48
|
|
|
49
49
|
### When to Create Each Document
|
|
50
50
|
|
|
@@ -130,10 +130,10 @@ docs/specs/cross-platform-build-system/
|
|
|
130
130
|
### Two-Directory Structure
|
|
131
131
|
|
|
132
132
|
```
|
|
133
|
-
docs/specs/[spec-name]/ # Public-facing documentation
|
|
134
|
-
├── task-1-summary.md # ✅ Parent task summary (
|
|
135
|
-
├── task-2-summary.md # ✅ Parent task summary (
|
|
136
|
-
└── task-N-summary.md # ✅ Parent task summary (
|
|
133
|
+
docs/specs/[spec-name]/ # Public-facing documentation
|
|
134
|
+
├── task-1-summary.md # ✅ Parent task summary (release-note source)
|
|
135
|
+
├── task-2-summary.md # ✅ Parent task summary (release-note source)
|
|
136
|
+
└── task-N-summary.md # ✅ Parent task summary (release-note source)
|
|
137
137
|
|
|
138
138
|
.kiro/specs/[spec-name]/ # Internal documentation (NO HOOK TRIGGERS)
|
|
139
139
|
├── requirements.md # ❌ Spec requirements (no hook trigger)
|
|
@@ -150,7 +150,7 @@ docs/specs/[spec-name]/ # Public-facing documentation (TRIGGER
|
|
|
150
150
|
|
|
151
151
|
| Location | Purpose | Hook Trigger | Audience |
|
|
152
152
|
|----------|---------|--------------|----------|
|
|
153
|
-
| `docs/specs/[spec-name]/` | Concise summaries |
|
|
153
|
+
| `docs/specs/[spec-name]/` | Concise summaries | — (hook retired) | Public-facing, release-note source |
|
|
154
154
|
| `.kiro/specs/[spec-name]/completion/` | Comprehensive docs | ❌ No | Internal, knowledge preservation |
|
|
155
155
|
|
|
156
156
|
---
|
|
@@ -282,18 +282,10 @@ Detailed completion documents can optionally link to the summary document:
|
|
|
282
282
|
### How Summary Documents Feed Release Notes
|
|
283
283
|
|
|
284
284
|
1. **Summary document created** in `docs/specs/[spec-name]/`
|
|
285
|
-
2. **
|
|
286
|
-
3. **
|
|
287
|
-
4. **ChangeClassifier** maps changes to priority tiers (🔴/🟡/🔵)
|
|
288
|
-
5. **NotesRenderer** generates public + internal markdown release notes
|
|
285
|
+
2. **At release time**, the release author derives the shipped delta from squash-commit titles since the last tag (`git log <last-tag>..main --oneline`) and reads summary docs for each change's substance and classification (🔴/🟡/🔵)
|
|
286
|
+
3. **Release notes are hand-authored** at `docs/releases/release-X.Y.Z.md` from that material — summaries are the notes' source, and the durable per-task record
|
|
289
287
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
Release analysis runs post-merge on `main` (non-blocking). For on-demand analysis:
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
npm run release:analyze
|
|
296
|
-
```
|
|
288
|
+
*(The automated release tool that formerly scanned summaries was retired 2026-08-12 — Q6 ballot `.kiro/docs/ballots/2026-08-12-q6-release-manager-retirement.md`. See Release Management System § "The Release Recipe".)*
|
|
297
289
|
|
|
298
290
|
---
|
|
299
291
|
|
|
@@ -326,14 +318,6 @@ task-10-summary.md
|
|
|
326
318
|
|
|
327
319
|
Summary documents are ONLY for parent tasks. Subtasks only need detailed completion docs.
|
|
328
320
|
|
|
329
|
-
### ❌ Forgetting Manual Trigger for AI Workflows
|
|
330
|
-
|
|
331
|
-
If AI agent created the summary document, you MUST run:
|
|
332
|
-
```bash
|
|
333
|
-
./.kiro/hooks/release-manager.sh auto
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
---
|
|
337
321
|
|
|
338
322
|
## Workflow Checklist
|
|
339
323
|
|
|
@@ -350,7 +334,6 @@ If AI agent created the summary document, you MUST run:
|
|
|
350
334
|
- [ ] Run validation (`npm test` or `npm run test:all`)
|
|
351
335
|
- [ ] Create detailed completion doc: `.kiro/specs/[spec-name]/completion/task-N-completion.md`
|
|
352
336
|
- [ ] Create summary doc: `docs/specs/[spec-name]/task-N-summary.md`
|
|
353
|
-
- [ ] Trigger release detection: `./.kiro/hooks/release-manager.sh auto`
|
|
354
337
|
- [ ] Mark parent task complete using `taskStatus` tool
|
|
355
338
|
- [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."` — completion and summary docs travel on the branch.
|
|
356
339
|
- **If this parent IS its own merge unit** (a standalone task, or a small single-unit spec): the tooling opens the PR.
|
|
@@ -370,5 +353,5 @@ If AI agent created the summary document, you MUST run:
|
|
|
370
353
|
```
|
|
371
354
|
get_section({ path: "process-spec-planning", heading: "Three-Tier Completion Documentation System" })
|
|
372
355
|
get_section({ path: "process-development-workflow", heading: "Task Completion Workflow" })
|
|
373
|
-
get_section({ path: "release-management-system", heading: "Release
|
|
356
|
+
get_section({ path: "release-management-system", heading: "The Release Recipe" })
|
|
374
357
|
```
|
|
@@ -50,7 +50,7 @@ behavioral_contract_compliance:
|
|
|
50
50
|
|
|
51
51
|
**Example - Float Label Animation Contract**:
|
|
52
52
|
```
|
|
53
|
-
Contract:
|
|
53
|
+
Contract: content_float_label
|
|
54
54
|
|
|
55
55
|
All platforms MUST:
|
|
56
56
|
✅ Animate label from placeholder to floating position on focus
|
|
@@ -465,7 +465,6 @@ pre_implementation:
|
|
|
465
465
|
contract_review:
|
|
466
466
|
- [ ] Each contract has clear trigger conditions
|
|
467
467
|
- [ ] Each contract has measurable outcomes
|
|
468
|
-
- [ ] WCAG references included for accessibility contracts
|
|
469
468
|
- [ ] Contracts are platform-agnostic (WHAT not HOW)
|
|
470
469
|
|
|
471
470
|
human_ai_checkpoint:
|