codex-workflows 0.6.8 → 0.7.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 (41) hide show
  1. package/.agents/skills/ai-development-guide/SKILL.md +5 -3
  2. package/.agents/skills/ai-development-guide/references/frontend.md +11 -19
  3. package/.agents/skills/coding-rules/references/typescript.md +17 -12
  4. package/.agents/skills/documentation-criteria/SKILL.md +1 -1
  5. package/.agents/skills/documentation-criteria/references/design-template.md +16 -5
  6. package/.agents/skills/documentation-criteria/references/plan-template.md +19 -5
  7. package/.agents/skills/documentation-criteria/references/task-template.md +19 -1
  8. package/.agents/skills/recipe-build/SKILL.md +1 -1
  9. package/.agents/skills/recipe-front-build/SKILL.md +1 -1
  10. package/.agents/skills/recipe-front-plan/SKILL.md +1 -1
  11. package/.agents/skills/recipe-fullstack-build/SKILL.md +1 -1
  12. package/.agents/skills/recipe-plan/SKILL.md +1 -1
  13. package/.agents/skills/recipe-prepare-implementation/SKILL.md +2 -1
  14. package/.agents/skills/subagents-orchestration-guide/SKILL.md +2 -2
  15. package/.agents/skills/subagents-orchestration-guide/references/monorepo-flow.md +1 -1
  16. package/.agents/skills/testing/SKILL.md +5 -5
  17. package/.agents/skills/testing/references/typescript.md +2 -6
  18. package/.codex/agents/acceptance-test-generator.toml +2 -44
  19. package/.codex/agents/code-reviewer.toml +12 -57
  20. package/.codex/agents/code-verifier.toml +1 -47
  21. package/.codex/agents/codebase-analyzer.toml +1 -106
  22. package/.codex/agents/design-sync.toml +2 -64
  23. package/.codex/agents/document-reviewer.toml +8 -81
  24. package/.codex/agents/integration-test-reviewer.toml +1 -26
  25. package/.codex/agents/investigator.toml +1 -73
  26. package/.codex/agents/quality-fixer-frontend.toml +4 -105
  27. package/.codex/agents/quality-fixer.toml +4 -122
  28. package/.codex/agents/requirement-analyzer.toml +1 -29
  29. package/.codex/agents/rule-advisor.toml +1 -79
  30. package/.codex/agents/scope-discoverer.toml +1 -70
  31. package/.codex/agents/security-reviewer.toml +1 -19
  32. package/.codex/agents/solver.toml +5 -54
  33. package/.codex/agents/task-decomposer.toml +47 -4
  34. package/.codex/agents/task-executor-frontend.toml +37 -144
  35. package/.codex/agents/task-executor.toml +37 -144
  36. package/.codex/agents/technical-designer-frontend.toml +8 -0
  37. package/.codex/agents/technical-designer.toml +10 -1
  38. package/.codex/agents/ui-analyzer.toml +1 -157
  39. package/.codex/agents/verifier.toml +2 -65
  40. package/.codex/agents/work-planner.toml +30 -9
  41. package/package.json +1 -1
@@ -126,163 +126,7 @@ Produce `candidateWriteSet[]` with likely modified files:
126
126
  Return a single JSON object as the final response:
127
127
 
