cc-devflow 4.5.10 → 4.5.12
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 +23 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +17 -269
- package/.claude/skills/cc-act/SKILL.md +38 -418
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +2 -13
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +1 -9
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +21 -177
- package/.claude/skills/cc-act/references/closure-contract.md +12 -63
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +5 -5
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +5 -322
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +11 -2
- package/.claude/skills/cc-act/scripts/inspect-git-index.sh +58 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +40 -440
- package/.claude/skills/cc-act/scripts/verify-act-gate.sh +10 -50
- package/.claude/skills/cc-check/CHANGELOG.md +24 -0
- package/.claude/skills/cc-check/PLAYBOOK.md +19 -273
- package/.claude/skills/cc-check/SKILL.md +33 -454
- package/.claude/skills/cc-check/references/review-contract.md +12 -147
- package/.claude/skills/cc-dev/CHANGELOG.md +20 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +1 -1
- package/.claude/skills/cc-dev/SKILL.md +52 -130
- package/.claude/skills/cc-dev/scripts/resolve-cc-devflow.sh +181 -0
- package/.claude/skills/cc-do/CHANGELOG.md +17 -0
- package/.claude/skills/cc-do/PLAYBOOK.md +19 -113
- package/.claude/skills/cc-do/SKILL.md +39 -236
- package/.claude/skills/cc-do/references/execution-recovery.md +15 -109
- package/.claude/skills/cc-do/scripts/cc-do-common.sh +5 -57
- package/.claude/skills/cc-do/scripts/check-task-status.sh +35 -65
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +9 -46
- package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +29 -97
- package/.claude/skills/cc-investigate/CHANGELOG.md +23 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +20 -180
- package/.claude/skills/cc-investigate/SKILL.md +65 -513
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +48 -95
- package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -217
- package/.claude/skills/cc-next/CHANGELOG.md +6 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +12 -8
- package/.claude/skills/cc-next/SKILL.md +34 -140
- package/.claude/skills/cc-plan/CHANGELOG.md +29 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +22 -161
- package/.claude/skills/cc-plan/SKILL.md +47 -640
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +30 -225
- package/.claude/skills/cc-plan/references/planning-contract.md +24 -160
- package/.claude/skills/cc-plan/scripts/next-change-key.sh +8 -44
- package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +2 -2
- package/.claude/skills/cc-plan/scripts/validate-scope.sh +1 -1
- package/.claude/skills/cc-pr-land/SKILL.md +14 -114
- package/.claude/skills/cc-pr-review/CHANGELOG.md +4 -0
- package/.claude/skills/cc-pr-review/SKILL.md +20 -103
- package/.claude/skills/cc-review/CHANGELOG.md +17 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +13 -86
- package/.claude/skills/cc-review/SKILL.md +53 -241
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +2 -2
- package/.claude/skills/cc-review/references/implementation-review-branch.md +7 -147
- package/.claude/skills/cc-review/references/plan-review-branch.md +5 -147
- package/.claude/skills/cc-review/references/review-methods.md +10 -218
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +4 -63
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +1 -1
- package/.claude/skills/cc-roadmap/SKILL.md +3 -3
- package/.claude/skills/cc-simplify/CHANGELOG.md +7 -0
- package/.claude/skills/cc-simplify/SKILL.md +26 -21
- package/.claude/skills/cc-spec-init/PLAYBOOK.md +12 -48
- package/.claude/skills/cc-spec-init/SKILL.md +29 -132
- package/.claude/skills/cc-spec-init/references/spec-contract.md +8 -17
- package/CHANGELOG.md +27 -0
- package/README.md +5 -3
- package/README.zh-CN.md +5 -3
- package/bin/cc-devflow-cli.js +20 -260
- package/bin/cc-devflow.js +44 -7
- package/docs/commands/README.md +1 -1
- package/docs/commands/README.zh-CN.md +1 -1
- package/docs/examples/README.md +1 -1
- package/docs/examples/START-HERE.md +14 -14
- package/docs/examples/example-bindings.json +11 -11
- package/docs/examples/full-design-blocked/README.md +4 -6
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/{planning/tasks.md → task.md} +20 -15
- package/docs/examples/local-handoff/README.md +8 -11
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/pr-brief.md +31 -0
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/{planning/tasks.md → task.md} +18 -13
- package/docs/examples/pdca-loop/README.md +6 -9
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +9 -11
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/{planning/tasks.md → task.md} +18 -13
- package/docs/examples/scripts/check-example-bindings.sh +11 -62
- package/docs/guides/artifact-contract.md +10 -36
- package/docs/guides/getting-started.md +8 -7
- package/docs/guides/getting-started.zh-CN.md +8 -7
- package/docs/guides/minimize-artifacts.md +16 -116
- package/docs/guides/project-postmortem.md +14 -71
- package/lib/compiler/__tests__/skills-registry.test.js +9 -8
- package/lib/compiler/resource-copier.js +29 -0
- package/lib/skill-runtime/__tests__/archive-change.test.js +2 -2
- package/lib/skill-runtime/__tests__/benchmark-skills.test.js +109 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +14 -4
- package/lib/skill-runtime/errors.js +3 -3
- package/lib/skill-runtime/index.js +5 -23
- package/lib/skill-runtime/paths.js +5 -52
- package/lib/skill-runtime/query-registry.js +4 -4
- package/lib/skill-runtime/query.js +89 -201
- package/lib/skill-runtime/store.js +4 -40
- package/lib/skill-runtime/trace.js +2 -2
- package/package.json +5 -7
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +0 -29
- package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +0 -54
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +0 -92
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +0 -355
- package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +0 -234
- package/.claude/skills/cc-check/scripts/render-report-card.js +0 -438
- package/.claude/skills/cc-check/scripts/verify-gate.sh +0 -85
- package/.claude/skills/cc-do/scripts/build-task-context.sh +0 -175
- package/.claude/skills/cc-do/scripts/record-review-decision.sh +0 -88
- package/.claude/skills/cc-do/scripts/recover-workflow.sh +0 -82
- package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +0 -70
- package/.claude/skills/cc-do/scripts/verify-task-gates.sh +0 -109
- package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +0 -92
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +0 -225
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +0 -179
- package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +0 -28
- package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +0 -45
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +0 -234
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +0 -488
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +0 -189
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +0 -39
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +0 -29
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +0 -123
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +0 -292
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +0 -136
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +0 -29
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +0 -124
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +0 -292
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +0 -136
- package/docs/get-shit-done-strategy-audit.md +0 -518
- package/docs/skill-runtime-migration.md +0 -46
- package/lib/skill-runtime/__tests__/approve.test.js +0 -92
- package/lib/skill-runtime/__tests__/autopilot.test.js +0 -253
- package/lib/skill-runtime/__tests__/benchmark-artifacts.test.js +0 -165
- package/lib/skill-runtime/__tests__/delegation.test.js +0 -97
- package/lib/skill-runtime/__tests__/dispatch.test.js +0 -237
- package/lib/skill-runtime/__tests__/intent.test.js +0 -203
- package/lib/skill-runtime/__tests__/lifecycle.test.js +0 -169
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +0 -331
- package/lib/skill-runtime/__tests__/prepare-pr.test.js +0 -126
- package/lib/skill-runtime/__tests__/query.test.js +0 -860
- package/lib/skill-runtime/__tests__/readiness.test.js +0 -53
- package/lib/skill-runtime/__tests__/release.test.js +0 -85
- package/lib/skill-runtime/__tests__/review-check-integration.test.js +0 -148
- package/lib/skill-runtime/__tests__/review-records.test.js +0 -619
- package/lib/skill-runtime/__tests__/runtime.integration.test.js +0 -351
- package/lib/skill-runtime/__tests__/schemas.test.js +0 -337
- package/lib/skill-runtime/__tests__/task-contract-migrate.test.js +0 -137
- package/lib/skill-runtime/__tests__/task-contract.test.js +0 -783
- package/lib/skill-runtime/__tests__/team-state.test.js +0 -51
- package/lib/skill-runtime/__tests__/verify-artifacts.test.js +0 -203
- package/lib/skill-runtime/__tests__/worker-run.test.js +0 -275
- package/lib/skill-runtime/__tests__/worker.test.js +0 -56
- package/lib/skill-runtime/__tests__/workflow-context-legacy-fallback.test.js +0 -31
- package/lib/skill-runtime/__tests__/workflow-context.test.js +0 -98
- package/lib/skill-runtime/artifacts.js +0 -88
- package/lib/skill-runtime/context-index.js +0 -545
- package/lib/skill-runtime/delegation.js +0 -533
- package/lib/skill-runtime/intent.js +0 -309
- package/lib/skill-runtime/lifecycle.js +0 -294
- package/lib/skill-runtime/operations/CLAUDE.md +0 -19
- package/lib/skill-runtime/operations/approve.js +0 -81
- package/lib/skill-runtime/operations/autopilot-core.js +0 -337
- package/lib/skill-runtime/operations/autopilot-execution.js +0 -307
- package/lib/skill-runtime/operations/autopilot-shared.js +0 -48
- package/lib/skill-runtime/operations/autopilot.js +0 -163
- package/lib/skill-runtime/operations/dispatch.js +0 -416
- package/lib/skill-runtime/operations/init.js +0 -60
- package/lib/skill-runtime/operations/janitor.js +0 -61
- package/lib/skill-runtime/operations/plan.js +0 -59
- package/lib/skill-runtime/operations/prepare-pr.js +0 -25
- package/lib/skill-runtime/operations/release.js +0 -99
- package/lib/skill-runtime/operations/resume.js +0 -126
- package/lib/skill-runtime/operations/review-records.js +0 -265
- package/lib/skill-runtime/operations/snapshot.js +0 -45
- package/lib/skill-runtime/operations/task-contract.js +0 -524
- package/lib/skill-runtime/operations/verify.js +0 -170
- package/lib/skill-runtime/operations/worker-run.js +0 -531
- package/lib/skill-runtime/operations/worker.js +0 -33
- package/lib/skill-runtime/planner.js +0 -539
- package/lib/skill-runtime/readiness.js +0 -84
- package/lib/skill-runtime/review-records.js +0 -123
- package/lib/skill-runtime/review.js +0 -855
- package/lib/skill-runtime/schemas.js +0 -746
- package/lib/skill-runtime/task-contract.js +0 -187
- package/lib/skill-runtime/team-state.js +0 -122
- package/lib/skill-runtime/workflow-context.js +0 -748
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# ------------------------------------------------------------
|
|
6
|
-
# cc-act: 同步 requirement 级文档,并产出 doc sync 报告
|
|
7
|
-
# ------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
usage() {
|
|
10
|
-
cat <<'EOF'
|
|
11
|
-
Usage: sync-act-docs.sh --dir path/to/change [--repo-root path/to/repo]
|
|
12
|
-
EOF
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
REQ_DIR=""
|
|
16
|
-
REPO_ROOT=""
|
|
17
|
-
|
|
18
|
-
while [[ $# -gt 0 ]]; do
|
|
19
|
-
case "$1" in
|
|
20
|
-
--dir) REQ_DIR="$2"; shift 2 ;;
|
|
21
|
-
--repo-root) REPO_ROOT="$2"; shift 2 ;;
|
|
22
|
-
-h|--help) usage; exit 0 ;;
|
|
23
|
-
*) echo "Unknown arg: $1" >&2; usage; exit 1 ;;
|
|
24
|
-
esac
|
|
25
|
-
done
|
|
26
|
-
|
|
27
|
-
if [[ -z "$REQ_DIR" || ! -d "$REQ_DIR" ]]; then
|
|
28
|
-
usage
|
|
29
|
-
exit 1
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
if [[ -z "$REPO_ROOT" ]]; then
|
|
33
|
-
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
37
|
-
source "$script_dir/cc-act-common.sh"
|
|
38
|
-
CHANGE_DIR="$(req_act_change_dir "$REQ_DIR")"
|
|
39
|
-
report_card="$(req_act_report_path "$CHANGE_DIR")"
|
|
40
|
-
manifest="$(req_act_manifest_path "$CHANGE_DIR")"
|
|
41
|
-
tasks_file="$(req_act_tasks_path "$CHANGE_DIR")"
|
|
42
|
-
design_file="$(req_act_contract_path "$CHANGE_DIR")"
|
|
43
|
-
resume_index="$(req_act_resume_index_path "$CHANGE_DIR")"
|
|
44
|
-
release_note="$(req_act_release_note_path "$CHANGE_DIR")"
|
|
45
|
-
doc_sync_report="$(req_act_doc_sync_report_path "$CHANGE_DIR")"
|
|
46
|
-
|
|
47
|
-
"$script_dir/verify-act-gate.sh" --dir "$CHANGE_DIR" >/dev/null
|
|
48
|
-
mkdir -p "$(dirname "$resume_index")"
|
|
49
|
-
|
|
50
|
-
ship_context="$("$script_dir/detect-ship-target.sh" 2>/dev/null || true)"
|
|
51
|
-
current_branch="$(req_act_ship_field "$ship_context" "CURRENT_BRANCH")"
|
|
52
|
-
branch_state="$(req_act_ship_field "$ship_context" "BRANCH_STATE")"
|
|
53
|
-
branch_rescue="$(req_act_ship_field "$ship_context" "BRANCH_RESCUE")"
|
|
54
|
-
rescue_action="$(req_act_ship_field "$ship_context" "RESCUE_ACTION")"
|
|
55
|
-
base_branch="$(req_act_ship_field "$ship_context" "BASE_BRANCH")"
|
|
56
|
-
ship_mode="$(req_act_ship_field "$ship_context" "DECISION_HINT")"
|
|
57
|
-
pr_status="$(req_act_ship_field "$ship_context" "PR_STATUS")"
|
|
58
|
-
pr_url="$(req_act_ship_field "$ship_context" "PR_URL")"
|
|
59
|
-
|
|
60
|
-
timestamp="$(date '+%Y-%m-%d %H:%M:%S %z')"
|
|
61
|
-
requirement_id="$(req_act_requirement_id "$manifest" "$CHANGE_DIR")"
|
|
62
|
-
report_summary="$(req_act_report_summary "$report_card")"
|
|
63
|
-
report_verdict="$(req_act_report_verdict "$report_card")"
|
|
64
|
-
spec_sync_ready="$(req_act_spec_sync_ready "$report_card")"
|
|
65
|
-
output_language="$(req_act_output_language "$report_card")"
|
|
66
|
-
design_goal="$(req_act_design_goal "$design_file")"
|
|
67
|
-
main_risk="$(req_act_main_risk "$design_file")"
|
|
68
|
-
roadmap_sync_summary="$(req_act_roadmap_sync_summary "$manifest" "$REPO_ROOT")"
|
|
69
|
-
|
|
70
|
-
tmp_changed="$(mktemp)"
|
|
71
|
-
tmp_verify="$(mktemp)"
|
|
72
|
-
tmp_followups="$(mktemp)"
|
|
73
|
-
tmp_touched="$(mktemp)"
|
|
74
|
-
tmp_specs="$(mktemp)"
|
|
75
|
-
tmp_claude="$(mktemp)"
|
|
76
|
-
tmp_readme="$(mktemp)"
|
|
77
|
-
cleanup() {
|
|
78
|
-
rm -f "$tmp_changed" "$tmp_verify" "$tmp_followups" "$tmp_touched" "$tmp_specs" "$tmp_claude" "$tmp_readme"
|
|
79
|
-
}
|
|
80
|
-
trap cleanup EXIT
|
|
81
|
-
|
|
82
|
-
# ------------------------------------------------------------
|
|
83
|
-
# 共享提取:变更 / 验证 / follow-up / touched
|
|
84
|
-
# ------------------------------------------------------------
|
|
85
|
-
req_act_collect_completed_titles "$manifest" "$tasks_file" "$tmp_changed"
|
|
86
|
-
req_act_collect_verification_commands "$manifest" "$tmp_verify"
|
|
87
|
-
req_act_collect_followups "$report_card" "$manifest" "$tmp_followups"
|
|
88
|
-
req_act_collect_touched_files "$manifest" "$tmp_touched"
|
|
89
|
-
req_act_collect_spec_files "$manifest" "$tmp_specs"
|
|
90
|
-
|
|
91
|
-
nearest_claude() {
|
|
92
|
-
local rel="$1"
|
|
93
|
-
local dir candidate
|
|
94
|
-
|
|
95
|
-
if [[ -z "$rel" ]]; then
|
|
96
|
-
return 0
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
dir="$(dirname "$rel")"
|
|
100
|
-
while :; do
|
|
101
|
-
if [[ "$dir" == "." ]]; then
|
|
102
|
-
candidate="$REPO_ROOT/CLAUDE.md"
|
|
103
|
-
else
|
|
104
|
-
candidate="$REPO_ROOT/$dir/CLAUDE.md"
|
|
105
|
-
fi
|
|
106
|
-
if [[ -f "$candidate" ]]; then
|
|
107
|
-
printf '%s\n' "${candidate#$REPO_ROOT/}"
|
|
108
|
-
return 0
|
|
109
|
-
fi
|
|
110
|
-
if [[ "$dir" == "." || "$dir" == "/" ]]; then
|
|
111
|
-
break
|
|
112
|
-
fi
|
|
113
|
-
dir="$(dirname "$dir")"
|
|
114
|
-
done
|
|
115
|
-
|
|
116
|
-
if [[ -f "$REPO_ROOT/CLAUDE.md" ]]; then
|
|
117
|
-
printf '%s\n' "CLAUDE.md"
|
|
118
|
-
fi
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
while IFS= read -r touched; do
|
|
122
|
-
nearest_claude "$touched" >> "$tmp_claude" || true
|
|
123
|
-
done < "$tmp_touched"
|
|
124
|
-
awk 'NF && !seen[$0]++' "$tmp_claude" > "${tmp_claude}.dedup"
|
|
125
|
-
mv "${tmp_claude}.dedup" "$tmp_claude"
|
|
126
|
-
|
|
127
|
-
find "$REPO_ROOT" -maxdepth 2 -type f \( -iname 'README.md' -o -iname 'README*.md' \) \
|
|
128
|
-
-print 2>/dev/null | sed "s|^$REPO_ROOT/||" | awk '!seen[$0]++' > "$tmp_readme" || true
|
|
129
|
-
|
|
130
|
-
# ------------------------------------------------------------
|
|
131
|
-
# 生成 release note
|
|
132
|
-
# ------------------------------------------------------------
|
|
133
|
-
{
|
|
134
|
-
echo "# Release Note"
|
|
135
|
-
echo
|
|
136
|
-
echo "## Document Meta"
|
|
137
|
-
echo
|
|
138
|
-
echo "- Output language: $output_language"
|
|
139
|
-
echo
|
|
140
|
-
echo "## User Impact"
|
|
141
|
-
if [[ -n "$report_summary" ]]; then
|
|
142
|
-
echo
|
|
143
|
-
echo "- $report_summary"
|
|
144
|
-
fi
|
|
145
|
-
if [[ -n "$design_goal" && "$design_goal" != "$report_summary" ]]; then
|
|
146
|
-
echo "- $design_goal"
|
|
147
|
-
fi
|
|
148
|
-
if [[ ! -s "$tmp_changed" && -z "$report_summary" && -z "$design_goal" ]]; then
|
|
149
|
-
echo
|
|
150
|
-
echo "- No user-facing summary captured yet."
|
|
151
|
-
fi
|
|
152
|
-
echo
|
|
153
|
-
echo "## What Is New"
|
|
154
|
-
if [[ -s "$tmp_changed" ]]; then
|
|
155
|
-
while IFS= read -r line; do
|
|
156
|
-
echo "- $line"
|
|
157
|
-
done < "$tmp_changed"
|
|
158
|
-
else
|
|
159
|
-
echo
|
|
160
|
-
echo "- No completed task list captured yet."
|
|
161
|
-
fi
|
|
162
|
-
echo
|
|
163
|
-
echo "## Verification"
|
|
164
|
-
echo
|
|
165
|
-
echo "- CC-Check verdict: $report_verdict"
|
|
166
|
-
jq -r '(.evidence // [])[]?' "$report_card" 2>/dev/null | sed '/^$/d' | while IFS= read -r line; do
|
|
167
|
-
echo "- $line"
|
|
168
|
-
done
|
|
169
|
-
if [[ -s "$tmp_verify" ]]; then
|
|
170
|
-
while IFS= read -r cmd; do
|
|
171
|
-
echo "- Verify with: \`$cmd\`"
|
|
172
|
-
done < "$tmp_verify"
|
|
173
|
-
fi
|
|
174
|
-
echo
|
|
175
|
-
echo "## Ops Notes"
|
|
176
|
-
echo
|
|
177
|
-
echo "- Ship mode: $ship_mode"
|
|
178
|
-
[[ -n "$branch_state" ]] && echo "- Branch state: $branch_state"
|
|
179
|
-
echo "- Spec sync ready: $spec_sync_ready"
|
|
180
|
-
echo "- Current branch: ${current_branch:-unknown}"
|
|
181
|
-
echo "- Base branch: ${base_branch:-unknown}"
|
|
182
|
-
[[ -n "$branch_rescue" && "$branch_rescue" != "none" ]] && echo "- Branch rescue: $branch_rescue"
|
|
183
|
-
[[ -n "$rescue_action" ]] && echo "- Rescue action: $rescue_action"
|
|
184
|
-
[[ -n "$pr_status" ]] && echo "- PR status: $pr_status"
|
|
185
|
-
[[ -n "$pr_url" ]] && echo "- PR url: $pr_url"
|
|
186
|
-
echo "- Roadmap progress: $roadmap_sync_summary"
|
|
187
|
-
echo
|
|
188
|
-
echo "## Roadmap Progress"
|
|
189
|
-
echo
|
|
190
|
-
echo "- $roadmap_sync_summary"
|
|
191
|
-
echo
|
|
192
|
-
echo "## Follow-Ups"
|
|
193
|
-
if [[ -s "$tmp_followups" ]]; then
|
|
194
|
-
echo
|
|
195
|
-
while IFS= read -r line; do
|
|
196
|
-
echo "- $line"
|
|
197
|
-
done < "$tmp_followups"
|
|
198
|
-
else
|
|
199
|
-
echo
|
|
200
|
-
echo "- None recorded."
|
|
201
|
-
fi
|
|
202
|
-
} > "$release_note"
|
|
203
|
-
|
|
204
|
-
# ------------------------------------------------------------
|
|
205
|
-
# 生成 resume index
|
|
206
|
-
# ------------------------------------------------------------
|
|
207
|
-
next_action="Refresh handoff and close the requirement."
|
|
208
|
-
case "$ship_mode" in
|
|
209
|
-
create-pr) next_action="Push current branch and create PR / MR from pr-brief.md." ;;
|
|
210
|
-
update-pr) next_action="Refresh the open PR / MR body and resolve outstanding review feedback." ;;
|
|
211
|
-
local-handoff) next_action="Hand off with pr-brief.md and this resume index." ;;
|
|
212
|
-
post-merge-closeout) next_action="Run release note/backlog writeback, then run cc-devflow archive-change $requirement_id and verify the archive path." ;;
|
|
213
|
-
esac
|
|
214
|
-
if [[ "$branch_rescue" == "create-branch-before-pr" ]]; then
|
|
215
|
-
next_action="Run ensure-ship-branch.sh, rerun final verification, then push the named branch and create PR / MR from pr-brief.md."
|
|
216
|
-
elif [[ "$branch_rescue" == "create-local-branch-or-handoff" ]]; then
|
|
217
|
-
next_action="Run ensure-ship-branch.sh before local closeout, or keep local-handoff only if no branch should be created."
|
|
218
|
-
fi
|
|
219
|
-
|
|
220
|
-
{
|
|
221
|
-
echo "# Resume Index"
|
|
222
|
-
echo
|
|
223
|
-
echo "## Document Meta"
|
|
224
|
-
echo
|
|
225
|
-
echo "- Output language: $output_language"
|
|
226
|
-
echo
|
|
227
|
-
echo "- Requirement: $requirement_id"
|
|
228
|
-
echo "- Current stage: cc-act"
|
|
229
|
-
echo "- Current task: ship:$ship_mode"
|
|
230
|
-
[[ -n "$branch_state" ]] && echo "- Branch state: $branch_state"
|
|
231
|
-
if [[ -s "$tmp_followups" ]]; then
|
|
232
|
-
echo "- Ready tasks: follow-up review"
|
|
233
|
-
else
|
|
234
|
-
echo "- Ready tasks: none"
|
|
235
|
-
fi
|
|
236
|
-
echo "- Updated at: $timestamp"
|
|
237
|
-
echo
|
|
238
|
-
echo "## Last Good Checkpoint"
|
|
239
|
-
echo
|
|
240
|
-
if [[ -n "$report_summary" ]]; then
|
|
241
|
-
echo "- $report_summary"
|
|
242
|
-
else
|
|
243
|
-
echo "- Req-Check passed; see review/report-card.json for evidence."
|
|
244
|
-
fi
|
|
245
|
-
echo "- Ship mode decided as \`$ship_mode\`."
|
|
246
|
-
[[ -n "$branch_rescue" && "$branch_rescue" != "none" ]] && echo "- Branch rescue: \`$branch_rescue\`."
|
|
247
|
-
[[ -n "$rescue_action" ]] && echo "- Rescue action: $rescue_action"
|
|
248
|
-
echo "- Roadmap progress: $roadmap_sync_summary"
|
|
249
|
-
[[ -n "$pr_url" ]] && echo "- Active PR / MR: $pr_url"
|
|
250
|
-
echo
|
|
251
|
-
echo "## Follow-Ups"
|
|
252
|
-
echo
|
|
253
|
-
if [[ -s "$tmp_followups" ]]; then
|
|
254
|
-
while IFS= read -r line; do
|
|
255
|
-
echo "- $line"
|
|
256
|
-
done < "$tmp_followups"
|
|
257
|
-
else
|
|
258
|
-
echo "- None."
|
|
259
|
-
fi
|
|
260
|
-
echo
|
|
261
|
-
echo "## Next Action"
|
|
262
|
-
echo
|
|
263
|
-
echo "- $next_action"
|
|
264
|
-
echo "- Formal spec sync belongs in cc-act before final ship closeout."
|
|
265
|
-
echo "- Roadmap progress must be synced through cc-roadmap before final closeout when a source RM exists."
|
|
266
|
-
echo
|
|
267
|
-
echo "## Parallel Notes"
|
|
268
|
-
echo
|
|
269
|
-
echo "- Safe to parallelize: documentation review, backlog wording, release note polish."
|
|
270
|
-
echo "- Must stay sequential: cc-check pass -> doc sync -> pr brief render -> ship action."
|
|
271
|
-
} > "$resume_index"
|
|
272
|
-
|
|
273
|
-
# ------------------------------------------------------------
|
|
274
|
-
# 生成 doc sync 报告:要求人工关注的项目级文档目标
|
|
275
|
-
# ------------------------------------------------------------
|
|
276
|
-
{
|
|
277
|
-
echo "# Doc Sync Report"
|
|
278
|
-
echo
|
|
279
|
-
echo "## Document Meta"
|
|
280
|
-
echo
|
|
281
|
-
echo "- Output language: $output_language"
|
|
282
|
-
echo
|
|
283
|
-
echo "- Requirement: $requirement_id"
|
|
284
|
-
echo "- Ship mode: $ship_mode"
|
|
285
|
-
echo "- CC-Check verdict: $report_verdict"
|
|
286
|
-
echo "- Spec sync ready: $spec_sync_ready"
|
|
287
|
-
echo "- Updated at: $timestamp"
|
|
288
|
-
echo
|
|
289
|
-
echo "## Synced Requirement Artifacts"
|
|
290
|
-
echo
|
|
291
|
-
echo "- \`handoff/release-note.md\`: refreshed"
|
|
292
|
-
echo "- \`resume-index.md\`: refreshed"
|
|
293
|
-
echo
|
|
294
|
-
echo "## Touched Files"
|
|
295
|
-
echo
|
|
296
|
-
if [[ -s "$tmp_touched" ]]; then
|
|
297
|
-
while IFS= read -r line; do
|
|
298
|
-
echo "- \`$line\`"
|
|
299
|
-
done < "$tmp_touched"
|
|
300
|
-
else
|
|
301
|
-
echo "- No touched files recorded in task-manifest.json."
|
|
302
|
-
fi
|
|
303
|
-
echo
|
|
304
|
-
echo "## Spec Targets"
|
|
305
|
-
echo
|
|
306
|
-
if [[ -s "$tmp_specs" ]]; then
|
|
307
|
-
while IFS= read -r line; do
|
|
308
|
-
echo "- \`$line\`"
|
|
309
|
-
done < "$tmp_specs"
|
|
310
|
-
else
|
|
311
|
-
echo "- No capability spec files recorded in task-manifest.json."
|
|
312
|
-
fi
|
|
313
|
-
echo
|
|
314
|
-
echo "## Roadmap Targets"
|
|
315
|
-
echo
|
|
316
|
-
echo "- $roadmap_sync_summary"
|
|
317
|
-
echo
|
|
318
|
-
echo "## Project Doc Targets"
|
|
319
|
-
echo
|
|
320
|
-
echo "### CLAUDE Targets"
|
|
321
|
-
if [[ -s "$tmp_claude" ]]; then
|
|
322
|
-
echo
|
|
323
|
-
while IFS= read -r line; do
|
|
324
|
-
echo "- \`$line\`"
|
|
325
|
-
done < "$tmp_claude"
|
|
326
|
-
else
|
|
327
|
-
echo
|
|
328
|
-
echo "- No scoped \`CLAUDE.md\` target detected from touched files."
|
|
329
|
-
fi
|
|
330
|
-
echo
|
|
331
|
-
echo "### README Candidates"
|
|
332
|
-
if [[ -s "$tmp_readme" ]]; then
|
|
333
|
-
echo
|
|
334
|
-
while IFS= read -r line; do
|
|
335
|
-
echo "- \`$line\`"
|
|
336
|
-
done < "$tmp_readme"
|
|
337
|
-
else
|
|
338
|
-
echo
|
|
339
|
-
echo "- No README candidate found under repo root."
|
|
340
|
-
fi
|
|
341
|
-
echo
|
|
342
|
-
echo "## Manual Follow-Ups"
|
|
343
|
-
echo
|
|
344
|
-
echo "- Update the listed \`CLAUDE.md\` files if structure, workflow, or operational truth changed."
|
|
345
|
-
echo "- Update README candidates if user-visible behavior or setup flow changed."
|
|
346
|
-
echo "- Update \`devflow/roadmap.json\` via \`sync-roadmap-progress.sh\` when source RM status, progress, or follow-up truth changed."
|
|
347
|
-
echo "- Re-render \`pr-brief.md\` after any manual doc edits so the PR body stays in sync."
|
|
348
|
-
if [[ -n "$main_risk" ]]; then
|
|
349
|
-
echo "- Main risk to reflect in docs: $main_risk"
|
|
350
|
-
fi
|
|
351
|
-
} > "$doc_sync_report"
|
|
352
|
-
|
|
353
|
-
echo "Synced $release_note"
|
|
354
|
-
echo "Synced $resume_index"
|
|
355
|
-
echo "Wrote $doc_sync_report"
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"changeId": "REQ-123",
|
|
3
|
-
"outputPolicy": {
|
|
4
|
-
"documentLanguage": ""
|
|
5
|
-
},
|
|
6
|
-
"verdict": "blocked",
|
|
7
|
-
"overall": "fail",
|
|
8
|
-
"summary": "verdict=blocked quick=1/2 strict=0/0 review=blocked",
|
|
9
|
-
"specAlignment": "blocked",
|
|
10
|
-
"specDeltaVerified": false,
|
|
11
|
-
"specSyncReady": false,
|
|
12
|
-
"runtime": {
|
|
13
|
-
"status": "blocked",
|
|
14
|
-
"failureOwnership": [
|
|
15
|
-
{
|
|
16
|
-
"errorName": "MissingSpecReviewProof",
|
|
17
|
-
"failure": "missing spec review proof",
|
|
18
|
-
"classification": "in-branch",
|
|
19
|
-
"owner": "branch",
|
|
20
|
-
"touchedByDiff": true,
|
|
21
|
-
"artifactRefs": [
|
|
22
|
-
"planning/task-manifest.json",
|
|
23
|
-
"review/report-card.json"
|
|
24
|
-
],
|
|
25
|
-
"evidence": "planning/task-manifest.json tasks[T002].reviews.spec is empty",
|
|
26
|
-
"rescueAction": "record spec review proof for T002 or reroute to cc-do",
|
|
27
|
-
"action": "reroute-cc-do",
|
|
28
|
-
"status": "open"
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
},
|
|
32
|
-
"claimEvidence": [
|
|
33
|
-
{
|
|
34
|
-
"claim": "tests-pass",
|
|
35
|
-
"requiredProof": "fresh test command with exit 0 and 0 failures",
|
|
36
|
-
"commandOrArtifact": "npm test -- src/feature/feature.test.ts",
|
|
37
|
-
"exitStatus": 0,
|
|
38
|
-
"keyObservation": "targeted tests passed in this run",
|
|
39
|
-
"status": "pass"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"claim": "requirements-met",
|
|
43
|
-
"requiredProof": "line-by-line planning/tasks.md and task-manifest.json checklist",
|
|
44
|
-
"commandOrArtifact": "planning/tasks.md + planning/task-manifest.json",
|
|
45
|
-
"exitStatus": null,
|
|
46
|
-
"keyObservation": "T002 still lacks spec review proof",
|
|
47
|
-
"status": "blocked"
|
|
48
|
-
}
|
|
49
|
-
],
|
|
50
|
-
"qa": {
|
|
51
|
-
"status": "blocked",
|
|
52
|
-
"feedbackLoop": {
|
|
53
|
-
"status": "blocked",
|
|
54
|
-
"mode": "targeted-test",
|
|
55
|
-
"commandOrArtifact": "npm test -- src/feature/feature.test.ts",
|
|
56
|
-
"speed": "fast",
|
|
57
|
-
"determinism": "high",
|
|
58
|
-
"signalSharpness": "targeted failure would indicate the user-visible behavior regressed",
|
|
59
|
-
"reproductionRate": "not recorded",
|
|
60
|
-
"attempts": [
|
|
61
|
-
"targeted unit test"
|
|
62
|
-
],
|
|
63
|
-
"blockedReason": "red/green reproduction is not recorded yet"
|
|
64
|
-
},
|
|
65
|
-
"behaviorEvidence": {
|
|
66
|
-
"status": "blocked",
|
|
67
|
-
"userFacingBoundary": "feature behavior",
|
|
68
|
-
"expectedBehavior": "target behavior succeeds for the user",
|
|
69
|
-
"actualBehavior": "not proven yet",
|
|
70
|
-
"reproductionSteps": [
|
|
71
|
-
"run the targeted verification command"
|
|
72
|
-
],
|
|
73
|
-
"consistency": "not recorded",
|
|
74
|
-
"domainLanguage": [
|
|
75
|
-
"feature behavior"
|
|
76
|
-
]
|
|
77
|
-
},
|
|
78
|
-
"regressionProof": [
|
|
79
|
-
{
|
|
80
|
-
"behavior": "original symptom",
|
|
81
|
-
"redCommand": "",
|
|
82
|
-
"redFailure": "",
|
|
83
|
-
"greenCommand": "",
|
|
84
|
-
"greenObservation": "",
|
|
85
|
-
"restoredState": false
|
|
86
|
-
}
|
|
87
|
-
],
|
|
88
|
-
"testQuality": [
|
|
89
|
-
{
|
|
90
|
-
"area": "targeted-tests",
|
|
91
|
-
"checksRealBehavior": true,
|
|
92
|
-
"mockBoundary": "none",
|
|
93
|
-
"testOnlyProductionApi": false,
|
|
94
|
-
"status": "pass"
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
"coverageAudit": {
|
|
98
|
-
"status": "blocked",
|
|
99
|
-
"coveragePct": null,
|
|
100
|
-
"pathMap": ["planning/tasks.md#T002"],
|
|
101
|
-
"gaps": ["T002 has no spec review proof, so the requirement cannot be marked covered"],
|
|
102
|
-
"testsAdded": [],
|
|
103
|
-
"e2eRequired": false,
|
|
104
|
-
"evalRequired": false,
|
|
105
|
-
"qualityStars": "★"
|
|
106
|
-
},
|
|
107
|
-
"browserEvidence": {
|
|
108
|
-
"status": "skipped",
|
|
109
|
-
"mode": "not-applicable",
|
|
110
|
-
"affectedRoutes": [],
|
|
111
|
-
"screenshots": [],
|
|
112
|
-
"consoleErrors": [],
|
|
113
|
-
"healthScore": null,
|
|
114
|
-
"issues": [],
|
|
115
|
-
"skipReason": "template example is not a UI browser QA scenario"
|
|
116
|
-
},
|
|
117
|
-
"humanUat": {
|
|
118
|
-
"status": "skipped",
|
|
119
|
-
"required": false,
|
|
120
|
-
"scenario": "",
|
|
121
|
-
"tester": "",
|
|
122
|
-
"evidence": [],
|
|
123
|
-
"failure": "",
|
|
124
|
-
"reroute": "none",
|
|
125
|
-
"skipReason": "not required for this template scenario"
|
|
126
|
-
},
|
|
127
|
-
"architectureFollowUps": [
|
|
128
|
-
{
|
|
129
|
-
"summary": "Add the missing public test seam before widening coverage",
|
|
130
|
-
"currentBehavior": "review proof depends on task metadata instead of a direct behavior seam",
|
|
131
|
-
"desiredBehavior": "tests verify the behavior through a stable public interface",
|
|
132
|
-
"keyInterfaces": [
|
|
133
|
-
"feature public API"
|
|
134
|
-
],
|
|
135
|
-
"acceptanceCriteria": [
|
|
136
|
-
"target behavior can be reproduced without private implementation hooks"
|
|
137
|
-
],
|
|
138
|
-
"outOfScope": [
|
|
139
|
-
"rewriting unrelated modules"
|
|
140
|
-
],
|
|
141
|
-
"status": "deferred-minor"
|
|
142
|
-
}
|
|
143
|
-
],
|
|
144
|
-
"tddException": null
|
|
145
|
-
},
|
|
146
|
-
"quickGates": [
|
|
147
|
-
{
|
|
148
|
-
"name": "targeted-tests",
|
|
149
|
-
"status": "pass",
|
|
150
|
-
"command": "npm test -- src/feature/feature.test.ts",
|
|
151
|
-
"summary": "targeted tests passed"
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
"name": "review-proof",
|
|
155
|
-
"status": "blocked",
|
|
156
|
-
"command": "review artifacts",
|
|
157
|
-
"summary": "missing spec review proof for T002"
|
|
158
|
-
}
|
|
159
|
-
],
|
|
160
|
-
"strictGates": [],
|
|
161
|
-
"review": {
|
|
162
|
-
"status": "blocked",
|
|
163
|
-
"summary": "Task review evidence is incomplete",
|
|
164
|
-
"details": "T002 is implemented, but the requirement still lacks spec review proof required by the gate.",
|
|
165
|
-
"freshness": {
|
|
166
|
-
"status": "unknown",
|
|
167
|
-
"reviewedCommit": "",
|
|
168
|
-
"currentCommit": "",
|
|
169
|
-
"commitsSinceReview": null,
|
|
170
|
-
"staleReason": "review range is not recorded yet"
|
|
171
|
-
},
|
|
172
|
-
"qualityScore": null,
|
|
173
|
-
"specialistReviews": [
|
|
174
|
-
{
|
|
175
|
-
"name": "testing",
|
|
176
|
-
"status": "blocked",
|
|
177
|
-
"required": true,
|
|
178
|
-
"summary": "testing facet cannot pass while task review proof is missing",
|
|
179
|
-
"skipReason": "",
|
|
180
|
-
"findings": []
|
|
181
|
-
}
|
|
182
|
-
],
|
|
183
|
-
"taskReviews": {
|
|
184
|
-
"status": "blocked",
|
|
185
|
-
"required": true,
|
|
186
|
-
"summary": "T002 has no spec review record yet",
|
|
187
|
-
"reviewPacket": {
|
|
188
|
-
"baseSha": "",
|
|
189
|
-
"headSha": "",
|
|
190
|
-
"requirements": "planning/tasks.md#T002",
|
|
191
|
-
"implemented": "implementation report for T002",
|
|
192
|
-
"reviewerContext": "task spec and changed files"
|
|
193
|
-
},
|
|
194
|
-
"reviewers": [],
|
|
195
|
-
"findings": [
|
|
196
|
-
{
|
|
197
|
-
"severity": "important",
|
|
198
|
-
"confidence": "high",
|
|
199
|
-
"source": "task-review",
|
|
200
|
-
"summary": "T002 spec review proof is missing",
|
|
201
|
-
"evidence": "planning/task-manifest.json tasks[T002].reviews.spec is empty",
|
|
202
|
-
"action": "reroute-cc-do",
|
|
203
|
-
"rescueAction": "record spec review proof for T002 or return to cc-do",
|
|
204
|
-
"triageStatus": "clarification-needed",
|
|
205
|
-
"confidenceScore": 9,
|
|
206
|
-
"fingerprint": "task-review:T002:missing-spec-review",
|
|
207
|
-
"displayTier": "blocking",
|
|
208
|
-
"suppressionReason": null
|
|
209
|
-
}
|
|
210
|
-
]
|
|
211
|
-
},
|
|
212
|
-
"diffReview": {
|
|
213
|
-
"status": "skipped",
|
|
214
|
-
"required": false,
|
|
215
|
-
"summary": "",
|
|
216
|
-
"reviewPacket": {
|
|
217
|
-
"baseSha": "",
|
|
218
|
-
"headSha": "",
|
|
219
|
-
"requirements": "planning/design.md",
|
|
220
|
-
"implemented": "",
|
|
221
|
-
"reviewerContext": ""
|
|
222
|
-
},
|
|
223
|
-
"reviewers": [],
|
|
224
|
-
"findings": []
|
|
225
|
-
},
|
|
226
|
-
"findings": []
|
|
227
|
-
},
|
|
228
|
-
"blockingFindings": [
|
|
229
|
-
"review: missing spec review proof for T002"
|
|
230
|
-
],
|
|
231
|
-
"gaps": [],
|
|
232
|
-
"reroute": "cc-do",
|
|
233
|
-
"timestamp": "2026-04-15T12:00:00.000Z"
|
|
234
|
-
}
|