@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
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cf-task-note
|
|
3
|
-
description: Discuss #NOTES annotations in task files or design briefs, propose solutions with context, resolve questions collaboratively, and merge conclusions back removing the #NOTES marker. Use when files have unresolved #NOTES markers.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **命令面状态(0.8)**:alias — 等价于 `cf-task-status --notes`;保留一个 minor,0.9.0 移除。
|
|
7
|
-
|
|
8
|
-
## 背景
|
|
9
|
-
|
|
10
|
-
用户在 review 文件时,直接在有问题的位置**就地标注** `#NOTES`,格式:
|
|
11
|
-
|
|
12
|
-
任务文件中:
|
|
13
|
-
```markdown
|
|
14
|
-
### Checklist
|
|
15
|
-
- [ ] 实现用户注册接口
|
|
16
|
-
- [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
17
|
-
- [ ] 编写单元测试
|
|
18
|
-
|
|
19
|
-
### Description
|
|
20
|
-
实现 JWT 认证 #NOTES token 过期时间设多少合适?
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
设计简报中:
|
|
24
|
-
```markdown
|
|
25
|
-
## Database Design
|
|
26
|
-
|
|
27
|
-
### users 表
|
|
28
|
-
| Column | Type | Constraints | Notes |
|
|
29
|
-
|--------|------|-------------|-------|
|
|
30
|
-
| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |
|
|
31
|
-
|
|
32
|
-
## API Design
|
|
33
|
-
|
|
34
|
-
### POST /auth/register
|
|
35
|
-
- Request: `{ email: string, password: string }` #NOTES 需要用户名字段吗?
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
`#NOTES` 是临时讨论标记,解决后必须消失,结论直接融入原文。
|
|
39
|
-
|
|
40
|
-
## 输入
|
|
41
|
-
|
|
42
|
-
- `cf-task-note <file>` — 讨论指定文件中所有 `#NOTES`
|
|
43
|
-
- `cf-task-note <file> TASK-001` — 只讨论指定子任务中的 `#NOTES`(仅限任务文件)
|
|
44
|
-
|
|
45
|
-
其中 `<file>` 可省略日期目录前缀和 `.md` 后缀。
|
|
46
|
-
|
|
47
|
-
查找逻辑:用 `rg --files` 或 `find` 搜索 `.code-flow/tasks/**/<file>.md` 和 `.code-flow/tasks/**/<file>*.design.md`(`*` 兼容旧 `<file>.design.md` 与域后缀 `<file>.frontend.design.md` / `<file>.backend.design.md`),从结果中排除包含 `archived/` 的路径。如果匹配到多个结果(如全栈需求的前后端 design),输出警告列出所有匹配项,让用户指定要讨论的具体文件;如果只有一个结果,直接使用。
|
|
48
|
-
|
|
49
|
-
## 执行步骤
|
|
50
|
-
|
|
51
|
-
### 0. 判断文件类型
|
|
52
|
-
|
|
53
|
-
读取匹配到的文件后,判断类型:
|
|
54
|
-
- 文件路径以 `.design.md` 结尾 → **设计简报模式**
|
|
55
|
-
- 其他 → **任务文件模式**
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 任务文件模式
|
|
60
|
-
|
|
61
|
-
### 1. 扫描 #NOTES 标记
|
|
62
|
-
|
|
63
|
-
1. 用 `rg --files` 或 `find` 定位任务文件,读取全文
|
|
64
|
-
2. 用正则扫描所有包含 `#NOTES` 的行,记录:
|
|
65
|
-
- 所在的子任务(`## TASK-xxx`)
|
|
66
|
-
- 所在的段落(Description / Checklist / 其他)
|
|
67
|
-
- 原始行内容
|
|
68
|
-
- `#NOTES` 后的问题描述
|
|
69
|
-
3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
|
|
70
|
-
|
|
71
|
-
输出扫描结果:
|
|
72
|
-
```
|
|
73
|
-
找到 3 个 #NOTES 标记:
|
|
74
|
-
|
|
75
|
-
TASK-001:
|
|
76
|
-
1. [Checklist] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
77
|
-
2. [Description] 实现 JWT 认证 #NOTES token 过期时间设多少合适?
|
|
78
|
-
|
|
79
|
-
TASK-002:
|
|
80
|
-
3. [Checklist] 调用支付 SDK #NOTES 用哪个版本的 SDK?
|
|
81
|
-
|
|
82
|
-
开始逐条讨论...
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 2. 加载上下文
|
|
86
|
-
|
|
87
|
-
1. 读取当前子任务的 `Source` 字段,解析章节引用
|
|
88
|
-
2. 按行号范围读取详设文档的对应章节
|
|
89
|
-
3. 将详设上下文作为讨论背景
|
|
90
|
-
|
|
91
|
-
### 3. 逐条讨论
|
|
92
|
-
|
|
93
|
-
对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
--- #NOTES 1/3 ---
|
|
97
|
-
位置: TASK-001 / Checklist
|
|
98
|
-
原文: 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
99
|
-
|
|
100
|
-
详设参考 (§3.1 L95-L98):
|
|
101
|
-
"用户密码必须加密存储,推荐使用行业标准算法"
|
|
102
|
-
|
|
103
|
-
分析:
|
|
104
|
-
- bcrypt: 成熟稳定,生态支持好,Node.js 原生支持
|
|
105
|
-
- argon2: 更现代,抗 GPU 攻击更强,但依赖 C 编译
|
|
106
|
-
|
|
107
|
-
建议: bcrypt(项目技术栈为 Node.js,无需额外编译依赖)
|
|
108
|
-
|
|
109
|
-
是否采纳?或提出你的方案:
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
等待用户回应。
|
|
113
|
-
|
|
114
|
-
### 4. 沉淀结论并清除标记
|
|
115
|
-
|
|
116
|
-
用户确认方案后:
|
|
117
|
-
|
|
118
|
-
1. 用 apply_patch 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
|
|
119
|
-
- 修改前:`- [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?`
|
|
120
|
-
- 修改后:`- [ ] 密码使用 bcrypt 加密存储`
|
|
121
|
-
2. 如果结论需要新增步骤 → 用 apply_patch 追加 Checklist 条目或补充 Description
|
|
122
|
-
3. 在 `### Log` 追加:`- [<当前日期>] resolved #NOTES: <结论摘要>`
|
|
123
|
-
|
|
124
|
-
**apply_patch 边界约束(必须遵守)**:
|
|
125
|
-
- `old_string` 必须严格限定在当前 TASK 段落内,**绝对禁止**匹配到 `---` 分隔线或下一个 `## TASK-xxx` 标题
|
|
126
|
-
- Log 追加时,`old_string` 只匹配 Log 段落的最后一行内容,不要向下延伸到段落外
|
|
127
|
-
- 如果 Log 是当前 TASK 的最后一个段落,其内容到 `---` 分隔线之前结束;`old_string` 不得包含 `---` 及其后的任何内容
|
|
128
|
-
- 示例(正确):`old_string = "- [2026-03-23] created (draft)"` → 只匹配 Log 末行
|
|
129
|
-
- 示例(错误):`old_string = "- [2026-03-23] created (draft)\n\n---\n\n## TASK-003"` → 越界,会删除下一个 TASK 标题
|
|
130
|
-
|
|
131
|
-
### 5. 完成检查
|
|
132
|
-
|
|
133
|
-
所有 `#NOTES` 讨论完毕后:
|
|
134
|
-
|
|
135
|
-
1. 再次扫描文件,确认无残留 `#NOTES` 标记
|
|
136
|
-
2. 如果子任务之前因 `#NOTES` 被标记为 `blocked`,清除当前阻塞条目后调用 `code-flow task resume --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json`。命令检查依赖和残留 Notes,同步 marker 与任务状态;不得从历史 Log 猜测状态后只改 Markdown。失败保留 blocked 并报告原因。
|
|
137
|
-
3. 更新文件头 `Updated` 日期
|
|
138
|
-
|
|
139
|
-
### 6. 输出摘要
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
#NOTES 讨论完成: auth-module
|
|
143
|
-
|
|
144
|
-
已解决:
|
|
145
|
-
1. TASK-001 密码加密 → 使用 bcrypt
|
|
146
|
-
2. TASK-001 token 过期 → 设为 7 天,支持 refresh
|
|
147
|
-
3. TASK-002 SDK 版本 → 使用 v3.2.1
|
|
148
|
-
|
|
149
|
-
文件已更新,所有 #NOTES 标记已清除。
|
|
150
|
-
可执行 cf-task-start auth-module 开始编码。
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 设计简报模式
|
|
156
|
-
|
|
157
|
-
### 1. 扫描 #NOTES 标记
|
|
158
|
-
|
|
159
|
-
1. 读取 `.design.md` 全文
|
|
160
|
-
2. 用正则扫描所有包含 `#NOTES` 的行,记录:
|
|
161
|
-
- 所在的章节(`## Goal` / `## Database Design` / `## API Design` 等)
|
|
162
|
-
- 原始行内容
|
|
163
|
-
- `#NOTES` 后的问题描述
|
|
164
|
-
3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
|
|
165
|
-
|
|
166
|
-
输出扫描结果:
|
|
167
|
-
```
|
|
168
|
-
找到 2 个 #NOTES 标记 (设计简报):
|
|
169
|
-
|
|
170
|
-
[Database Design]:
|
|
171
|
-
1. email 字段 #NOTES 需要支持手机号登录吗?
|
|
172
|
-
|
|
173
|
-
[API Design / POST /auth/register]:
|
|
174
|
-
2. Request schema #NOTES 需要用户名字段吗?
|
|
175
|
-
|
|
176
|
-
开始逐条讨论...
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### 2. 加载上下文
|
|
180
|
-
|
|
181
|
-
设计简报本身就是设计文档,无需加载外部 Source。上下文来自:
|
|
182
|
-
|
|
183
|
-
1. 读取 `.design.md` 中该 `#NOTES` 所在章节的完整内容
|
|
184
|
-
2. 扫描代码库中与该问题相关的现有实现(如用 `rg` 搜索现有 model/route/middleware)
|
|
185
|
-
3. 将代码库上下文 + 设计文档上下文作为讨论背景
|
|
186
|
-
|
|
187
|
-
### 3. 逐条讨论
|
|
188
|
-
|
|
189
|
-
对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
|
|
190
|
-
|
|
191
|
-
```
|
|
192
|
-
--- #NOTES 1/2 ---
|
|
193
|
-
位置: Database Design / users 表
|
|
194
|
-
原文: email 字段 #NOTES 需要支持手机号登录吗?
|
|
195
|
-
|
|
196
|
-
当前设计: users 表仅有 email 字段作为登录凭证
|
|
197
|
-
代码库参考: 现有 User model 无手机号字段,mailer 模块仅支持邮件
|
|
198
|
-
|
|
199
|
-
分析:
|
|
200
|
-
- 仅邮箱: 与现有 mailer 模块一致,MVP 足够
|
|
201
|
-
- 支持手机号: 需新增 phone 字段、SMS 服务依赖、双凭证登录逻辑
|
|
202
|
-
|
|
203
|
-
建议: 仅邮箱(与 Non-goals 中"保持 MVP 精简"一致,手机号可后续迭代)
|
|
204
|
-
|
|
205
|
-
是否采纳?或提出你的方案:
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### 4. 沉淀结论并清除标记
|
|
209
|
-
|
|
210
|
-
用户确认方案后:
|
|
211
|
-
|
|
212
|
-
1. 用 apply_patch 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
|
|
213
|
-
- 修改前:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |`
|
|
214
|
-
- 修改后:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证(仅邮箱,手机号后续迭代) |`
|
|
215
|
-
2. 如果结论影响其他章节(如 Database Design 的结论影响 API Design),同步更新相关章节
|
|
216
|
-
|
|
217
|
-
### 5. 完成检查
|
|
218
|
-
|
|
219
|
-
所有 `#NOTES` 讨论完毕后:
|
|
220
|
-
|
|
221
|
-
1. 再次扫描文件,确认无残留 `#NOTES` 标记
|
|
222
|
-
2. 无 Log 段落需更新(设计简报没有 Log)
|
|
223
|
-
|
|
224
|
-
### 6. 输出摘要
|
|
225
|
-
|
|
226
|
-
```
|
|
227
|
-
#NOTES 讨论完成: user-auth.design.md
|
|
228
|
-
|
|
229
|
-
已解决:
|
|
230
|
-
1. [Database Design] 登录凭证 → 仅邮箱,手机号后续迭代
|
|
231
|
-
2. [API Design] 注册接口 → 不加 username 字段,保持 email + password
|
|
232
|
-
|
|
233
|
-
文件已更新,所有 #NOTES 标记已清除。
|
|
234
|
-
可执行 cf-task-plan .code-flow/tasks/2026-04-06/user-auth.design.md 拆解任务。
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
<!-- code-flow:runtime-commands start -->
|
|
238
|
-
|
|
239
|
-
运行时命令示例(由命令契约生成;实际参数见各命令 --help):
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
code-flow task resume --help
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
<!-- code-flow:runtime-commands end -->
|