128
128
  ```json
129
- {
130
- "analysisScope": {
131
- "filesAnalyzed": ["path/to/component.tsx"],
132
- "stylesAnalyzed": ["path/to/styles.module.css"],
133
- "uiConventions": {
134
- "componentExtension": ".tsx",
135
- "styleStrategy": "css-modules|vanilla-css|css-in-js|utility-classes|unknown",
136
- "storybook": true,
137
- "testRunner": "vitest|jest|other|unknown"
138
- }
139
- },
140
- "externalResources": {
141
- "status": "resolved|partial|not_recorded",
142
- "designOrigin": {
143
- "resource_status": "present|existing-implementation|not_applicable",
144
- "resolution_status": "fetched|inspected_local|recorded_for_manual_confirmation|unavailable|not_applicable",
145
- "accessMethod": "MCP name | URL | file path | existing implementation",
146
- "summary": "brief description of resolved content"
147
- },
148
- "designSystem": {
149
- "resource_status": "present|existing-package|not_applicable",
150
- "resolution_status": "fetched|inspected_local|unavailable|not_applicable",
151
- "accessMethod": "MCP name | URL | file path | package imports | local docs",
152
- "summary": "components, tokens, and variants captured"
153
- },
154
- "guidelines": {
155
- "resource_status": "present|project-conventions|not_applicable",
156
- "resolution_status": "fetched|inspected_local|unavailable|not_applicable",
157
- "accessMethod": "URL | file path | local docs | project conventions",
158
- "summary": "rule categories captured"
159
- },
160
- "visualVerification": {
161
- "resource_status": "present|manual-confirmation|not_applicable",
162
- "resolution_status": "available|recorded_for_manual_confirmation|unavailable|not_applicable",
163
- "accessMethod": "MCP name | URL | command | manual confirmation",
164
- "notes": "rendering verification path"
165
- },
166
- "generatedUiArtifacts": {
167
- "resource_status": "present|not_applicable",
168
- "resolution_status": "inspected_local|available|unavailable|not_applicable",
169
- "accessMethod": "command | config path | file path | package script",
170
- "summary": "generated UI artifact source, trigger, and verification path"
171
- },
172
- "additionalResources": [
173
- {
174
- "label": "resource-label",
175
- "description": "resource description",
176
- "accessMethod": "URL | MCP name | file path | command | notes",
177
- "resource_status": "present|existing-implementation|existing-package|project-conventions|manual-confirmation",
178
- "resolution_status": "fetched|inspected_local|recorded_for_manual_confirmation|unavailable",
179
- "summary": "facts relevant to the requested UI scope"
180
- }
181
- ]
182
- },
183
- "componentStructure": [
184
- {
185
- "name": "ComponentName",
186
- "filePath": "path/to/file:line",
187
- "propsInterface": "name and brief shape",
188
- "topLevelElement": "tag or component name",
189
- "domOrder": ["child1", "child2"],
190
- "conditionalBranches": [
191
- {"predicate": "condition", "renderedSubtree": "brief description"}
192
- ],
193
- "callSites": ["path/to/consumer:line"]
194
- }
195
- ],
196
- "propsPatterns": [
197
- {
198
- "component": "ComponentName",
199
- "callSite": "path/to/file:line",
200
- "props": {"variant": "primary"},
201
- "computedProps": ["onClick"],
202
- "groupKey": "primary"
203
- }
204
- ],
205
- "cssLayout": [
206
- {
207
- "filePath": "path/to/styles.module.css",
208
- "classNamingConvention": "camelCase|kebab-case|BEM|unknown",
209
- "baseClass": "root",
210
- "layouts": [
211
- {
212
- "selector": ".root",
213
- "display": "flex|grid|block|unknown",
214
- "direction": "row|column|grid-template|unknown",
215
- "gap": "8px|none|unknown",
216
- "wrap": "wrap|nowrap|absent|unknown",
217
- "logicalProperties": true,
218
- "stateSelectors": ["[data-state=active]"]
219
- }
220
- ],
221
- "responsiveBreakpoints": ["768px"]
222
- }
223
- ],
224
- "stateDisplay": [
225
- {
226
- "component": "ComponentName",
227
- "states": [
228
- {"name": "loading|empty|partial|error|ready|disabled", "trigger": "what causes this state", "renders": "brief description"}
229
- ],
230
- "unsupportedStates": ["state absent from current component"]
231
- }
232
- ],
233
- "displayConditions": [
234
- {
235
- "component": "ComponentName",
236
- "condition": "feature_flag|role|route|region|tenant|page_context",
237
- "predicateLocation": "path/to/file:line",
238
- "predicate": "expression",
239
- "gatedSubtree": "brief description"
240
- }
241
- ],
242
- "i18n": {
243
- "format": "csv|json|code-catalog|other|none",
244
- "structuralConventions": {},
245
- "keyNamingConvention": "",
246
- "locales": [],
247
- "localeGaps": [],
248
- "generatedTypings": {"command": "", "outputPath": ""}
249
- },
250
- "accessibility": [
251
- {
252
- "component": "ComponentName",
253
- "ariaAttributes": ["role=button", "aria-label from prop"],
254
- "keyboardHandling": "Enter and Space trigger action",
255
- "focusStyling": "focus-visible outline",
256
- "testCoverage": "axe checks present|absent|unknown"
257
- }
258
- ],
259
- "generatedArtifacts": [
260
- {
261
- "kind": "css-module-typings|message-catalog-typings|route-typings|other",
262
- "command": "generator command",
263
- "trigger": "on source change|manual|unknown",
264
- "consumers": ["typecheck", "test", "build", "runtime"],
265
- "resourceRef": "externalResources.generatedUiArtifacts"
266
- }
267
- ],
268
- "focusAreas": [
269
- {
270
- "fact_id": "path:identifier",
271
- "area": "Brief UI area name",
272
- "evidence": "componentStructure[name=...]",
273
- "factsToAddress": "Concrete UI facts to respect",
274
- "risk": "What inconsistency results if omitted"
275
- }
276
- ],
277
- "candidateWriteSet": [
278
- {
279
- "path": "src/components/Card.tsx",
280
- "reasonRef": "focusAreas[fact_id=...]",
281
- "confidence": "high|medium|low"
282
- }
283
- ],
284
- "limitations": []
285
- }
129
+ {"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|unknown","storybook":true,"testRunner":"vitest|jest|other|unknown"}},"externalResources":{"status":"resolved|partial|not_recorded","designOrigin":{"resource_status":"present|existing-implementation|not_applicable","resolution_status":"fetched|inspected_local|recorded_for_manual_confirmation|unavailable|not_applicable","accessMethod":"MCP name | URL | file path | existing implementation","summary":"brief description of resolved content"},"designSystem":{"resource_status":"present|existing-package|not_applicable","resolution_status":"fetched|inspected_local|unavailable|not_applicable","accessMethod":"MCP name | URL | file path | package imports | local docs","summary":"components, tokens, and variants captured"},"guidelines":{"resource_status":"present|project-conventions|not_applicable","resolution_status":"fetched|inspected_local|unavailable|not_applicable","accessMethod":"URL | file path | local docs | project conventions","summary":"rule categories captured"},"visualVerification":{"resource_status":"present|manual-confirmation|not_applicable","resolution_status":"available|recorded_for_manual_confirmation|unavailable|not_applicable","accessMethod":"MCP name | URL | command | manual confirmation","notes":"rendering verification path"},"generatedUiArtifacts":{"resource_status":"present|not_applicable","resolution_status":"inspected_local|available|unavailable|not_applicable","accessMethod":"command | config path | file path | package script","summary":"generated UI artifact source, trigger, and verification path"},"additionalResources":[{"label":"resource-label","description":"resource description","accessMethod":"URL | MCP name | file path | command | notes","resource_status":"present|existing-implementation|existing-package|project-conventions|manual-confirmation","resolution_status":"fetched|inspected_local|recorded_for_manual_confirmation|unavailable","summary":"facts relevant to the requested UI scope"}]},"componentStructure":[{"name":"ComponentName","filePath":"path/to/file:line","propsInterface":"name and brief shape","topLevelElement":"tag or component name","domOrder":["child1","child2"],"conditionalBranches":[{"predicate":"condition","renderedSubtree":"brief description"}],"callSites":["path/to/consumer:line"]}],"propsPatterns":[{"component":"ComponentName","callSite":"path/to/file:line","props":{"variant":"primary"},"computedProps":["onClick"],"groupKey":"primary"}],"cssLayout":[{"filePath":"path/to/styles.module.css","classNamingConvention":"camelCase|kebab-case|BEM|unknown","baseClass":"root","layouts":[{"selector":".root","display":"flex|grid|block|unknown","direction":"row|column|grid-template|unknown","gap":"8px|none|unknown","wrap":"wrap|nowrap|absent|unknown","logicalProperties":true,"stateSelectors":["[data-state=active]"]}],"responsiveBreakpoints":["768px"]}],"stateDisplay":[{"component":"ComponentName","states":[{"name":"loading|empty|partial|error|ready|disabled","trigger":"what causes this state","renders":"brief description"}],"unsupportedStates":["state absent from current component"]}],"displayConditions":[{"component":"ComponentName","condition":"feature_flag|role|route|region|tenant|page_context","predicateLocation":"path/to/file:line","predicate":"expression","gatedSubtree":"brief description"}],"i18n":{"format":"csv|json|code-catalog|other|none","structuralConventions":{},"keyNamingConvention":"","locales":[],"localeGaps":[],"generatedTypings":{"command":"","outputPath":""}},"accessibility":[{"component":"ComponentName","ariaAttributes":["role=button","aria-label from prop"],"keyboardHandling":"Enter and Space trigger action","focusStyling":"focus-visible outline","testCoverage":"axe checks present|absent|unknown"}],"generatedArtifacts":[{"kind":"css-module-typings|message-catalog-typings|route-typings|other","command":"generator command","trigger":"on source change|manual|unknown","consumers":["typecheck","test","build","runtime"],"resourceRef":"externalResources.generatedUiArtifacts"}],"focusAreas":[{"fact_id":"path:identifier","area":"Brief UI area name","evidence":"componentStructure[name=...]","factsToAddress":"Concrete UI facts to respect","risk":"What inconsistency results if omitted"}],"candidateWriteSet":[{"path":"src/components/Card.tsx","reasonRef":"focusAreas[fact_id=...]","confidence":"high|medium|low"}],"limitations":[]}
286
130
  ```
