cc-devflow 4.5.15 → 4.5.17

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 (56) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +11 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +2 -2
  3. package/.claude/skills/cc-act/SKILL.md +12 -2
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +9 -0
  5. package/.claude/skills/cc-act/references/closure-contract.md +3 -2
  6. package/.claude/skills/cc-act/scripts/evaluate-postmortem-trigger.sh +93 -0
  7. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +138 -32
  8. package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
  9. package/.claude/skills/cc-dev/PLAYBOOK.md +6 -3
  10. package/.claude/skills/cc-dev/SKILL.md +10 -7
  11. package/.claude/skills/cc-dev/scripts/ensure-work-branch.sh +117 -0
  12. package/.claude/skills/cc-dev/scripts/prepare-change-worktree.sh +135 -0
  13. package/.claude/skills/cc-investigate/CHANGELOG.md +15 -0
  14. package/.claude/skills/cc-investigate/SKILL.md +85 -8
  15. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +56 -0
  16. package/.claude/skills/cc-investigate/references/investigation-contract.md +1 -0
  17. package/.claude/skills/cc-plan/CHANGELOG.md +15 -0
  18. package/.claude/skills/cc-plan/SKILL.md +70 -6
  19. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +41 -0
  20. package/.claude/skills/cc-plan/references/planning-contract.md +1 -0
  21. package/.claude/skills/cc-pr-review/CHANGELOG.md +9 -0
  22. package/.claude/skills/cc-pr-review/PLAYBOOK.md +3 -0
  23. package/.claude/skills/cc-pr-review/SKILL.md +30 -1
  24. package/.claude/skills/cc-review/CHANGELOG.md +10 -0
  25. package/.claude/skills/cc-review/SKILL.md +53 -9
  26. package/.claude/skills/cc-review/references/implementation-review-branch.md +1 -0
  27. package/.claude/skills/cc-review/references/plan-review-branch.md +1 -0
  28. package/.claude/skills/cc-review/references/review-methods.md +30 -0
  29. package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
  30. package/.claude/skills/cc-roadmap/SKILL.md +1 -1
  31. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +274 -69
  32. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +69 -15
  33. package/CHANGELOG.md +21 -3
  34. package/README.md +1 -1
  35. package/README.zh-CN.md +1 -1
  36. package/docs/examples/example-bindings.json +8 -8
  37. package/docs/examples/full-design-blocked/BACKLOG.md +12 -1
  38. package/docs/examples/full-design-blocked/README.md +1 -1
  39. package/docs/examples/full-design-blocked/ROADMAP.md +2 -2
  40. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md +23 -1
  41. package/docs/examples/full-design-blocked/roadmap.json +7 -2
  42. package/docs/examples/local-handoff/BACKLOG.md +12 -1
  43. package/docs/examples/local-handoff/README.md +1 -1
  44. package/docs/examples/local-handoff/ROADMAP.md +2 -2
  45. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/task.md +23 -1
  46. package/docs/examples/local-handoff/roadmap.json +7 -2
  47. package/docs/examples/pdca-loop/BACKLOG.md +12 -1
  48. package/docs/examples/pdca-loop/README.md +1 -1
  49. package/docs/examples/pdca-loop/ROADMAP.md +2 -2
  50. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/task.md +23 -1
  51. package/docs/examples/pdca-loop/roadmap.json +7 -2
  52. package/docs/guides/project-postmortem.md +8 -0
  53. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +2 -1
  54. package/lib/skill-runtime/__tests__/config.test.js +7 -2
  55. package/lib/skill-runtime/config.js +38 -6
  56. package/package.json +1 -1
