create-ai-project 1.23.4 → 1.24.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 (94) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +8 -32
  2. package/.claude/agents-en/code-reviewer.md +24 -25
  3. package/.claude/agents-en/code-verifier.md +3 -32
  4. package/.claude/agents-en/codebase-analyzer.md +11 -79
  5. package/.claude/agents-en/document-reviewer.md +12 -58
  6. package/.claude/agents-en/integration-test-reviewer.md +6 -37
  7. package/.claude/agents-en/investigator.md +6 -59
  8. package/.claude/agents-en/quality-fixer-frontend.md +1 -5
  9. package/.claude/agents-en/quality-fixer.md +1 -5
  10. package/.claude/agents-en/requirement-analyzer.md +3 -14
  11. package/.claude/agents-en/rule-advisor.md +3 -16
  12. package/.claude/agents-en/scope-discoverer.md +5 -29
  13. package/.claude/agents-en/security-reviewer.md +2 -13
  14. package/.claude/agents-en/skill-creator.md +3 -6
  15. package/.claude/agents-en/skill-reviewer.md +7 -43
  16. package/.claude/agents-en/solver.md +9 -24
  17. package/.claude/agents-en/task-decomposer.md +39 -8
  18. package/.claude/agents-en/task-executor-frontend.md +29 -20
  19. package/.claude/agents-en/task-executor.md +29 -20
  20. package/.claude/agents-en/technical-designer-frontend.md +7 -12
  21. package/.claude/agents-en/technical-designer.md +4 -11
  22. package/.claude/agents-en/ui-analyzer.md +16 -115
  23. package/.claude/agents-en/ui-spec-designer.md +3 -3
  24. package/.claude/agents-en/verifier.md +9 -53
  25. package/.claude/agents-en/work-planner.md +27 -22
  26. package/.claude/agents-ja/acceptance-test-generator.md +10 -34
  27. package/.claude/agents-ja/code-reviewer.md +24 -25
  28. package/.claude/agents-ja/code-verifier.md +5 -34
  29. package/.claude/agents-ja/codebase-analyzer.md +11 -79
  30. package/.claude/agents-ja/document-reviewer.md +16 -62
  31. package/.claude/agents-ja/integration-test-reviewer.md +6 -37
  32. package/.claude/agents-ja/investigator.md +6 -59
  33. package/.claude/agents-ja/prd-creator.md +3 -3
  34. package/.claude/agents-ja/quality-fixer-frontend.md +2 -6
  35. package/.claude/agents-ja/quality-fixer.md +2 -6
  36. package/.claude/agents-ja/requirement-analyzer.md +3 -14
  37. package/.claude/agents-ja/rule-advisor.md +4 -17
  38. package/.claude/agents-ja/scope-discoverer.md +5 -29
  39. package/.claude/agents-ja/security-reviewer.md +3 -14
  40. package/.claude/agents-ja/skill-creator.md +3 -6
  41. package/.claude/agents-ja/skill-reviewer.md +7 -43
  42. package/.claude/agents-ja/solver.md +11 -26
  43. package/.claude/agents-ja/task-decomposer.md +40 -9
  44. package/.claude/agents-ja/task-executor-frontend.md +29 -20
  45. package/.claude/agents-ja/task-executor.md +29 -20
  46. package/.claude/agents-ja/technical-designer-frontend.md +8 -13
  47. package/.claude/agents-ja/technical-designer.md +5 -12
  48. package/.claude/agents-ja/ui-analyzer.md +17 -116
  49. package/.claude/agents-ja/ui-spec-designer.md +7 -7
  50. package/.claude/agents-ja/verifier.md +9 -53
  51. package/.claude/agents-ja/work-planner.md +51 -51
  52. package/.claude/commands-ja/build.md +1 -1
  53. package/.claude/commands-ja/design.md +1 -1
  54. package/.claude/commands-ja/diagnose.md +1 -1
  55. package/.claude/commands-ja/front-build.md +1 -1
  56. package/.claude/commands-ja/front-design.md +3 -3
  57. package/.claude/commands-ja/front-plan.md +2 -2
  58. package/.claude/commands-ja/implement.md +1 -1
  59. package/.claude/commands-ja/plan.md +2 -2
  60. package/.claude/commands-ja/prepare-implementation.md +4 -4
  61. package/.claude/commands-ja/reverse-engineer.md +1 -1
  62. package/.claude/commands-ja/review.md +1 -1
  63. package/.claude/commands-ja/task.md +2 -2
  64. package/.claude/commands-ja/update-doc.md +1 -1
  65. package/.claude/skills-en/documentation-criteria/references/design-template.md +5 -1
  66. package/.claude/skills-en/documentation-criteria/references/plan-template.md +17 -7
  67. package/.claude/skills-en/documentation-criteria/references/task-template.md +18 -0
  68. package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +1 -1
  69. package/.claude/skills-en/frontend-technical-spec/SKILL.md +4 -8
  70. package/.claude/skills-en/frontend-typescript-rules/SKILL.md +4 -2
  71. package/.claude/skills-en/frontend-typescript-testing/SKILL.md +5 -11
  72. package/.claude/skills-en/frontend-typescript-testing/references/e2e.md +1 -1
  73. package/.claude/skills-en/technical-spec/SKILL.md +4 -3
  74. package/.claude/skills-en/typescript-testing/SKILL.md +4 -4
  75. package/.claude/skills-ja/coding-standards/SKILL.md +4 -4
  76. package/.claude/skills-ja/coding-standards/references/security-checks.md +1 -1
  77. package/.claude/skills-ja/documentation-criteria/SKILL.md +1 -1
  78. package/.claude/skills-ja/documentation-criteria/references/design-template.md +10 -6
  79. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +18 -8
  80. package/.claude/skills-ja/documentation-criteria/references/task-template.md +18 -0
  81. package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +3 -3
  82. package/.claude/skills-ja/frontend-technical-spec/SKILL.md +4 -8
  83. package/.claude/skills-ja/frontend-typescript-rules/SKILL.md +5 -3
  84. package/.claude/skills-ja/frontend-typescript-testing/SKILL.md +5 -11
  85. package/.claude/skills-ja/frontend-typescript-testing/references/e2e.md +2 -2
  86. package/.claude/skills-ja/implementation-approach/SKILL.md +1 -1
  87. package/.claude/skills-ja/integration-e2e-testing/SKILL.md +1 -1
  88. package/.claude/skills-ja/integration-e2e-testing/references/e2e-environment-prerequisites.md +1 -1
  89. package/.claude/skills-ja/project-context/references/template.md +2 -2
  90. package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +3 -3
  91. package/.claude/skills-ja/technical-spec/SKILL.md +4 -3
  92. package/.claude/skills-ja/typescript-testing/SKILL.md +4 -4
  93. package/CHANGELOG.md +19 -0
  94. package/package.json +1 -1