287
131
 
288
132
  ## Quality Checklist
@@ -80,6 +80,7 @@ Record each supplementary finding and its impact on the existing failure points
80
80
  - Check whether the mapped execution path adequately covers the observed symptom from entry to failure
81
81
  - Identify uncovered boundaries or unverified nodes that could hide additional failure points
82
82
  - Evaluate at least 2 additional path segments or boundaries beyond the investigator's original failure-point list
83
+ - When the investigated incident is a bug or regression, or when a failure point affects a state transition, persisted state, or external boundary, trace adjacent cases sharing the same path, contract, persisted state, or external boundary and evaluate whether they carry the same class of defect
83
84
  - Evaluate each failure point independently:
84
85
  - Is the supporting evidence sufficient?
85
86
  - Is there direct counter-evidence?
@@ -125,71 +126,7 @@ Return the JSON result as the final response. See Output Format for the schema.
125
126
  **JSON format is mandatory.**
126
127
 
127
128
  ```json
128
- {
129
- "investigationReview": {
130
- "originalFailurePointCount": 3,
131
- "coverageAssessment": "sufficient|partial|insufficient",
132
- "identifiedGaps": ["Perspectives overlooked in investigation"]
133
- },
134
- "triangulationSupplements": [
135
- {
136
- "source": "Additional information source investigated",
137
- "findings": "Content discovered",
138
- "impactOnFailurePoints": "Impact on existing failure points"
139
- }
140
- ],
141
- "scopeValidation": {
142
- "verified": true,
143
- "concerns": ["Concerns"]
144
- },
145
- "externalResearch": [
146
- {
147
- "query": "Search query used",
148
- "source": "Information source",
149
- "findings": "Related information discovered",
150
- "impactOnFailurePoints": "Impact on failure points"
151
- }
152
- ],
153
- "additionalFailurePoints": [
154
- {
155
- "id": "AFP1",
156
- "description": "Additional failure point description",
157
- "rationale": "Why this failure point was considered",
158
- "evidence": {"supporting": [], "contradicting": []},
159
- "plausibility": "high|medium|low"
160
- }
161
- ],
162
- "pathCoverageFindings": [
163
- {
164
- "nodeId": "N1",
165
- "status": "covered|partially_covered|uncovered",
166
- "findings": "Coverage finding",
167
- "followUpNeeded": ["Needed follow-up"]
168
- }
169
- ],
170
- "failurePointsEvaluation": [
171
- {
172
- "failurePointId": "FP1 or AFP1",
173
- "description": "Failure point description",
174
- "verificationLevel": "speculation|indirect|direct|verified",
175
- "refutationStatus": "unrefuted|partially_refuted|refuted",
176
- "remainingUncertainty": ["Remaining uncertainty"]
177
- }
178
- ],
179
- "conclusion": {
180
- "confirmedFailurePoints": [
181
- {"failurePointId": "FP1", "status": "confirmed|probable|possible", "originalCheckStatus": "retained|added_by_verifier|null"}
182
- ],
183
- "failurePointRelationships": [
184
- {"from": "FP1", "to": "FP2", "relationship": "independent|upstream_of|downstream_of|amplifies|same_boundary"}
185
- ],
186
- "finalStatus": "ready_for_solution|needs_more_investigation",
187
- "coverageAssessment": "sufficient|partial|insufficient",
188
- "statusRationale": "Rationale for status and coverage level",
189
- "recommendedVerification": ["Additional verification needed to confirm conclusion"]
190
- },
191
- "verificationLimitations": ["Limitations of this verification process"]
192
- }
129
+ {"investigationReview":{"originalFailurePointCount":3,"coverageAssessment":"sufficient|partial|insufficient","identifiedGaps":["Perspectives overlooked in investigation"]},"triangulationSupplements":[{"source":"Additional information source investigated","findings":"Content discovered","impactOnFailurePoints":"Impact on existing failure points"}],"scopeValidation":{"verified":true,"concerns":["Concerns"]},"externalResearch":[{"query":"Search query used","source":"Information source","findings":"Related information discovered","impactOnFailurePoints":"Impact on failure points"}],"additionalFailurePoints":[{"id":"AFP1","description":"Additional failure point description","rationale":"Why this failure point was considered","evidence":{"supporting":[],"contradicting":[]},"plausibility":"high|medium|low"}],"pathCoverageFindings":[{"nodeId":"N1","status":"covered|partially_covered|uncovered","findings":"Coverage finding","followUpNeeded":["Needed follow-up"]}],"failurePointsEvaluation":[{"failurePointId":"FP1 or AFP1","description":"Failure point description","verificationLevel":"speculation|indirect|direct|verified","refutationStatus":"unrefuted|partially_refuted|refuted","remainingUncertainty":["Remaining uncertainty"]}],"conclusion":{"confirmedFailurePoints":[{"failurePointId":"FP1","status":"confirmed|probable|possible","originalCheckStatus":"retained|added_by_verifier|null"}],"failurePointRelationships":[{"from":"FP1","to":"FP2","relationship":"independent|upstream_of|downstream_of|amplifies|same_boundary"}],"finalStatus":"ready_for_solution|needs_more_investigation","coverageAssessment":"sufficient|partial|insufficient","statusRationale":"Rationale for status and coverage level","recommendedVerification":["Additional verification needed to confirm conclusion"]},"verificationLimitations":["Limitations of this verification process"]}
193
130
  ```
