@michaelxwb/code-flow 0.8.1 → 1.0.0
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 +73 -152
- package/bin/code-flow.js +12 -0
- package/docs/README.md +19 -0
- package/docs/USAGE.md +156 -1417
- package/docs/v1-design.md +1858 -0
- package/docs/v1-implementation.md +186 -0
- package/lib/adapters.js +126 -0
- package/lib/cli.js +258 -0
- package/lib/config.js +85 -0
- package/lib/doctor.js +283 -0
- package/lib/frontmatter.js +42 -0
- package/lib/fs.js +141 -0
- package/lib/glob.js +23 -0
- package/lib/hook.js +99 -0
- package/lib/init.js +132 -0
- package/lib/learn.js +170 -0
- package/lib/locks.js +52 -0
- package/lib/markdown.js +13 -0
- package/lib/process.js +116 -0
- package/lib/render.js +115 -0
- package/lib/repo.js +48 -0
- package/lib/runs.js +155 -0
- package/lib/session.js +40 -0
- package/lib/spec.js +80 -0
- package/lib/task.js +258 -0
- package/lib/taskdoc.js +308 -0
- package/lib/toml.js +140 -0
- package/lib/verify.js +168 -0
- package/lib/worktree.js +930 -0
- package/package.json +18 -21
- package/templates/adapters/opencode.mjs +65 -0
- package/templates/config.json +39 -0
- package/templates/instructions.md +13 -0
- package/templates/launcher/bridge.cjs +295 -0
- package/templates/launcher/hook.cmd +15 -0
- package/templates/launcher/hook.ps1 +10 -0
- package/templates/launcher/hook.sh +20 -0
- package/templates/skills/cf-check.md +19 -0
- package/templates/skills/cf-init.md +16 -0
- package/templates/skills/cf-spec.md +20 -0
- package/templates/skills/cf-task-align.md +19 -0
- package/templates/skills/cf-task-archive.md +20 -0
- package/templates/skills/cf-task-plan.md +31 -0
- package/templates/skills/cf-task-prd.md +14 -0
- package/templates/skills/cf-task-start.md +41 -0
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-frontend.md +12 -12
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-full.md +17 -19
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-lite.md +12 -12
- package/{src/core/code-flow/specs/shared/prd-template.md → templates/workflow/prd.md} +1 -1
- package/templates/workflow/project-guidelines.md +48 -0
- package/templates/workflow/scenarios.md +67 -0
- package/templates/workflow/task.md +56 -0
- package/docs/acceptance-contract.md +0 -217
- package/docs/ci/acceptance-evidence.md +0 -77
- package/docs/migrations/runtime-0.7.0.md +0 -41
- package/docs/migrations/runtime-0.8.0.md +0 -154
- package/docs/migrations/runtime-0.9.0.md +0 -40
- package/docs/migrations/spec-workflow-0.6.0.md +0 -42
- package/docs/spec-injection-hardening.md +0 -54
- package/docs/spec-injection-performance.json +0 -73
- package/docs/spec-optimization.md +0 -12
- package/src/adapters/claude/CLAUDE.md +0 -45
- package/src/adapters/claude/commands/cf-init.md +0 -262
- package/src/adapters/claude/commands/cf-learn.md +0 -291
- package/src/adapters/claude/commands/cf-spec.md +0 -87
- package/src/adapters/claude/commands/cf-stats.md +0 -96
- package/src/adapters/claude/commands/cf-sync.md +0 -39
- package/src/adapters/claude/commands/cf-task/align.md +0 -331
- package/src/adapters/claude/commands/cf-task/archive.md +0 -155
- package/src/adapters/claude/commands/cf-task/block.md +0 -49
- package/src/adapters/claude/commands/cf-task/graph.md +0 -92
- package/src/adapters/claude/commands/cf-task/note.md +0 -248
- package/src/adapters/claude/commands/cf-task/plan.md +0 -477
- package/src/adapters/claude/commands/cf-task/prd.md +0 -173
- package/src/adapters/claude/commands/cf-task/start.md +0 -317
- package/src/adapters/claude/commands/cf-task/status.md +0 -71
- package/src/adapters/claude/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/claude/commands/cf-validate.md +0 -100
- package/src/adapters/claude/settings.local.json +0 -50
- package/src/adapters/codex/AGENTS.md +0 -45
- package/src/adapters/codex/config.toml +0 -3
- package/src/adapters/codex/hooks.json +0 -54
- package/src/adapters/codex/skills/cf-init/SKILL.md +0 -273
- package/src/adapters/codex/skills/cf-learn/SKILL.md +0 -296
- package/src/adapters/codex/skills/cf-spec/SKILL.md +0 -88
- package/src/adapters/codex/skills/cf-stats/SKILL.md +0 -97
- package/src/adapters/codex/skills/cf-sync/SKILL.md +0 -45
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +0 -332
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +0 -156
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +0 -50
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +0 -93
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +0 -245
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +0 -478
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +0 -174
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +0 -318
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +0 -72
- package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +0 -145
- package/src/adapters/codex/skills/cf-validate/SKILL.md +0 -102
- package/src/adapters/commands.json +0 -115
- package/src/adapters/costrict/CLAUDE.md +0 -45
- package/src/adapters/costrict/commands/cf-init.md +0 -262
- package/src/adapters/costrict/commands/cf-learn.md +0 -291
- package/src/adapters/costrict/commands/cf-spec.md +0 -87
- package/src/adapters/costrict/commands/cf-stats.md +0 -96
- package/src/adapters/costrict/commands/cf-sync.md +0 -39
- package/src/adapters/costrict/commands/cf-task/align.md +0 -331
- package/src/adapters/costrict/commands/cf-task/archive.md +0 -155
- package/src/adapters/costrict/commands/cf-task/block.md +0 -49
- package/src/adapters/costrict/commands/cf-task/graph.md +0 -92
- package/src/adapters/costrict/commands/cf-task/note.md +0 -248
- package/src/adapters/costrict/commands/cf-task/plan.md +0 -477
- package/src/adapters/costrict/commands/cf-task/prd.md +0 -173
- package/src/adapters/costrict/commands/cf-task/start.md +0 -317
- package/src/adapters/costrict/commands/cf-task/status.md +0 -71
- package/src/adapters/costrict/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/costrict/commands/cf-validate.md +0 -100
- package/src/adapters/costrict/settings.local.json +0 -50
- package/src/adapters/install-plan.json +0 -100
- package/src/adapters/opencode/AGENTS.md +0 -45
- package/src/adapters/opencode/commands/cf-init.md +0 -281
- package/src/adapters/opencode/commands/cf-learn.md +0 -295
- package/src/adapters/opencode/commands/cf-spec.md +0 -91
- package/src/adapters/opencode/commands/cf-stats.md +0 -100
- package/src/adapters/opencode/commands/cf-sync.md +0 -44
- package/src/adapters/opencode/commands/cf-task/align.md +0 -331
- package/src/adapters/opencode/commands/cf-task/archive.md +0 -160
- package/src/adapters/opencode/commands/cf-task/block.md +0 -54
- package/src/adapters/opencode/commands/cf-task/graph.md +0 -97
- package/src/adapters/opencode/commands/cf-task/note.md +0 -253
- package/src/adapters/opencode/commands/cf-task/plan.md +0 -477
- package/src/adapters/opencode/commands/cf-task/prd.md +0 -178
- package/src/adapters/opencode/commands/cf-task/start.md +0 -317
- package/src/adapters/opencode/commands/cf-task/status.md +0 -76
- package/src/adapters/opencode/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/opencode/commands/cf-validate.md +0 -105
- package/src/adapters/opencode/opencode.json +0 -3
- package/src/adapters/opencode/plugins/code-flow/index.js +0 -162
- package/src/adapters/opencode/plugins/code-flow/package.json +0 -6
- package/src/adapters/platform-bindings.json +0 -370
- package/src/cli.js +0 -1076
- package/src/core/code-flow/config.yml +0 -161
- package/src/core/code-flow/runtime-commands.json +0 -259
- package/src/core/code-flow/scripts/cf_acceptance_manifest.py +0 -10
- package/src/core/code-flow/scripts/cf_acceptance_runner.py +0 -10
- package/src/core/code-flow/scripts/cf_audit.py +0 -10
- package/src/core/code-flow/scripts/cf_codex_hook.py +0 -10
- package/src/core/code-flow/scripts/cf_design_lint.py +0 -10
- package/src/core/code-flow/scripts/cf_evidence_import.py +0 -10
- package/src/core/code-flow/scripts/cf_feedback.py +0 -10
- package/src/core/code-flow/scripts/cf_opencode_event.py +0 -10
- package/src/core/code-flow/scripts/cf_post_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_pre_tool_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_scenarios.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_context.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_gate.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_session.py +0 -10
- package/src/core/code-flow/scripts/cf_stats.py +0 -10
- package/src/core/code-flow/scripts/cf_stop_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_sync.py +0 -10
- package/src/core/code-flow/scripts/cf_task_index.py +0 -10
- package/src/core/code-flow/scripts/cf_task_parallel.py +0 -10
- package/src/core/code-flow/scripts/cf_task_workflow.py +0 -10
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_validation.py +0 -10
- 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 +0 -347
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_manifest_core.py +0 -660
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_plan.py +0 -202
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_registration.py +0 -60
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_risk.py +0 -73
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_schema.py +0 -282
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_selection.py +0 -266
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_inputs.py +0 -172
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_registration.py +0 -326
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_checks.py +0 -333
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_plan_quality.py +0 -197
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_quality.py +0 -174
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_source.py +0 -300
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_traceability.py +0 -502
- package/src/core/code-flow/scripts/codeflow/cli/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_manifest.py +0 -347
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_runner.py +0 -1490
- package/src/core/code-flow/scripts/codeflow/cli/cf_audit.py +0 -533
- package/src/core/code-flow/scripts/codeflow/cli/cf_design_lint.py +0 -172
- package/src/core/code-flow/scripts/codeflow/cli/cf_evidence_import.py +0 -607
- package/src/core/code-flow/scripts/codeflow/cli/cf_feedback.py +0 -53
- package/src/core/code-flow/scripts/codeflow/cli/cf_scenarios.py +0 -58
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_context.py +0 -1175
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_gate.py +0 -60
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_session.py +0 -46
- package/src/core/code-flow/scripts/codeflow/cli/cf_stats.py +0 -540
- package/src/core/code-flow/scripts/codeflow/cli/cf_sync.py +0 -144
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_index.py +0 -177
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_parallel.py +0 -1142
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_workflow.py +0 -742
- package/src/core/code-flow/scripts/codeflow/cli/cf_validation.py +0 -31
- package/src/core/code-flow/scripts/codeflow/core/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_context_cache.py +0 -67
- package/src/core/code-flow/scripts/codeflow/core/cf_core.py +0 -609
- package/src/core/code-flow/scripts/codeflow/core/cf_exec_base.py +0 -325
- package/src/core/code-flow/scripts/codeflow/core/cf_fs.py +0 -57
- package/src/core/code-flow/scripts/codeflow/core/cf_git.py +0 -92
- package/src/core/code-flow/scripts/codeflow/core/cf_log.py +0 -160
- package/src/core/code-flow/scripts/codeflow/core/cf_markdown.py +0 -77
- package/src/core/code-flow/scripts/codeflow/core/cf_native_paths.py +0 -26
- package/src/core/code-flow/scripts/codeflow/core/cf_patch.py +0 -33
- package/src/core/code-flow/scripts/codeflow/core/cf_runtime_install.py +0 -32
- package/src/core/code-flow/scripts/codeflow/core/cf_session_state.py +0 -37
- package/src/core/code-flow/scripts/codeflow/core/cf_stop_guard.py +0 -53
- package/src/core/code-flow/scripts/codeflow/core/cf_task_state.py +0 -9
- package/src/core/code-flow/scripts/codeflow/core/cf_validators.py +0 -408
- package/src/core/code-flow/scripts/codeflow/core/cf_worktree_env.py +0 -253
- package/src/core/code-flow/scripts/codeflow/evidence/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/evidence/cf_evidence_store.py +0 -527
- package/src/core/code-flow/scripts/codeflow/hooks/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_codex_hook.py +0 -95
- package/src/core/code-flow/scripts/codeflow/hooks/cf_opencode_event.py +0 -98
- package/src/core/code-flow/scripts/codeflow/hooks/cf_post_hook.py +0 -30
- package/src/core/code-flow/scripts/codeflow/hooks/cf_pre_tool_hook.py +0 -41
- package/src/core/code-flow/scripts/codeflow/hooks/cf_stop_hook.py +0 -292
- package/src/core/code-flow/scripts/codeflow/hooks/cf_user_prompt_hook.py +0 -161
- package/src/core/code-flow/scripts/codeflow/spec/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_active_task.py +0 -412
- package/src/core/code-flow/scripts/codeflow/spec/cf_context_refresh.py +0 -301
- package/src/core/code-flow/scripts/codeflow/spec/cf_edit_service.py +0 -149
- package/src/core/code-flow/scripts/codeflow/spec/cf_injection.py +0 -111
- package/src/core/code-flow/scripts/codeflow/spec/cf_rule_readiness.py +0 -114
- package/src/core/code-flow/scripts/codeflow/spec/cf_scan.py +0 -367
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_budget.py +0 -55
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_context_model.py +0 -477
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_impact.py +0 -119
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_metadata.py +0 -387
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_migrate.py +0 -529
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize.py +0 -193
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize_apply.py +0 -187
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_resolver.py +0 -369
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_router.py +0 -304
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_verify.py +0 -687
- package/src/core/code-flow/scripts/codeflow/spec/cf_stage_gate.py +0 -330
- package/src/core/code-flow/scripts/codeflow/spec/cf_task_projection.py +0 -83
- package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_service.py +0 -755
- package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_transaction.py +0 -110
- package/src/core/code-flow/scripts/codeflow/task/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_requirement_verification.py +0 -867
- package/src/core/code-flow/scripts/codeflow/task/cf_task_doc.py +0 -178
- package/src/core/code-flow/scripts/codeflow/task/cf_task_merge.py +0 -635
- package/src/core/code-flow/scripts/codeflow/task/cf_task_plan.py +0 -251
- package/src/core/code-flow/scripts/codeflow/task/cf_task_runtime.py +0 -570
- package/src/core/code-flow/scripts/codeflow/task/cf_validation_service.py +0 -73
- package/src/core/code-flow/scripts/runtime-resources.json +0 -29
- package/src/core/code-flow/specs/backend/_map.md +0 -56
- package/src/core/code-flow/specs/backend/code-quality-performance.md +0 -59
- package/src/core/code-flow/specs/backend/database.md +0 -51
- package/src/core/code-flow/specs/backend/directory-structure.md +0 -54
- package/src/core/code-flow/specs/backend/logging.md +0 -50
- package/src/core/code-flow/specs/backend/platform-rules.md +0 -55
- package/src/core/code-flow/specs/frontend/_map.md +0 -52
- package/src/core/code-flow/specs/frontend/component-specs.md +0 -68
- package/src/core/code-flow/specs/frontend/directory-structure.md +0 -53
- package/src/core/code-flow/specs/frontend/quality-standards.md +0 -58
- package/src/core/code-flow/specs/shared/_map.md +0 -57
- package/src/core/code-flow/specs/shared/scenarios-template.md +0 -55
- package/src/core/code-flow/tasks/.gitkeep +0 -0
- package/src/core/code-flow/validation.yml +0 -59
- package/src/migrate/runtime.js +0 -213
- package/src/migrate/spec-workflow.js +0 -253
- package/src/runtime.js +0 -219
package/README.md
CHANGED
|
@@ -1,201 +1,122 @@
|
|
|
1
1
|
# code-flow
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
v1 是零依赖的全局 Node.js CLI,为 AI 编码工具提供两件事:按当前任务注入最新规范,以及把已完成任务的稳定约束沉淀为 Spec。默认 `hook` 工作流只要求最小 task 文档和声明测试;`full` 文档流程和过程采集按需开启。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
需要 Node.js 18 或更高版本。支持 Claude Code、Codex、Costrict 与 OpenCode;不需要 Python,不在项目中复制核心脚本。
|
|
6
6
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
npm:
|
|
7
|
+
## 安装与初始化
|
|
10
8
|
|
|
11
9
|
```bash
|
|
12
10
|
npm i -g @michaelxwb/code-flow
|
|
11
|
+
code-flow init --platform=codex
|
|
13
12
|
```
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pnpm add -g @michaelxwb/code-flow
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## 升级
|
|
22
|
-
|
|
23
|
-
先核对已安装版本与注册表版本:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
code-flow --version
|
|
27
|
-
npm view @michaelxwb/code-flow dist-tags --json
|
|
28
|
-
```
|
|
14
|
+
平台可选 claude、codex、costrict、opencode。Codex 按宿主要求审阅并信任新的 Hook。所有项目共享当前全局版本;更新 Node 或全局安装路径后,重新 init。
|
|
29
15
|
|
|
30
|
-
|
|
16
|
+
init 会安装 `.code-flow/templates/project-guidelines.md` 作为项目规范 starter;`cf-init` 会据此把项目特有规范写到 `CLAUDE.md`/`AGENTS.md` 的托管块之外,并把 `.code-flow/specs` 明确为规范来源。
|
|
31
17
|
|
|
32
|
-
|
|
33
|
-
npm i -g @michaelxwb/code-flow@latest
|
|
34
|
-
```
|
|
18
|
+
旧版本需要人工保存资料、清除旧平台入口后重新初始化;v1 不包含迁移、转换或自动删除逻辑。详见[使用说明](docs/USAGE.md)。
|
|
35
19
|
|
|
36
|
-
|
|
20
|
+
## 规范与任务
|
|
37
21
|
|
|
38
|
-
```
|
|
39
|
-
|
|
22
|
+
```text
|
|
23
|
+
.code-flow/
|
|
24
|
+
config.json
|
|
25
|
+
specs/shared/base.md
|
|
26
|
+
specs/cli/runtime.md
|
|
27
|
+
tasks/2026-11-10/example/example.md
|
|
28
|
+
process/ # capture 开启时的过程事件与采集包(gitignored)
|
|
40
29
|
```
|
|
41
30
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm pack --ignore-scripts
|
|
46
|
-
npm install --global ./michaelxwb-code-flow-0.8.1.tgz --ignore-scripts
|
|
47
|
-
code-flow --version
|
|
48
|
-
```
|
|
31
|
+
Spec 身份就是相对路径,例如 cli/runtime;JSON frontmatter 包含 description 与 next_rule。完整规则引用为 cli/runtime#RULE-001。
|
|
49
32
|
|
|
50
|
-
|
|
33
|
+
一个需求一份任务文档,内部包含多个 `## TASK-NNN` 段。默认 `workflow: hook` 只需要 `example.md`;`workflow: full` 额外生成 PRD/前后端 design/scenarios:
|
|
51
34
|
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
|
|
35
|
+
```text
|
|
36
|
+
tasks/2026-11-10/example/
|
|
37
|
+
example.md
|
|
38
|
+
# workflow=full:
|
|
39
|
+
# example.prd.md
|
|
40
|
+
# example.frontend.design.md
|
|
41
|
+
# example.backend.design.md
|
|
42
|
+
# example.scenarios.md
|
|
55
43
|
```
|
|
56
44
|
|
|
57
|
-
|
|
45
|
+
任务文档的 TASK 段声明 status、source、scenarios、spec_refs 和 tests(hook 下 source/scenarios 可留空):
|
|
58
46
|
|
|
59
|
-
|
|
47
|
+
````markdown
|
|
48
|
+
## TASK-001: Implement behavior
|
|
60
49
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
50
|
+
- **Status**: draft
|
|
51
|
+
- **Depends**:
|
|
52
|
+
- **Source**:
|
|
53
|
+
- **Scenarios**:
|
|
54
|
+
- **Spec-Refs**: cli/runtime
|
|
66
55
|
|
|
67
|
-
|
|
56
|
+
### Tests
|
|
68
57
|
|
|
69
|
-
```
|
|
70
|
-
|
|
58
|
+
```json
|
|
59
|
+
[
|
|
60
|
+
{ "id": "unit", "argv": ["node", "--test", "test/hook.test.js"] }
|
|
61
|
+
]
|
|
71
62
|
```
|
|
72
63
|
|
|
73
|
-
|
|
64
|
+
### Checklist
|
|
74
65
|
|
|
75
|
-
|
|
66
|
+
- [ ] 实现相关行为并验证回归。
|
|
67
|
+
````
|
|
76
68
|
|
|
77
|
-
|
|
78
|
-
code-flow init
|
|
79
|
-
code-flow init --platform=codex
|
|
80
|
-
code-flow init --platform=costrict
|
|
81
|
-
code-flow init --platform=opencode
|
|
82
|
-
code-flow init --force # 覆盖所有文件,包括用户已编辑内容
|
|
83
|
-
```
|
|
69
|
+
`Source`/`Scenarios` 在 hook 工作流可留空;full 工作流填 design/scenarios 引用。
|
|
84
70
|
|
|
85
|
-
|
|
71
|
+
完整示例见[使用说明](docs/USAGE.md)。
|
|
86
72
|
|
|
87
73
|
```bash
|
|
88
|
-
code-flow --
|
|
74
|
+
code-flow task start .code-flow/tasks/2026-11-10/example/example.md --task TASK-001
|
|
75
|
+
code-flow task finish .code-flow/tasks/2026-11-10/example/example.md --task TASK-001 --json
|
|
76
|
+
code-flow task archive .code-flow/tasks/2026-11-10/example --dry-run
|
|
77
|
+
code-flow task archive .code-flow/tasks/2026-11-10/example
|
|
89
78
|
```
|
|
90
79
|
|
|
91
|
-
|
|
80
|
+
cf-task skill 把 prompt Hook 给出的 session token 传给 start --session,之后按会话自动续选任务。用户也可用独立行 `task: <任务文档>#TASK-001` 选择本轮任务。绑定缺失时按明确文件路径映射或显示 catalog,不猜测唯一 in-progress。
|
|
92
81
|
|
|
93
|
-
|
|
82
|
+
Hook 只在用户提交 prompt 时读取并交付上下文。没有编辑/Stop 门禁;规范修改后下次适用注入读取最新内容。finish 实际执行本任务声明测试;archive 仅应用 Delta 并移动需求目录,CI 独立承担全量与 E2E。
|
|
94
83
|
|
|
95
|
-
|
|
96
|
-
|------|----------------|----------|
|
|
97
|
-
| 场景 | `code-flow scenarios parse --file "<需求>.scenarios.md" --quality --json` | 浏览器边界、具体预期与步骤/断言引用、延期责任 |
|
|
98
|
-
| 设计 | `code-flow design lint --file "<需求>.design.md" --scenarios-file "<需求>.scenarios.md" --json` | ID 闭环、功能场景覆盖与已声明模板章节 |
|
|
99
|
-
| 计划 | `code-flow acceptance manifest --task-dir "<需求目录>" --task-file "<任务文件>" --verify-plan --json` | manifest、场景、设计、测试登记/收集与 Spec Gate |
|
|
100
|
-
| 开发中 | `code-flow task verify --task-dir "<需求目录>" --checks --profile full --root "$PWD" --json` | 只运行 validators,不推进任务状态 |
|
|
101
|
-
| 需求终验 | `code-flow task verify --task-dir "<需求目录>" --layers validators,review,e2e --profile full --root "$PWD" --json` | 全层执行与当前输入证据 |
|
|
102
|
-
| 诊断 | `code-flow spec doctor --task-dir "<需求目录>" --root "$PWD" --json` | 安装/Context 健康、未解决 Rule 引用与阶段 readiness |
|
|
84
|
+
批次 worktree 从包含 specs/当前需求/config 的 baseline 创建;业务代码 dirty 时拒绝。worker 默认使用全局 CLI,prepare 不再自动 init;只有需要 worker 内宿主会话时才用 `--init`。随后校验 specs 快照并自动合并。
|
|
103
85
|
|
|
104
|
-
|
|
86
|
+
## 工作流与过程数据
|
|
105
87
|
|
|
106
|
-
|
|
88
|
+
`config.json` 的关键字段:
|
|
107
89
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
description: 改 Python 脚本时适用
|
|
115
|
-
checks:
|
|
116
|
-
- id: no-print-debug
|
|
117
|
-
type: regex
|
|
118
|
-
pattern: '^\s*print\('
|
|
119
|
-
files: "**/*.py"
|
|
120
|
-
message: 禁止 print() 调试,用日志到 stderr
|
|
121
|
-
---
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"version": 1,
|
|
93
|
+
"workflow": "hook",
|
|
94
|
+
"capture": { "enabled": false, "path": ".code-flow/process" }
|
|
95
|
+
}
|
|
122
96
|
```
|
|
123
97
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
**误报治理**:反馈出现误报时直接告诉 AI"这是误报"即可,同一规则误报 3 次或误报率超 10% 自动停用;`cf-stats` 可查违规榜/修正率/误报率,`cf-stats --audit` 输出僵尸规范复审清单。
|
|
127
|
-
|
|
128
|
-
**一键回退**:`config.yml` 中 `quality_loop.enabled: false` 完整回到 v0.5 行为。
|
|
129
|
-
|
|
130
|
-
> **数据声明**:质量闭环产生的所有数据(违规事件、纠正语句摘录、统计计数)仅存储在项目本地 `.code-flow/` 目录(`.session-log.jsonl` / `.check-state.json`,已加入 .gitignore),不上传、不外发、30 天滚动清理。纠正采集可经 `quality_loop.correction_capture: false` 单独关闭。
|
|
98
|
+
- `workflow`: `hook`(默认)要求 task 文档和声明测试;`full` 启用 PRD/design/scenarios。设计文档是项目资产,不作为 prompt 输入;只有 Spec 会注入。
|
|
99
|
+
- `capture`: 开启后 CLI/Hook 自动写入 `.code-flow/process/events.jsonl`。验证结束用跨平台命令采集:
|
|
131
100
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
| 工具 | `--platform` | 状态 |
|
|
135
|
-
|------|-------------|------|
|
|
136
|
-
| [Claude Code](https://claude.ai/code) | `claude` | ✅ 完整支持 |
|
|
137
|
-
| [Codex CLI](https://github.com/openai/codex) | `codex` | ✅ 完整支持 |
|
|
138
|
-
| [Costrict](https://costrict.com) | `costrict` | ✅ 完整支持 |
|
|
139
|
-
| [OpenCode](https://opencode.ai) | `opencode` | ✅ 完整支持 |
|
|
140
|
-
|
|
141
|
-
## 生成的目录与文件
|
|
142
|
-
|
|
143
|
-
运行 `code-flow init` 后,将在项目根目录生成(或更新)以下结构:
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
.code-flow/ # 规范核心(共用)
|
|
147
|
-
scripts/ # Python 运行时与 Hook(四平台共用)
|
|
148
|
-
runtime-commands.json # 正式运行时命令契约
|
|
149
|
-
tasks/<日期>/<需求>/ # PRD、design、scenarios、任务与验收 manifest
|
|
150
|
-
specs/<domain>/ # 领域 spec(_map.md + 约束规则)
|
|
151
|
-
|
|
152
|
-
# Claude Code (--platform=claude)
|
|
153
|
-
.claude/commands/ # 命令模板
|
|
154
|
-
.claude/settings.local.json # Hook 注册(PreToolUse + UserPromptSubmit)
|
|
155
|
-
CLAUDE.md # 全局指令
|
|
156
|
-
|
|
157
|
-
# Codex CLI (--platform=codex)
|
|
158
|
-
.codex/hooks.json # Hook 注册(SessionStart + UserPromptSubmit)
|
|
159
|
-
.codex/config.toml # Codex 配置
|
|
160
|
-
.agents/skills/<skill>/SKILL.md # 项目级 Skills
|
|
161
|
-
AGENTS.md # 全局指令
|
|
162
|
-
|
|
163
|
-
# Costrict (--platform=costrict)
|
|
164
|
-
.costrict/commands/ # 命令模板
|
|
165
|
-
.costrict/settings.local.json # Hook 注册
|
|
166
|
-
CLAUDE.md # 与 Claude 共用全局指令
|
|
167
|
-
|
|
168
|
-
# OpenCode (--platform=opencode)
|
|
169
|
-
.opencode/commands/ # 命令模板(含 cf-task/)
|
|
170
|
-
.opencode/plugins/code-flow/ # v2 插件:session.prompt 转发到 cf_user_prompt_hook.py
|
|
171
|
-
opencode.json # OpenCode 配置(`.opencode/plugins/` 自动发现,无需注册键)
|
|
172
|
-
AGENTS.md # 全局指令
|
|
101
|
+
```bash
|
|
102
|
+
code-flow process collect --out <dir> [--transcript <host-session.jsonl>]
|
|
173
103
|
```
|
|
174
104
|
|
|
175
|
-
|
|
105
|
+
输出目录包含事件、任务/规范快照、状态、git 信息和可选 transcript;手动压缩传递。
|
|
106
|
+
|
|
107
|
+
## 大测试集
|
|
176
108
|
|
|
177
|
-
|
|
178
|
-
- 需要 `python3` 版本 3.9 及以上
|
|
179
|
-
- 需要安装 `pyyaml`(`cf_init` 会尝试自动安装,失败会提示手动处理)
|
|
180
|
-
- 运行测试需要 `pytest`
|
|
109
|
+
把相关测试文件合成一次框架调用,使用框架自己的 workers。不同命令确认独立后设置 parallel:true;用 group 串行共享数据库、端口或 fixture,--jobs 限制 CLI 并发。相同调用内完全相同命令只执行一次,不跨次缓存结果。
|
|
181
110
|
|
|
182
|
-
|
|
111
|
+
## 开发
|
|
183
112
|
|
|
184
113
|
```bash
|
|
185
|
-
|
|
186
|
-
|
|
114
|
+
code-flow doctor --json
|
|
115
|
+
npm test
|
|
116
|
+
npm run test:performance
|
|
117
|
+
npm pack --ignore-scripts
|
|
187
118
|
```
|
|
188
119
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
- EOTP(`--otp`)
|
|
192
|
-
- 原因:启用了 npm/pnpm 的一次性密码或 2FA。
|
|
193
|
-
- 处理:按提示输入 OTP,或使用 `--otp` 重新执行安装命令。
|
|
194
|
-
|
|
195
|
-
- E402(`--access=public`)
|
|
196
|
-
- 原因:发布/安装时访问级别不匹配或权限不足。
|
|
197
|
-
- 处理:必要时使用 `--access=public` 重新发布或检查权限配置。
|
|
120
|
+
运行源码使用 node bin/code-flow.js。测试覆盖真实子进程、全局包安装、worktree、平台原生协议和多文件失败重试。
|
|
198
121
|
|
|
199
|
-
-
|
|
200
|
-
- 原因:本地或全局已有同名命令/包。
|
|
201
|
-
- 处理:先卸载冲突包或更换名称后再安装。
|
|
122
|
+
[文档索引](docs/README.md) · [设计](docs/v1-design.md) · [验收覆盖](docs/v1-implementation.md) · [使用说明](docs/USAGE.md)
|
package/bin/code-flow.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
process.stdout.on('error', error => {
|
|
4
|
+
if (error.code !== 'EPIPE') process.stderr.write('code-flow stdout: ' + error.message + '\n');
|
|
5
|
+
process.exitCode = process.argv[2] === 'hook' ? 0 : 1;
|
|
6
|
+
});
|
|
7
|
+
require('../lib/cli').main(process.argv.slice(2)).then(code => {
|
|
8
|
+
process.exitCode = code;
|
|
9
|
+
}).catch(error => {
|
|
10
|
+
process.stderr.write('code-flow: ' + error.message + '\n');
|
|
11
|
+
process.exitCode = process.argv[2] === 'hook' ? 0 : 1;
|
|
12
|
+
});
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 文档索引
|
|
2
|
+
|
|
3
|
+
当前只保留 v1 有效文档:
|
|
4
|
+
|
|
5
|
+
| 文档 | 用途 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| [USAGE.md](USAGE.md) | 安装、Spec、Task、测试、worktree、诊断和旧版切换 |
|
|
8
|
+
| [v1-design.md](v1-design.md) | v1 架构、数据格式、Hook、任务生命周期和验收契约 |
|
|
9
|
+
| [v1-implementation.md](v1-implementation.md) | 实现范围、测试矩阵、CI 和已知限制 |
|
|
10
|
+
|
|
11
|
+
以下历史资料不再维护,可从 Git 标签 `v0.8.1`(提交 `eb0e4c0`)查看:
|
|
12
|
+
|
|
13
|
+
- 旧 Python 运行时与 `src/` 设计;
|
|
14
|
+
- 旧 Spec Context、acceptance manifest、evidence、scenario/design gate 文档;
|
|
15
|
+
- 0.6–0.9 迁移说明、0.8 计划和发布说明;
|
|
16
|
+
- 旧 verification-efficiency 原始测量数据;
|
|
17
|
+
- 旧 worktree-parallel 设计。
|
|
18
|
+
|
|
19
|
+
当前工作树只使用 `.code-flow/config.json`、`.code-flow/specs/`、`.code-flow/tasks/` 和 `.code-flow/templates/`。v1 不读取、不转换、不自动清理旧文档。
|