cc-devflow 4.5.7 → 4.5.9
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/.claude/skills/cc-act/CHANGELOG.md +33 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +18 -4
- package/.claude/skills/cc-act/SKILL.md +76 -7
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +30 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +29 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +103 -0
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +60 -4
- package/.claude/skills/cc-act/references/closure-contract.md +7 -0
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +342 -37
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +29 -1
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +27 -0
- package/.claude/skills/cc-act/scripts/ensure-ship-branch.sh +93 -0
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +6 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +170 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +15 -1
- package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +63 -0
- package/.claude/skills/cc-dev/SKILL.md +168 -0
- package/.claude/skills/cc-do/CHANGELOG.md +17 -0
- package/.claude/skills/cc-do/SKILL.md +41 -13
- package/.claude/skills/cc-do/scripts/build-task-context.sh +9 -5
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +0 -6
- package/.claude/skills/cc-investigate/CHANGELOG.md +17 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +15 -0
- package/.claude/skills/cc-investigate/SKILL.md +46 -1
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +47 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +21 -2
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +28 -58
- package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -0
- package/.claude/skills/cc-next/CHANGELOG.md +11 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +74 -0
- package/.claude/skills/cc-next/SKILL.md +196 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +25 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +25 -20
- package/.claude/skills/cc-plan/SKILL.md +116 -13
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +67 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +85 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +57 -182
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +46 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +51 -26
- package/.claude/skills/cc-pr-land/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-land/PLAYBOOK.md +45 -0
- package/.claude/skills/cc-pr-land/SKILL.md +157 -0
- package/.claude/skills/cc-pr-review/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-review/PLAYBOOK.md +46 -0
- package/.claude/skills/cc-pr-review/SKILL.md +142 -0
- package/.claude/skills/cc-review/CHANGELOG.md +21 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +64 -10
- package/.claude/skills/cc-review/SKILL.md +185 -18
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +4 -0
- package/.claude/skills/cc-review/references/implementation-review-branch.md +37 -0
- package/.claude/skills/cc-review/references/plan-review-branch.md +36 -1
- package/.claude/skills/cc-review/references/review-methods.md +98 -3
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +80 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +30 -0
- package/.claude/skills/cc-roadmap/SKILL.md +45 -8
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +8 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +22 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +32 -1
- package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +14 -14
- package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
- package/.claude/skills/cc-simplify/SKILL.md +19 -8
- package/CHANGELOG.md +20 -1
- package/README.md +60 -9
- package/README.zh-CN.md +60 -9
- package/config/distributable-skills.json +8 -0
- package/docs/assets/cc-devflow-pr-harness-en.svg +153 -0
- package/docs/assets/cc-devflow-pr-harness-zh.svg +152 -0
- package/docs/assets/wechat-group-qr.jpg +0 -0
- package/docs/examples/example-bindings.json +11 -7
- package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
- package/docs/examples/full-design-blocked/README.md +1 -1
- package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +102 -82
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +45 -1
- package/docs/examples/full-design-blocked/roadmap.json +1 -1
- package/docs/examples/local-handoff/BACKLOG.md +1 -1
- package/docs/examples/local-handoff/README.md +1 -1
- package/docs/examples/local-handoff/ROADMAP.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +70 -61
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +35 -1
- package/docs/examples/local-handoff/roadmap.json +1 -1
- package/docs/examples/pdca-loop/BACKLOG.md +1 -1
- package/docs/examples/pdca-loop/README.md +1 -1
- package/docs/examples/pdca-loop/ROADMAP.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +64 -0
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +71 -81
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +35 -1
- package/docs/examples/pdca-loop/roadmap.json +1 -1
- package/docs/examples/scripts/check-example-bindings.sh +24 -2
- package/docs/get-shit-done-strategy-audit.md +4 -4
- package/docs/guides/artifact-contract.md +44 -0
- package/docs/guides/getting-started.md +1 -1
- package/docs/guides/getting-started.zh-CN.md +1 -1
- package/docs/guides/project-postmortem.md +78 -0
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +2 -2
- package/lib/skill-runtime/__tests__/schemas.test.js +33 -2
- package/lib/skill-runtime/planner.js +1 -2
- package/lib/skill-runtime/query.js +1 -1
- package/lib/skill-runtime/schemas.js +5 -3
- package/package.json +6 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Example version: `1.0.0`
|
|
6
6
|
- Last reviewed: `2026-04-17`
|
|
7
|
-
- Bound skills: `cc-roadmap@5.
|
|
7
|
+
- Bound skills: `cc-roadmap@5.3.0`, `cc-plan@3.8.5`, `cc-do@1.6.5`, `cc-check@1.10.1`, `cc-act@1.8.7`
|
|
8
8
|
|
|
9
9
|
This folder shows one minimal but complete `cc-roadmap -> cc-plan -> cc-do -> cc-check -> cc-act` loop.
|
|
10
10
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# PR Brief
|
|
2
2
|
|
|
3
|
+
## Document Meta
|
|
4
|
+
|
|
5
|
+
- Output language: en
|
|
6
|
+
|
|
3
7
|
## Decision
|
|
4
8
|
|
|
5
9
|
- Recommended mode: `create-pr`
|
|
@@ -39,6 +43,66 @@
|
|
|
39
43
|
- Documentation release: README and CLAUDE unchanged for this scoped example
|
|
40
44
|
- PR body accuracy: regenerate the PR body from this brief, current report-card, and current diff
|
|
41
45
|
|
|
46
|
+
## Pull Request Body Contract
|
|
47
|
+
|
|
48
|
+
- Language source: `Output language: en`
|
|
49
|
+
- PR body language: English
|
|
50
|
+
- Title rule: use English after the Conventional Commits `type(scope)` prefix; keep identifiers, paths, commands, and issue keys unchanged.
|
|
51
|
+
- Body source: current `pr-brief.md`, current diff, current `review/report-card.json`, doc sync output, and roadmap/backlog writeback.
|
|
52
|
+
- Required sections: summary, problem, changes, validation, review/gate evidence, risk/rollback, docs/writeback, and follow-ups.
|
|
53
|
+
- Completeness gate: no empty headings, no stale inherited PR body, no generic "tests passed" without commands or evidence, and no `<placeholder>` text before `gh pr create`.
|
|
54
|
+
|
|
55
|
+
## Pull Request Body Draft
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
## Summary
|
|
59
|
+
|
|
60
|
+
- removes a small but visible sharing friction in the beta flow
|
|
61
|
+
- keeps the patch inside the approved `tiny-design` boundary
|
|
62
|
+
- ships with fresh test, lint, and review proof
|
|
63
|
+
|
|
64
|
+
## Problem
|
|
65
|
+
|
|
66
|
+
- Requirement: `RM-001` / `REQ-001`
|
|
67
|
+
- User-visible gap: users can see the invite URL but cannot copy it with one click from the share dialog.
|
|
68
|
+
|
|
69
|
+
## Changes
|
|
70
|
+
|
|
71
|
+
- adds a `Copy invite link` action beside the existing invite URL
|
|
72
|
+
- reuses the current invite link source of truth
|
|
73
|
+
- adds copied-state confirmation without redesigning the dialog
|
|
74
|
+
|
|
75
|
+
## Validation
|
|
76
|
+
|
|
77
|
+
- `report-card.json` verdict: `pass`
|
|
78
|
+
- `npm test -- src/features/share/ShareDialog.test.tsx`
|
|
79
|
+
- `npm run lint -- src/features/share/ShareDialog.tsx`
|
|
80
|
+
|
|
81
|
+
## Review / Gate Evidence
|
|
82
|
+
|
|
83
|
+
- Reviewed base SHA: `example-base`
|
|
84
|
+
- Reviewed head SHA: `example-head`
|
|
85
|
+
- Review packet: `planning/tasks.md#T001-T003`; `planning/design.md`
|
|
86
|
+
- Finding triage: no findings
|
|
87
|
+
- QA / claim evidence: `qa=pass`, `tests-pass=pass`, `requirements-met=pass`
|
|
88
|
+
- Readiness: review freshness=`fresh`; QA coverage has no gaps; browser QA intentionally skipped for this fixture.
|
|
89
|
+
|
|
90
|
+
## Risk And Rollback
|
|
91
|
+
|
|
92
|
+
- Main risk: copied-state feedback may still be too subtle for some users.
|
|
93
|
+
- Rollback boundary: revert the share-dialog change and targeted test in one commit; no data migration or external side effect is involved.
|
|
94
|
+
|
|
95
|
+
## Docs And Writeback
|
|
96
|
+
|
|
97
|
+
- `CLAUDE.md`: unchanged
|
|
98
|
+
- `README.md`: unchanged
|
|
99
|
+
- Roadmap progress: `RM-001` is ready for PR review after this create-pr handoff.
|
|
100
|
+
|
|
101
|
+
## Follow-ups
|
|
102
|
+
|
|
103
|
+
- If users still miss the feedback, lift `RM-002` into the next requirement.
|
|
104
|
+
```
|
|
105
|
+
|
|
42
106
|
## Summary
|
|
43
107
|
|
|
44
108
|
- removes a small but visible sharing friction in the beta flow
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Requirement version: `REQ-001.v1`
|
|
6
6
|
- Design version: `design.v1`
|
|
7
|
-
- CC-Plan skill version: `3.8.
|
|
7
|
+
- CC-Plan skill version: `3.8.5`
|
|
8
8
|
- Requirement ID: `REQ-001`
|
|
9
9
|
- Design mode: `tiny-design`
|
|
10
10
|
- Why this stays `tiny-design`: the patch is limited to an existing dialog and test file, with no API or data model changes
|
package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json
CHANGED
|
@@ -3,63 +3,33 @@
|
|
|
3
3
|
"goal": "Add a one-click copy action to the existing share dialog without changing backend contracts.",
|
|
4
4
|
"createdAt": "2026-04-15T10:00:00.000Z",
|
|
5
5
|
"updatedAt": "2026-04-15T11:10:00.000Z",
|
|
6
|
-
"status": "verified",
|
|
7
6
|
"requirementId": "REQ-001",
|
|
8
7
|
"requirementVersion": "REQ-001.v1",
|
|
9
|
-
"sourceRoadmap": {
|
|
10
|
-
"itemId": "RM-001",
|
|
11
|
-
"roadmapVersion": "roadmap.v1",
|
|
12
|
-
"roadmapSkillVersion": "5.2.0",
|
|
13
|
-
"sourceStage": "Stage 1",
|
|
14
|
-
"successSignal": "Users can copy the invite link with one click",
|
|
15
|
-
"killSignal": "The patch requires backend or permission changes",
|
|
16
|
-
"dependencies": [
|
|
17
|
-
"Existing share dialog stays intact"
|
|
18
|
-
],
|
|
19
|
-
"nonGoals": [
|
|
20
|
-
"No invite role redesign",
|
|
21
|
-
"No share analytics"
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
8
|
"planningMeta": {
|
|
25
|
-
"reqPlanSkillVersion": "3.8.
|
|
9
|
+
"reqPlanSkillVersion": "3.8.5",
|
|
26
10
|
"designVersion": "design.v1",
|
|
27
11
|
"approvedAt": "2026-04-15T10:05:00.000Z",
|
|
28
|
-
"approvedBy": "user",
|
|
29
12
|
"basedOnOption": "Tiny design card",
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
],
|
|
51
|
-
"testingDecisions": [
|
|
52
|
-
"Test through the share dialog behavior, not an internal helper"
|
|
53
|
-
],
|
|
54
|
-
"outOfScope": [
|
|
55
|
-
"invite generation",
|
|
56
|
-
"role controls",
|
|
57
|
-
"analytics",
|
|
58
|
-
"clipboard fallback redesign"
|
|
59
|
-
],
|
|
60
|
-
"furtherNotes": [
|
|
61
|
-
"Richer copied-state feedback is a separate UX requirement"
|
|
62
|
-
]
|
|
13
|
+
"aiLeverageDecisionLens": {
|
|
14
|
+
"realUserOrOperator": "workspace member sharing an invite",
|
|
15
|
+
"statusQuoWorkaround": "manual selection and copy of the visible invite URL",
|
|
16
|
+
"humanTeamEffortForFullScope": "about half a day for one engineer including test and review",
|
|
17
|
+
"ccAgentEffortForFullScope": "about 20 minutes for a targeted UI patch plus test update",
|
|
18
|
+
"aiCompressionRatio": "roughly 10x for this bounded UI slice",
|
|
19
|
+
"completeLakeBoundary": "copy action, current invite URL source, copied-state feedback, and dialog behavior test",
|
|
20
|
+
"oceanBoundary": "invite generation, permissions, analytics, or clipboard fallback redesign",
|
|
21
|
+
"scopeRecommendation": "boil-lake",
|
|
22
|
+
"costModel": {
|
|
23
|
+
"agentTime": "low",
|
|
24
|
+
"humanReviewTime": "low",
|
|
25
|
+
"verificationCost": "targeted dialog test",
|
|
26
|
+
"maintenanceCost": "low while scoped to the dialog",
|
|
27
|
+
"failureCost": "sharing friction remains",
|
|
28
|
+
"reversibility": "reversible UI patch"
|
|
29
|
+
},
|
|
30
|
+
"verdict": "boil-lake",
|
|
31
|
+
"missingEvidenceOrPivotReason": "",
|
|
32
|
+
"impactOnApprovedDirection": "cover the full same-dialog copy lake instead of only a happy-path button render"
|
|
63
33
|
},
|
|
64
34
|
"externalBestPractice": {
|
|
65
35
|
"needed": false,
|
|
@@ -105,31 +75,9 @@
|
|
|
105
75
|
"impact": "cc-do keeps implementation inside the share dialog and avoids backend or permission work",
|
|
106
76
|
"status": "answered"
|
|
107
77
|
}
|
|
108
|
-
]
|
|
109
|
-
"aiLeverageDecisionLens": {
|
|
110
|
-
"realUserOrOperator": "workspace member sharing an invite",
|
|
111
|
-
"statusQuoWorkaround": "manual selection and copy of the visible invite URL",
|
|
112
|
-
"humanTeamEffortForFullScope": "about half a day for one engineer including test and review",
|
|
113
|
-
"ccAgentEffortForFullScope": "about 20 minutes for a targeted UI patch plus test update",
|
|
114
|
-
"aiCompressionRatio": "roughly 10x for this bounded UI slice",
|
|
115
|
-
"completeLakeBoundary": "copy action, current invite URL source, copied-state feedback, and dialog behavior test",
|
|
116
|
-
"oceanBoundary": "invite generation, permissions, analytics, or clipboard fallback redesign",
|
|
117
|
-
"scopeRecommendation": "boil-lake",
|
|
118
|
-
"costModel": {
|
|
119
|
-
"agentTime": "low",
|
|
120
|
-
"humanReviewTime": "low",
|
|
121
|
-
"verificationCost": "targeted dialog test",
|
|
122
|
-
"maintenanceCost": "low while scoped to the dialog",
|
|
123
|
-
"failureCost": "sharing friction remains",
|
|
124
|
-
"reversibility": "reversible UI patch"
|
|
125
|
-
},
|
|
126
|
-
"verdict": "boil-lake",
|
|
127
|
-
"missingEvidenceOrPivotReason": "",
|
|
128
|
-
"impactOnApprovedDirection": "cover the full same-dialog copy lake instead of only a happy-path button render"
|
|
129
|
-
}
|
|
78
|
+
]
|
|
130
79
|
},
|
|
131
80
|
"currentTaskId": null,
|
|
132
|
-
"activePhase": null,
|
|
133
81
|
"tasks": [
|
|
134
82
|
{
|
|
135
83
|
"id": "T001",
|
|
@@ -179,7 +127,22 @@
|
|
|
179
127
|
},
|
|
180
128
|
"status": "passed",
|
|
181
129
|
"attempts": 1,
|
|
182
|
-
"maxRetries": 1
|
|
130
|
+
"maxRetries": 1,
|
|
131
|
+
"tddPhase": "red",
|
|
132
|
+
"verticalSlice": "Slice 1",
|
|
133
|
+
"testSeam": {
|
|
134
|
+
"entry": "share dialog UI behavior",
|
|
135
|
+
"behaviorAsserted": "The missing copy action is reproduced as a failing test",
|
|
136
|
+
"specStyleTestName": "The missing copy action is reproduced as a failing test",
|
|
137
|
+
"oneLogicalBehavior": true,
|
|
138
|
+
"publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
|
|
139
|
+
"implementationDetailRisk": "low"
|
|
140
|
+
},
|
|
141
|
+
"feedbackLoop": {
|
|
142
|
+
"type": "automated-test",
|
|
143
|
+
"determinism": "deterministic",
|
|
144
|
+
"expectedFailure": "Fails before the behavior exists"
|
|
145
|
+
}
|
|
183
146
|
},
|
|
184
147
|
{
|
|
185
148
|
"id": "T002",
|
|
@@ -231,7 +194,22 @@
|
|
|
231
194
|
},
|
|
232
195
|
"status": "passed",
|
|
233
196
|
"attempts": 1,
|
|
234
|
-
"maxRetries": 1
|
|
197
|
+
"maxRetries": 1,
|
|
198
|
+
"tddPhase": "green",
|
|
199
|
+
"verticalSlice": "Slice 2",
|
|
200
|
+
"testSeam": {
|
|
201
|
+
"entry": "share dialog UI behavior",
|
|
202
|
+
"behaviorAsserted": "The dialog exposes a copy button and confirms the copied state",
|
|
203
|
+
"specStyleTestName": "The dialog exposes a copy button and confirms the copied state",
|
|
204
|
+
"oneLogicalBehavior": true,
|
|
205
|
+
"publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
|
|
206
|
+
"implementationDetailRisk": "low"
|
|
207
|
+
},
|
|
208
|
+
"feedbackLoop": {
|
|
209
|
+
"type": "automated-test",
|
|
210
|
+
"determinism": "deterministic",
|
|
211
|
+
"expectedFailure": ""
|
|
212
|
+
}
|
|
235
213
|
},
|
|
236
214
|
{
|
|
237
215
|
"id": "T003",
|
|
@@ -287,15 +265,27 @@
|
|
|
287
265
|
},
|
|
288
266
|
"status": "passed",
|
|
289
267
|
"attempts": 1,
|
|
290
|
-
"maxRetries": 1
|
|
268
|
+
"maxRetries": 1,
|
|
269
|
+
"tddPhase": "evidence",
|
|
270
|
+
"verticalSlice": "Slice 3",
|
|
271
|
+
"testSeam": {
|
|
272
|
+
"entry": "share dialog UI behavior",
|
|
273
|
+
"behaviorAsserted": "Fresh verification evidence is ready for cc-check",
|
|
274
|
+
"specStyleTestName": "Fresh verification evidence is ready for cc-check",
|
|
275
|
+
"oneLogicalBehavior": true,
|
|
276
|
+
"publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
|
|
277
|
+
"implementationDetailRisk": "low"
|
|
278
|
+
},
|
|
279
|
+
"feedbackLoop": {
|
|
280
|
+
"type": "automated-test",
|
|
281
|
+
"determinism": "deterministic",
|
|
282
|
+
"expectedFailure": ""
|
|
283
|
+
}
|
|
291
284
|
}
|
|
292
285
|
],
|
|
293
286
|
"metadata": {
|
|
294
287
|
"source": "tasks.md",
|
|
295
288
|
"generatedBy": "docs-example",
|
|
296
289
|
"planVersion": 1
|
|
297
|
-
}
|
|
298
|
-
"deferredQuestions": [
|
|
299
|
-
"If users still miss the copied-state confirmation, open RM-002 for richer feedback."
|
|
300
|
-
]
|
|
290
|
+
}
|
|
301
291
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Requirement version: `REQ-001.v1`
|
|
6
6
|
- Design version: `design.v1`
|
|
7
|
-
- CC-Plan skill version: `3.8.
|
|
7
|
+
- CC-Plan skill version: `3.8.5`
|
|
8
8
|
- Source roadmap item: `RM-001`
|
|
9
9
|
- Source roadmap version: `roadmap.v1`
|
|
10
10
|
|
|
@@ -39,34 +39,68 @@
|
|
|
39
39
|
|
|
40
40
|
> 顶部 handoff 只保留执行者必须知道的现实,不重复讲背景故事。
|
|
41
41
|
|
|
42
|
+
## Execution Protocol
|
|
43
|
+
|
|
44
|
+
ClaudeCode / Codex 执行本计划时,必须把本文件当成任务模板合同,而不是普通 TODO 列表。
|
|
45
|
+
|
|
46
|
+
- Template source: `assets/TASKS_TEMPLATE.md`
|
|
47
|
+
- Task selection: read `planning/task-manifest.json.currentTaskId`; if empty, run the ready-task selector before choosing work.
|
|
48
|
+
- Task block rule: read the full task block before coding; title-only execution is invalid.
|
|
49
|
+
- Completion rule: after verification and review gates pass, run the completion script; do not manually edit checkbox, status, or `currentTaskId`.
|
|
50
|
+
- Completion failure: if the script fails, fix the missing checkpoint / review / dependency evidence and rerun it. Do not bypass it by editing JSON or Markdown.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
SCRIPT_ROOT=".claude/skills/cc-do/scripts"
|
|
54
|
+
if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then
|
|
55
|
+
SCRIPT_ROOT=".codex/skills/cc-do/scripts"
|
|
56
|
+
fi
|
|
57
|
+
bash "$SCRIPT_ROOT/select-ready-tasks.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json
|
|
58
|
+
bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task <task-id>
|
|
59
|
+
```
|
|
60
|
+
|
|
42
61
|
## Phase 1: Foundation
|
|
43
62
|
|
|
44
63
|
- [x] T001 [TEST] Add a failing dialog test for the missing copy action (dependsOn:none) `src/features/share/ShareDialog.test.tsx`
|
|
45
64
|
Goal: 证明当前 share dialog 还不能一键复制 invite link。
|
|
65
|
+
TDD phase: red
|
|
46
66
|
Files: `src/features/share/ShareDialog.test.tsx`
|
|
47
67
|
Read first: `design.md`, `src/features/share/ShareDialog.tsx`
|
|
48
68
|
Verification: `npm test -- src/features/share/ShareDialog.test.tsx`
|
|
49
69
|
Evidence: failing output that shows the missing button / action
|
|
70
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T001`; do not hand-edit status.
|
|
71
|
+
Test seam: share dialog UI behavior
|
|
72
|
+
Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
|
|
73
|
+
Allowed mocks: clipboard boundary
|
|
50
74
|
Ready when: 没有上游依赖,且现有 dialog test 已可运行
|
|
51
75
|
|
|
52
76
|
- [x] T002 [IMPL] Add the copy button and copied-state confirmation (dependsOn:T001) `src/features/share/ShareDialog.tsx`
|
|
53
77
|
Goal: 用最小实现让 T001 转绿,并保持当前 share contract 不变。
|
|
78
|
+
TDD phase: green
|
|
54
79
|
Files: `src/features/share/ShareDialog.tsx`
|
|
55
80
|
Read first: `design.md`, `src/features/share/ShareDialog.test.tsx`
|
|
56
81
|
Verification: `npm test -- src/features/share/ShareDialog.test.tsx`
|
|
57
82
|
Evidence: passing output + checkpoint + review notes
|
|
83
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T002`; do not hand-edit status.
|
|
84
|
+
Test seam: share dialog UI behavior
|
|
85
|
+
Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
|
|
86
|
+
Allowed mocks: clipboard boundary
|
|
58
87
|
Ready when: T001 已经见红,且当前 touched files 没有外部依赖阻塞
|
|
59
88
|
|
|
60
89
|
## Phase 2: Verify
|
|
61
90
|
|
|
62
91
|
- [x] T003 Run targeted checks and collect fresh evidence (dependsOn:T002) `share dialog quality gates`
|
|
63
92
|
Goal: 为 `cc-check` 准备本次实现的真实验证证据。
|
|
93
|
+
TDD phase: evidence
|
|
64
94
|
Files: `src/features/share/ShareDialog.tsx`, `src/features/share/ShareDialog.test.tsx`
|
|
65
95
|
Read first: `tasks.md`, `task-manifest.json`
|
|
66
96
|
Verification:
|
|
67
97
|
- `npm test -- src/features/share/ShareDialog.test.tsx`
|
|
68
98
|
- `npm run lint -- src/features/share/ShareDialog.tsx`
|
|
69
99
|
Evidence: passing test output + clean lint output
|
|
100
|
+
Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T003`; do not hand-edit status.
|
|
101
|
+
Test seam: share dialog UI behavior
|
|
102
|
+
Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
|
|
103
|
+
Allowed mocks: clipboard boundary
|
|
70
104
|
Ready when: T002 已完成,且 review gate 已可补齐
|
|
71
105
|
|
|
72
106
|
> `[P]` 只表示“依赖满足后有资格并行”,不表示可以无脑同时开发。
|
|
@@ -35,19 +35,27 @@ assert_contains() {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
ROADMAP_VERSION="$(skill_version cc-roadmap)"
|
|
38
|
+
NEXT_VERSION="$(skill_version cc-next)"
|
|
39
|
+
DEV_VERSION="$(skill_version cc-dev)"
|
|
38
40
|
REQ_PLAN_VERSION="$(skill_version cc-plan)"
|
|
39
41
|
INVESTIGATE_VERSION="$(skill_version cc-investigate)"
|
|
40
42
|
REQ_DO_VERSION="$(skill_version cc-do)"
|
|
41
43
|
REQ_REVIEW_VERSION="$(skill_version cc-review)"
|
|
44
|
+
PR_REVIEW_VERSION="$(skill_version cc-pr-review)"
|
|
45
|
+
PR_LAND_VERSION="$(skill_version cc-pr-land)"
|
|
42
46
|
REQ_CHECK_VERSION="$(skill_version cc-check)"
|
|
43
47
|
REQ_ACT_VERSION="$(skill_version cc-act)"
|
|
44
48
|
|
|
45
49
|
for pair in \
|
|
46
50
|
"cc-roadmap:$ROADMAP_VERSION" \
|
|
51
|
+
"cc-next:$NEXT_VERSION" \
|
|
52
|
+
"cc-dev:$DEV_VERSION" \
|
|
47
53
|
"cc-plan:$REQ_PLAN_VERSION" \
|
|
48
54
|
"cc-investigate:$INVESTIGATE_VERSION" \
|
|
49
55
|
"cc-do:$REQ_DO_VERSION" \
|
|
50
56
|
"cc-review:$REQ_REVIEW_VERSION" \
|
|
57
|
+
"cc-pr-review:$PR_REVIEW_VERSION" \
|
|
58
|
+
"cc-pr-land:$PR_LAND_VERSION" \
|
|
51
59
|
"cc-check:$REQ_CHECK_VERSION" \
|
|
52
60
|
"cc-act:$REQ_ACT_VERSION"
|
|
53
61
|
do
|
|
@@ -92,10 +100,24 @@ while IFS= read -r encoded; do
|
|
|
92
100
|
assert_contains "$planning_dir/tasks.md" "- CC-Plan skill version: \`$REQ_PLAN_VERSION\`"
|
|
93
101
|
|
|
94
102
|
jq -er --arg roadmap "$ROADMAP_VERSION" --arg reqplan "$REQ_PLAN_VERSION" '
|
|
95
|
-
(.
|
|
96
|
-
(.
|
|
103
|
+
(.planningMeta.reqPlanSkillVersion // $reqplan) == $reqplan and
|
|
104
|
+
(.status? == null) and
|
|
105
|
+
(.activePhase? == null) and
|
|
106
|
+
(.sourceRoadmap? == null) and
|
|
107
|
+
(.spec? == null) and
|
|
108
|
+
(.executionProtocol? == null) and
|
|
109
|
+
(.planningMeta.requirementBrief? == null) and
|
|
110
|
+
(.planningMeta.ambiguityGate? == null) and
|
|
111
|
+
(.planningMeta.reviewLoop? == null) and
|
|
112
|
+
all(.tasks[]; (.completion? == null) and (.tddPhase | type == "string") and (.testSeam.publicVerificationPath | type == "string"))
|
|
97
113
|
' "$planning_dir/task-manifest.json" >/dev/null
|
|
98
114
|
|
|
115
|
+
assert_contains "$planning_dir/tasks.md" "## Execution Protocol"
|
|
116
|
+
assert_contains "$planning_dir/tasks.md" "mark-task-complete.sh"
|
|
117
|
+
assert_contains "$planning_dir/tasks.md" "TDD phase:"
|
|
118
|
+
assert_contains "$planning_dir/tasks.md" "Completion:"
|
|
119
|
+
assert_contains "$planning_dir/tasks.md" "Public verification path:"
|
|
120
|
+
|
|
99
121
|
assert_contains "$readme" "## Example Meta"
|
|
100
122
|
assert_contains "$readme" "\`cc-roadmap@$ROADMAP_VERSION\`"
|
|
101
123
|
assert_contains "$readme" "\`cc-plan@$REQ_PLAN_VERSION\`"
|
|
@@ -127,9 +127,9 @@ Codebase Map 七件套只作为按需缓存:
|
|
|
127
127
|
| --- | --- | --- | --- |
|
|
128
128
|
| WHAT/WHY ambiguity score | `task-manifest.json.planningMeta` + `planning/design.md` | score above threshold blocks task manifest approval | unit fixture: ambiguous input blocks; clear input passes |
|
|
129
129
|
| Assumptions preview | `planning/design.md` decision log | user-visible assumptions before approval | fixture: hidden assumption fails review |
|
|
130
|
-
| Bounded review loop | `
|
|
131
|
-
| External doc conflict buckets | `
|
|
132
|
-
| Trust boundary | `
|
|
130
|
+
| Bounded review loop | `planning/design.md` | max attempts and stall detection reroute to `cc-roadmap` or user question | hostile fixture: repeated issue count blocks |
|
|
131
|
+
| External doc conflict buckets | `planning/design.md` | imported docs classified as auto-resolved, competing, unresolved | fixture: conflicting ADR/PRD creates blocker |
|
|
132
|
+
| Trust boundary | `planning/design.md` | external text is evidence/source only, never instruction | hostile fixture: prompt injection remains evidence-only |
|
|
133
133
|
|
|
134
134
|
`cc-plan` must keep design decisions readable in Markdown and machine truth in JSON.
|
|
135
135
|
No separate GSD-style `.planning/` tree.
|
|
@@ -209,7 +209,7 @@ default planning path.
|
|
|
209
209
|
| Data | Owner | Human view | Machine truth |
|
|
210
210
|
| --- | --- | --- | --- |
|
|
211
211
|
| Ambiguity and assumptions | `cc-plan` | `planning/design.md` | `task-manifest.json.planningMeta` |
|
|
212
|
-
| Imported doc trust classification | `cc-plan` | `planning/design.md` | `
|
|
212
|
+
| Imported doc trust classification | `cc-plan` | `planning/design.md` | `planning/design.md` |
|
|
213
213
|
| Task graph and waves | `cc-plan` / `cc-do` | `planning/tasks.md` | `task-manifest.json.tasks[]` |
|
|
214
214
|
| Quick lane state | `cc-do` | checkpoint summary | `task-manifest.json.metadata`, `checkpoint.json` |
|
|
215
215
|
| Debug hypotheses and probes | `cc-investigate` | `planning/analysis.md` | optional `task-manifest.json.investigation` |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Artifact Contract
|
|
2
|
+
|
|
3
|
+
cc-devflow artifacts follow two rules: progressive disclosure and one state owner.
|
|
4
|
+
|
|
5
|
+
## Progressive Disclosure
|
|
6
|
+
|
|
7
|
+
Every skill output should have a default path and deeper layers.
|
|
8
|
+
|
|
9
|
+
- Default layer: the next actor can see the current state, next action, and proof source quickly.
|
|
10
|
+
- Conditional layer: open only when scope, dependency, review, or conflict questions arise.
|
|
11
|
+
- Deep layer: full evidence, reasoning, or historical review, opened only for audit or recovery.
|
|
12
|
+
|
|
13
|
+
If a field has no clear opener and no downstream consumer, remove it.
|
|
14
|
+
|
|
15
|
+
## State Owners
|
|
16
|
+
|
|
17
|
+
| State | Owner artifact | Projection / derived readers |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Roadmap item status and progress | `devflow/roadmap.json` | `devflow/ROADMAP.md`, `devflow/BACKLOG.md`, handoff summaries |
|
|
20
|
+
| Capability/spec sync state | `devflow/changes/<change-key>/change-meta.json` | `planning/tasks.md`, `review/report-card.json`, handoff summaries |
|
|
21
|
+
| Execution task status | `planning/task-manifest.json.tasks[].status` | `planning/tasks.md` checkboxes, recovery summaries |
|
|
22
|
+
| Ready task / phase | derived from `tasks[].status`, `tasks[].phase`, and `tasks[].dependsOn` | `currentTaskId` cache, ready-task selector output |
|
|
23
|
+
| Runtime checkpoint state | `execution/tasks/<task-id>/checkpoint.json` | `events.jsonl`, recovery summaries |
|
|
24
|
+
| Review verdict | `review/report-card.json.verdict` | PR brief, release note, act gate |
|
|
25
|
+
| PR / remote queue truth | live GitHub API / `gh` output | local review notes and handoff summaries |
|
|
26
|
+
| Project postmortem facts and principles | `devflow/postmortems/` | planning recall, investigation hypotheses, task guardrails |
|
|
27
|
+
|
|
28
|
+
## Duplication Rules
|
|
29
|
+
|
|
30
|
+
- Machine artifacts may reference another owner by id or path, but must not copy its status lifecycle.
|
|
31
|
+
- Markdown projections must state their source instead of becoming editable truth.
|
|
32
|
+
- Derived fields must be described as derived/cache and must be recomputable.
|
|
33
|
+
- A skill must not create a new status field unless it also names the owner, lifecycle, projection readers, and validation gate.
|
|
34
|
+
- Task manifests must not duplicate PRD narrative, review-loop prose, source-trust details, completion shell commands, roadmap progress, or spec sync status.
|
|
35
|
+
- Project postmortems must cite stronger owner artifacts and Git evidence; they do not own roadmap progress, task status, review verdicts, or spec sync state.
|
|
36
|
+
|
|
37
|
+
## Required Check
|
|
38
|
+
|
|
39
|
+
Before changing any skill output, answer:
|
|
40
|
+
|
|
41
|
+
1. Who owns this state?
|
|
42
|
+
2. Is this field consumed directly, or is it a projection?
|
|
43
|
+
3. Can it be recomputed from a stronger source?
|
|
44
|
+
4. What validation fails if this state diverges?
|
|
@@ -89,7 +89,7 @@ Typical outputs:
|
|
|
89
89
|
- `cc-spec-init` writes `devflow/specs/INDEX.md`, capability specs, and `change-meta.json`
|
|
90
90
|
- `cc-plan` writes `planning/design.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
|
|
91
91
|
- `cc-investigate` writes `planning/analysis.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
|
|
92
|
-
- `cc-review` writes `cc-review-report.md` and optional structured findings for deep plan or implementation review
|
|
92
|
+
- `cc-review` writes `cc-review-plan.md`, `cc-review-ledger.jsonl`, `cc-review-report.md`, optional `cc-review-agent-results.jsonl`, and optional structured findings for deep plan or implementation review
|
|
93
93
|
- `cc-check` writes `report-card.json`
|
|
94
94
|
- `cc-act` writes exactly one final handoff file: `handoff/pr-brief.md`, `handoff/resume-index.md`, or `handoff/release-note.md`
|
|
95
95
|
|
|
@@ -89,7 +89,7 @@ find .codex/skills -mindepth 2 -maxdepth 2 -name SKILL.md | sort
|
|
|
89
89
|
- `cc-spec-init` 产出 `devflow/specs/INDEX.md`、capability spec 和 `change-meta.json`
|
|
90
90
|
- `cc-plan` 产出 `planning/design.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
|
|
91
91
|
- `cc-investigate` 产出 `planning/analysis.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
|
|
92
|
-
- `cc-review` 产出 `cc-review-report.md`,以及可选的结构化深度 Review findings
|
|
92
|
+
- `cc-review` 产出 `cc-review-plan.md`、`cc-review-ledger.jsonl`、`cc-review-report.md`、可选 `cc-review-agent-results.jsonl`,以及可选的结构化深度 Review findings
|
|
93
93
|
- `cc-check` 产出 `report-card.json`
|
|
94
94
|
- `cc-act` 只产出一个最终 handoff 文件:`handoff/pr-brief.md`、`handoff/resume-index.md` 或 `handoff/release-note.md`
|
|
95
95
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Project Postmortem Contract
|
|
2
|
+
|
|
3
|
+
cc-devflow treats project postmortems as a durable AI memory surface. They are not
|
|
4
|
+
chat summaries. They are repo-owned evidence that future agents can search before
|
|
5
|
+
planning, investigating, or executing work.
|
|
6
|
+
|
|
7
|
+
## Storage Layout
|
|
8
|
+
|
|
9
|
+
Project-level postmortems live under `devflow/postmortems/`:
|
|
10
|
+
|
|
11
|
+
| Path | Owner | Purpose |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| `INDEX.md` | `cc-act` | Progressive entry point, latest incidents, tags, and search hints |
|
|
14
|
+
| `principles.md` | `cc-act` | Generalized lessons about recurring model, process, and engineering mistakes |
|
|
15
|
+
| `incidents/<date>-<change-key>.md` | `cc-act` | Immutable-ish factual record for one incident, bug, or repeated AI failure |
|
|
16
|
+
|
|
17
|
+
`cc-act` owns writes because it has verified closeout, Git state, review state, and
|
|
18
|
+
ship facts. Earlier skills only read and project the relevant reminders into their
|
|
19
|
+
own artifacts.
|
|
20
|
+
|
|
21
|
+
## Progressive Disclosure
|
|
22
|
+
|
|
23
|
+
- Default layer: `INDEX.md` gives tags, one-line lessons, severity, affected
|
|
24
|
+
surfaces, and links to deeper incident files.
|
|
25
|
+
- Principle layer: `principles.md` gives reusable rules such as model failure
|
|
26
|
+
modes, domain-specific judgment traps, and required countermeasures.
|
|
27
|
+
- Incident layer: `incidents/*.md` gives the detailed facts, Git evidence,
|
|
28
|
+
timeline, root cause, detection gap, repair, follow-ups, and search terms.
|
|
29
|
+
|
|
30
|
+
Agents should start with keyword search over the default and principle layers, then
|
|
31
|
+
open incident files only when the tags or failure class match the current task.
|
|
32
|
+
|
|
33
|
+
## Required Incident Evidence
|
|
34
|
+
|
|
35
|
+
Every incident file should include:
|
|
36
|
+
|
|
37
|
+
- Symptom and impact.
|
|
38
|
+
- Trigger and timeline.
|
|
39
|
+
- Confirmed root cause and rejected near-causes.
|
|
40
|
+
- Why the failure escaped planning, investigation, execution, review, or ship.
|
|
41
|
+
- Git evidence: branch, base, head SHA, PR if any, relevant commits, review range,
|
|
42
|
+
and dirty-tree notes when they matter.
|
|
43
|
+
- Verification evidence: commands, exit status, key output, and artifact paths.
|
|
44
|
+
- Follow-up actions: root-cause fixes, detection improvements, and backlog items.
|
|
45
|
+
- AI failure mode: model limitation, pattern-matching trap, missing evidence habit,
|
|
46
|
+
over-broad abstraction, fake compatibility, test-seam mistake, or other reusable
|
|
47
|
+
class.
|
|
48
|
+
- Search terms future agents should use before repeating similar work.
|
|
49
|
+
|
|
50
|
+
## Redaction Guard
|
|
51
|
+
|
|
52
|
+
Postmortems are durable repo artifacts, so they must never preserve secrets,
|
|
53
|
+
tokens, private customer data, personal machine paths, or raw private logs unless
|
|
54
|
+
the repository already treats that exact artifact as public source truth.
|
|
55
|
+
|
|
56
|
+
- Record the command, file path, commit, or artifact pointer that proves the fact.
|
|
57
|
+
- Quote only the minimal output needed to prove the incident.
|
|
58
|
+
- Replace sensitive values with `<redacted>` and add a short redaction summary.
|
|
59
|
+
- If the only available proof is sensitive, cite the owner artifact and describe
|
|
60
|
+
the observed shape instead of copying the raw value.
|
|
61
|
+
|
|
62
|
+
## Read Gates
|
|
63
|
+
|
|
64
|
+
`cc-plan`, `cc-investigate`, and `cc-do` must run a quick local search before they
|
|
65
|
+
freeze direction or touch code:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
rg -n "<capability|module|error|failure-class|model-risk>" devflow/postmortems
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If `devflow/postmortems/` does not exist, record `no-project-postmortems-yet`.
|
|
72
|
+
If a match exists, load only `INDEX.md`, `principles.md`, and the one or two
|
|
73
|
+
incident files most relevant to the current work.
|
|
74
|
+
|
|
75
|
+
## State Ownership
|
|
76
|
+
|
|
77
|
+
Postmortems do not own task status, roadmap progress, review verdicts, or spec sync
|
|
78
|
+
state. They cite those stronger owners by path, commit, or command output.
|