194
131
 
195
132
  ## Completion Criteria
@@ -141,20 +141,38 @@ Rules:
141
141
  - Record the mapping in the `UI Spec Component -> Task Mapping` table from the plan template.
142
142
  - Mark components with no covering task as `gap` with justification and user confirmation before approval.
143
143
 
144
- ### 5b. Map Runtime Boundaries to Tasks
144
+ ### 5b. Map Reference Contract Values to Tasks
145
145
 
146
- When implementation crosses runtime, process, deployment, or service boundaries, create a `Connection Map`.
146
+ After Design-to-Plan Traceability is complete, create a `Reference Contract Values` table when any traced Design Doc item contains a binding observable value the implementation must reproduce exactly. When the Design Doc has an `Observable Contract Values` table, use that table as the primary source and copy each applicable row into the work plan.
147
+
148
+ Qualifying observable values:
149
+ - `structure-order`: column sets, field sets, label sets, or display order
150
+ - `derived-display`: display value derived from another field, lookup, state, or configuration
151
+ - `state-lifecycle-negative`: condition where persisted, restored, cached, or derived state must stay unused
152
+
153
+ For each qualifying value:
154
+ 1. Record the Design Doc path and section.
155
+ 2. Classify the Contract Type using exactly one value above.
156
+ 3. Copy the Required Observable Value verbatim from the Design Doc. Preserve field names, labels, order, and conditions.
157
+ 4. Map it to the task IDs that implement or verify the value.
158
+ 5. Mark `covered` when concrete task IDs cover the value. Mark `gap` only when no concrete task covers it, set Covered By Task(s) to `-`, add justification in Notes, and flag it for user confirmation before plan approval.
159
+
160
+ Serialized boundaries belong in the Connection Map. ADR-derived structural decisions belong in ADR Bindings. When a value qualifies both as an observable value and as a serialized boundary, record it in the Connection Map and omit a duplicate Reference Contract Values row.
161
+
162
+ ### 5c. Map Runtime Boundaries to Tasks
163
+
164
+ When implementation crosses runtime, process, deployment, or service boundaries, or when a value is serialized and parsed within one runtime, create a `Connection Map`.
147
165
 