@@ -33,7 +33,6 @@ Follow documentation-criteria skill for ADR/Design Doc creation thresholds. If a
33
33
  The subsections below are not parallel mandates; they form four serial gates: **Gate 0** Inputs & Standards → **Gate 1** Existing-State Analysis → **Gate 2** Design Decisions → **Gate 3** Impact Documentation. Complete each gate fully before starting the next. Each subsection below carries a `[Gate N — ...]` annotation (with its own applicability condition) in its heading and appears in Gate order; execute them in document order.
34
34
 
35
35
  ### Agreement Checklist [Gate 0 — Required]
36
- Must be performed at the beginning of Design Doc creation:
37
36
 
38
37
  1. **List agreements with user in bullet points**
39
38
  - Scope (which components/features to change)
@@ -47,7 +46,6 @@ Must be performed at the beginning of Design Doc creation:
47
46
  - [ ] If any agreements are not reflected, state the reason
48
47
 
49
48
  ### Standards Identification [Gate 0 — Required]
50
- Must be performed before existing-state investigation:
51
49
 
52
50
  1. **Identify Project Standards**
53
51
  - Scan project configuration, rule files, UI Spec / UI analysis inputs, and existing frontend code patterns
@@ -69,7 +67,6 @@ Must be performed before existing-state investigation:
69
67
  - Deviations require documented rationale
70
68
 
71
69
  ### Existing Code Investigation [Gate 1 — Required]
72
- Must be performed before Design Doc creation:
73
70
 
74
71
  1. **Implementation File Path Verification**
75
72
  - First grasp overall structure with `Glob: src/**/*.tsx`
@@ -163,7 +160,6 @@ Execute the 5 steps below for each in-scope element. Record the result in the De
163
160
  - For each rejected alternative, record 1-2 lines: what it was, why rejected. Keep this in the Design Doc so future iterations or agents avoid re-proposing.
164
161
 
165
162
  ### Implementation Approach Decision [Gate 2 — Required]
166
- Must be performed when creating Design Doc.
167
163
 
168
164
  1. **Approach selection** (run Phase 1-4 of implementation-approach skill, record selection rationale):
169
165
 
@@ -186,7 +182,6 @@ Must be performed when creating Design Doc.
186
182
  Define an **early verification point**: the first thing to verify and how, before scaling.
187
183
 
188
184
  ### Common ADR Process [Gate 2 — Required]
189
- Perform before Design Doc creation:
190
185
  1. Identify common technical areas (component patterns, state management, error handling, accessibility, etc.)
191
186
  2. Search `docs/ADR/ADR-COMMON-*`, create if not found
192
187
  3. Include in Design Doc's "Prerequisite ADRs"
