@michaelxwb/code-flow 0.6.4 → 0.8.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.
- package/README.md +47 -3
- package/docs/USAGE.md +1529 -0
- package/docs/acceptance-contract.md +217 -0
- package/docs/ci/acceptance-evidence.md +77 -0
- package/docs/migrations/runtime-0.7.0.md +41 -0
- package/docs/migrations/runtime-0.8.0.md +154 -0
- package/docs/migrations/runtime-0.9.0.md +40 -0
- package/docs/spec-injection-hardening.md +54 -0
- package/docs/spec-injection-performance.json +73 -0
- package/docs/spec-optimization.md +12 -0
- package/package.json +18 -3
- package/src/adapters/claude/CLAUDE.md +1 -1
- package/src/adapters/claude/commands/cf-init.md +1 -3
- package/src/adapters/claude/commands/cf-spec.md +23 -3
- package/src/adapters/claude/commands/cf-stats.md +11 -1
- package/src/adapters/claude/commands/cf-sync.md +20 -6
- package/src/adapters/claude/commands/cf-task/align.md +25 -3
- package/src/adapters/claude/commands/cf-task/archive.md +36 -40
- package/src/adapters/claude/commands/cf-task/block.md +15 -2
- package/src/adapters/claude/commands/cf-task/graph.md +13 -1
- package/src/adapters/claude/commands/cf-task/note.md +13 -1
- package/src/adapters/claude/commands/cf-task/plan.md +137 -23
- package/src/adapters/claude/commands/cf-task/prd.md +13 -2
- package/src/adapters/claude/commands/cf-task/start.md +67 -35
- package/src/adapters/claude/commands/cf-task/status.md +12 -0
- package/src/adapters/claude/commands/cf-task/verify-e2e.md +72 -34
- package/src/adapters/claude/commands/cf-validate.md +30 -5
- package/src/adapters/codex/AGENTS.md +1 -1
- package/src/adapters/codex/hooks.json +14 -10
- package/src/adapters/codex/skills/cf-init/SKILL.md +4 -4
- package/src/adapters/codex/skills/cf-spec/SKILL.md +34 -6
- package/src/adapters/codex/skills/cf-stats/SKILL.md +11 -1
- package/src/adapters/codex/skills/cf-sync/SKILL.md +21 -6
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +30 -8
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +36 -40
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +15 -2
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +13 -1
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +13 -1
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +175 -21
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +13 -2
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +67 -35
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +12 -0
- package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +73 -34
- package/src/adapters/codex/skills/cf-validate/SKILL.md +31 -5
- package/src/adapters/commands.json +115 -0
- package/src/adapters/costrict/CLAUDE.md +1 -1
- package/src/adapters/costrict/commands/cf-init.md +1 -3
- package/src/adapters/costrict/commands/cf-spec.md +23 -3
- package/src/adapters/costrict/commands/cf-stats.md +11 -1
- package/src/adapters/costrict/commands/cf-sync.md +20 -6
- package/src/adapters/costrict/commands/cf-task/align.md +25 -3
- package/src/adapters/costrict/commands/cf-task/archive.md +36 -40
- package/src/adapters/costrict/commands/cf-task/block.md +15 -2
- package/src/adapters/costrict/commands/cf-task/graph.md +13 -1
- package/src/adapters/costrict/commands/cf-task/note.md +13 -1
- package/src/adapters/costrict/commands/cf-task/plan.md +137 -23
- package/src/adapters/costrict/commands/cf-task/prd.md +13 -2
- package/src/adapters/costrict/commands/cf-task/start.md +67 -35
- package/src/adapters/costrict/commands/cf-task/status.md +12 -0
- package/src/adapters/costrict/commands/cf-task/verify-e2e.md +72 -34
- package/src/adapters/costrict/commands/cf-validate.md +30 -5
- package/src/adapters/install-plan.json +100 -0
- package/src/adapters/opencode/AGENTS.md +1 -1
- package/src/adapters/opencode/commands/cf-init.md +7 -7
- package/src/adapters/opencode/commands/cf-learn.md +6 -6
- package/src/adapters/opencode/commands/cf-spec.md +34 -2
- package/src/adapters/opencode/commands/cf-stats.md +17 -7
- package/src/adapters/opencode/commands/cf-sync.md +21 -6
- package/src/adapters/opencode/commands/cf-task/align.md +25 -8
- package/src/adapters/opencode/commands/cf-task/archive.md +36 -40
- package/src/adapters/opencode/commands/cf-task/block.md +16 -2
- package/src/adapters/opencode/commands/cf-task/graph.md +14 -1
- package/src/adapters/opencode/commands/cf-task/note.md +14 -1
- package/src/adapters/opencode/commands/cf-task/plan.md +137 -23
- package/src/adapters/opencode/commands/cf-task/prd.md +13 -2
- package/src/adapters/opencode/commands/cf-task/start.md +68 -41
- package/src/adapters/opencode/commands/cf-task/status.md +13 -0
- package/src/adapters/opencode/commands/cf-task/verify-e2e.md +72 -34
- package/src/adapters/opencode/commands/cf-validate.md +35 -9
- package/src/adapters/opencode/plugins/code-flow/index.js +128 -179
- package/src/adapters/platform-bindings.json +370 -0
- package/src/cli.js +369 -316
- package/src/core/code-flow/config.yml +4 -1
- package/src/core/code-flow/runtime-commands.json +259 -0
- package/src/core/code-flow/scripts/cf_acceptance_manifest.py +5 -289
- package/src/core/code-flow/scripts/cf_acceptance_runner.py +5 -187
- package/src/core/code-flow/scripts/cf_audit.py +10 -0
- package/src/core/code-flow/scripts/cf_codex_hook.py +10 -0
- package/src/core/code-flow/scripts/cf_design_lint.py +10 -0
- package/src/core/code-flow/scripts/cf_evidence_import.py +10 -0
- package/src/core/code-flow/scripts/cf_feedback.py +5 -51
- package/src/core/code-flow/scripts/cf_opencode_event.py +10 -0
- package/src/core/code-flow/scripts/cf_post_hook.py +6 -191
- package/src/core/code-flow/scripts/cf_pre_tool_hook.py +6 -99
- package/src/core/code-flow/scripts/cf_scenarios.py +10 -0
- package/src/core/code-flow/scripts/cf_spec_context.py +5 -1714
- package/src/core/code-flow/scripts/cf_spec_gate.py +5 -257
- package/src/core/code-flow/scripts/cf_spec_session.py +5 -114
- package/src/core/code-flow/scripts/cf_stats.py +5 -501
- package/src/core/code-flow/scripts/cf_stop_hook.py +6 -376
- package/src/core/code-flow/scripts/cf_sync.py +5 -135
- package/src/core/code-flow/scripts/cf_task_index.py +5 -143
- package/src/core/code-flow/scripts/cf_task_parallel.py +5 -380
- package/src/core/code-flow/scripts/cf_task_workflow.py +6 -103
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +6 -173
- package/src/core/code-flow/scripts/cf_validation.py +6 -77
- package/src/core/code-flow/scripts/codeflow/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_evidence.py +347 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_manifest_core.py +660 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_plan.py +202 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_registration.py +60 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_risk.py +73 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_schema.py +282 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_selection.py +266 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_inputs.py +172 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_registration.py +326 -0
- package/src/core/code-flow/scripts/{cf_checks.py → codeflow/acceptance/cf_checks.py} +8 -11
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_plan_quality.py +197 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_quality.py +174 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_source.py +300 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_traceability.py +502 -0
- package/src/core/code-flow/scripts/codeflow/cli/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_manifest.py +347 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_runner.py +1490 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_audit.py +533 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_design_lint.py +172 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_evidence_import.py +607 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_feedback.py +53 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_scenarios.py +58 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_context.py +1175 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_gate.py +60 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_session.py +46 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_stats.py +540 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_sync.py +144 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_index.py +177 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_parallel.py +1142 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_workflow.py +742 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_validation.py +31 -0
- package/src/core/code-flow/scripts/codeflow/core/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_context_cache.py +67 -0
- package/src/core/code-flow/scripts/{cf_core.py → codeflow/core/cf_core.py} +119 -297
- package/src/core/code-flow/scripts/codeflow/core/cf_exec_base.py +325 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_fs.py +57 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_git.py +92 -0
- package/src/core/code-flow/scripts/{cf_log.py → codeflow/core/cf_log.py} +13 -7
- package/src/core/code-flow/scripts/codeflow/core/cf_markdown.py +77 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_native_paths.py +26 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_patch.py +33 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_runtime_install.py +32 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_stop_guard.py +53 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_task_state.py +9 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_validators.py +408 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_worktree_env.py +253 -0
- package/src/core/code-flow/scripts/codeflow/evidence/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/evidence/cf_evidence_store.py +527 -0
- package/src/core/code-flow/scripts/codeflow/hooks/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_codex_hook.py +95 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_opencode_event.py +98 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_post_hook.py +30 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_pre_tool_hook.py +41 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_stop_hook.py +292 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_user_prompt_hook.py +161 -0
- package/src/core/code-flow/scripts/codeflow/spec/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_active_task.py +412 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_context_refresh.py +301 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_edit_service.py +149 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_injection.py +111 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_rule_readiness.py +114 -0
- package/src/core/code-flow/scripts/{cf_scan.py → codeflow/spec/cf_scan.py} +93 -21
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_budget.py +55 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_context_model.py +477 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_impact.py +119 -0
- package/src/core/code-flow/scripts/{cf_spec_metadata.py → codeflow/spec/cf_spec_metadata.py} +37 -3
- package/src/core/code-flow/scripts/{cf_spec_migrate.py → codeflow/spec/cf_spec_migrate.py} +27 -10
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize.py +193 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize_apply.py +187 -0
- package/src/core/code-flow/scripts/{cf_spec_resolver.py → codeflow/spec/cf_spec_resolver.py} +39 -17
- package/src/core/code-flow/scripts/{cf_spec_router.py → codeflow/spec/cf_spec_router.py} +96 -36
- package/src/core/code-flow/scripts/{cf_spec_verify.py → codeflow/spec/cf_spec_verify.py} +252 -26
- package/src/core/code-flow/scripts/codeflow/spec/cf_stage_gate.py +330 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_task_projection.py +83 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_service.py +755 -0
- package/src/core/code-flow/scripts/{cf_workflow_transaction.py → codeflow/spec/cf_workflow_transaction.py} +29 -15
- package/src/core/code-flow/scripts/codeflow/task/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_requirement_verification.py +867 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_task_doc.py +178 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_task_merge.py +635 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_task_plan.py +251 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_task_runtime.py +570 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_validation_service.py +73 -0
- package/src/core/code-flow/scripts/runtime-resources.json +29 -0
- package/src/core/code-flow/specs/shared/design/design-frontend.md +18 -15
- package/src/core/code-flow/specs/shared/design/design-full.md +33 -23
- package/src/core/code-flow/specs/shared/design/design-lite.md +23 -13
- package/src/core/code-flow/specs/shared/scenarios-template.md +55 -0
- package/src/core/code-flow/validation.yml +9 -3
- package/src/migrate/runtime.js +213 -0
- package/src/migrate/spec-workflow.js +16 -1
- package/src/runtime.js +219 -0
- package/src/core/code-flow/scripts/cf_acceptance_evidence.py +0 -100
- package/src/core/code-flow/scripts/cf_acceptance_schema.py +0 -83
- package/src/core/code-flow/scripts/cf_exec_base.py +0 -112
- package/src/core/code-flow/scripts/cf_task_runtime.py +0 -299
- package/src/core/code-flow/scripts/cf_task_state.py +0 -3
- package/src/core/code-flow/scripts/cf_workflow_service.py +0 -366
- /package/src/core/code-flow/scripts/{cf_session_state.py → codeflow/core/cf_session_state.py} +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"date": "2026-10-26",
|
|
3
|
+
"hardware": "Apple M5 Pro",
|
|
4
|
+
"python": "3.9.6",
|
|
5
|
+
"baseline_commit": "42a43b6",
|
|
6
|
+
"method": "Fresh Python process per Prompt/Hook, warm filesystem; direct service batch measurements use the same interpreter. Derived parse-cache cold/warm cases are identified separately. Milliseconds are machine-local samples, not SLAs.",
|
|
7
|
+
"path_prompt_one_match_500_specs": {
|
|
8
|
+
"before": {
|
|
9
|
+
"n": 10,
|
|
10
|
+
"median_ms": 229.33,
|
|
11
|
+
"p95_ms": 235.37,
|
|
12
|
+
"max_ms": 235.37
|
|
13
|
+
},
|
|
14
|
+
"after": {
|
|
15
|
+
"n": 10,
|
|
16
|
+
"median_ms": 56.02,
|
|
17
|
+
"p95_ms": 57.82,
|
|
18
|
+
"max_ms": 57.82
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"unchanged_active_prompt_200_bindings": {
|
|
22
|
+
"before": {
|
|
23
|
+
"n": 10,
|
|
24
|
+
"median_ms": 285.23,
|
|
25
|
+
"p95_ms": 292.18,
|
|
26
|
+
"max_ms": 292.18
|
|
27
|
+
},
|
|
28
|
+
"after": {
|
|
29
|
+
"n": 10,
|
|
30
|
+
"median_ms": 56.48,
|
|
31
|
+
"p95_ms": 58.27,
|
|
32
|
+
"max_ms": 58.27
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"edit_service_20_files_200_bindings_parse_cache_warm": {
|
|
36
|
+
"before": {
|
|
37
|
+
"n": 3,
|
|
38
|
+
"median_ms": 9631.24,
|
|
39
|
+
"p95_ms": 9641.59,
|
|
40
|
+
"max_ms": 9641.59
|
|
41
|
+
},
|
|
42
|
+
"after": {
|
|
43
|
+
"n": 3,
|
|
44
|
+
"median_ms": 8.03,
|
|
45
|
+
"p95_ms": 8.24,
|
|
46
|
+
"max_ms": 8.24
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"installed_codex_20_files_200_bindings": {
|
|
50
|
+
"before": {
|
|
51
|
+
"timed_out": true,
|
|
52
|
+
"stdout_before_timeout": 0,
|
|
53
|
+
"elapsed_ms": 5004.3
|
|
54
|
+
},
|
|
55
|
+
"after": {
|
|
56
|
+
"bindings": 200,
|
|
57
|
+
"files": 20,
|
|
58
|
+
"fresh_python_process_each_event": true,
|
|
59
|
+
"timeout_seconds": 5,
|
|
60
|
+
"parse_cache_cold_ms": 333.36,
|
|
61
|
+
"cold_output_bytes": 455,
|
|
62
|
+
"parse_cache_warm_median_ms": 67.45,
|
|
63
|
+
"warm_max_ms": 68.53,
|
|
64
|
+
"warm_n": 10
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"installed_integrity_check_after": {
|
|
68
|
+
"n": 20,
|
|
69
|
+
"median_ms": 3.14,
|
|
70
|
+
"p95_ms": 3.58,
|
|
71
|
+
"max_ms": 3.58
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Spec 自检与优化
|
|
2
|
+
|
|
3
|
+
在项目根目录手动执行以下步骤;这些检查不会作为后台任务自动运行。四个平台 Claude、Codex、Costrict、OpenCode 均可通过终端使用同一 CLI,也可从 `cf-stats` 和 `cf-spec` 入口查看指引。
|
|
4
|
+
|
|
5
|
+
1. 体检:`code-flow stats --audit --human`(机器读取使用 `code-flow stats --audit --json`)。检查过期路径、重复内容、过长规范和待复审规则,结合实际文件验证结果。默认冗长阈值是 500 token;可在 `audit.long_spec_tokens` 中调整,`audit.path_roots` 可指定路径解析根。
|
|
6
|
+
2. 按实际代码路径衡量单次注入,例如 `code-flow spec budget --paths src/app.py --json`。`matched_total` 是该次匹配预算,`aggregate_total` 是项目聚合量;退出码 3 表示超限。只在单次注入超过目标时考虑拆分,重复内容先人工核实。
|
|
7
|
+
3. 查询影响,例如 `code-flow spec impact app-rules --json`。将 ID 换成实际规范 ID 或相对 `specs/` 的路径。`truncated` 或 `errors` 表示结果不完整,需先解决;在途任务及 Context 不能受应用操作影响。
|
|
8
|
+
4. 预览一个明确目标,例如 `code-flow spec optimize --dry-run --paths app/rules.md --target app/conventions.md --json`。将路径替换成项目实际规范,目标目录必须存在且目标文件不存在。保存提案:`code-flow spec optimize --dry-run --paths app/rules.md --target app/conventions.md --json > plan.json`。未指定目标时只给建议,不生成可应用操作。查看 diff、路径映射模式、预算和影响,确认规则 ID、正文及 verifier 保持不变。
|
|
9
|
+
5. 在交互终端执行 `code-flow spec optimize --apply --plan plan.json --json`,阅读实际 diff 后明确输入 `y`。提案或输入变化、在途 Context、非交互终端和不安全路径均会拒绝;重新生成并审查提案。失败会尝试恢复原始字节;进程中断时保留备份和 journal 并拒绝后续应用,需先检查事务现场并恢复,不能直接删除证据。
|
|
10
|
+
6. 对受影响需求执行 `code-flow spec refresh --task-dir <需求目录> --root "$PWD" --json`,再执行 `code-flow spec doctor --task-dir <需求目录> --root "$PWD" --json`,根据结果处理漂移与阶段 Gate。doctor 对域布局默认告警,可通过 `spec_workflow.strict_domain_layout: true` 改为严格阻断。最后对实际代码路径再次运行 budget,执行相应任务验证。
|
|
11
|
+
|
|
12
|
+
审计和提案是辅助判断,不会自动删除规则或自动修改配置。跨域移动前应特别核对预览中的 source/target patterns:不同匹配范围可能改变 Conventions 的注入范围。
|
package/package.json
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michaelxwb/code-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
|
+
"description": "Initialize and manage AI coding workflow specs (Claude Code / Codex / Costrict / OpenCode)",
|
|
4
5
|
"license": "UNLICENSED",
|
|
5
6
|
"bin": {
|
|
6
7
|
"code-flow": "src/cli.js"
|
|
7
8
|
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=18"
|
|
11
|
+
},
|
|
8
12
|
"files": [
|
|
9
13
|
"src/cli.js",
|
|
14
|
+
"src/runtime.js",
|
|
10
15
|
"src/migrate/**",
|
|
11
16
|
"src/core/**",
|
|
17
|
+
"src/core/code-flow/scripts/runtime-resources.json",
|
|
12
18
|
"src/adapters/**",
|
|
13
|
-
"docs/migrations/spec-workflow-0.6.0.md"
|
|
19
|
+
"docs/migrations/spec-workflow-0.6.0.md",
|
|
20
|
+
"docs/migrations/runtime-0.7.0.md",
|
|
21
|
+
"docs/migrations/runtime-0.8.0.md",
|
|
22
|
+
"docs/migrations/runtime-0.9.0.md",
|
|
23
|
+
"docs/acceptance-contract.md",
|
|
24
|
+
"docs/spec-injection-hardening.md",
|
|
25
|
+
"docs/spec-optimization.md",
|
|
26
|
+
"docs/spec-injection-performance.json",
|
|
27
|
+
"docs/USAGE.md",
|
|
28
|
+
"docs/ci/acceptance-evidence.md"
|
|
14
29
|
],
|
|
15
30
|
"dependencies": {
|
|
16
31
|
"@ccusage/codex": "^18.0.10"
|
|
17
32
|
}
|
|
18
|
-
}
|
|
33
|
+
}
|
|
@@ -32,7 +32,7 @@ Do NOT ask the user which Specs to load—the Context-first router is authoritat
|
|
|
32
32
|
|
|
33
33
|
1. 编辑代码后收到 **Spec 合规反馈 (auto-check)** 时,先按提示修正违规,再继续当前任务
|
|
34
34
|
2. 用户表示某条反馈是误报("这是误报"/"忽略这个检查")时,代为执行:
|
|
35
|
-
`
|
|
35
|
+
`code-flow feedback ignore <check-id>`
|
|
36
36
|
(check-id 见反馈中的 `规则: <spec>#<check-id>`;同一规则误报达阈值会自动停用)
|
|
37
37
|
3. 会话收尾被校验拦回(cf-stop 反馈未过项)时,修复后再结束;不要绕过
|
|
38
38
|
4. 新增/修改规范时优先用 ✅/❌ 代码对照示例表达(见 spec 模板 Examples 段)
|
|
@@ -153,9 +153,7 @@ CLAUDE.md 的完整内容由适配器模板统一定义,`code-flow init` 已
|
|
|
153
153
|
|
|
154
154
|
### 6. 生成 .claude/settings.local.json Hook 配置
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
如果文件已存在,只合并缺失的 hook 事件、matcher 或 command,保留用户已有 permissions、settings 和自定义 hooks,不得整文件覆盖。
|
|
156
|
+
执行 `code-flow init --platform=claude`,由适配器模板统一生成/合并 `PreToolUse`、`PostToolUse`、`UserPromptSubmit`、`Stop` 四类 Hook,保留用户已有 permissions、settings 和自定义 hooks,不得整文件覆盖。不得手工拼装受管理 Hook;旧安装或清单校验失败时通过 `code-flow migrate --runtime --dry-run` / `--apply` 修复。
|
|
159
157
|
|
|
160
158
|
### 7. 安装 pyyaml
|
|
161
159
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
1. 读取并展示 `spec-context.yml` 的 bindings、Rule stage status、artifact refs、Evidence 与 drift。
|
|
33
33
|
2. 执行:
|
|
34
|
-
`
|
|
34
|
+
`code-flow spec validate --task-dir <目录> --json`
|
|
35
35
|
3. Context 缺失、schema/hash 无效时 fail-closed,不回退 Catalog。
|
|
36
36
|
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
|
|
42
42
|
执行:
|
|
43
43
|
|
|
44
|
-
`
|
|
44
|
+
`code-flow spec status --task-dir <目录> --root "$PWD"`
|
|
45
45
|
|
|
46
46
|
- marker 漂移时输出下一步:先 refresh 自动重同步;仍不一致时用 `active doctor --resync`(hash 取 status --json 的 context_sha256)。
|
|
47
47
|
- 需要机器可读输出时加 `--json`。
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
执行:
|
|
52
52
|
|
|
53
|
-
`
|
|
53
|
+
`code-flow spec refresh --task-dir <目录> --root "$PWD" --json`
|
|
54
54
|
|
|
55
55
|
- changed required Rule 标为 stale,关联 stage Gate 必须阻断。
|
|
56
56
|
- missing/conflict 不自动降级;回 Align 或 Plan 更新承接后再继续。
|
|
@@ -65,3 +65,23 @@
|
|
|
65
65
|
- **marker 损坏或归属无法证明**:向用户说明影响,仅在用户明确确认放弃该 TASK 后执行 `active doctor --abandon`,随后重新规划该任务。
|
|
66
66
|
3. `active doctor` 返回 `recovery_required`(退出码 3)是诊断结果而非崩溃:按第 2 步选择 refresh / `--resync` / `--abandon`,不要用 `--help` 探测或反复重试。
|
|
67
67
|
4. 输出明确修复命令。不得删除损坏 marker、越过 required Gate 或静默切换到无任务模式。
|
|
68
|
+
5. doctor 的安装/Context 健康结果与 `readiness.plan/code/review` 分开阅读。`applied` 只表示存在引用,不能替代 code/review 的 verified 执行证据;引用条目仍有“待同步/待确认/TBD”时返回 `rule_applied_unresolved`。
|
|
69
|
+
6. `decision=null` 是自动验证的正常情况;无需改代码但已符合规则时提交对应证据,不强制用户 N/A。只有确实不适用/豁免时要求用户 decision。
|
|
70
|
+
7. `convention_review_required` 表示绑定 Spec 的 Conventions 尚未成为可执行约束;审查与当前设计的冲突,关键条目提升为稳定 Rule 并配置 verifier。CLI 低于 runtime 时先按提示升级 CLI;不要尝试把项目 runtime 降级。
|
|
71
|
+
|
|
72
|
+
## 规范自检与优化
|
|
73
|
+
|
|
74
|
+
按 `docs/spec-optimization.md` 执行审计、路径预算、影响查询和只读优化预览。`code-flow spec optimize --apply --plan <提案>` 需要在交互终端展示并获得用户对具体 diff 的明确确认;不得代为确认。应用后对受影响需求执行 refresh 和 doctor。
|
|
75
|
+
|
|
76
|
+
<!-- code-flow:runtime-commands start -->
|
|
77
|
+
|
|
78
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
code-flow spec optimize --help
|
|
82
|
+
code-flow spec validate --task-dir "<需求目录>" --json
|
|
83
|
+
code-flow spec status --task-dir "<需求目录>" --root "$PWD" --json
|
|
84
|
+
code-flow spec refresh --task-dir "<需求目录>" --root "$PWD" --json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
用 Bash 执行:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
code-flow stats [--human] [--domain=frontend] [--audit]
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
将用户传入的参数原样透传。
|
|
@@ -84,3 +84,13 @@ COMPRESSION: 1820 → 1580 (-13.2%)
|
|
|
84
84
|
|
|
85
85
|
- `.code-flow/` 不存在 → 提示运行 `/project:cf-init`
|
|
86
86
|
- Python 脚本执行失败 → 输出错误信息,建议检查 Python 环境
|
|
87
|
+
|
|
88
|
+
<!-- code-flow:runtime-commands start -->
|
|
89
|
+
|
|
90
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
code-flow stats --help
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -1,25 +1,39 @@
|
|
|
1
1
|
# cf-sync
|
|
2
2
|
|
|
3
|
+
> **命令面状态(0.8)**:internal — 仅开发/发布维护使用,不属于 0.8 用户命令面;普通用户无需调用。
|
|
4
|
+
|
|
3
5
|
一键同步双副本(canonical 源 → 部署副本),并检查漂移。用法:
|
|
4
6
|
|
|
5
|
-
- `
|
|
6
|
-
- `
|
|
7
|
-
- `
|
|
7
|
+
- `code-flow sync check` — 检查全部配对是否一致(默认)
|
|
8
|
+
- `code-flow sync apply` — 把 canonical 源复制到部署副本
|
|
9
|
+
- `code-flow sync check --verbose` — 额外列出部署侧独有文件
|
|
8
10
|
|
|
9
11
|
## 同步配对
|
|
10
12
|
|
|
11
13
|
| canonical 源 | 部署副本 | 同步内容 |
|
|
12
14
|
|---|---|---|
|
|
13
|
-
| `src/core/code-flow` | `.code-flow` | `scripts
|
|
15
|
+
| `src/core/code-flow` | `.code-flow` | `scripts/`、`runtime-commands.json`、`.version`、`.gitignore` |
|
|
14
16
|
| `src/adapters/claude` | `.claude` | `commands/` |
|
|
15
|
-
| `src/adapters/codex` | `.codex` | `hooks.json` |
|
|
16
17
|
| `src/adapters/codex/skills` | `.agents/skills` | 全部 |
|
|
17
18
|
| `src/adapters/costrict` | `.costrict` | `commands/` |
|
|
18
19
|
| `src/adapters/opencode` | `.opencode` | `commands/`、`plugins/` |
|
|
19
20
|
|
|
21
|
+
`.codex/hooks.json` 由 init 的合并逻辑和 runtime 事务迁移管理,不属于 cf-sync 的字节同步配对。
|
|
22
|
+
|
|
20
23
|
## 规则
|
|
21
24
|
|
|
22
25
|
1. 项目自有内容(`specs/`、`tasks/`、`config.yml`、`validation.yml`、`settings.local.json`)不在同步范围内,不会被动覆盖。
|
|
23
26
|
2. 部署侧独有文件不会被删除(避免误删本地产物)。
|
|
24
|
-
3. 只改一侧 = 测试通过但 live 行为不变;改完 canonical 源后运行 `
|
|
27
|
+
3. 只改一侧 = 测试通过但 live 行为不变;改完 canonical 源后运行 `code-flow sync apply` 部署,提交时双副本一起提交。
|
|
25
28
|
4. 每对 `check` 全绿后提交,保证四平台命令与运行副本同步。
|
|
29
|
+
|
|
30
|
+
<!-- code-flow:runtime-commands start -->
|
|
31
|
+
|
|
32
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
code-flow sync check --help
|
|
36
|
+
code-flow sync apply --help
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
从需求出发,通过结构化对话产出设计简报(`.design.md`),为 `cf-task:plan` 提供足够丰富的输入。支持三种输入:纯文本需求、`.prd.md` 产品需求文档、`.design.md` 草稿。
|
|
4
4
|
|
|
5
|
+
## Scenario-First(0.9)
|
|
6
|
+
|
|
7
|
+
全栈用户场景统一写入 `<需求>.scenarios.md`,作为验收场景唯一源;design 文档只写实现逻辑并引用场景 ID。场景文件不存在时,新需求不得进入 plan。
|
|
8
|
+
|
|
9
|
+
设计简报 frontmatter 写明实际选择的 `design_template: lite`、`full` 或 `frontend`。FEAT/API/NFR 定义与场景引用必须闭合;每个范围内功能关联验收场景。生成后执行 `code-flow design lint --file "<需求>.design.md" --scenarios-file "<需求>.scenarios.md" --json`,多份设计重复传 `--file`。按模板保留必填章节,不适用的可选章节按模板删除。
|
|
10
|
+
|
|
11
|
+
场景区分浏览器 E2E 与 API/CLI 的 system/integration;capacity 可使用独立层级或 tags。expected 必须具体,并通过 expected_refs 关联步骤或已声明断言;延后场景保留原因、责任人及目标阶段。详细可执行格式见 `docs/acceptance-contract.md`。
|
|
12
|
+
|
|
5
13
|
## 输入
|
|
6
14
|
|
|
7
15
|
- `/cf-task:align "需求描述"` — 从需求描述新建设计简报
|
|
@@ -114,7 +122,7 @@ PRD 已覆盖的维度如无需调整,将直接使用。
|
|
|
114
122
|
|
|
115
123
|
进入技术讨论前先定位需求目录中的 `spec-context.yml`:
|
|
116
124
|
|
|
117
|
-
1. PRD 派生/恢复模式必须执行 `
|
|
125
|
+
1. PRD 派生/恢复模式必须执行 `code-flow spec refresh --task-dir <需求目录> --root "$PWD" --json`;missing/stale/conflict 必须先处理。
|
|
118
126
|
2. 已有 binding 必须从 PRD Context 原样继承,**不得重新选择**、降级 enforcement 或清空 PRD 阶段 refs/decision/evidence。根据预计实现路径运行 `catalog --stage design`,只对新增 design-stage 候选做增量 bind,并记录 reason。
|
|
119
127
|
3. 为每条 design-stage required Rule 预建 `Spec Compliance Matrix` 行:`Spec/Rule`、enforcement、设计影响、具体设计落点、验证场景/verifier、状态或 N/A 理由。
|
|
120
128
|
4. required Rule 没有具体 heading/item 和验证方式时不得进入可评审状态;只写“遵循规范”无效。
|
|
@@ -172,7 +180,9 @@ CLI 场景:
|
|
|
172
180
|
**验收标准**(必选)
|
|
173
181
|
- 怎么判断做完了?正常 / 异常场景各列至少一条
|
|
174
182
|
- 可验证、可转为自动化测试断言的条件(明确输入与可观测输出);场景 ID(S-/E-/B-)即测试用例来源
|
|
175
|
-
- 为每个场景指定测试层级(unit / integration / E2E / manual
|
|
183
|
+
- 为每个场景指定测试层级(unit / component / contract / integration / E2E / manual)和关键真实边界;按最低可覆盖层选择:UI/表单/布局用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration,只有真实浏览器 + 真实后端 + 鉴权/DB 才能暴露的 P0/P1 关键旅程才用 E2E
|
|
184
|
+
- ✅ CAS 冲突由 contract + component + 真实存储 integration 共同证明;聚合补零用数据 contract + component,关系绑定用真实存储 integration。Cookie 身份隔离和 SSE 恢复可保留对应关键 E2E。❌ 按用户可见结果机械增加 E2E 或用固定比例决定层级;描述独特故障、低层覆盖和剩余接线风险,由设计评审判断。
|
|
185
|
+
- E2E 场景必须同时给出 `why_e2e`(低层为什么不够)、`trigger_paths`(哪些源码变化触发)和 `smoke`(是否发布冒烟);缺少时不得进入 plan
|
|
176
186
|
- RULE 与高影响 RISK 必须映射到至少一个 S/E/B 场景;manual 仅限无法自动化的外部条件,必须写明原因
|
|
177
187
|
|
|
178
188
|
**妥协与技术债**(按需)
|
|
@@ -283,7 +293,7 @@ CLI 场景:
|
|
|
283
293
|
写入后,对 Matrix 每一行调用 `bind --stage design` 的 `applications` 回填 design artifact、`section_id`、稳定 `item_id` 和脚本计算的 hash;随后执行:
|
|
284
294
|
|
|
285
295
|
```bash
|
|
286
|
-
|
|
296
|
+
code-flow spec gate --task-dir <需求目录> --stage design --json
|
|
287
297
|
```
|
|
288
298
|
|
|
289
299
|
只有 Design Gate `decision=pass` 才能输出 Plan 下一步。缺 Matrix 行、artifact ref、验证方式、用户确认或发生 drift 时保留草稿并修复,不得推迟到 Coding/Done 才发现。
|
|
@@ -307,3 +317,15 @@ python3 .code-flow/scripts/cf_spec_gate.py --task-dir <需求目录> --stage des
|
|
|
307
317
|
- 标注问题: 在文件中添加 #NOTES,然后 /cf-task:note <name>.design
|
|
308
318
|
- 生成任务: /cf-task:plan <完整路径>
|
|
309
319
|
```
|
|
320
|
+
|
|
321
|
+
<!-- code-flow:runtime-commands start -->
|
|
322
|
+
|
|
323
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
code-flow spec refresh --task-dir "<需求目录>" --root "$PWD" --json
|
|
327
|
+
code-flow spec gate --help
|
|
328
|
+
code-flow design lint --file "<需求>.design.md" --scenarios-file "<需求>.scenarios.md" --json
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 输入
|
|
6
6
|
|
|
7
|
-
- `/cf-task:archive
|
|
7
|
+
- `/cf-task:archive <需求目录或任务文件>` — 定位需求,通过运行时归档整个需求目录
|
|
8
8
|
|
|
9
9
|
其中 `<file>` 可省略日期目录前缀和 `.md` 后缀。
|
|
10
10
|
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
1. 用 Read 读取匹配到的 task 文件
|
|
18
18
|
2. 提取所有 `## TASK-xxx` 段落的 Status
|
|
19
|
-
3.
|
|
19
|
+
3. 若 active marker 指向本需求,读取其中真实 TASK ID;满足 finish 条件后先执行 `code-flow task finish --root "$PWD" --task-dir "<需求目录>" --task <实际TASK-ID> --json`。失败按原因修复,禁止手动改状态。
|
|
20
|
+
4. 检查所有子任务均为 `done` 或 `verified`。`done` 由下一步需求级终验提升为 `verified`;其他状态不能归档。
|
|
20
21
|
|
|
21
22
|
若有未完成子任务,拒绝归档并输出:
|
|
22
23
|
|
|
@@ -32,28 +33,27 @@
|
|
|
32
33
|
|
|
33
34
|
### 2. 归档前校验(Verify)
|
|
34
35
|
|
|
35
|
-
**Spec Context /
|
|
36
|
+
**Spec Context / 终验与 Gate(先于四维校验)**:
|
|
36
37
|
|
|
37
|
-
- 需求目录必须存在 `spec-context.yml`;执行 `
|
|
38
|
-
-
|
|
39
|
-
- 若 `.code-flow/.active-task.json` 仍指向本需求,先执行 `python3 .code-flow/scripts/cf_task_workflow.py finish --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json`,通过后再 verify-e2e;不得自报 gate_passed 或通过归档绕过 active 状态
|
|
38
|
+
- 需求目录必须存在 `spec-context.yml`;执行 `code-flow spec refresh --task-dir <需求目录> --root "$PWD" --json`
|
|
39
|
+
- 不单独运行 verify-e2e 或重复 Spec Gate:步骤 3 的 archive 一次执行 required verifier、项目 validators 和 acceptance,并在移动前校验证据与输入快照。
|
|
40
40
|
- Context 与 Evidence 随需求目录一并归档,`_session` 仅是可重建投影,不是事实源
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
先执行静态四维校验;运行结果在步骤 3 的 archive 返回后核对:
|
|
43
43
|
|
|
44
44
|
**完整性**:
|
|
45
45
|
- 所有 Checklist 项已勾选
|
|
46
46
|
- 全文无残留的 `#NOTES` 标记
|
|
47
47
|
|
|
48
48
|
**正确性**:
|
|
49
|
-
-
|
|
50
|
-
-
|
|
49
|
+
- 步骤 3 核对 archive 返回的 `verify.layers.validators`:全量 validation(含 heavy)必须通过;失败按具体命令与输出修复后重跑 archive。
|
|
50
|
+
- 失败时按具体 validator 的命令、输出和修复建议处理,再重跑终验;通过记录按内容指纹复用。
|
|
51
51
|
|
|
52
52
|
**验收追溯**:
|
|
53
|
-
- 来源 design 含结构化 S-/E-/B- 场景时,逐项对照 `## Acceptance Coverage`,P0/P1 场景以及 RULE/高影响 RISK
|
|
54
|
-
- 每个负责任务的 `Acceptance-Refs`、`Acceptance Contract`、`Acceptance Evidence`
|
|
53
|
+
- 来源 design 含结构化 S-/E-/B- 场景时,逐项对照 `## Acceptance Coverage`,P0/P1 场景以及 RULE/高影响 RISK 映射场景必须全部存在;步骤 3 终验后确认状态为 `verified`
|
|
54
|
+
- 每个负责任务的 `Acceptance-Refs`、`Acceptance Contract`、`Acceptance Evidence` 必须闭合;待运行或待人工确认的条目由步骤 3 终验处理,成功后不得残留 `planned` / `pending` / `TBD`
|
|
55
55
|
- 测试层级不得低于 design;E2E 的真实边界和关键断言必须有文件/用例位置与 fixture/构造证据
|
|
56
|
-
-
|
|
56
|
+
- 步骤 3 核对 archive 返回的 `verify.layers.e2e` 与逐 check 证据:多 check 场景全部必要成员必须有效;缺失或失败时修复后重跑 archive。
|
|
57
57
|
- `manual` 场景必须有用户确认和可复核记录。旧 design 没有结构化场景时注明“不适用”,不得伪造覆盖
|
|
58
58
|
|
|
59
59
|
**一致性**:
|
|
@@ -64,35 +64,25 @@
|
|
|
64
64
|
```
|
|
65
65
|
归档前校验:
|
|
66
66
|
[PASS] 完整性: 所有 Checklist 已完成,无未解决 Notes
|
|
67
|
-
[PASS] 正确性:
|
|
67
|
+
[PASS] 正确性: layers.validators 通过
|
|
68
68
|
[PASS] 验收追溯: 6/6 场景 verified,2 条 E2E 命令通过
|
|
69
|
-
[
|
|
70
|
-
|
|
71
|
-
WARN 不阻塞归档,但建议确认后再继续。继续归档?
|
|
69
|
+
[FAIL] 一致性: Proposal 要求"支持 OAuth 登录",但缺少对应实现与验收证据
|
|
72
70
|
```
|
|
73
71
|
|
|
74
|
-
PASS → 继续。
|
|
72
|
+
全部 PASS → 继续。FAIL → 列出具体缺口,修复后重新验证。只有涉及需求取舍或人工验收时请求用户确认。
|
|
75
73
|
|
|
76
74
|
### 3. 执行归档
|
|
77
75
|
|
|
78
|
-
|
|
76
|
+
**A. 需求目录布局**(任务文件位于 `.code-flow/tasks/<日期>/<需求>/<需求>.md`)——**整个需求目录一并归档**。先完成临时约束清理,再调用唯一移动入口:
|
|
79
77
|
|
|
80
|
-
**A. 需求目录布局**(任务文件位于 `.code-flow/tasks/<日期>/<需求>/<需求>.md`)——**整个需求目录一并归档**:
|
|
81
78
|
```bash
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
code-flow task cleanup-session --task-dir "<需求目录>" --root "$PWD" --json
|
|
80
|
+
code-flow task archive --task-dir "<需求目录>" --root "$PWD" --json
|
|
84
81
|
```
|
|
85
|
-
目录内的 `.prd.md` / `.frontend.design.md` / `.backend.design.md` / `.design.md` / `.md` 随目录一并归档,无需逐个 mv。
|
|
86
82
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
mkdir -p .code-flow/tasks/archived/<日期目录>
|
|
92
|
-
mv .code-flow/tasks/<日期目录>/<file>.md .code-flow/tasks/archived/<日期目录>/
|
|
93
|
-
```
|
|
94
|
-
3. 同名 `.design.md` 存在则一并移动:`mv .code-flow/tasks/<日期目录>/<file>.design.md .code-flow/tasks/archived/<日期目录>/`
|
|
95
|
-
4. 同名 `.prd.md` 存在则一并移动:`mv .code-flow/tasks/<日期目录>/<file>.prd.md .code-flow/tasks/archived/<日期目录>/`
|
|
83
|
+
cleanup-session 逐任务删除 `specs/_session/task-<任务文件stem>.md` 投影,必须在源目录仍存在时执行。archive 内置 full verify;内容未变时复用有效证据,失败返回 `archive_verify_failed` 与具体 `verify` 结果,源目录保留。只有 `decision=pass` 才完成移动,目标路径使用返回的 `archived_to`,不得自行推算日期或同名后缀,不得手工 `mv` 绕过门禁。 返回 `manual_confirmation_required` 时,按 verify-e2e 的人工验收确认流程取得用户确认,执行 `confirm-manual` 后重跑 archive。
|
|
84
|
+
|
|
85
|
+
**B. 旧扁平布局**(任务文件直接位于 `.code-flow/tasks/<日期>/<file>.md`)——保留向后兼容的文件查找。当前归档运行时以独立需求目录为边界;旧文件缺少该边界时,报告“先完成需求目录迁移”,保留原文件。不得把包含其他需求的日期目录作为 `--task-dir`,也不得逐文件归档绕过 Context、manifest 和 full verify。
|
|
96
86
|
|
|
97
87
|
**归档后统一收尾(布局 A/B 都必须执行)**:
|
|
98
88
|
|
|
@@ -107,8 +97,6 @@ mv .code-flow/tasks/<日期>/<需求>/ .code-flow/tasks/archived/<日期>/<需
|
|
|
107
97
|
3. 复查归档目标存在、原任务/需求路径不存在;如果源日期目录仍存在但为空,视为归档未完成,立即删除后再继续。
|
|
108
98
|
4. 源日期目录包含其他条目时不得删除,摘要明确写“保留(仍有 N 个条目)”。
|
|
109
99
|
|
|
110
|
-
**临时约束清理(FEAT-08)**:删除 `.code-flow/specs/_session/task-<name>.md`(存在时)。该文件由 cf-task:start 生成,归档后不得残留。
|
|
111
|
-
|
|
112
100
|
### 4. Spec 更新提示
|
|
113
101
|
|
|
114
102
|
归档完成后,检查本次变更是否引入了新的规范约束需要同步到 specs:
|
|
@@ -136,16 +124,11 @@ Spec 同步建议:
|
|
|
136
124
|
|
|
137
125
|
需求目录布局(A):
|
|
138
126
|
```
|
|
139
|
-
已归档需求目录: <需求>/ →
|
|
127
|
+
已归档需求目录: <需求>/ → <archived_to>
|
|
140
128
|
含: <需求>.prd.md、<需求>.frontend.design.md / <需求>.backend.design.md(按实际)、<需求>.md
|
|
141
129
|
```
|
|
142
130
|
|
|
143
|
-
旧扁平布局(B
|
|
144
|
-
```
|
|
145
|
-
已归档: <file>.md → .code-flow/tasks/archived/<日期目录>/<file>.md
|
|
146
|
-
(如有关联设计简报): <file>.design.md → .code-flow/tasks/archived/<日期目录>/<file>.design.md
|
|
147
|
-
(如有关联 PRD): <file>.prd.md → .code-flow/tasks/archived/<日期目录>/<file>.prd.md
|
|
148
|
-
```
|
|
131
|
+
旧扁平布局(B)尚未迁移时,报告原路径与缺少的需求边界,不输出“已归档”。
|
|
149
132
|
|
|
150
133
|
```
|
|
151
134
|
摘要:
|
|
@@ -157,3 +140,16 @@ Spec 同步建议:
|
|
|
157
140
|
- 校验: 4/4 PASS
|
|
158
141
|
- 源日期目录: 已删除(为空)/ 已保留(仍有 N 个条目)
|
|
159
142
|
```
|
|
143
|
+
|
|
144
|
+
<!-- code-flow:runtime-commands start -->
|
|
145
|
+
|
|
146
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
code-flow spec refresh --task-dir "<需求目录>" --root "$PWD" --json
|
|
150
|
+
code-flow task finish --task-dir "<需求目录>" --task TASK-001 --root "$PWD" --json
|
|
151
|
+
code-flow task cleanup-session --help
|
|
152
|
+
code-flow task archive --task-dir "<需求目录>" --root "$PWD" --json
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# cf-task:block
|
|
2
2
|
|
|
3
|
+
> **命令面状态(0.8)**:alias — 等价于 `cf-task-status --block`;保留一个 minor,0.9.0 移除。
|
|
4
|
+
|
|
3
5
|
标记子任务为阻塞状态。
|
|
4
6
|
|
|
5
7
|
## 输入
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
3. 调用统一 workflow service 入口(与 active block 同一状态机),不要先编辑状态或 marker:
|
|
21
23
|
|
|
22
24
|
```bash
|
|
23
|
-
|
|
25
|
+
code-flow task block --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --reason "<阻塞原因>" --json
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
命令同时更新 Status、阻塞原因、Log、Updated 和匹配的 marker;无 marker 的 draft 任务只改变任务文档。仅在返回成功后确认阻塞;其他需求的 marker 不得改动。
|
|
@@ -30,7 +32,18 @@ python3 .code-flow/scripts/cf_task_workflow.py block --root "$PWD" --task-dir "<
|
|
|
30
32
|
先解决 Notes 或外部依赖,再执行:
|
|
31
33
|
|
|
32
34
|
```bash
|
|
33
|
-
|
|
35
|
+
code-flow task resume --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json
|
|
34
36
|
```
|
|
35
37
|
|
|
36
38
|
resume 会检查未解决的 #NOTES 和依赖,原子同步任务与 marker。未激活的 blocked 任务恢复 draft;已有匹配 marker 的任务恢复 in-progress。失败时保留阻塞状态,不通过手动改 Status 绕过。
|
|
39
|
+
|
|
40
|
+
<!-- code-flow:runtime-commands start -->
|
|
41
|
+
|
|
42
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
code-flow task block --help
|
|
46
|
+
code-flow task resume --help
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# cf-task:graph
|
|
2
2
|
|
|
3
|
+
> **命令面状态(0.8)**:alias — 等价于 `cf-task-status --graph`;保留一个 minor,0.9.0 移除。
|
|
4
|
+
|
|
3
5
|
可视化子任务的依赖关系 DAG,识别可并行执行的任务组。
|
|
4
6
|
|
|
5
7
|
## 输入
|
|
@@ -15,7 +17,7 @@
|
|
|
15
17
|
|
|
16
18
|
### 0. 程序计算(推荐)
|
|
17
19
|
|
|
18
|
-
用 `
|
|
20
|
+
用 `code-flow task index --task-file <file> --dag --json` 直接输出拓扑批次与独立分组,不要全文手算。单 worktree 一次仅激活一个 TASK;批次内的独立任务由 cf-task:start 在各自 worktree 中并行派发子 agent(预检失败自动回退串行),详见 cf-task:start 步骤 4。
|
|
19
21
|
|
|
20
22
|
`batches` 是组内可独立开发的拓扑批次;`dependency_components` 是依赖连通分组,只保证组与组之间独立,组内仍有先后依赖。`independent_groups` 仅为后者的兼容别名,不要把它显示成组内并行。
|
|
21
23
|
|
|
@@ -78,3 +80,13 @@ Layer 2:
|
|
|
78
80
|
### 5. 多文件模式
|
|
79
81
|
|
|
80
82
|
当显示所有文件时,按文件分组输出,每个文件一个独立的 DAG。
|
|
83
|
+
|
|
84
|
+
<!-- code-flow:runtime-commands start -->
|
|
85
|
+
|
|
86
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
code-flow task index --help
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
<!-- code-flow:runtime-commands end -->
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# cf-task:note
|
|
2
2
|
|
|
3
|
+
> **命令面状态(0.8)**:alias — 等价于 `cf-task-status --notes`;保留一个 minor,0.9.0 移除。
|
|
4
|
+
|
|
3
5
|
与用户协作讨论文件中的 `#NOTES` 标记,对齐最优解后将结论沉淀回原文,删除标记。
|
|
4
6
|
|
|
5
7
|
支持两种文件类型:
|
|
@@ -134,7 +136,7 @@ TASK-002:
|
|
|
134
136
|
所有 `#NOTES` 讨论完毕后:
|
|
135
137
|
|
|
136
138
|
1. 再次扫描文件,确认无残留 `#NOTES` 标记
|
|
137
|
-
2. 如果子任务之前因 `#NOTES` 被标记为 `blocked`,清除当前阻塞条目后调用 `
|
|
139
|
+
2. 如果子任务之前因 `#NOTES` 被标记为 `blocked`,清除当前阻塞条目后调用 `code-flow task resume --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json`。命令检查依赖和残留 Notes,同步 marker 与任务状态;不得从历史 Log 猜测状态后只改 Markdown。失败保留 blocked 并报告原因。
|
|
138
140
|
3. 更新文件头 `Updated` 日期
|
|
139
141
|
|
|
140
142
|
### 6. 输出摘要
|
|
@@ -234,3 +236,13 @@ TASK-002:
|
|
|
234
236
|
文件已更新,所有 #NOTES 标记已清除。
|
|
235
237
|
可执行 /cf-task:plan .code-flow/tasks/2026-04-06/user-auth.design.md 拆解任务。
|
|
236
238
|
```
|
|
239
|
+
|
|
240
|
+
<!-- code-flow:runtime-commands start -->
|
|
241
|
+
|
|
242
|
+
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
code-flow task resume --help
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
<!-- code-flow:runtime-commands end -->
|