148
166
  A boundary qualifies only when all of the following hold:
149
- - The two sides run in separate processes, services, runtimes, or deployed artifacts.
150
- - A serialized contract crosses the boundary, such as HTTP, RPC, event payload, queue message, or webhook payload.
151
- - A failure on one side creates an observable signal on the other side, such as a status code, timeout, missing field, dropped message, or persisted row.
167
+ - Two sides exchange a value through a boundary. This includes separate processes, services, runtimes, or deployed artifacts, and same-runtime serialized media such as query strings, route parameters, form posts, CLI arguments, environment variables, config entries, message payloads, storage keys, or files.
168
+ - Producer and consumer depend on a shared representation or parse rule.
169
+ - A mismatch creates an observable signal, such as a status code, timeout, missing field, dropped message, invalid route state, parse failure, or persisted row difference.
152
170
 
153
- Map only boundaries satisfying all three qualifications above: separate runtime, serialized contract, and observable cross-side signal.
171
+ Map only boundaries satisfying all three qualifications above.
154
172
 
155
- For each boundary, record the caller/producer, callee/consumer, expected signal, and covering tasks in the `Connection Map` table.
173
+ For each boundary, record the caller/producer, callee/consumer, serialized format, consumer parse rule, expected signal, and covering tasks in the `Connection Map` table. Serialized boundaries must have concrete Serialized Format and Consumer Parse Rule values. Use `-` only for non-serialized external signals where the Expected Signal fully captures the contract.
156
174
 
