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,46 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'USAGE'
6
+ Usage: .claude/scripts/generate-tech-analysis.sh <requirement-dir>
7
+
8
+ Generates a placeholder codebase tech analysis report at
9
+ research/codebase-tech-analysis.md.
10
+ USAGE
11
+ }
12
+
13
+ if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
14
+ usage
15
+ exit 0
16
+ fi
17
+
18
+ if [[ $# -lt 1 ]]; then
19
+ echo "Error: requirement directory is required." >&2
20
+ usage
21
+ exit 1
22
+ fi
23
+
24
+ REQ_DIR="$1"
25
+ if [[ ! -d "$REQ_DIR" ]]; then
26
+ echo "Error: requirement directory '$REQ_DIR' does not exist." >&2
27
+ exit 1
28
+ fi
29
+
30
+ REPORT="${REQ_DIR}/research/codebase-tech-analysis.md"
31
+ mkdir -p "${REQ_DIR}/research"
32
+
33
+ cat >"$REPORT" <<'REPORT'
34
+ # Codebase Technical Analysis (Placeholder)
35
+
36
+ _TODO: Replace with automated analysis output._
37
+
38
+ - Data model patterns: TBD
39
+ - API implementation patterns: TBD
40
+ - Auth/security patterns: TBD
41
+ - Database interactions: TBD
42
+ - Reusable components: TBD
43
+ - Testing strategy: TBD
44
+ REPORT
45
+
46
+ echo "Wrote placeholder tech analysis → $REPORT"
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env bash
2
+ # Locate a requirement's position in the roadmap
3
+ # Given a REQ-ID, finds its corresponding RM-ID, milestone, quarter, and cluster
4
+ # Usage: ./locate-requirement-in-roadmap.sh [REQ-ID]
5
+ # If REQ-ID not provided, uses current requirement from branch/environment
6
+
7
+ set -euo pipefail
8
+
9
+ # =============================================================================
10
+ # 获取当前脚本所在目录
11
+ # =============================================================================
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+
14
+ # Source common functions
15
+ if [[ -f "$SCRIPT_DIR/common.sh" ]]; then
16
+ source "$SCRIPT_DIR/common.sh"
17
+ fi
18
+
19
+ # =============================================================================
20
+ # Roadmap Parsing Functions (路线图解析函数)
21
+ # =============================================================================
22
+
23
+ # Find RM-ID for a given REQ-ID in ROADMAP.md
24
+ # Args: $1 = ROADMAP.md path, $2 = REQ-ID
25
+ # Returns: RM-ID or empty string
26
+ find_rm_id() {
27
+ local roadmap_file="$1"
28
+ local req_id="$2"
29
+
30
+ if [[ ! -f "$roadmap_file" ]]; then
31
+ return 1
32
+ fi
33
+
34
+ # Search Implementation Tracking table for REQ-ID
35
+ # Format: | RM-XXX | Feature | Derived From | Status | REQ-XXX | Progress |
36
+ local rm_id=$(grep -E "\\| (RM-[0-9]+) \\|.*\\| $req_id \\|" "$roadmap_file" | \
37
+ grep -o "RM-[0-9]*" | head -1)
38
+
39
+ echo "$rm_id"
40
+ }
41
+
42
+ # Find feature name for RM-ID
43
+ # Args: $1 = ROADMAP.md path, $2 = RM-ID
44
+ # Returns: Feature name
45
+ find_feature_name() {
46
+ local roadmap_file="$1"
47
+ local rm_id="$2"
48
+
49
+ if [[ ! -f "$roadmap_file" ]]; then
50
+ return 1
51
+ fi
52
+
53
+ # Search Implementation Tracking table
54
+ # Format: | RM-XXX | Feature | ... |
55
+ local feature=$(grep -E "\\| $rm_id \\|" "$roadmap_file" | \
56
+ sed -E 's/.*\| [^|]+ \| ([^|]+) \|.*/\1/' | \
57
+ sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | \
58
+ head -1)
59
+
60
+ echo "$feature"
61
+ }
62
+
63
+ # Find milestone and quarter for RM-ID
64
+ # Args: $1 = ROADMAP.md path, $2 = RM-ID
65
+ # Returns: Milestone|Quarter|Cluster format
66
+ find_milestone_info() {
67
+ local roadmap_file="$1"
68
+ local rm_id="$2"
69
+
70
+ if [[ ! -f "$roadmap_file" ]]; then
71
+ return 1
72
+ fi
73
+
74
+ # Search for RM-ID in quarterly sections
75
+ # Pattern: **RM-XXX**: Title (Source)
76
+ # First find which section it's in by looking backwards for headers
77
+
78
+ local line_number=$(grep -n "\\*\\*$rm_id\\*\\*:" "$roadmap_file" | cut -d: -f1 | head -1)
79
+
80
+ if [[ -z "$line_number" ]]; then
81
+ echo "Unknown|Unknown|Unknown"
82
+ return
83
+ fi
84
+
85
+ # Get all lines from start to this line
86
+ local context=$(head -n "$line_number" "$roadmap_file")
87
+
88
+ # Find last Quarter section header (e.g., "## Q4 2025 Milestones")
89
+ local quarter=$(echo "$context" | grep -E "^## Q[0-9]+ [0-9]+ Milestones" | tail -1 | \
90
+ sed -E 's/^## (Q[0-9]+ [0-9]+) Milestones/\1/')
91
+
92
+ # Find last Milestone header (e.g., "### M1-Q4-2025: Milestone Name")
93
+ local milestone=$(echo "$context" | grep -E "^### (M[0-9]+-Q[0-9]+-[0-9]+):" | tail -1 | \
94
+ sed -E 's/^### ([^:]+):.*/\1/')
95
+
96
+ # Find last Feature Cluster header (e.g., "**Feature Cluster 1: Cluster Name**")
97
+ local cluster=$(echo "$context" | grep -E "^\*\*Feature Cluster [0-9]+: " | tail -1 | \
98
+ sed -E 's/^\*\*Feature Cluster [0-9]+: ([^*]+)\*\*/\1/')
99
+
100
+ echo "${milestone:-Unknown}|${quarter:-Unknown}|${cluster:-Unknown}"
101
+ }
102
+
103
+ # Get derived_from for RM-ID
104
+ # Args: $1 = ROADMAP.md path, $2 = RM-ID
105
+ # Returns: Derived From value
106
+ find_derived_from() {
107
+ local roadmap_file="$1"
108
+ local rm_id="$2"
109
+
110
+ if [[ ! -f "$roadmap_file" ]]; then
111
+ return 1
112
+ fi
113
+
114
+ # Search Implementation Tracking table
115
+ # Format: | RM-XXX | Feature | Derived From | ... |
116
+ local derived=$(grep -E "\\| $rm_id \\|" "$roadmap_file" | \
117
+ awk -F'|' '{print $4}' | \
118
+ sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | \
119
+ head -1)
120
+
121
+ echo "$derived"
122
+ }
123
+
124
+ # =============================================================================
125
+ # Display Functions (显示函数)
126
+ # =============================================================================
127
+
128
+ # Display requirement location information
129
+ # Args: $1 = REQ-ID, $2 = RM-ID, $3 = Feature, $4 = Milestone, $5 = Quarter, $6 = Cluster, $7 = Derived
130
+ display_location() {
131
+ local req_id="$1"
132
+ local rm_id="$2"
133
+ local feature="$3"
134
+ local milestone="$4"
135
+ local quarter="$5"
136
+ local cluster="$6"
137
+ local derived="$7"
138
+
139
+ echo "==================================================================="
140
+ echo "Requirement Location in Roadmap"
141
+ echo "==================================================================="
142
+ echo ""
143
+ echo "📋 Requirement: $req_id"
144
+ echo "🎯 Roadmap Item: $rm_id"
145
+ echo "📝 Feature: $feature"
146
+ echo "📌 Derived From: $derived"
147
+ echo ""
148
+ echo "📅 Timeline:"
149
+ echo " Quarter: $quarter"
150
+ echo " Milestone: $milestone"
151
+ echo " Cluster: $cluster"
152
+ echo ""
153
+ echo "==================================================================="
154
+ }
155
+
156
+ # =============================================================================
157
+ # Main Function (主函数)
158
+ # =============================================================================
159
+
160
+ main() {
161
+ local req_id="${1:-}"
162
+
163
+ # If no REQ-ID provided, try to get from current context
164
+ if [[ -z "$req_id" ]]; then
165
+ req_id=$(get_current_req_id)
166
+ if [[ -z "$req_id" ]]; then
167
+ echo "ERROR: No REQ-ID provided and cannot determine current requirement" >&2
168
+ echo "Usage: $0 [REQ-ID]" >&2
169
+ exit 1
170
+ fi
171
+ echo "Using current requirement: $req_id"
172
+ echo ""
173
+ fi
174
+
175
+ # Validate REQ-ID format
176
+ if ! validate_req_id "$req_id"; then
177
+ exit 1
178
+ fi
179
+
180
+ # Get repo root and roadmap path
181
+ local repo_root=$(get_repo_root)
182
+ local roadmap_file="$repo_root/devflow/ROADMAP.md"
183
+
184
+ # Check if ROADMAP.md exists
185
+ if [[ ! -f "$roadmap_file" ]]; then
186
+ echo "⚠️ ROADMAP.md not found at: $roadmap_file" >&2
187
+ echo "" >&2
188
+ echo "Please run /core-roadmap to create a roadmap first." >&2
189
+ exit 1
190
+ fi
191
+
192
+ # Find RM-ID for this REQ-ID
193
+ local rm_id=$(find_rm_id "$roadmap_file" "$req_id")
194
+
195
+ if [[ -z "$rm_id" ]]; then
196
+ echo "⚠️ Requirement $req_id not found in roadmap" >&2
197
+ echo "" >&2
198
+ echo "This requirement may be:" >&2
199
+ echo " - Not yet added to the roadmap" >&2
200
+ echo " - An ad-hoc requirement outside the roadmap" >&2
201
+ echo " - Created before the roadmap was established" >&2
202
+ echo "" >&2
203
+ echo "You can:" >&2
204
+ echo " 1. Run /core-roadmap to regenerate the roadmap" >&2
205
+ echo " 2. Manually add this requirement to ROADMAP.md" >&2
206
+ exit 1
207
+ fi
208
+
209
+ # Get feature name
210
+ local feature=$(find_feature_name "$roadmap_file" "$rm_id")
211
+
212
+ # Get milestone info
213
+ local milestone_info=$(find_milestone_info "$roadmap_file" "$rm_id")
214
+ local milestone=$(echo "$milestone_info" | cut -d'|' -f1)
215
+ local quarter=$(echo "$milestone_info" | cut -d'|' -f2)
216
+ local cluster=$(echo "$milestone_info" | cut -d'|' -f3)
217
+
218
+ # Get derived_from
219
+ local derived=$(find_derived_from "$roadmap_file" "$rm_id")
220
+
221
+ # Display results
222
+ display_location "$req_id" "$rm_id" "$feature" "$milestone" "$quarter" "$cluster" "$derived"
223
+
224
+ # Return success
225
+ exit 0
226
+ }
227
+
228
+ # =============================================================================
229
+ # Script Entry Point (脚本入口)
230
+ # =============================================================================
231
+
232
+ # Run main function
233
+ main "$@"