cc-devflow 1.0.1

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 (277) hide show
  1. package/.claude/CLAUDE.md +83 -0
  2. package/.claude/agents/architecture-designer.md +443 -0
  3. package/.claude/agents/bug-analyzer.md +382 -0
  4. package/.claude/agents/checklist-agent.md +175 -0
  5. package/.claude/agents/clarify-analyst.md +50 -0
  6. package/.claude/agents/code-reviewer.md +71 -0
  7. package/.claude/agents/codex-analyzer.md +39 -0
  8. package/.claude/agents/compatibility-checker.md +580 -0
  9. package/.claude/agents/consistency-checker.md +532 -0
  10. package/.claude/agents/impact-analyzer.md +441 -0
  11. package/.claude/agents/planner.md +230 -0
  12. package/.claude/agents/prd-writer.md +320 -0
  13. package/.claude/agents/project-guidelines-generator.md +1329 -0
  14. package/.claude/agents/qa-tester.md +313 -0
  15. package/.claude/agents/release-manager.md +295 -0
  16. package/.claude/agents/security-reviewer.md +314 -0
  17. package/.claude/agents/style-guide-generator.md +458 -0
  18. package/.claude/agents/tech-architect.md +516 -0
  19. package/.claude/agents/ui-designer.md +485 -0
  20. package/.claude/commands/code-review-high.md +58 -0
  21. package/.claude/commands/core-architecture.md +429 -0
  22. package/.claude/commands/core-guidelines.md +486 -0
  23. package/.claude/commands/core-roadmap.md +439 -0
  24. package/.claude/commands/core-style.md +293 -0
  25. package/.claude/commands/flow-archive.md +245 -0
  26. package/.claude/commands/flow-checklist.md +260 -0
  27. package/.claude/commands/flow-clarify.md +136 -0
  28. package/.claude/commands/flow-constitution.md +82 -0
  29. package/.claude/commands/flow-dev.md +134 -0
  30. package/.claude/commands/flow-epic.md +150 -0
  31. package/.claude/commands/flow-fix.md +104 -0
  32. package/.claude/commands/flow-ideate.md +214 -0
  33. package/.claude/commands/flow-init.md +313 -0
  34. package/.claude/commands/flow-new.md +394 -0
  35. package/.claude/commands/flow-prd.md +131 -0
  36. package/.claude/commands/flow-qa.md +93 -0
  37. package/.claude/commands/flow-release.md +92 -0
  38. package/.claude/commands/flow-restart.md +98 -0
  39. package/.claude/commands/flow-status.md +64 -0
  40. package/.claude/commands/flow-tech.md +142 -0
  41. package/.claude/commands/flow-ui.md +189 -0
  42. package/.claude/commands/flow-update.md +111 -0
  43. package/.claude/commands/flow-upgrade.md +115 -0
  44. package/.claude/commands/flow-verify.md +96 -0
  45. package/.claude/commands/problem-analyzer.md +60 -0
  46. package/.claude/config/quality-rules.yml +161 -0
  47. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +426 -0
  48. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +658 -0
  49. package/.claude/docs/design/intent-driven-input-design.md +380 -0
  50. package/.claude/docs/design/prd-version-management-design.md +437 -0
  51. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +117 -0
  52. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +151 -0
  53. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +188 -0
  54. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +338 -0
  55. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +633 -0
  56. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +261 -0
  57. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +52 -0
  58. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +206 -0
  59. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +71 -0
  60. package/.claude/docs/templates/EPIC_TEMPLATE.md +805 -0
  61. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +213 -0
  62. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +57 -0
  63. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +148 -0
  64. package/.claude/docs/templates/PRD_TEMPLATE.md +562 -0
  65. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +276 -0
  66. package/.claude/docs/templates/REVIEW-HIGH.md +57 -0
  67. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +198 -0
  68. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +310 -0
  69. package/.claude/docs/templates/STYLE_TEMPLATE.md +1266 -0
  70. package/.claude/docs/templates/TASKS_TEMPLATE.md +523 -0
  71. package/.claude/docs/templates/TECH_DESIGN_TEMPLATE.md +1019 -0
  72. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +1436 -0
  73. package/.claude/guides/agent-guides/agent-coordination-guide.md +459 -0
  74. package/.claude/guides/project-guidelines-system.md +463 -0
  75. package/.claude/guides/technical-guides/datetime-handling-guide.md +563 -0
  76. package/.claude/guides/technical-guides/git-github-guide.md +642 -0
  77. package/.claude/guides/technical-guides/test-execution-guide.md +618 -0
  78. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +217 -0
  79. package/.claude/guides/workflow-guides/flow-orchestrator.md +282 -0
  80. package/.claude/hooks/checklist-gate.js +397 -0
  81. package/.claude/hooks/error-handling-reminder.sh +12 -0
  82. package/.claude/hooks/error-handling-reminder.ts +459 -0
  83. package/.claude/hooks/post-tool-use-tracker.sh +280 -0
  84. package/.claude/hooks/pre-tool-use-guardrail.sh +36 -0
  85. package/.claude/hooks/pre-tool-use-guardrail.ts +342 -0
  86. package/.claude/hooks/skill-activation-prompt.sh +36 -0
  87. package/.claude/hooks/skill-activation-prompt.ts +214 -0
  88. package/.claude/hooks/state/skills-used-test-guard.json +3 -0
  89. package/.claude/rules/devflow-conventions.md +305 -0
  90. package/.claude/rules/project-constitution.md +748 -0
  91. package/.claude/schemas/constitution.schema.json +43 -0
  92. package/.claude/scripts/analyze-upgrade-impact.sh +200 -0
  93. package/.claude/scripts/archive-requirement.sh +351 -0
  94. package/.claude/scripts/calculate-checklist-completion.sh +243 -0
  95. package/.claude/scripts/calculate-quarter.sh +206 -0
  96. package/.claude/scripts/check-dependencies.sh +409 -0
  97. package/.claude/scripts/check-prerequisites.sh +232 -0
  98. package/.claude/scripts/check-task-status.sh +264 -0
  99. package/.claude/scripts/checklist-errors.sh +131 -0
  100. package/.claude/scripts/common.sh +570 -0
  101. package/.claude/scripts/consolidate-research.sh +182 -0
  102. package/.claude/scripts/create-requirement.sh +426 -0
  103. package/.claude/scripts/export-contracts.sh +117 -0
  104. package/.claude/scripts/extract-data-model.sh +78 -0
  105. package/.claude/scripts/generate-clarification-questions.sh +377 -0
  106. package/.claude/scripts/generate-clarification-report.sh +463 -0
  107. package/.claude/scripts/generate-quickstart.sh +146 -0
  108. package/.claude/scripts/generate-research-tasks.sh +157 -0
  109. package/.claude/scripts/generate-status-report.sh +523 -0
  110. package/.claude/scripts/generate-tech-analysis.sh +46 -0
  111. package/.claude/scripts/locate-requirement-in-roadmap.sh +233 -0
  112. package/.claude/scripts/manage-constitution.sh +602 -0
  113. package/.claude/scripts/mark-task-complete.sh +198 -0
  114. package/.claude/scripts/populate-research-tasks.sh +259 -0
  115. package/.claude/scripts/recover-workflow.sh +460 -0
  116. package/.claude/scripts/run-clarify-scan.sh +601 -0
  117. package/.claude/scripts/run-high-review.sh +62 -0
  118. package/.claude/scripts/run-problem-analysis.sh +68 -0
  119. package/.claude/scripts/setup-epic.sh +173 -0
  120. package/.claude/scripts/sync-roadmap-progress.sh +300 -0
  121. package/.claude/scripts/sync-task-marks.sh +199 -0
  122. package/.claude/scripts/test-clarify-scan.sh +515 -0
  123. package/.claude/scripts/update-agent-context.sh +806 -0
  124. package/.claude/scripts/validate-constitution.sh +567 -0
  125. package/.claude/scripts/validate-hooks.sh +487 -0
  126. package/.claude/scripts/validate-research.sh +332 -0
  127. package/.claude/scripts/validate-scope-boundary.sh +493 -0
  128. package/.claude/scripts/verify-setup.sh +37 -0
  129. package/.claude/settings.json +76 -0
  130. package/.claude/skills/_reference-implementations/README.md +96 -0
  131. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +302 -0
  132. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +451 -0
  133. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +307 -0
  134. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +638 -0
  135. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +275 -0
  136. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +224 -0
  137. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +213 -0
  138. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +756 -0
  139. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +336 -0
  140. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +789 -0
  141. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +235 -0
  142. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +754 -0
  143. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +399 -0
  144. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +331 -0
  145. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +872 -0
  146. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +502 -0
  147. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +767 -0
  148. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +502 -0
  149. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +501 -0
  150. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +406 -0
  151. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +364 -0
  152. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +428 -0
  153. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +418 -0
  154. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +229 -0
  155. package/.claude/skills/constitution-guardian/SKILL.md +306 -0
  156. package/.claude/skills/devflow-constitution-quick-ref/SKILL.md +374 -0
  157. package/.claude/skills/devflow-file-standards/SKILL.md +353 -0
  158. package/.claude/skills/devflow-tdd-enforcer/SKILL.md +192 -0
  159. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  160. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  161. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  162. package/.claude/skills/skill-developer/SKILL.md +426 -0
  163. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  164. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  165. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  166. package/.claude/skills/skill-rules.json +213 -0
  167. package/.claude/tests/README.md +300 -0
  168. package/.claude/tests/TODO.md +69 -0
  169. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  170. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  171. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  172. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  173. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  174. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  175. package/.claude/tests/constitution/run_all_constitution_tests.sh +111 -0
  176. package/.claude/tests/constitution/test_agent_assignment.sh +207 -0
  177. package/.claude/tests/constitution/test_article_coverage.sh +201 -0
  178. package/.claude/tests/constitution/test_template_completeness.sh +150 -0
  179. package/.claude/tests/constitution/test_version_consistency.sh +120 -0
  180. package/.claude/tests/fixtures/spec_delta_full.md +16 -0
  181. package/.claude/tests/fixtures/tasks_progress_sample.md +5 -0
  182. package/.claude/tests/run-all-tests.sh +229 -0
  183. package/.claude/tests/scripts/run.sh +30 -0
  184. package/.claude/tests/scripts/test-framework.sh +128 -0
  185. package/.claude/tests/scripts/test_check_prerequisites.sh +511 -0
  186. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +504 -0
  187. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +505 -0
  188. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +506 -0
  189. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +507 -0
  190. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +508 -0
  191. package/.claude/tests/scripts/test_check_task_status.sh +499 -0
  192. package/.claude/tests/scripts/test_common.sh +244 -0
  193. package/.claude/tests/scripts/test_generate_status_report.sh +71 -0
  194. package/.claude/tests/scripts/test_mark_task_complete.sh +441 -0
  195. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +410 -0
  196. package/.claude/tests/scripts/test_recover_workflow.sh +304 -0
  197. package/.claude/tests/scripts/test_setup_epic.sh +437 -0
  198. package/.claude/tests/scripts/test_sync_task_marks.sh +196 -0
  199. package/.claude/tests/scripts/test_validate_constitution.sh +74 -0
  200. package/.claude/tests/scripts/test_validate_research.sh +462 -0
  201. package/.claude/tests/slugify.bats +82 -0
  202. package/.claude/tests/test-framework.sh +732 -0
  203. package/.claude/tests/test_analyze_upgrade_impact.py +34 -0
  204. package/.claude/tests/test_consolidate_research.py +48 -0
  205. package/.claude/tests/test_export_contracts.py +43 -0
  206. package/.claude/tests/test_extract_data_model.py +33 -0
  207. package/.claude/tests/test_generate_quickstart.py +50 -0
  208. package/.claude/tests/test_generate_research_tasks.py +52 -0
  209. package/.claude/tsc-cache/6e64f818-6398-49ca-8623-581a9af85c44/edited-files.log +1 -0
  210. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/affected-repos.txt +1 -0
  211. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/edited-files.log +1 -0
  212. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/affected-repos.txt +1 -0
  213. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/edited-files.log +1 -0
  214. package/CHANGELOG.md +507 -0
  215. package/LICENSE +21 -0
  216. package/README.md +534 -0
  217. package/README.zh-CN.md +530 -0
  218. package/bin/adapt.js +240 -0
  219. package/bin/cc-devflow-cli.js +185 -0
  220. package/bin/cc-devflow.js +78 -0
  221. package/config/adapters.yml +5 -0
  222. package/config/schema/adapters.schema.json +44 -0
  223. package/docs/CLAUDE.md +26 -0
  224. package/docs/commands/README.md +61 -0
  225. package/docs/commands/README.zh-CN.md +55 -0
  226. package/docs/commands/core-roadmap.md +106 -0
  227. package/docs/commands/core-roadmap.zh-CN.md +102 -0
  228. package/docs/commands/core-style.md +405 -0
  229. package/docs/commands/core-style.zh-CN.md +405 -0
  230. package/docs/commands/flow-init.md +134 -0
  231. package/docs/commands/flow-init.zh-CN.md +163 -0
  232. package/docs/commands/flow-new.md +274 -0
  233. package/docs/commands/flow-new.zh-CN.md +270 -0
  234. package/docs/guides/getting-started.md +204 -0
  235. package/docs/guides/getting-started.zh-CN.md +152 -0
  236. package/lib/adapters/adapter-interface.js +57 -0
  237. package/lib/adapters/claude-adapter.js +74 -0
  238. package/lib/adapters/codex-adapter.js +40 -0
  239. package/lib/adapters/config-validator.js +68 -0
  240. package/lib/adapters/logger.js +42 -0
  241. package/lib/adapters/registry.js +153 -0
  242. package/lib/compiler/CLAUDE.md +92 -0
  243. package/lib/compiler/__tests__/drift.test.js +215 -0
  244. package/lib/compiler/__tests__/errors.test.js +184 -0
  245. package/lib/compiler/__tests__/incremental.test.js +174 -0
  246. package/lib/compiler/__tests__/integration.test.js +174 -0
  247. package/lib/compiler/__tests__/manifest.test.js +233 -0
  248. package/lib/compiler/__tests__/parser.test.js +456 -0
  249. package/lib/compiler/__tests__/schemas.test.js +301 -0
  250. package/lib/compiler/__tests__/skills-registry.test.js +125 -0
  251. package/lib/compiler/__tests__/transformer.test.js +286 -0
  252. package/lib/compiler/emitters/antigravity-emitter.js +171 -0
  253. package/lib/compiler/emitters/base-emitter.js +73 -0
  254. package/lib/compiler/emitters/codex-emitter.js +52 -0
  255. package/lib/compiler/emitters/cursor-emitter.js +31 -0
  256. package/lib/compiler/emitters/index.js +50 -0
  257. package/lib/compiler/emitters/qwen-emitter.js +39 -0
  258. package/lib/compiler/errors.js +119 -0
  259. package/lib/compiler/index.js +256 -0
  260. package/lib/compiler/manifest.js +242 -0
  261. package/lib/compiler/parser.js +258 -0
  262. package/lib/compiler/platforms.js +113 -0
  263. package/lib/compiler/resource-copier.js +320 -0
  264. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +191 -0
  265. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +109 -0
  266. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +123 -0
  267. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +123 -0
  268. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +253 -0
  269. package/lib/compiler/rules-emitters/base-rules-emitter.js +83 -0
  270. package/lib/compiler/rules-emitters/codex-rules-emitter.js +116 -0
  271. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +98 -0
  272. package/lib/compiler/rules-emitters/index.js +71 -0
  273. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +70 -0
  274. package/lib/compiler/schemas.js +144 -0
  275. package/lib/compiler/skills-registry.js +225 -0
  276. package/lib/compiler/transformer.js +236 -0
  277. package/package.json +50 -0
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ usage() {
6
+ cat <<'USAGE'
7
+ Usage: scripts/bash/run-problem-analysis.sh --input "<symptom>"
8
+
9
+ Generates a placeholder problem analysis report in analysis/problem-<timestamp>.md.
10
+ USAGE
11
+ }
12
+
13
+ INPUT=""
14
+
15
+ while [[ $# -gt 0 ]]; do
16
+ case "$1" in
17
+ --input)
18
+ shift
19
+ INPUT="${1:-}"
20
+ ;;
21
+ -h|--help)
22
+ usage
23
+ exit 0
24
+ ;;
25
+ *)
26
+ echo "Unknown argument: $1" >&2
27
+ usage
28
+ exit 1
29
+ ;;
30
+ esac
31
+ shift
32
+ done
33
+
34
+ if [[ -z "$INPUT" ]]; then
35
+ echo "Error: --input payload required." >&2
36
+ usage
37
+ exit 1
38
+ fi
39
+
40
+ ANALYSIS_DIR="analysis"
41
+ mkdir -p "$ANALYSIS_DIR"
42
+ timestamp="$(date -u +"%Y%m%d-%H%M%S")"
43
+ report="$ANALYSIS_DIR/problem-${timestamp}.md"
44
+
45
+ cat > "$report" <<EOF
46
+ # Problem Analysis (Placeholder)
47
+
48
+ Input:
49
+ \`\`\`
50
+ $INPUT
51
+ \`\`\`
52
+
53
+ - Affected files:
54
+ - TODO
55
+ - Root cause:
56
+ - TBD
57
+ - Proposed fix:
58
+ - Steps:
59
+ - Tests:
60
+ - Documentation gaps:
61
+ - TODO
62
+ - Open questions:
63
+ - TODO
64
+
65
+ Please refine this template with the actual diagnostic results.
66
+ EOF
67
+
68
+ echo "Problem analysis report generated at $report"
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Setup EPIC and TASKS structure for cc-devflow
4
+ #
5
+ # This script prepares the requirement directory for Epic and Tasks generation.
6
+ # Based on spec-kit's setup-plan.sh design.
7
+ #
8
+ # Usage: ./setup-epic.sh [OPTIONS]
9
+ #
10
+ # OPTIONS:
11
+ # --json Output in JSON format
12
+ # --help, -h Show help message
13
+ #
14
+ # OUTPUTS:
15
+ # JSON mode: {"REQ_ID":"...", "PRD_FILE":"...", "EPIC_FILE":"...", "TASKS_FILE":"..."}
16
+ # Text mode: REQ_ID: ... \n PRD_FILE: ... \n EPIC_FILE: ... \n TASKS_FILE: ...
17
+
18
+ set -e
19
+
20
+ # Parse command line arguments
21
+ JSON_MODE=false
22
+
23
+ for arg in "$@"; do
24
+ case "$arg" in
25
+ --json)
26
+ JSON_MODE=true
27
+ ;;
28
+ --help|-h)
29
+ cat << 'EOF'
30
+ Usage: setup-epic.sh [OPTIONS]
31
+
32
+ Setup EPIC and TASKS structure for cc-devflow requirement.
33
+
34
+ OPTIONS:
35
+ --json Output results in JSON format
36
+ --help, -h Show this help message
37
+
38
+ EXAMPLES:
39
+ # Setup Epic structure (text output)
40
+ ./setup-epic.sh
41
+
42
+ # Setup Epic structure (JSON output)
43
+ ./setup-epic.sh --json
44
+
45
+ PREREQUISITES:
46
+ - Must be on a feature branch (feature/REQ-XXX-xxx) or
47
+ - Must have DEVFLOW_REQ_ID environment variable set
48
+ - PRD.md must already exist in requirement directory
49
+
50
+ EOF
51
+ exit 0
52
+ ;;
53
+ *)
54
+ echo "ERROR: Unknown option '$arg'. Use --help for usage information." >&2
55
+ exit 1
56
+ ;;
57
+ esac
58
+ done
59
+
60
+ # Source common functions
61
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
62
+ source "$SCRIPT_DIR/common.sh"
63
+
64
+ # Get all paths and variables from common functions
65
+ eval $(get_requirement_paths)
66
+
67
+ # Validate requirement ID exists
68
+ if [[ -z "$REQ_ID" ]]; then
69
+ echo "ERROR: No requirement ID found" >&2
70
+ echo "Please ensure you are on a feature branch (feature/REQ-XXX-title)" >&2
71
+ echo "Or set DEVFLOW_REQ_ID environment variable" >&2
72
+ exit 1
73
+ fi
74
+
75
+ # Validate requirement ID format
76
+ validate_req_id "$REQ_ID" || exit 1
77
+
78
+ # Ensure the requirement directory exists
79
+ if [[ ! -d "$REQ_DIR" ]]; then
80
+ echo "ERROR: Requirement directory not found: $REQ_DIR" >&2
81
+ echo "Run /flow-init first to create the requirement structure." >&2
82
+ exit 1
83
+ fi
84
+
85
+ # Check if PRD exists (prerequisite)
86
+ if [[ ! -f "$PRD_FILE" ]]; then
87
+ echo "ERROR: PRD.md not found at $PRD_FILE" >&2
88
+ echo "Run prd-writer agent first to create the PRD." >&2
89
+ exit 1
90
+ fi
91
+
92
+ # Copy EPIC template if it doesn't exist
93
+ EPIC_TEMPLATE="$REPO_ROOT/.claude/docs/templates/EPIC_TEMPLATE.md"
94
+ if [[ ! -f "$EPIC_FILE" ]]; then
95
+ if [[ -f "$EPIC_TEMPLATE" ]]; then
96
+ cp "$EPIC_TEMPLATE" "$EPIC_FILE"
97
+ if ! $JSON_MODE; then
98
+ echo "Copied EPIC template to $EPIC_FILE" >&2
99
+ fi
100
+ else
101
+ # Create basic EPIC file if template doesn't exist
102
+ cat > "$EPIC_FILE" <<EOF
103
+ # Epic: $REQ_ID
104
+
105
+ **Status**: Draft
106
+ **Created**: $(get_beijing_time_full)
107
+
108
+ ## Overview
109
+
110
+ [Epic overview to be filled by planner]
111
+
112
+ ## Success Criteria
113
+
114
+ [Success criteria to be filled by planner]
115
+
116
+ ## Technical Approach
117
+
118
+ [Technical approach to be filled by planner]
119
+ EOF
120
+ if ! $JSON_MODE; then
121
+ echo "Created basic EPIC file at $EPIC_FILE" >&2
122
+ fi
123
+ fi
124
+ fi
125
+
126
+ # Copy TASKS template if it doesn't exist
127
+ TASKS_TEMPLATE="$REPO_ROOT/.claude/docs/templates/TASKS_TEMPLATE.md"
128
+ TASKS_FILE="$REQ_DIR/TASKS.md"
129
+
130
+ if [[ ! -f "$TASKS_FILE" ]]; then
131
+ if [[ -f "$TASKS_TEMPLATE" ]]; then
132
+ cp "$TASKS_TEMPLATE" "$TASKS_FILE"
133
+ if ! $JSON_MODE; then
134
+ echo "Copied TASKS template to $TASKS_FILE" >&2
135
+ fi
136
+ else
137
+ # Create basic TASKS file if template doesn't exist
138
+ cat > "$TASKS_FILE" <<EOF
139
+ # Tasks: $REQ_ID
140
+
141
+ **Status**: Draft
142
+ **Created**: $(get_beijing_time_full)
143
+
144
+ ## Tasks
145
+
146
+ [Tasks to be generated by planner]
147
+ EOF
148
+ if ! $JSON_MODE; then
149
+ echo "Created basic TASKS file at $TASKS_FILE" >&2
150
+ fi
151
+ fi
152
+ fi
153
+
154
+ # Log the setup event
155
+ log_event "$REQ_ID" "Epic and Tasks structure initialized"
156
+
157
+ # Output results
158
+ if $JSON_MODE; then
159
+ printf '{"%s":"%s","%s":"%s","%s":"%s","%s":"%s","%s":"%s","%s":"%s"}\n' \
160
+ "REQ_ID" "$REQ_ID" \
161
+ "REQ_TYPE" "$REQ_TYPE" \
162
+ "REQ_DIR" "$REQ_DIR" \
163
+ "PRD_FILE" "$PRD_FILE" \
164
+ "EPIC_FILE" "$EPIC_FILE" \
165
+ "TASKS_FILE" "$TASKS_FILE"
166
+ else
167
+ echo "REQ_ID: $REQ_ID"
168
+ echo "REQ_TYPE: $REQ_TYPE"
169
+ echo "REQ_DIR: $REQ_DIR"
170
+ echo "PRD_FILE: $PRD_FILE"
171
+ echo "EPIC_FILE: $EPIC_FILE"
172
+ echo "TASKS_FILE: $TASKS_FILE"
173
+ fi
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/env bash
2
+ # Sync roadmap progress from requirements orchestration_status.json
3
+ # Updates devflow/ROADMAP.md Implementation Tracking table with:
4
+ # - Mapped REQ-IDs when requirements are created
5
+ # - Current status from orchestration_status
6
+ # - Progress percentage based on completed phases
7
+ # Usage: ./sync-roadmap-progress.sh
8
+
9
+ set -euo pipefail
10
+
11
+ # =============================================================================
12
+ # 获取当前脚本所在目录
13
+ # =============================================================================
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+
16
+ # Source common functions
17
+ if [[ -f "$SCRIPT_DIR/common.sh" ]]; then
18
+ source "$SCRIPT_DIR/common.sh"
19
+ fi
20
+
21
+ # =============================================================================
22
+ # Progress Calculation Functions (进度计算函数)
23
+ # =============================================================================
24
+
25
+ # Calculate progress percentage based on completed phases
26
+ # Args: $1 = path to orchestration_status.json
27
+ # Returns: integer percentage (0-100)
28
+ calculate_progress() {
29
+ local status_file="$1"
30
+
31
+ if [[ ! -f "$status_file" ]]; then
32
+ echo "0"
33
+ return
34
+ fi
35
+
36
+ # Read JSON and extract completion flags
37
+ local json=$(cat "$status_file")
38
+
39
+ # Phase completion weights (total = 100%)
40
+ # phase0 (research): 10%
41
+ # prd: 10%
42
+ # ui: 5%
43
+ # tech_design: 10%
44
+ # epic: 10%
45
+ # dev: 30%
46
+ # qa: 15%
47
+ # release: 10%
48
+ # merged: bonus completion
49
+
50
+ local progress=0
51
+
52
+ # Check each phase completion
53
+ if echo "$json" | grep -q '"phase0_complete".*:.*true'; then
54
+ progress=$((progress + 10))
55
+ fi
56
+
57
+ if echo "$json" | grep -q '"prd_complete".*:.*true'; then
58
+ progress=$((progress + 10))
59
+ fi
60
+
61
+ if echo "$json" | grep -q '"ui_complete".*:.*true'; then
62
+ progress=$((progress + 5))
63
+ fi
64
+
65
+ if echo "$json" | grep -q '"tech_design_complete".*:.*true'; then
66
+ progress=$((progress + 10))
67
+ fi
68
+
69
+ if echo "$json" | grep -q '"epic_complete".*:.*true'; then
70
+ progress=$((progress + 10))
71
+ fi
72
+
73
+ if echo "$json" | grep -q '"dev_complete".*:.*true'; then
74
+ progress=$((progress + 30))
75
+ fi
76
+
77
+ if echo "$json" | grep -q '"qa_complete".*:.*true'; then
78
+ progress=$((progress + 15))
79
+ fi
80
+
81
+ if echo "$json" | grep -q '"release_complete".*:.*true'; then
82
+ progress=$((progress + 10))
83
+ fi
84
+
85
+ # If merged, consider 100%
86
+ if echo "$json" | grep -q '"status".*:.*"merged"'; then
87
+ progress=100
88
+ fi
89
+
90
+ echo "$progress"
91
+ }
92
+
93
+ # Get status from orchestration_status.json
94
+ # Args: $1 = path to orchestration_status.json
95
+ # Returns: status string
96
+ get_status() {
97
+ local status_file="$1"
98
+
99
+ if [[ ! -f "$status_file" ]]; then
100
+ echo "Planned"
101
+ return
102
+ fi
103
+
104
+ local json=$(cat "$status_file")
105
+ local status=$(echo "$json" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
106
+
107
+ # Map orchestration status to roadmap status
108
+ case "$status" in
109
+ "initialized"|"planning")
110
+ echo "Planned"
111
+ ;;
112
+ "in_progress"|"development")
113
+ echo "In Progress"
114
+ ;;
115
+ "merged"|"complete")
116
+ echo "Completed"
117
+ ;;
118
+ "blocked")
119
+ echo "Blocked"
120
+ ;;
121
+ "cancelled")
122
+ echo "Cancelled"
123
+ ;;
124
+ *)
125
+ echo "Planned"
126
+ ;;
127
+ esac
128
+ }
129
+
130
+ # Get requirement title from orchestration_status.json
131
+ # Args: $1 = path to orchestration_status.json
132
+ # Returns: title string
133
+ get_title() {
134
+ local status_file="$1"
135
+
136
+ if [[ ! -f "$status_file" ]]; then
137
+ echo "-"
138
+ return
139
+ fi
140
+
141
+ local json=$(cat "$status_file")
142
+ local title=$(echo "$json" | grep -o '"title"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
143
+
144
+ if [[ -z "$title" ]]; then
145
+ echo "-"
146
+ else
147
+ echo "$title"
148
+ fi
149
+ }
150
+
151
+ # =============================================================================
152
+ # Roadmap Update Functions (路线图更新函数)
153
+ # =============================================================================
154
+
155
+ # Scan all requirements and build progress map
156
+ # Returns: associative array of REQ-ID -> progress data
157
+ scan_requirements() {
158
+ local repo_root=$(get_repo_root)
159
+ local requirements_dir="$repo_root/devflow/requirements"
160
+
161
+ if [[ ! -d "$requirements_dir" ]]; then
162
+ echo "ERROR: Requirements directory not found: $requirements_dir" >&2
163
+ return 1
164
+ fi
165
+
166
+ # Output format: REQ-ID|Title|Status|Progress
167
+ for req_dir in "$requirements_dir"/REQ-*; do
168
+ if [[ -d "$req_dir" ]]; then
169
+ local req_id=$(basename "$req_dir")
170
+ local status_file="$req_dir/orchestration_status.json"
171
+
172
+ local title=$(get_title "$status_file")
173
+ local status=$(get_status "$status_file")
174
+ local progress=$(calculate_progress "$status_file")
175
+
176
+ echo "$req_id|$title|$status|$progress"
177
+ fi
178
+ done
179
+ }
180
+
181
+ # Update ROADMAP.md Implementation Tracking table
182
+ # Args: $1 = path to ROADMAP.md
183
+ update_roadmap() {
184
+ local roadmap_file="$1"
185
+
186
+ if [[ ! -f "$roadmap_file" ]]; then
187
+ echo "ERROR: ROADMAP.md not found: $roadmap_file" >&2
188
+ return 1
189
+ fi
190
+
191
+ # Create temporary file for updated roadmap
192
+ local temp_file="${roadmap_file}.tmp"
193
+ cp "$roadmap_file" "$temp_file"
194
+
195
+ # Get all requirement progress data
196
+ local req_data=$(scan_requirements)
197
+
198
+ # For each requirement, try to find corresponding RM-ID in roadmap
199
+ # and update the table row
200
+
201
+ while IFS='|' read -r req_id title status progress; do
202
+ # Look for this REQ-ID in the Implementation Tracking table
203
+ # Format: | RM-XXX | Feature | Derived From | Status | Mapped REQ | Progress |
204
+
205
+ # Find if this REQ-ID is already mapped to an RM-ID
206
+ local rm_id=$(grep -E "\\| RM-[0-9]+ \\|.*\\| $req_id \\|" "$temp_file" | grep -o "RM-[0-9]*" | head -1)
207
+
208
+ if [[ -n "$rm_id" ]]; then
209
+ # Update existing mapping
210
+ # Find the line and update Status and Progress columns
211
+
212
+ # Use sed to update the line
213
+ # Match pattern: | RM-XXX | ... | ... | OLD_STATUS | REQ-XXX | OLD_PROGRESS |
214
+ # Replace with: | RM-XXX | ... | ... | NEW_STATUS | REQ-XXX | NEW_PROGRESS% |
215
+
216
+ sed -i.bak -E "/\\| $rm_id \\|/s/\\| [^|]+ \\| $req_id \\| [^|]+ \\|/| $status | $req_id | ${progress}% |/g" "$temp_file"
217
+ else
218
+ # Check if there's an RM-ID row with "-" as Mapped REQ that matches derived_from
219
+ # This is a new requirement that should be linked
220
+
221
+ # Try to find RM-ID row with "Derived From" matching this REQ-ID and Mapped REQ = "-"
222
+ local potential_rm=$(grep -E "\\| RM-[0-9]+ \\|.*\\| $req_id \\|.*\\| - \\|" "$temp_file" | grep -o "RM-[0-9]*" | head -1)
223
+
224
+ if [[ -n "$potential_rm" ]]; then
225
+ # Update this RM-ID row to link to this REQ-ID
226
+ sed -i.bak -E "/\\| $potential_rm \\|/s/\\| [^|]+ \\| - \\| [^|]+ \\|/| $status | $req_id | ${progress}% |/g" "$temp_file"
227
+ fi
228
+ fi
229
+ done <<< "$req_data"
230
+
231
+ # Replace original file with updated version
232
+ mv "$temp_file" "$roadmap_file"
233
+
234
+ # Clean up backup file
235
+ # 修复: sed -i.bak 对 temp_file 操作会创建 temp_file.bak,而不是 roadmap_file.bak
236
+ rm -f "${temp_file}.bak"
237
+
238
+ echo "✅ Updated ROADMAP.md Implementation Tracking table"
239
+ }
240
+
241
+ # =============================================================================
242
+ # Main Function (主函数)
243
+ # =============================================================================
244
+
245
+ main() {
246
+ local repo_root=$(get_repo_root)
247
+ local roadmap_file="$repo_root/devflow/ROADMAP.md"
248
+
249
+ echo "==================================================================="
250
+ echo "Syncing Roadmap Progress"
251
+ echo "==================================================================="
252
+ echo ""
253
+
254
+ # Check if ROADMAP.md exists
255
+ if [[ ! -f "$roadmap_file" ]]; then
256
+ echo "⚠️ ROADMAP.md not found at: $roadmap_file"
257
+ echo ""
258
+ echo "Please run /core-roadmap to create a roadmap first."
259
+ exit 0
260
+ fi
261
+
262
+ echo "📊 Scanning requirements for progress data..."
263
+ echo ""
264
+
265
+ # Display current requirements
266
+ local req_data=$(scan_requirements)
267
+
268
+ if [[ -z "$req_data" ]]; then
269
+ echo "⚠️ No requirements found in devflow/requirements/"
270
+ exit 0
271
+ fi
272
+
273
+ echo "Found requirements:"
274
+ echo ""
275
+ printf "%-12s %-50s %-15s %-10s\n" "REQ-ID" "Title" "Status" "Progress"
276
+ echo "------------------------------------------------------------------------------------"
277
+
278
+ while IFS='|' read -r req_id title status progress; do
279
+ printf "%-12s %-50s %-15s %-10s\n" "$req_id" "$title" "$status" "${progress}%"
280
+ done <<< "$req_data"
281
+
282
+ echo ""
283
+ echo "📝 Updating ROADMAP.md..."
284
+ echo ""
285
+
286
+ # Update roadmap
287
+ update_roadmap "$roadmap_file"
288
+
289
+ echo ""
290
+ echo "✅ Roadmap sync completed!"
291
+ echo ""
292
+ echo "Updated: $roadmap_file"
293
+ }
294
+
295
+ # =============================================================================
296
+ # Script Entry Point (脚本入口)
297
+ # =============================================================================
298
+
299
+ # Run main function
300
+ main "$@"