157
- ### 5c. Map ADR Decisions to Tasks
175
+ ### 5d. Map ADR Decisions to Tasks
158
176
 
159
177
  When ADRs are provided as input or listed in a Design Doc's "Prerequisite ADRs" section, create an `ADR Bindings` table before finalizing tasks.
160
178
 
@@ -177,7 +195,7 @@ Mapping rules:
177
195
  - Acceptance criteria and required user-visible behaviors belong in `Design-to-Plan Traceability`; `ADR Bindings` covers structural implementation constraints.
178
196
  - If an ADR decision constrains the design but no task covers it, add a justified gap and flag it for user confirmation before plan approval.
179
197
 
180
- ### 5d. Build Failure Mode Checklist
198
+ ### 5e. Build Failure Mode Checklist
181
199
 
182
200
  Populate the plan template's `Failure Mode Checklist` before finalizing tasks. Enumerate all eight domain-independent categories, mark whether each applies, and list the task IDs that cover applicable categories. Keep category names generic and put project-specific details in task descriptions or notes.
183
201
 
@@ -390,6 +408,9 @@ When creating work plans, **Phase Structure Diagrams** and **Task Dependency Dia
390
408
  - [ ] Scope-boundary items mapped explicitly when the Design Doc defines protected no-change areas
391
409
  - [ ] Covered By Task(s) uses only normalized task IDs
392
410
  - [ ] No unjustified `gap` entries remain
411
+ - [ ] Reference Contract Values table completed when binding observable values appear in traced Design Doc items
412
+ - [ ] Each row mapped to covering task(s) or justified `gap`
413
+ - [ ] No unjustified `gap` entries remain
393
414
  - [ ] ADR Bindings table completed when ADRs are provided or listed in Design Doc prerequisites
394
415
  - [ ] ADR references resolved with exact path or single `docs/adr/ADR-XXXX-*.md` match
395
416
  - [ ] Each binding row has one valid Axis value
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-workflows",
3
- "version": "0.6.8",
3
+ "version": "0.7.0",
4
4
  "description": "Task-oriented agentic coding framework for OpenAI Codex CLI — skills, recipes, and subagents for structured development workflows",
5
5
  "license": "MIT",
6
6
  "author": "Shinsuke Kagawa",