@@ -199,6 +194,9 @@ Define Props types and state management contracts between components (types, pre
199
194
  ### State Transitions [Gate 2 — Required when applicable]
200
195
  Document state definitions and transitions for stateful components (loading, error, success states).
201
196
 
197
+ ### Serialized Boundary Contract [Gate 2 — Required when a value crosses a serialized boundary]
198
+ When a component emits or consumes a value through a **URL query, route param, form post, browser/session/local storage, generated config/artifact value, or any other encoded value another component, tool, or backend parses**, record it in the Design Doc's **Field Propagation Map**: the exact **Serialized Format** the producer emits and the **Consumer Parse Rule** (how the other side decodes/validates it). Producer and consumer must agree on the representation. Skip when no value crosses a serialized boundary.
199
+
202
200
  ### Integration Point Analysis [Gate 3 — Required]
203
201
  Document all integration points with existing components in "## Integration Point Map" section:
204
202
 
@@ -272,7 +270,7 @@ When a UI Spec exists for the feature (`docs/ui-spec/{feature-name}-ui-spec.md`)
272
270
 
273
271
  Conduct additional investigation only for areas not covered or flagged in `limitations`.
274
272
 
275
- - **UI Analysis** (optional, frontend recipe). UI fact-gathering JSON from ui-analyzer:
273
+ - **UI Analysis** (optional, frontend recipe). UI fact-gathering JSON from the UI analysis step:
276
274
 
277
275
  | input field | downstream use |
278
276
  |---|---|
@@ -293,13 +291,10 @@ When a UI Spec exists for the feature (`docs/ui-spec/{feature-name}-ui-spec.md`)
293
291
  - Follow respective templates (`template-en.md`)
294
292
  - For ADR, check existing numbers and use max+1, initial status is "Proposed"
295
293
 
296
- ## ADR Responsibility Boundaries
297
-
298
- Include: decisions, rationale, principled guidelines (e.g., "Use custom hooks for logic reuse" ✓, "Implement in Phase 1" ✗)
299
- Exclude: schedules, implementation procedures, specific code
294
+ ## Output Rules
300
295
 
301
- ## Output Policy
302
- Execute file output immediately (considered approved at execution).
296
+ - Execute file output immediately (considered approved at execution).
297
+ - ADR includes decisions, rationale, and principled guidelines (e.g., "Use custom hooks for logic reuse" ✓, "Implement in Phase 1" ✗); it excludes schedules, implementation procedures, and specific code.
303
298
 
304
299
  ## Important Design Principles
305
300
 
@@ -32,7 +32,6 @@ Follow documentation-criteria skill for ADR/Design Doc creation thresholds. If a
32
32
  The subsections below are not parallel mandates; they form four serial gates: **Gate 0** Inputs & Standards → **Gate 1** Existing-State Analysis → **Gate 2** Design Decisions → **Gate 3** Impact Documentation. Complete each gate fully before starting the next. Each subsection below carries a `[Gate N — ...]` annotation (with its own applicability condition) in its heading and appears in Gate order; execute them in document order.
33
33
 
34
34
  ### Agreement Checklist [Gate 0 — Required]
35
- Must be performed at the beginning of Design Doc creation:
36
35
 
37
36
  1. **List agreements with user in bullet points**
38
37
  - Scope (what to change)
@@ -46,7 +45,6 @@ Must be performed at the beginning of Design Doc creation:
46
45
  - [ ] If any agreements are not reflected, state the reason
47
46
 
48
47
  ### Standards Identification [Gate 0 — Required]
49
- Must be performed before any investigation:
50
48
 
51
49
  1. **Identify Project Standards**
52
50
  - Scan project configuration, rule files, and existing code patterns
@@ -69,7 +67,6 @@ Must be performed before any investigation:
69
67
  - Deviations require documented rationale
70
68
 
71
69
  ### Existing Code Investigation [Gate 1 — Required]
72
- Must be performed before Design Doc creation:
73
70
 
74
71
  1. **Implementation File Path Verification**
75
72
  - First grasp overall structure with `Glob: src/**/*.ts`
@@ -174,7 +171,6 @@ Execute the 5 steps below for each in-scope element. Record the result in the De
174
171
  - For each rejected alternative, record 1-2 lines: what it was, why rejected. Keep this in the Design Doc so future iterations or agents avoid re-proposing.
175
172
 
176
173
  ### Implementation Approach Decision [Gate 2 — Required]
177
- Must be performed when creating Design Doc.
178
174
 
179
175
  1. **Approach selection** (run Phase 1-4 of implementation-approach skill, record selection rationale):
180
176
 
@@ -198,7 +194,6 @@ Must be performed when creating Design Doc.
198
194
  Define an **early verification point**: the first thing to verify and how, before scaling. For replacements/modifications the default is an output comparison of at least one representative case. Exception: when the primary risk is not behavioral equivalence (e.g., schema compatibility, integration contract), specify the alternative verification target and document why output comparison is deferred.
199
195
 
200
196
  ### Common ADR Process [Gate 2 — Required]
201
- Perform before Design Doc creation:
202
197
  1. Identify common technical areas (logging, error handling, type definitions, API design, etc.)
203
198
  2. Search `docs/ADR/ADR-COMMON-*`, create if not found
204
199
  3. Include in Design Doc's "Prerequisite ADRs"
@@ -246,6 +241,7 @@ No Ripple Effect:
246
241
  When new or changed fields cross component boundaries:
247
242
 
248
243
  Document each field's status (preserved / transformed / dropped) at each boundary with rationale.
244
+ When the boundary is **serialized** — the value is encoded and re-parsed across a medium such as a query string, CLI argument, environment variable, config entry, message/queue payload, storage key, or file — also record the **Serialized Format** (the exact representation the producer emits) and the **Consumer Parse Rule** (how the consumer decodes/validates it), so producer and consumer agree. Omit both for in-memory field crossings.
249
245
  Skip if no fields cross component boundaries.
250
246
 
251
247
  ### Interface Change Impact Analysis [Gate 3 — Required]
@@ -290,13 +286,10 @@ When conversion is required, clearly specify adapter implementation or migration
290
286
  - Follow respective templates (`template-en.md`)
291
287
  - For ADR, check existing numbers and use max+1, initial status is "Proposed"
292
288
 
293
- ## ADR Responsibility Boundaries
289
+ ## Output Rules
294
290
 
295
- Include: decisions, rationale, principled guidelines (e.g., "Use dependency injection")
296
- Exclude: schedules, implementation procedures, specific code
297
-
298
- ## Output Policy
299
- Execute file output immediately (considered approved at execution).
291
+ - Execute file output immediately (considered approved at execution).
292
+ - ADR includes decisions, rationale, and principled guidelines (e.g., "Use dependency injection"); it excludes schedules, implementation procedures, and specific code.
300
293
 
301
294
  ## Important Design Principles
302
295
 
@@ -165,142 +165,43 @@ Produce `candidateWriteSet[]` listing the files most likely to require modificat
165
165
 
166
166
  ```json
167
167
  {
168
- "analysisScope": {
169
- "filesAnalyzed": ["path/to/component.tsx"],
170
- "stylesAnalyzed": ["path/to/styles.module.css"],
171
- "uiConventions": {
172
- "componentExtension": ".tsx",
173
- "styleStrategy": "css-modules|vanilla-css|css-in-js|utility-classes",
174
- "storybook": true,
175
- "testRunner": "vitest|jest|other"
176
- }
177
- },
168
+ "analysisScope": {"filesAnalyzed": ["path/to/component.tsx"], "stylesAnalyzed": ["path/to/styles.module.css"], "uiConventions": {"componentExtension": ".tsx", "styleStrategy": "css-modules|vanilla-css|css-in-js|utility-classes", "storybook": true, "testRunner": "vitest|jest|other"}},
178
169
  "externalResources": {
179
170
  "status": "fetched|partial|not_recorded",
180
- "designOrigin": {
181
- "fetch_status": "fetched|mcp_unavailable|skipped|not_applicable",
182
- "accessMethod": "MCP name | URL | file path | existing-implementation-only",
183
- "fetched_summary": "brief description of fetched content (e.g., screen names, frame ids, token snapshot)"
184
- },
185
- "designSystem": {
186
- "fetch_status": "fetched|mcp_unavailable|skipped|not_applicable",
187
- "accessMethod": "...",
188
- "fetched_summary": "components catalogued, tokens captured, anti-pattern identifiers"
189
- },
190
- "guidelines": {
191
- "fetch_status": "fetched|skipped|not_applicable",
192
- "accessMethod": "...",
193
- "fetched_summary": "rule categories captured (CSS, accessibility, i18n, etc.)"
194
- },
195
- "visualVerification": {
196
- "fetch_status": "available|mcp_unavailable|not_applicable",
197
- "accessMethod": "...",
198
- "notes": "how rendered output is verified during implementation"
199
- }
171
+ "designOrigin": {"fetch_status": "fetched|mcp_unavailable|skipped|not_applicable", "accessMethod": "MCP name | URL | file path | existing-implementation-only", "fetched_summary": "brief description of fetched content (e.g., screen names, frame ids, token snapshot)"},
172
+ "designSystem": {"fetch_status": "fetched|mcp_unavailable|skipped|not_applicable", "accessMethod": "...", "fetched_summary": "components catalogued, tokens captured, anti-pattern identifiers"},
173
+ "guidelines": {"fetch_status": "fetched|skipped|not_applicable", "accessMethod": "...", "fetched_summary": "rule categories captured (CSS, accessibility, i18n, etc.)"},
174
+ "visualVerification": {"fetch_status": "available|mcp_unavailable|not_applicable", "accessMethod": "...", "notes": "how rendered output is verified during implementation"}
200
175
  },
201
176
  "componentStructure": [
202
- {
203
- "name": "ComponentName",
204
- "filePath": "path/to/file:lineNumber",
205
- "propsInterface": "name and brief shape",
206
- "topLevelElement": "tag or component name",
207
- "domOrder": ["child1", "child2", "child3"],
208
- "conditionalBranches": [
209
- {"predicate": "condition expression", "renderedSubtree": "brief description"}
210
- ],
211
- "callSites": ["path/to/consumer:line"]
212
- }
177
+ {"name": "ComponentName", "filePath": "path/to/file:lineNumber", "propsInterface": "name and brief shape", "topLevelElement": "tag or component name", "domOrder": ["child1", "child2", "child3"], "conditionalBranches": [{"predicate": "condition expression", "renderedSubtree": "brief description"}], "callSites": ["path/to/consumer:line"]}
213
178
  ],
214
179
  "propsPatterns": [
215
- {
216
- "component": "ComponentName",
217
- "callSite": "path/to/file:line",
218
- "props": {"variant": "primary", "size": "md"},
219
- "computedProps": ["onClick (useCallback)"],
220
- "groupKey": "primary-md"
221
- }
180
+ {"component": "ComponentName", "callSite": "path/to/file:line", "props": {"variant": "primary", "size": "md"}, "computedProps": ["onClick (useCallback)"], "groupKey": "primary-md"}
222
181
  ],
223
182
  "cssLayout": [
224
- {
225
- "filePath": "path/to/styles.module.css",
226
- "classNamingConvention": "camelCase|kebab-case|BEM",
227
- "baseClass": "root",
228
- "layouts": [
229
- {
230
- "selector": ".className",
231
- "display": "flex|grid|block",
232
- "direction": "row|column|grid-template",
233
- "gap": "8px|none",
234
- "wrap": "wrap|nowrap|absent",
235
- "logicalProperties": true,
236
- "stateSelectors": ["[data-state=active]", "[aria-selected=true]"]
237
- }
238
- ],
239
- "responsiveBreakpoints": ["768px", "1024px"]
240
- }
183
+ {"filePath": "path/to/styles.module.css", "classNamingConvention": "camelCase|kebab-case|BEM", "baseClass": "root", "layouts": [{"selector": ".className", "display": "flex|grid|block", "direction": "row|column|grid-template", "gap": "8px|none", "wrap": "wrap|nowrap|absent", "logicalProperties": true, "stateSelectors": ["[data-state=active]", "[aria-selected=true]"]}], "responsiveBreakpoints": ["768px", "1024px"]}
241
184
  ],
242
185
  "stateDisplay": [
243
- {
244
- "component": "ComponentName",
245
- "states": [
246
- {"name": "loading|empty|partial|error|ready|disabled", "trigger": "what causes this state", "renders": "brief description"}
247
- ],
248
- "unsupportedStates": ["states the component does not currently express"]
249
- }
186
+ {"component": "ComponentName", "states": [{"name": "loading|empty|partial|error|ready|disabled", "trigger": "what causes this state", "renders": "brief description"}], "unsupportedStates": ["states the component does not currently express"]}
250
187
  ],
251
188
  "displayConditions": [
252
- {
253
- "component": "ComponentName",
254
- "condition": "feature_flag|role|route|region|tenant|page_context",
255
- "predicateLocation": "path/to/file:line",
256
- "predicate": "expression",
257
- "gatedSubtree": "brief description"
258
- }
189
+ {"component": "ComponentName", "condition": "feature_flag|role|route|region|tenant|page_context", "predicateLocation": "path/to/file:line", "predicate": "expression", "gatedSubtree": "brief description"}
259
190
  ],
260
- "i18n": {
261
- "format": "csv|json|code-catalog|other",
262
- "structuralConventions": {"csvColumns": 2, "trailingComma": false, "jsonNestingDepth": 1},
263
- "keyNamingConvention": "pattern with examples",
264
- "locales": ["ja-JP", "en-US"],
265
- "localeGaps": ["keys present in one locale only"],
266
- "generatedTypings": {"command": "generator command", "outputPath": "path/to/output"}
267
- },
191
+ "i18n": {"format": "csv|json|code-catalog|other", "structuralConventions": {"csvColumns": 2, "trailingComma": false, "jsonNestingDepth": 1}, "keyNamingConvention": "pattern with examples", "locales": ["ja-JP", "en-US"], "localeGaps": ["keys present in one locale only"], "generatedTypings": {"command": "generator command", "outputPath": "path/to/output"}},
268
192
  "accessibility": [
269
- {
270
- "component": "ComponentName",
271
- "ariaAttributes": ["role=button", "aria-label fed by prop accessibleName"],
272
- "keyboardHandling": "Enter and Space mapped to onClick",
273
- "focusStyling": "focus-visible outline",
274
- "testCoverage": "axe checks present|absent"
275
- }
193
+ {"component": "ComponentName", "ariaAttributes": ["role=button", "aria-label fed by prop accessibleName"], "keyboardHandling": "Enter and Space mapped to onClick", "focusStyling": "focus-visible outline", "testCoverage": "axe checks present|absent"}
276
194
  ],
277
195
  "generatedArtifacts": [
278
- {
279
- "kind": "css-module-typings|message-catalog-typings|route-typings|other",
280
- "command": "generator command",
281
- "trigger": "on *.module.css change|manual|other",
282
- "consumers": ["typecheck", "test", "build", "runtime"]
283
- }
196
+ {"kind": "css-module-typings|message-catalog-typings|route-typings|other", "command": "generator command", "trigger": "on *.module.css change|manual|other", "consumers": ["typecheck", "test", "build", "runtime"]}
284
197
  ],
285
198
  "focusAreas": [
286
- {
287
- "fact_id": "src/components/Card/Card.tsx:Card",
288
- "area": "Brief UI area name",
289
- "evidence": "componentStructure[name=Card] | cssLayout[selector=.root] | propsPatterns[groupKey=...] | externalResources.designOrigin",
290
- "factsToAddress": "Concrete UI facts the designer or implementer must respect",
291
- "risk": "What inconsistency results if these facts are omitted"
292
- }
199
+ {"fact_id": "src/components/Card/Card.tsx:Card", "area": "Brief UI area name", "evidence": "componentStructure[name=Card] | cssLayout[selector=.root] | propsPatterns[groupKey=...] | externalResources.designOrigin", "factsToAddress": "Concrete UI facts the designer or implementer must respect", "risk": "What inconsistency results if these facts are omitted"}
293
200
  ],
294
201
  "candidateWriteSet": [
295
- {
296
- "path": "src/components/Card/Card.tsx",
297
- "reasonRef": "focusAreas[fact_id=src/components/Card/Card.tsx:Card]",
298
- "confidence": "high|medium|low"
299
- }
202
+ {"path": "src/components/Card/Card.tsx", "reasonRef": "focusAreas[fact_id=src/components/Card/Card.tsx:Card]", "confidence": "high|medium|low"}
300
203
  ],
301
- "limitations": [
302
- "Areas the analysis could not reach with confidence"
303
- ]
204
+ "limitations": ["Areas the analysis could not reach with confidence"]
304
205
  }
305
206
  ```
306
207
 
@@ -25,10 +25,10 @@ You are a UI specification specialist AI assistant for creating UI Specification
25
25
  ## Required Information
26
26
 
27
27
  - **PRD**: PRD document path, used when a PRD exists for the feature. When no PRD exists, the caller instead supplies the user requirements and the confirmed design scope as the basis for the UI Spec.
28
- - **codebase_analysis**: Codebase analysis JSON from codebase-analyzer (provided by the caller, especially in the no-PRD case). Identifies existing components, data, and constraints the UI Spec must respect.
28
+ - **codebase_analysis**: Codebase analysis JSON (provided by the caller, especially in the no-PRD case). Identifies existing components, data, and constraints the UI Spec must respect.
29
29
  - **Prototype code path**: Path to prototype code (optional, placed in `docs/ui-spec/assets/{feature-name}/`)
30
30
  - **Existing frontend codebase**: Will be investigated automatically
31
- - **ui_analysis**: UI fact-gathering JSON from ui-analyzer (optional). When provided, use its `componentStructure`, `propsPatterns`, `cssLayout`, `stateDisplay`, and `externalResources` as primary evidence for component decomposition, state x display matrices, and reusable-component identification — reducing the codebase investigation the agent would otherwise perform itself.
31
+ - **ui_analysis**: UI fact-gathering JSON (optional). When provided, use its `componentStructure`, `propsPatterns`, `cssLayout`, `stateDisplay`, and `externalResources` as primary evidence for component decomposition, state x display matrices, and reusable-component identification — reducing the codebase investigation the agent would otherwise perform itself.
32
32
 
33
33
  ## Mandatory Process Before UI Spec Creation
34
34
 
@@ -105,7 +105,7 @@ Execute file output immediately (considered approved at execution).
105
105
  - [ ] If prototype provided: prototype is placed in `docs/ui-spec/assets/`
106
106
  - [ ] All TBDs in Open Items have owner and deadline
107
107
  - [ ] All UI Spec requirements align with PRD requirements
108
- - [ ] **Component heading uniqueness**: Every component is documented under a section heading whose text is unique within this UI Spec. Use the format `## Component: [ComponentName]` (or `### Component: [ComponentName]` when nested under a screen). Downstream agents (work-planner Step 5a, task-decomposer UI Spec Propagation) reference components by exact heading text — duplicate or paraphrased headings break the propagation chain.
108
+ - [ ] **Component heading uniqueness**: Every component is documented under a section heading whose text is unique within this UI Spec. Use the format `## Component: [ComponentName]` (or `### Component: [ComponentName]` when nested under a screen). Downstream steps reference components by exact heading text — duplicate or paraphrased headings break the propagation chain.
109
109
  - **Disambiguation rule**: When two components share a base name (e.g., the same `AlertCard` rendered as a banner variant and as an inline variant), append a parenthetical qualifier to make each heading unique: `Component: AlertCard (Banner variant)` and `Component: AlertCard (Inline variant)`. Verify uniqueness with a final pass: extract all `Component: ` headings, confirm zero duplicates
110
110
 
111
111
  ## Important Design Principles
@@ -61,7 +61,8 @@ Check the input `pathMap` for completeness:
61
61
 
62
62
  1. **Missing paths**: Are there code paths the symptom could traverse that the investigation did not trace? (e.g., error handling branches, async forks, fallback paths)
63
63
  2. **Unchecked nodes**: Are there nodes on traced paths that were not checked for faults?
64
- 3. **Additional failure points**: If missing paths or unchecked nodes reveal new faults, record them
64
+ 3. **Adjacent cases**: When the investigation concerns a `bug-fix`, `regression`, `state-change`, or `boundary-change` (the debugging flow carries no Change Category field, so judge these from the investigation itself), are there cases sharing the same path, contract, persisted state, or external boundary that could carry the same fault? Trace all plausible adjacent cases, or explicitly justify any left untraced
65
+ 4. **Additional failure points**: If missing paths, unchecked nodes, or adjacent cases reveal new faults, record them
65
66
 
66
67
  The goal is to verify that the investigation's path coverage is sufficient.
67
68
 
@@ -115,78 +116,33 @@ Final message: exactly one JSON object matching the schema below (begins with `{
115
116
  "identifiedGaps": ["Missing paths or unchecked nodes"]
116
117
  },
117
118
  "triangulationSupplements": [
118
- {
119
- "source": "Additional information source investigated",
120
- "findings": "Content discovered",
121
- "impactOnFailurePoints": "Impact on existing failure points"
122
- }
119
+ {"source": "Additional information source investigated", "findings": "Content discovered", "impactOnFailurePoints": "Impact on existing failure points"}
123
120
  ],
124
121
  "externalResearch": [
125
- {
126
- "query": "Search query used",
127
- "source": "Information source",
128
- "findings": "Related information discovered",
129
- "impactOnFailurePoints": "Impact on failure points"
130
- }
122
+ {"query": "Search query used", "source": "Information source", "findings": "Related information discovered", "impactOnFailurePoints": "Impact on failure points"}
131
123
  ],
132
124
  "coverageCheck": {
133
125
  "missingPaths": ["Paths not traced in the investigation input"],
134
126
  "uncheckedNodes": ["Nodes on traced paths that were not checked"],
135
127
  "additionalFailurePoints": [
136
- {
137
- "id": "AFP1",
138
- "nodeId": "Node reference",
139
- "symptomId": "Symptom reference",
140
- "description": "Newly discovered fault",
141
- "checkStatus": "supported|weakened|blocked|not_reached",
142
- "evidence": [
143
- {"type": "supporting", "detail": "Evidence detail", "source": "file:line"}
144
- ]
145
- }
128
+ {"id": "AFP1", "nodeId": "Node reference", "symptomId": "Symptom reference", "description": "Newly discovered fault", "checkStatus": "supported|weakened|blocked|not_reached", "evidence": [{"type": "supporting", "detail": "Evidence detail", "source": "file:line"}]}
146
129
  ]
147
130
  },
148
131
  "devilsAdvocateFindings": [
149
- {
150
- "targetFailurePoint": "FP1",
151
- "alternativeExplanation": "Could this be correct behavior?",
152
- "hiddenAssumptions": ["Implicit assumptions"],
153
- "potentialCounterEvidence": ["Potentially overlooked counter-evidence"]
154
- }
132
+ {"targetFailurePoint": "FP1", "alternativeExplanation": "Could this be correct behavior?", "hiddenAssumptions": ["Implicit assumptions"], "potentialCounterEvidence": ["Potentially overlooked counter-evidence"]}
155
133
  ],
156
134
  "failurePointEvaluation": [
157
- {
158
- "failurePointId": "FP1 or AFP1",
159
- "description": "Failure point description",
160
- "originalCheckStatus": "checkStatus from the investigation input (null when the AFP is discovered during verification)",
161
- "finalStatus": "supported|weakened|blocked|not_reached",
162
- "statusChangeReason": "Why status changed (if changed)",
163
- "remainingUncertainty": ["Remaining uncertainty"]
164
- }
135
+ {"failurePointId": "FP1 or AFP1", "description": "Failure point description", "originalCheckStatus": "checkStatus from the investigation input (null when the AFP is discovered during verification)", "finalStatus": "supported|weakened|blocked|not_reached", "statusChangeReason": "Why status changed (if changed)", "remainingUncertainty": ["Remaining uncertainty"]}
165
136
  ],
166
137
  "conclusion": {
167
138
  "confirmedFailurePoints": [
168
- {
169
- "failurePointId": "FP1",
170
- "description": "What the fault is",
171
- "location": "file:line",
172
- "symptomId": "S1",
173
- "symptomExplained": "How this fault leads to the observed symptom",
174
- "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
175
- "finalStatus": "supported|weakened",
176
- "causalChain": ["Phenomenon", "→ Direct cause", "→ Root cause"],
177
- "impactScope": ["Affected file paths"],
178
- "recurrenceRisk": "low|medium|high"
179
- }
139
+ {"failurePointId": "FP1", "description": "What the fault is", "location": "file:line", "symptomId": "S1", "symptomExplained": "How this fault leads to the observed symptom", "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor", "finalStatus": "supported|weakened", "causalChain": ["Phenomenon", "→ Direct cause", "→ Root cause"], "impactScope": ["Affected file paths"], "recurrenceRisk": "low|medium|high"}
180
140
  ],
181
141
  "refutedFailurePoints": [
182
142
  {"failurePointId": "FP2", "reason": "Reason for refutation"}
183
143
  ],
184
144
  "failurePointRelationships": [
185
- {
186
- "points": ["FP1", "FP3"],
187
- "relationship": "independent|dependent|same_chain",
188
- "detail": "Description of how the failure points relate"
189
- }
145
+ {"points": ["FP1", "FP3"], "relationship": "independent|dependent|same_chain", "detail": "Description of how the failure points relate"}
190
146
  ],
191
147
  "coverageAssessment": "sufficient|partial|insufficient",
192
148
  "unresolvedSymptoms": ["Symptoms not fully explained by confirmed failure points"],
@@ -74,9 +74,9 @@ service-integration-e2e gap:
74
74
  Detected boundaries: [list crossings and AC references]
75
75
  ```
76
76
 
77
- "Was not communicated" means the upstream planning flow skipped test skeleton generation entirely — in that case the absence reason field is not passed to work-planner, so the gap check still runs. Per acceptance-test-generator's contract, when a skeleton was generated `e2eAbsenceReason.<lane>` is null; when generation ran but produced no skeleton, the reason is one of the strings enumerated in that contract — both cases mean the field WAS communicated, so no gap warning fires.
77
+ "Was not communicated" means the upstream planning flow skipped test skeleton generation entirely — in that case the absence reason field is not provided, so the gap check still runs. Per the test-skeleton generation contract, when a skeleton was generated `e2eAbsenceReason.<lane>` is null; when generation ran but produced no skeleton, the reason is one of the strings enumerated in that contract — both cases mean the field WAS communicated, so no gap warning fires.
78
78
 
79
- When an `e2eAbsenceReason` for a lane carries a string value (e.g., `no_multi_step_journey`, `below_threshold_user_confirmed`, `no_real_service_dependency` — see acceptance-test-generator for the per-lane allowed values), absence in that lane is intentional — skip the gap check for that lane.
79
+ When an `e2eAbsenceReason` for a lane carries a string value (e.g., `no_multi_step_journey`, `below_threshold_user_confirmed`, `no_real_service_dependency` — see the test-skeleton generation contract for the per-lane allowed values), absence in that lane is intentional — skip the gap check for that lane.
80
80
 
81
81
  This check applies regardless of whether Strategy A or B was selected. Integration-only skeletons being provided does not imply E2E coverage. Service-internal journeys (async pipelines, service-to-service sagas) are not flagged for the reserved-slot rule but may still warrant service-integration-e2e through the normal ROI path.
82
82
 
@@ -98,36 +98,38 @@ Map each extracted item to a covering task. Items may be covered by a dedicated
98
98
 
99
99
  If an item has no covering task, set Gap Status to `gap` with justification in Notes. **When the Traceability table contains any `gap` entry, the plan is in draft status.** Output the plan as draft, but do not finalize it until the user has confirmed each justified gap. Unjustified gaps (no Notes) are errors — add a covering task or provide justification before proceeding.
100
100
 
101
+ **Carry binding observable values verbatim.** Identify binding observable values from the Design Doc directly, not from the Traceability table's summarized DD Item, so the exact column/label order and derived-display rules are not lost to a summary. A binding observable value is a column/label set and order (Contract Type `structure-order`), a derived-display rule — a display value derived from another field — (`derived-display`), or a state-lifecycle negative — a condition under which the state must stay unused — (`state-lifecycle-negative`). Copy each value **verbatim from the Design Doc** into the plan's **Reference Contract Values** table (see plan template), one row per value with its Contract Type token, mapped to the covering task(s). Preserve the full value, so the covering task is later checked against this exact value rather than a re-derived summary. This table covers DD-derived observable contracts only; serialized boundaries go in the Connection Map (step 5b) and ADR-derived structural decisions in the ADR Bindings table.
102
+
101
103
  ### 5a. Map UI Spec Components to Tasks (when UI Spec provided)
102
104
 
103
- When a UI Spec is among the inputs, also map components and states to the tasks that implement them. task-decomposer reads this mapping in a downstream step to populate each task's Investigation Targets, so without this step the UI Spec never reaches the executor.
105
+ When a UI Spec is among the inputs, also map components and states to the tasks that implement them. This mapping is read in a downstream step to populate each task's Investigation Targets, so without it the UI Spec never reaches implementation.
104
106
 
105
107
  For each component documented in the UI Spec:
106
- 1. Identify the component's section heading exactly as it appears in the UI Spec (the heading is the reference key see ui-spec-designer's heading uniqueness rule)
108
+ 1. Identify the component's section heading exactly as it appears in the UI Spec (the heading is the reference key, and headings are unique)
107
109
  2. Identify which states (default / loading / empty / error / partial) the implementation must cover
108
110
  3. Identify the task(s) in this plan that implement the component or its tests
109
111
 
110
112
  Record the mapping in the **UI Spec Component → Task Mapping** table (see plan template). One row per component. Components with no covering task are flagged as `gap` requiring user confirmation, identical to the Design-to-Plan Traceability rule.
111
113
 
112
- ### 5b. Map Cross-Package Boundaries to Tasks (when implementation crosses runtime/deployment boundaries)
114
+ ### 5b. Map Boundaries to Tasks (when crossing a runtime/deployment boundary, or passing a serialized value across any boundary)
113
115
 
114
- When the implementation crosses a runtime or deployment boundary, build a Connection Map so task-decomposer can propagate boundary context to each affected task.
116
+ Build a Connection Map when the implementation crosses a runtime or deployment boundary, **or when a value is serialized and re-parsed across any boundary (even within one runtime)**, so boundary context propagates to each affected task in the downstream step.
115
117
 
116
- **A boundary qualifies for the Connection Map only when ALL of the following hold**:
117
- - The two sides run in separate processes, services, or runtimes (e.g., web client ↔ HTTP server, service A ↔ service B over a network, frontend bundle ↔ backend handler)
118
- - A serialized contract crosses between them (HTTP request/response, message envelope, RPC call, event payload)
119
- - A failure on one side produces an observable signal on the other (status code, missing field, timeout, dropped message)
118
+ **A boundary qualifies for the Connection Map when EITHER condition holds**:
119
+ - *Cross-process*: the two sides run in separate processes, services, or runtimes (web client ↔ HTTP server, service A ↔ service B, frontend bundle ↔ backend handler); a serialized contract crosses between them (HTTP request/response, message envelope, RPC, event payload); and a failure on one side produces an observable signal on the other.
120
+ - *Serialized in-runtime*: a value is encoded and re-parsed across a boundary even within a single runtime — through a medium such as a query string, CLI argument, environment variable, config entry, message/queue payload, storage key, or file (e.g., one component encodes a value another component or process later decodes; a value written to storage and read after a transition). Producer and consumer must agree on the exact representation.
120
121
 
121
122
  **Excluded — these are NOT boundaries for the Connection Map**:
122
- - A package importing a sibling utility, type definition, or shared constant from the same monorepo (in-process, no serialized contract)
123
- - Internal layering within the same runtime (e.g., handler → usecase → repository)
123
+ - A package importing a sibling utility, type definition, or shared constant from the same monorepo (in-process, no serialized value)
124
+ - Internal layering within the same runtime where values pass as typed in-memory calls (e.g., handler → usecase → repository)
124
125
  - Source code dependencies that compile/bundle into the same artifact
125
126
 
126
127
  For each qualifying boundary:
127
- 1. Identify the boundary (e.g., `webAPI gateway`, `service-Aservice-B`, `frontendshared client backend handler`)
128
- 2. Identify the owner module/package on each side
129
- 3. Identify the expected signal that confirms the boundary works (e.g., HTTP 200 with schema X, message published to topic Y, row inserted in table Z)
130
- 4. Identify the task(s) that implement either side of the boundary
128
+ 1. Identify the boundary (e.g., `service A service B`, `producerstorage → consumer`, `component A component B via an encoded parameter`)
129
+ 2. Identify the owner on each side (producer and consumer) and record it as concrete file path(s), not a bare module/package/component name, so it resolves as an Investigation Target downstream
130
+ 3. For a serialized boundary, record the **Serialized Format** (the exact representation the producer emits) and the **Consumer Parse Rule** (how the consumer decodes/validates it). Set both to "—" when the contract is already captured by the Expected Signal (e.g., a cross-process call whose body matches the agreed schema); fill them when producer and consumer must agree on a specific encoding of a value (query string, storage key, CLI argument, config entry, message field).
131
+ 4. Identify the expected signal that confirms the boundary works (e.g., a response matching the agreed schema; the consumer reproducing the producer's values)
132
+ 5. Identify the task(s) that implement either side of the boundary
131
133
 
132
134
  Record the mapping in the **Connection Map** table (see plan template). Omit this section entirely when no qualifying boundary exists.
133
135
 
@@ -162,8 +164,8 @@ For each task, derive completion criteria from Design Doc acceptance criteria. A
162
164
  ## Input Parameters
163
165
 
164
166
  - **mode**: `create` (default) | `update`
165
- - **scale**: `small` | `medium` | `large` (taken from requirement-analyzer; controls output mode — see "Output Mode by Scale" below)
166
- - **designDoc**: Path to Design Doc(s) (may be multiple for cross-layer features). At `scale: small` Design Doc may be absent; in that case derive the task directly from the requirement-analyzer output and PRD update notes.
167
+ - **scale**: `small` | `medium` | `large` (taken from the requirements-analysis result; controls output mode — see "Output Mode by Scale" below)
168
+ - **designDoc**: Path to Design Doc(s) (may be multiple for cross-layer features). At `scale: small` Design Doc may be absent; in that case derive the task directly from the requirements-analysis output and PRD update notes.
167
169
  - **uiSpec** (optional): Path to UI Specification (frontend/fullstack features)
168
170
  - **prd** (optional): Path to PRD document
169
171
  - **adr** (optional): Path to ADR document
@@ -174,8 +176,8 @@ For each task, derive completion criteria from Design Doc acceptance criteria. A
174
176
 
175
177
  | scale | Output | Path | Rationale |
176
178
  |---|---|---|---|
177
- | `small` | A single task file in **task-template format** (per documentation-criteria skill) | `docs/plans/tasks/{feature-name}-task-YYYYMMDD.md` | At 1-2 files there is no separate decomposition step; the task file the orchestrator passes to task-executor as `task_file` is produced directly here. |
178
- | `medium` / `large` | A work plan in **plan-template format** | `docs/plans/{feature-name}-plan.md` | Decomposition into individual task files is performed by task-decomposer in a downstream step. |
179
+ | `small` | A single task file in **task-template format** (per documentation-criteria skill) | `docs/plans/tasks/{feature-name}-task-YYYYMMDD.md` | At 1-2 files there is no separate decomposition step; the task file passed to the execution step as `task_file` is produced directly here. |
180
+ | `medium` / `large` | A work plan in **plan-template format** | `docs/plans/{feature-name}-plan.md` | Decomposition into individual task files is performed in a downstream step. |
179
181
 
180
182
  In `small` mode, skip the multi-phase composition (Step 4) and the Design-to-Plan Traceability mapping (Step 5); produce the task file with `## Target Files`, `## Investigation Targets`, `## Investigation Notes`, `## Implementation Steps (TDD: Red-Green-Refactor)`, `## Quality Assurance Mechanisms`, `## Operation Verification Methods`, and `## Completion Criteria` sections, plus the `Metadata:` block (`Dependencies:`, `Provides:`, `Size:`). Do not output a separate work plan file at this scale.
181
183
 
@@ -352,11 +354,14 @@ When creating work plans, **Phase Structure Diagrams** and **Task Dependency Dia
352
354
  - [ ] Design-to-Plan Traceability table complete (all DD technical requirements categorized and mapped)
353
355
  - [ ] No `gap` entries without justification
354
356
  - [ ] All justified `gap` entries flagged for user confirmation before plan approval
357
+ - [ ] Reference Contract Values table complete (when the Design Doc specifies binding observable values: column/label order, derived-display, state-lifecycle negative)
358
+ - [ ] Each value copied verbatim from the Design Doc, preserving full wording, and mapped to a covering task
355
359
  - [ ] UI Spec Component → Task Mapping table complete (when UI Spec provided)
356
360
  - [ ] Every UI Spec component has a covering task, OR an explicit `gap` justification
357
361
  - [ ] Component reference uses the UI Spec section heading exactly as it appears in the document
358
- - [ ] Connection Map table complete (when implementation crosses packages/services)
359
- - [ ] Every boundary lists owner modules and expected signal
362
+ - [ ] Connection Map table complete (when crossing packages/services, or passing a serialized value across any boundary)
363
+ - [ ] Every boundary lists owner file path(s) and expected signal
364
+ - [ ] Serialized boundaries record Serialized Format and Consumer Parse Rule
360
365
  - [ ] Every boundary maps to at least one covering task on each side
361
366
  - [ ] ADR Bindings table complete (when ADR provided or referenced from Design Doc)
362
367
  - [ ] Each row represents one implementation-binding decision (placement, dependency, contract, data flow, or persistence)