@@ -51,6 +51,9 @@ const DEFAULT_BACKLOG = {
51
51
 
52
52
  const DEFAULT_TRACKING = {
53
53
  version: 2,
54
+ outputPolicy: {
55
+ documentLanguage: 'en'
56
+ },
54
57
  lastSyncedAt: '',
55
58
  backlogMeta: {
56
59
  roadmapVersion: '',
@@ -115,7 +118,7 @@ function normalizeHeader(value) {
115
118
  return String(value || '')
116
119
  .trim()
117
120
  .toLowerCase()
118
- .replace(/[^a-z0-9]+/g, ' ');
121
+ .replace(/[^\p{L}\p{N}]+/gu, ' ');
119
122
  }
120
123
 
121
124
  function normalizeCell(value) {
@@ -159,7 +162,7 @@ function formatInlineCode(value) {
159
162
 
160
163
  function normalizeBoolean(value) {
161
164
  const normalized = normalizeCell(value).toLowerCase();
162
- return normalized === 'yes' || normalized === 'true';
165
+ return normalized === 'yes' || normalized === 'true' || normalized === '是';
163
166
  }
164
167
 
165
168
  function emptyBacklog() {
@@ -219,6 +222,10 @@ function normalizeTracking(raw) {
219
222
 
220
223
  return {
221
224
  version: 2,
225
+ outputPolicy: {
226
+ ...DEFAULT_TRACKING.outputPolicy,
227
+ ...(raw.outputPolicy || {})
228
+ },
222
229
  lastSyncedAt: String(raw.lastSyncedAt || '').trim(),
223
230
  backlogMeta: {
224
231
  roadmapVersion: String(backlogMeta.roadmapVersion || '').trim(),
@@ -268,6 +275,14 @@ function normalizeRoadmapState(raw = {}) {
268
275
  const context = raw.context || {};
269
276
  const route = raw.route || {};
270
277
  const architecture = raw.architecture || {};
278
+ const normalizedMeta = {
279
+ ...DEFAULT_ROADMAP_STATE.meta,
280
+ roadmapVersion: String(meta.roadmapVersion || tracking.backlogMeta.roadmapVersion).trim(),
281
+ skillVersion: String(meta.skillVersion || tracking.backlogMeta.skillVersion).trim(),
282
+ status: String(meta.status || DEFAULT_ROADMAP_STATE.meta.status).trim(),
283
+ lastUpdated: String(meta.lastUpdated || tracking.lastSyncedAt).trim(),
284
+ currentFocusStage: String(meta.currentFocusStage || tracking.backlogMeta.currentFocusStage).trim()
285
+ };
271
286
 
272
287
  return {
273
288
  ...DEFAULT_ROADMAP_STATE,
@@ -276,14 +291,7 @@ function normalizeRoadmapState(raw = {}) {
276
291
  ...DEFAULT_ROADMAP_STATE.outputPolicy,
277
292
  ...(raw.outputPolicy || {})
278
293
  },
279
- meta: {
280
- ...DEFAULT_ROADMAP_STATE.meta,
281
- roadmapVersion: String(meta.roadmapVersion || tracking.backlogMeta.roadmapVersion).trim(),
282
- skillVersion: String(meta.skillVersion || tracking.backlogMeta.skillVersion).trim(),
283
- status: String(meta.status || DEFAULT_ROADMAP_STATE.meta.status).trim(),
284
- lastUpdated: String(meta.lastUpdated || tracking.lastSyncedAt).trim(),
285
- currentFocusStage: String(meta.currentFocusStage || tracking.backlogMeta.currentFocusStage).trim()
286
- },
294
+ meta: normalizedMeta,
287
295
  context: {
288
296
  ...DEFAULT_ROADMAP_STATE.context,
289
297
  ...context,
@@ -301,7 +309,11 @@ function normalizeRoadmapState(raw = {}) {
301
309
  },
302
310
  stages: Array.isArray(raw.stages) ? raw.stages : [],
303
311
  items: tracking.items,
304
- backlogMeta: tracking.backlogMeta,
312
+ backlogMeta: {
313
+ roadmapVersion: normalizedMeta.roadmapVersion,
314
+ skillVersion: normalizedMeta.skillVersion,
315
+ currentFocusStage: normalizedMeta.currentFocusStage
316
+ },
305
317
  dependencyHandoff: tracking.dependencyHandoff,
306
318
  lastSyncedAt: tracking.lastSyncedAt,
307
319
  handoff: buildRoadmapHandoff(tracking, raw.handoff || {}),
@@ -315,36 +327,78 @@ function normalizeRoadmapState(raw = {}) {
315
327
  }
316
328
 
317
329
  const ROADMAP_HEADER_TO_KEY = new Map(
318
- ROADMAP_COLUMNS.map(([header, key]) => [normalizeHeader(header), key])
330
+ [
331
+ ...ROADMAP_COLUMNS,
332
+ ['事项', 'item'],
333
+ ['阶段', 'stage'],
334
+ ['优先级', 'priority'],
335
+ ['主能力', 'primaryCapability'],
336
+ ['次能力', 'secondaryCapabilities'],
337
+ ['预期规格变化', 'expectedSpecDelta'],
338
+ ['依赖', 'dependsOn'],
339
+ ['状态', 'status'],
340
+ ['进度', 'progress']
341
+ ].map(([header, key]) => [normalizeHeader(header), key])
319
342
  );
320
343
 
321
344
  const BACKLOG_QUEUE_HEADER_TO_KEY = new Map(
322
- BACKLOG_QUEUE_COLUMNS.map(([header, key]) => [normalizeHeader(header), key])
345
+ [
346
+ ...BACKLOG_QUEUE_COLUMNS,
347
+ ['标题', 'item'],
348
+ ['来源阶段', 'stage'],
349
+ ['优先级', 'priority'],
350
+ ['主能力', 'primaryCapability'],
351
+ ['次能力', 'secondaryCapabilities'],
352
+ ['能力缺口', 'capabilityGap'],
353
+ ['预期规格变化', 'expectedSpecDelta'],
354
+ ['证据', 'evidence'],
355
+ ['依赖', 'dependsOn'],
356
+ ['可并行', 'parallelWith'],
357
+ ['未知项', 'unknowns'],
358
+ ['下一决策', 'nextDecision'],
359
+ ['就绪', 'ready']
360
+ ].map(([header, key]) => [normalizeHeader(header), key])
323
361
  );
324
362
 
325
363
  const READY_FIELD_MAP = new Map(
326
364
  [
327
365
  ['Primary Capability', 'primaryCapability'],
366
+ ['主能力', 'primaryCapability'],
328
367
  ['Secondary Capabilities', 'secondaryCapabilities'],
368
+ ['次能力', 'secondaryCapabilities'],
329
369
  ['Why now', 'whyNow'],
370
+ ['为什么现在做', 'whyNow'],
330
371
  ['Success signal', 'successSignal'],
372
+ ['成功信号', 'successSignal'],
331
373
  ['Entry constraints', 'entryConstraints'],
374
+ ['进入约束', 'entryConstraints'],
332
375
  ['Capability gap', 'capabilityGap'],
376
+ ['能力缺口', 'capabilityGap'],
333
377
  ['Expected spec delta', 'expectedSpecDelta'],
378
+ ['预期规格变化', 'expectedSpecDelta'],
334
379
  ['Open risks', 'openRisks'],
380
+ ['未决风险', 'openRisks'],
335
381
  ['First planning question', 'firstPlanningQuestion'],
382
+ ['首个规划问题', 'firstPlanningQuestion'],
336
383
  ['Required context to load', 'requiredContextToLoad'],
384
+ ['必须加载的上下文', 'requiredContextToLoad'],
337
385
  ['Depends On', 'dependsOn'],
386
+ ['依赖', 'dependsOn'],
338
387
  ['Parallel With', 'parallelWith'],
339
- ['Why this is ready now', 'whyReadyNow']
388
+ ['可并行', 'parallelWith'],
389
+ ['Why this is ready now', 'whyReadyNow'],
390
+ ['为什么现在已就绪', 'whyReadyNow']
340
391
  ].map(([label, key]) => [normalizeHeader(label), key])
341
392
  );
342
393
 
343
394
  const PARKED_FIELD_MAP = new Map(
344
395
  [
345
396
  ['Reason parked', 'parkedReason'],
397
+ ['暂存原因', 'parkedReason'],
346
398
  ['Trigger to reopen', 'triggerToReopen'],
347
- ['Missing evidence', 'missingEvidence']
399
+ ['重新打开触发条件', 'triggerToReopen'],
400
+ ['Missing evidence', 'missingEvidence'],
401
+ ['缺失证据', 'missingEvidence']
348
402
  ].map(([label, key]) => [normalizeHeader(label), key])
349
403
  );
350
404
 
package/CHANGELOG.md CHANGED
@@ -9,12 +9,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
- ## [4.5.15] - 2026-05-14
12
+ _No unreleased changes._
13
+
14
+ ## [4.5.17] - 2026-05-17
13
15
 
14
16
  ### Added
15
17
 
16
- - Added Product / Creative Discovery and Second-Move Review gates to `cc-plan` so non-trivial plans confirm product value and shape before engineering details.
17
- - Updated `cc-plan` task templates, planning contract, playbook, and examples with durable slots for product shape, narrowest wedge, better-version thinking, and question-quality review.
18
+ - Added an explicit `cc-act` postmortem trigger gate through `evaluate-postmortem-trigger.sh`.
19
+ - Added `pr-brief.md` postmortem trigger output so closeout records whether an incident postmortem is required.
20
+
21
+ ### Changed
22
+
23
+ - Updated `cc-act` to require `POSTMORTEM_REQUIRED=yes/no` before declaring closeout complete.
24
+ - Updated project postmortem guidance so session-only rework, reroutes, or tool failures can be passed into the gate with `--trigger`.
25
+
26
+ ## [4.5.16] - 2026-05-17
27
+
28
+ ### Changed
29
+
30
+ - Updated `cc-plan`, `cc-investigate`, `cc-review`, and `cc-pr-review` to require ASCII branch-chain analysis in their task or review outputs.
31
+ - Added plan and investigation task-template fields that trace upstream sources, deepest affected code or prompt/provider layers, downstream impact, and verification seams.
32
+ - Clarified that ASCII branch-chain connector tokens stay ASCII while labels, findings, evidence, and explanatory text follow the configured output language.
33
+ - Replaced hard-coded English branch-chain templates with shared semantic label tables for English and Chinese outputs.
34
+ - Updated runtime output-policy rendering so `zh-CN` configurations describe the policy in Chinese instead of English-only prose.
35
+ - Added `Output language` metadata to generated roadmap and backlog projections.
18
36
 
19
37
  ### Removed
20
38
 
package/README.md CHANGED
@@ -181,7 +181,7 @@ CC-DevFlow reads layered YAML config before durable workflow documents are writt
181
181
  <repo>/.cc-devflow/config.local.yml
182
182
  ```
183
183
 
184
- Precedence is deterministic: defaults < user < project < local < environment < CLI. `output.document_language` is machine-enforced and currently supports `en` and `zh-CN`. Non-standard preferences belong under `agent_preferences`; they guide style but do not override workflow contracts.
184
+ Precedence is deterministic: defaults < user < project < local < environment < CLI. `output.document_language` is machine-enforced and currently supports `en` and `zh-CN`. It controls durable planning, review, and handoff Markdown headings, prose, placeholders, evidence summaries, and PR/body drafts; code, commands, paths, schema keys, API names, and commit type/scope literals stay unchanged. Non-standard preferences belong under `agent_preferences`; they guide style but do not override workflow contracts.
185
185
 
186
186
  ```yaml
187
187
  version: 1
package/README.zh-CN.md CHANGED
@@ -181,7 +181,7 @@ CC-DevFlow 会在写入 durable workflow 文档前读取分层 YAML 配置:
181
181
  <repo>/.cc-devflow/config.local.yml
182
182
  ```
183
183
 
184
- 优先级固定为:默认值 < 用户 < 项目 < 本地 < 环境变量 < CLI 参数。`output.document_language` 是机器约束,目前支持 `en` 和 `zh-CN`。非标偏好放在 `agent_preferences` 下,只影响表达风格,不覆盖 workflow 契约。
184
+ 优先级固定为:默认值 < 用户 < 项目 < 本地 < 环境变量 < CLI 参数。`output.document_language` 是机器约束,目前支持 `en` 和 `zh-CN`。它约束 durable planning、review、handoff Markdown 的标题、正文、占位符、证据说明和 PR/body 草稿;代码、命令、路径、schema key、API 名、commit type/scope 等机器字面量保持原文。非标偏好放在 `agent_preferences` 下,只影响表达风格,不覆盖 workflow 契约。
185
185
 
186
186
  ```yaml
187
187
  version: 1
@@ -1,17 +1,17 @@
1
1
  {
2
- "updatedAt": "2026-05-13",
2
+ "updatedAt": "2026-05-17",
3
3
  "skills": {
4
- "cc-roadmap": "5.3.0",
4
+ "cc-roadmap": "5.3.1",
5
5
  "cc-next": "1.1.1",
6
- "cc-dev": "1.1.2",
7
- "cc-plan": "3.10.4",
8
- "cc-investigate": "1.6.2",
6
+ "cc-dev": "1.1.3",
7
+ "cc-plan": "3.10.7",
8
+ "cc-investigate": "1.6.5",
9
9
  "cc-do": "1.7.2",
10
- "cc-review": "2.2.1",
11
- "cc-pr-review": "1.1.1",
10
+ "cc-review": "2.2.3",
11
+ "cc-pr-review": "1.1.3",
12
12
  "cc-pr-land": "1.1.0",
13
13
  "cc-check": "1.12.2",
14
- "cc-act": "1.9.1",
14
+ "cc-act": "1.9.3",
15
15
  "cc-spec-init": "1.2.0"
16
16
  },
17
17
  "examples": [
@@ -5,10 +5,11 @@
5
5
  ## Backlog Meta
6
6
 
7
7
  - Roadmap version: `roadmap.v2`
8
- - Skill version: `5.3.0`
8
+ - Skill version: `5.3.1`
9
9
  - Last synced: `2026-04-19`
10
10
  - Current focus stage: `Stage 2`
11
11
  - Roadmap state source: `roadmap.json`
12
+ - Output language: en
12
13
 
13
14
  ## Queue
14
15
 
@@ -22,6 +23,16 @@
22
23
  - Parallel-ready next wave: -
23
24
  - Notes on blockers: verification is blocked until the import contract covers limits, duplicates, billing, and audit consistency
24
25
 
26
+ ## Project Direction Handoff
27
+
28
+ - Project direction mode: -
29
+ - Direction mode rationale: -
30
+ - Direction-specific questions selected: -
31
+ - Direction-specific questions skipped: -
32
+ - Direction guardrails applied: -
33
+ - Planning posture: -
34
+ - Evidence maturity: -
35
+
25
36
  ## Ready For Req-Plan
26
37
 
27
38
  - RM-010:
@@ -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.3.0`, `cc-plan@3.10.4`, `cc-do@1.7.2`, `cc-check@1.12.2`
7
+ - Bound skills: `cc-roadmap@5.3.1`, `cc-plan@3.10.7`, `cc-do@1.7.2`, `cc-check@1.12.2`
8
8
 
9
9
  This example shows a requirement that **looked executable**, but `cc-check` correctly stopped it and sent it back to `cc-plan`.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v2`
6
- - Skill version: `5.3.0`
6
+ - Skill version: `5.3.1`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-16`
9
9
  - Owner / decider: `product-owner`
@@ -60,6 +60,7 @@
60
60
 
61
61
  ## Implementation Tracking
62
62
  - Roadmap state source: `roadmap.json`
63
+ - Output language: en
63
64
 
64
65
  <!-- roadmap-tracking:start -->
65
66
  | RM-ID | Item | Stage | Priority | Primary Capability | Secondary Capabilities | Expected Spec Delta | Depends On | Status | REQ | Progress |
@@ -67,7 +68,6 @@
67
68
  | RM-010 | Add CSV bulk invite import for admins | Stage 2 | P1 | cap-bulk-invite-import | cap-workspace-membership | define import semantics before widening current truth | - | Verification blocked | REQ-002 | 80% |
68
69
  <!-- roadmap-tracking:end -->
69
70
 
70
-
71
71
  ## Technical Architecture
72
72
 
73
73
  ```mermaid
@@ -4,8 +4,9 @@
4
4
 
5
5
  - Requirement version: `REQ-002.v2`
6
6
  - Design version: `design.v2`
7
- - CC-Plan skill version: `3.10.4`
7
+ - CC-Plan skill version: `3.10.7`
8
8
  - Work branch: `REQ/002-bulk-invite-import`
9
+ - Output language: en
9
10
  - Source roadmap item: `RM-010`
10
11
  - Source roadmap version: `roadmap.v2`
11
12
 
@@ -36,6 +37,27 @@
36
37
  - Better architecture: later move bulk provisioning into a job-backed import workflow.
37
38
  - Selected move: row classification first, then admin surface and audit mapping.
38
39
  - Rejected tradeoff: no SCIM, background jobs, or rollback wizard in this requirement.
40
+ - ASCII Branch Chain Analysis:
41
+ Language rule: connector tokens stay ASCII; node text follows `Output language: en`.
42
+
43
+ ```text
44
+ Requirement Impact Chain
45
+ REQ: deterministic bulk invite row outcomes
46
+ |-- Upstream source: RM-010 + admin import failure cases
47
+ |-- Current code path: src/invite/bulk-import.ts
48
+ | |-- caller: src/admin/BulkInvitePanel.tsx
49
+ | |-- data or state: CSV rows, duplicate state, seat-limit state, audit rows
50
+ | `-- deepest affected layer: row-outcome matrix shared by invite and audit behavior
51
+ |-- Required change: classify each row before executing visible bulk results
52
+ `-- Verification seam: bulk-import and admin panel tests
53
+
54
+ Business Impact Chain
55
+ OUTCOME: admins can trust mixed CSV import results
56
+ |-- Direct behavior impact: duplicate, invalid, and over-limit rows get stable results
57
+ |-- Downstream impact: audit mapping and visible admin result rendering
58
+ |-- Risk branch: row semantics drift between UI and audit log
59
+ `-- Non-goal branch: SCIM, background jobs, and rollback wizard stay out
60
+ ```
39
61
  - Read first:
40
62
  - `design.md`
41
63
  - `src/admin/BulkInvitePanel.tsx`
@@ -5,12 +5,17 @@
5
5
  },
6
6
  "meta": {
7
7
  "roadmapVersion": "roadmap.v2",
8
- "skillVersion": "5.3.0",
8
+ "skillVersion": "5.3.1",
9
9
  "status": "active",
10
10
  "lastUpdated": "2026-04-19",
11
11
  "currentFocusStage": "Stage 2"
12
12
  },
13
13
  "context": {
14
+ "projectDirectionMode": "",
15
+ "projectDirectionRationale": "",
16
+ "directionQuestionsSelected": [],
17
+ "directionQuestionsSkipped": [],
18
+ "directionGuardrailsApplied": [],
14
19
  "planningPosture": "",
15
20
  "evidenceMaturity": "",
16
21
  "canonicalTerms": [],
@@ -127,7 +132,7 @@
127
132
  },
128
133
  "backlogMeta": {
129
134
  "roadmapVersion": "roadmap.v2",
130
- "skillVersion": "4.4.1",
135
+ "skillVersion": "5.3.1",
131
136
  "currentFocusStage": "Stage 2"
132
137
  },
133
138
  "dependencyHandoff": {
@@ -5,10 +5,11 @@
5
5
  ## Backlog Meta
6
6
 
7
7
  - Roadmap version: `roadmap.v2`
8
- - Skill version: `5.3.0`
8
+ - Skill version: `5.3.1`
9
9
  - Last synced: `2026-04-19`
10
10
  - Current focus stage: `Stage 2`
11
11
  - Roadmap state source: `roadmap.json`
12
+ - Output language: en
12
13
 
13
14
  ## Queue
14
15
 
@@ -22,6 +23,16 @@
22
23
  - Parallel-ready next wave: -
23
24
  - Notes on blockers: export work stays local-only until the next maintainer has remote access
24
25
 
26
+ ## Project Direction Handoff
27
+
28
+ - Project direction mode: -
29
+ - Direction mode rationale: -
30
+ - Direction-specific questions selected: -
31
+ - Direction-specific questions skipped: -
32
+ - Direction guardrails applied: -
33
+ - Planning posture: -
34
+ - Evidence maturity: -
35
+
25
36
  ## Ready For Req-Plan
26
37
 
27
38
  - RM-020:
@@ -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.3.0`, `cc-plan@3.10.4`, `cc-do@1.7.2`, `cc-check@1.12.2`, `cc-act@1.9.1`
7
+ - Bound skills: `cc-roadmap@5.3.1`, `cc-plan@3.10.7`, `cc-do@1.7.2`, `cc-check@1.12.2`, `cc-act@1.9.3`
8
8
 
9
9
  This example shows verified work that is **ready to move forward**, but `cc-act` still chooses `local-handoff`.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v3`
6
- - Skill version: `5.3.0`
6
+ - Skill version: `5.3.1`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-16`
9
9
  - Owner / decider: `product-owner`
@@ -52,6 +52,7 @@
52
52
 
53
53
  ## Implementation Tracking
54
54
  - Roadmap state source: `roadmap.json`
55
+ - Output language: en
55
56
 
56
57
  <!-- roadmap-tracking:start -->
57
58
  | RM-ID | Item | Stage | Priority | Primary Capability | Secondary Capabilities | Expected Spec Delta | Depends On | Status | REQ | Progress |
@@ -59,7 +60,6 @@
59
60
  | RM-020 | Add an audit-log export summary download | Stage 2 | P1 | cap-audit-log-export | - | codify local export summary truth | - | Local handoff | REQ-003 | 100% |
60
61
  <!-- roadmap-tracking:end -->
61
62
 
62
-
63
63
  ## Technical Architecture
64
64
 
65
65
  ```mermaid
@@ -4,8 +4,9 @@
4
4
 
5
5
  - Requirement version: `REQ-003.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.10.4`
7
+ - CC-Plan skill version: `3.10.7`
8
8
  - Work branch: `REQ/003-audit-log-export`
9
+ - Output language: en
9
10
  - Source roadmap item: `RM-020`
10
11
  - Source roadmap version: `roadmap.v3`
11
12
 
@@ -36,6 +37,27 @@
36
37
  - Better architecture: later introduce a reporting backend for scheduled exports.
37
38
  - Selected move: visible-row CSV download from the existing panel.
38
39
  - Rejected tradeoff: no JSON export, scheduling, or shared reporting backend here.
40
+ - ASCII Branch Chain Analysis:
41
+ Language rule: connector tokens stay ASCII; node text follows `Output language: en`.
42
+
43
+ ```text
44
+ Requirement Impact Chain
45
+ REQ: CSV export for visible audit summary rows
46
+ |-- Upstream source: RM-020 + weekly admin reporting workflow
47
+ |-- Current code path: src/admin/AuditSummaryPanel.tsx
48
+ | |-- caller: admin audit summary panel action
49
+ | |-- data or state: visible summary rows
50
+ | `-- deepest affected layer: browser download/blob boundary for CSV output
51
+ |-- Required change: export visible rows without adding reporting storage
52
+ `-- Verification seam: src/admin/AuditSummaryPanel.test.tsx
53
+
54
+ Business Impact Chain
55
+ OUTCOME: admins stop manually copying weekly audit summaries
56
+ |-- Direct behavior impact: visible rows become a downloadable CSV
57
+ |-- Downstream impact: local handoff documents proof for CSV-only export
58
+ |-- Risk branch: exported rows diverge from visible panel state
59
+ `-- Non-goal branch: JSON export, scheduled reporting, and backend history stay out
60
+ ```
39
61
  - Read first:
40
62
  - `design.md`
41
63
  - `src/admin/AuditSummaryPanel.tsx`
@@ -5,12 +5,17 @@
5
5
  },
6
6
  "meta": {
7
7
  "roadmapVersion": "roadmap.v2",
8
- "skillVersion": "5.3.0",
8
+ "skillVersion": "5.3.1",
9
9
  "status": "active",
10
10
  "lastUpdated": "2026-04-19",
11
11
  "currentFocusStage": "Stage 2"
12
12
  },
13
13
  "context": {
14
+ "projectDirectionMode": "",
15
+ "projectDirectionRationale": "",
16
+ "directionQuestionsSelected": [],
17
+ "directionQuestionsSkipped": [],
18
+ "directionGuardrailsApplied": [],
14
19
  "planningPosture": "",
15
20
  "evidenceMaturity": "",
16
21
  "canonicalTerms": [],
@@ -123,7 +128,7 @@
123
128
  },
124
129
  "backlogMeta": {
125
130
  "roadmapVersion": "roadmap.v2",
126
- "skillVersion": "4.4.1",
131
+ "skillVersion": "5.3.1",
127
132
  "currentFocusStage": "Stage 2"
128
133
  },
129
134
  "dependencyHandoff": {
@@ -5,10 +5,11 @@
5
5
  ## Backlog Meta
6
6
 
7
7
  - Roadmap version: `roadmap.v1`
8
- - Skill version: `5.3.0`
8
+ - Skill version: `5.3.1`
9
9
  - Last synced: `2026-04-19`
10
10
  - Current focus stage: `Stage 1`
11
11
  - Roadmap state source: `roadmap.json`
12
+ - Output language: en
12
13
 
13
14
  ## Queue
14
15
 
@@ -23,6 +24,16 @@
23
24
  - Parallel-ready next wave: none until RM-001 proves the copy action shape
24
25
  - Notes on blockers: RM-002 should reuse the final interaction contract from RM-001, not race it
25
26
 
27
+ ## Project Direction Handoff
28
+
29
+ - Project direction mode: -
30
+ - Direction mode rationale: -
31
+ - Direction-specific questions selected: -
32
+ - Direction-specific questions skipped: -
33
+ - Direction guardrails applied: -
34
+ - Planning posture: -
35
+ - Evidence maturity: -
36
+
26
37
  ## Ready For Req-Plan
27
38
 
28
39
  - RM-001:
@@ -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.3.0`, `cc-plan@3.10.4`, `cc-do@1.7.2`, `cc-check@1.12.2`, `cc-act@1.9.1`
7
+ - Bound skills: `cc-roadmap@5.3.1`, `cc-plan@3.10.7`, `cc-do@1.7.2`, `cc-check@1.12.2`, `cc-act@1.9.3`
8
8
 
9
9
  This folder shows one minimal but complete `cc-roadmap -> cc-plan -> cc-do -> cc-check -> cc-act` loop.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v1`
6
- - Skill version: `5.3.0`
6
+ - Skill version: `5.3.1`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-15`
9
9
  - Owner / decider: `product-owner`
@@ -138,6 +138,7 @@
138
138
 
139
139
  ## Implementation Tracking
140
140
  - Roadmap state source: `roadmap.json`
141
+ - Output language: en
141
142
 
142
143
  <!-- roadmap-tracking:start -->
143
144
  | RM-ID | Item | Stage | Priority | Primary Capability | Secondary Capabilities | Expected Spec Delta | Depends On | Status | REQ | Progress |
@@ -147,7 +148,6 @@
147
148
  | RM-004 | Collaboration analytics follow-up | - | - | - | - | - | - | - | - | - |
148
149
  <!-- roadmap-tracking:end -->
149
150
 
150
-
151
151
  ## Technical Architecture
152
152
 
153
153
  ```mermaid
@@ -4,8 +4,9 @@
4
4
 
5
5
  - Requirement version: `REQ-001.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.10.4`
7
+ - CC-Plan skill version: `3.10.7`
8
8
  - Work branch: `REQ/001-copy-invite-link`
9
+ - Output language: en
9
10
  - Source roadmap item: `RM-001`
10
11
  - Source roadmap version: `roadmap.v1`
11
12
 
@@ -37,6 +38,27 @@
37
38
  - Better architecture: centralize all share actions behind a richer share command model later.
38
39
  - Selected move: same-dialog copy action with minimal copied-state confirmation.
39
40
  - Rejected tradeoff: no broader share-service redesign in this bounded requirement.
41
+ - ASCII Branch Chain Analysis:
42
+ Language rule: connector tokens stay ASCII; node text follows `Output language: en`.
43
+
44
+ ```text
45
+ Requirement Impact Chain
46
+ REQ: one-click copy for the visible invite URL
47
+ |-- Upstream source: RM-001 + share dialog user story
48
+ |-- Current code path: src/features/share/ShareDialog.tsx
49
+ | |-- caller: share dialog render flow
50
+ | |-- data or state: existing invite URL prop + copied confirmation state
51
+ | `-- deepest affected layer: clipboard boundary in the dialog behavior
52
+ |-- Required change: add copy action without changing share-service contracts
53
+ `-- Verification seam: src/features/share/ShareDialog.test.tsx
54
+
55
+ Business Impact Chain
56
+ OUTCOME: users can share invites without manual text selection
57
+ |-- Direct behavior impact: visible invite URL copies from the dialog
58
+ |-- Downstream impact: tests and PR brief document the bounded copy behavior
59
+ |-- Risk branch: clipboard boundary failure or stale copied-state feedback
60
+ `-- Non-goal branch: invite generation, analytics, and fallback redesign stay out
61
+ ```
40
62
  - Read first:
41
63
  - `design.md`
42
64
  - `src/features/share/ShareDialog.tsx`
@@ -5,12 +5,17 @@
5
5
  },
6
6
  "meta": {
7
7
  "roadmapVersion": "roadmap.v1",
8
- "skillVersion": "5.3.0",
8
+ "skillVersion": "5.3.1",
9
9
  "status": "active",
10
10
  "lastUpdated": "2026-04-19",
11
11
  "currentFocusStage": "Stage 1"
12
12
  },
13
13
  "context": {
14
+ "projectDirectionMode": "",
15
+ "projectDirectionRationale": "",
16
+ "directionQuestionsSelected": [],
17
+ "directionQuestionsSkipped": [],
18
+ "directionGuardrailsApplied": [],
14
19
  "planningPosture": "",
15
20
  "evidenceMaturity": "",
16
21
  "canonicalTerms": [],
@@ -193,7 +198,7 @@
193
198
  },
194
199
  "backlogMeta": {
195
200
  "roadmapVersion": "roadmap.v1",
196
- "skillVersion": "4.4.1",
201
+ "skillVersion": "5.3.1",
197
202
  "currentFocusStage": "Stage 1"
198
203
  },
199
204
  "dependencyHandoff": {
@@ -13,6 +13,14 @@ Postmortems preserve recurring failures without turning every workflow step into
13
13
  - repeated AI, test, release, Git, or architecture failure
14
14
  - explicit user request
15
15
 
16
+ `cc-act` must make the decision explicit by running:
17
+
18
+ ```bash
19
+ .claude/skills/cc-act/scripts/evaluate-postmortem-trigger.sh --dir devflow/changes/<change-key>
20
+ ```
21
+
22
+ If the trigger only exists in the current session, pass it as `--trigger <short-label>` so the final closeout does not silently drop rework or unusual failure evidence.
23
+
16
24
  ## Rules
17
25
 
18
26
  - Use Git evidence, commands, and current files.