@namewta/speculo 0.1.20 → 0.2.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 +68 -78
- package/dist/src/cli.js +57 -34
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +1 -3
- package/dist/src/index.js +128 -168
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrate.d.ts +38 -0
- package/dist/src/migrate.js +646 -0
- package/dist/src/migrate.js.map +1 -0
- package/dist/src/workflows.d.ts +7 -37
- package/dist/src/workflows.js +49 -123
- package/dist/src/workflows.js.map +1 -1
- package/package.json +6 -4
- package/template/.speculo/README.md +20 -0
- package/template/.speculo/workspace.json +12 -0
- package/template/commands/docs-sync.md +28 -0
- package/template/commands/finalize.md +37 -0
- package/template/commands/knowledge-prune.md +20 -0
- package/template/commands/retro.md +15 -8
- package/template/commands/status.md +8 -51
- package/template/skills/agents-md-builder/SKILL.md +14 -101
- package/template/skills/change-lifecycle/SKILL.md +25 -0
- package/template/{workflows/dev/_templates → skills/change-lifecycle/assets}/completion-summary-template.md +2 -2
- package/template/{workflows/dev/_templates → skills/change-lifecycle/assets}/completion-verification-template.md +1 -1
- package/template/skills/change-lifecycle/references/completion-gate.md +19 -0
- package/template/skills/change-lifecycle/references/finalize-archive.md +32 -0
- package/template/skills/docs-sync/SKILL.md +22 -0
- package/template/skills/docs-sync/assets/report-template.md +45 -0
- package/template/skills/docs-sync/assets/state-template.json +20 -0
- package/template/skills/docs-sync/assets/workflow-scope-template.json +9 -0
- package/template/skills/docs-sync/references/agents-contract.md +43 -0
- package/template/skills/docs-sync/references/changelog-contract.md +39 -0
- package/template/skills/docs-sync/references/document-lifecycle-contract.md +38 -0
- package/template/skills/docs-sync/references/git-state-contract.md +67 -0
- package/template/skills/docs-sync/references/readme-contract.md +44 -0
- package/template/skills/docs-sync/references/workflow-scope-contract.md +50 -0
- package/template/skills/github-npm-ops/SKILL.md +14 -39
- package/template/skills/github-npm-ops/references/failure-recovery.md +3 -3
- package/template/skills/github-npm-ops/references/issue-pr-triage.md +1 -1
- package/template/skills/github-npm-ops/references/preflight-checklist.md +4 -4
- package/template/skills/github-npm-ops/references/release-notes-injection.md +1 -1
- package/template/skills/github-npm-ops/references/release-pipeline.md +13 -13
- package/template/skills/github-npm-ops/references/version-bump-flow.md +3 -3
- package/template/skills/knowledge-prune/SKILL.md +29 -0
- package/template/skills/knowledge-prune/references/audit-rules.md +24 -0
- package/template/skills/runtime-context/SKILL.md +43 -0
- package/template/skills/runtime-context/references/path-resolution.md +32 -0
- package/template/skills/speculo-retro/SKILL.md +13 -37
- package/template/skills/speculo-retro/references/friction-taxonomy.md +3 -3
- package/template/skills/speculo-retro/references/issue-drafting-sop.md +3 -3
- package/template/skills/worktree-isolation/SKILL.md +10 -46
- package/template/skills/worktree-isolation/references/audit-branch-tree.md +2 -2
- package/template/skills/worktree-isolation/references/create-worktree.md +6 -6
- package/template/skills/worktree-isolation/references/merge-and-cleanup.md +5 -5
- package/template/vendor/README.md +11 -10
- package/template/vendor/matt-pocock/README.md +41 -0
- package/template/vendor/matt-pocock/engineering/README.md +28 -0
- package/template/vendor/matt-pocock/engineering/ask-matt/SKILL.md +76 -0
- package/template/vendor/matt-pocock/engineering/code-review/SKILL.md +89 -0
- package/template/vendor/matt-pocock/engineering/codebase-design/DEEPENING.md +37 -0
- package/template/vendor/matt-pocock/engineering/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/template/vendor/matt-pocock/engineering/codebase-design/SKILL.md +114 -0
- package/template/vendor/matt-pocock/engineering/diagnosing-bugs/SKILL.md +134 -0
- package/template/vendor/matt-pocock/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/template/vendor/matt-pocock/engineering/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/vendor/matt-pocock/engineering/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/vendor/matt-pocock/engineering/domain-modeling/SKILL.md +74 -0
- package/template/vendor/matt-pocock/engineering/grill-with-docs/SKILL.md +7 -0
- package/template/vendor/matt-pocock/engineering/implement/SKILL.md +15 -0
- package/template/vendor/matt-pocock/engineering/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/template/vendor/matt-pocock/engineering/improve-codebase-architecture/SKILL.md +66 -0
- package/template/vendor/matt-pocock/engineering/prototype/LOGIC.md +79 -0
- package/template/vendor/matt-pocock/engineering/prototype/SKILL.md +30 -0
- package/template/vendor/matt-pocock/engineering/prototype/UI.md +112 -0
- package/template/vendor/matt-pocock/engineering/research/SKILL.md +12 -0
- package/template/vendor/matt-pocock/engineering/resolving-merge-conflicts/SKILL.md +14 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/SKILL.md +127 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/domain.md +51 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-github.md +45 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
- package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/template/vendor/matt-pocock/engineering/tdd/SKILL.md +36 -0
- package/template/vendor/matt-pocock/engineering/tdd/mocking.md +59 -0
- package/template/vendor/matt-pocock/engineering/tdd/tests.md +77 -0
- package/template/vendor/matt-pocock/engineering/to-spec/SKILL.md +75 -0
- package/template/vendor/matt-pocock/engineering/to-tickets/SKILL.md +113 -0
- package/template/vendor/matt-pocock/engineering/triage/AGENT-BRIEF.md +204 -0
- package/template/vendor/matt-pocock/engineering/triage/OUT-OF-SCOPE.md +104 -0
- package/template/vendor/matt-pocock/engineering/triage/SKILL.md +112 -0
- package/template/vendor/matt-pocock/engineering/wayfinder/SKILL.md +127 -0
- package/template/vendor/matt-pocock/in-progress/README.md +10 -0
- package/template/vendor/matt-pocock/in-progress/claude-handoff/SKILL.md +18 -0
- package/template/vendor/matt-pocock/in-progress/loop-me/SKILL.md +32 -0
- package/template/vendor/matt-pocock/in-progress/wizard/SKILL.md +45 -0
- package/template/vendor/matt-pocock/in-progress/wizard/template.sh +211 -0
- package/template/vendor/matt-pocock/in-progress/writing-beats/SKILL.md +67 -0
- package/template/vendor/matt-pocock/in-progress/writing-fragments/SKILL.md +78 -0
- package/template/vendor/matt-pocock/in-progress/writing-shape/SKILL.md +79 -0
- package/template/vendor/matt-pocock/productivity/README.md +18 -0
- package/template/vendor/matt-pocock/productivity/grill-me/SKILL.md +7 -0
- package/template/vendor/matt-pocock/productivity/grilling/SKILL.md +12 -0
- package/template/vendor/matt-pocock/productivity/handoff/SKILL.md +16 -0
- package/template/vendor/matt-pocock/productivity/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/vendor/matt-pocock/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/vendor/matt-pocock/productivity/teach/MISSION-FORMAT.md +31 -0
- package/template/vendor/matt-pocock/productivity/teach/RESOURCES-FORMAT.md +32 -0
- package/template/vendor/matt-pocock/productivity/teach/SKILL.md +140 -0
- package/template/vendor/matt-pocock/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/template/vendor/matt-pocock/productivity/writing-great-skills/SKILL.md +83 -0
- package/template/workflows/matt-pocock/WORKFLOW.md +145 -0
- package/template/workflows/matt-pocock/_state/status.json +5 -0
- package/template/workflows/matt-pocock/routes/architecture.md +24 -0
- package/template/workflows/matt-pocock/routes/diagnose.md +22 -0
- package/template/workflows/matt-pocock/routes/experimental.md +18 -0
- package/template/workflows/matt-pocock/routes/idea-to-delivery.md +63 -0
- package/template/workflows/matt-pocock/routes/merge-conflicts.md +19 -0
- package/template/workflows/matt-pocock/routes/productivity.md +25 -0
- package/template/workflows/matt-pocock/routes/research-prototype.md +20 -0
- package/template/workflows/matt-pocock/routes/review.md +19 -0
- package/template/workflows/matt-pocock/routes/setup.md +42 -0
- package/template/workflows/matt-pocock/routes/triage.md +25 -0
- package/template/workflows/matt-pocock/routes/wayfinder.md +27 -0
- package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +74 -185
- package/template/workflows/person/M-mao-zedong-cognitive-os/activate.md +3 -2
- package/template/workflows/person/M-mao-zedong-cognitive-os/books/README.md +12 -238
- package/template/workflows/person/M-mao-zedong-cognitive-os/deliver.md +6 -5
- package/template/workflows/person/M-mao-zedong-cognitive-os/diagnose.md +5 -63
- package/template/workflows/person/M-mao-zedong-cognitive-os/mobilize.md +7 -54
- package/template/workflows/person/M-mao-zedong-cognitive-os/references/research/15-quote-bank.md +10 -10
- package/template/workflows/person/M-mao-zedong-cognitive-os/strategize.md +6 -72
- package/template/workflows/person/WORKFLOW.md +68 -0
- package/template/workflows/person/_state/.config/LESSONS.md +3 -0
- package/template/workflows/person/_state/.config/RULES.md +3 -0
- package/template/workflows/person/_state/changes/.gitkeep +1 -0
- package/template/workflows/person/_state/status.json +5 -0
- package/template/.speculo/.config/LESSONS.md +0 -9
- package/template/.speculo/.config/RULES.md +0 -11
- package/template/.speculo/AGENTS.md +0 -30
- package/template/.speculo/archive/AGENTS.md +0 -28
- package/template/.speculo/archive/dev/.gitkeep +0 -0
- package/template/.speculo/archive/person/.gitkeep +0 -0
- package/template/.speculo/dev/.gitkeep +0 -0
- package/template/.speculo/dev/docs-sync-state.json +0 -14
- package/template/.speculo/dev-status.json +0 -3
- package/template/.speculo/doc-status.json +0 -3
- package/template/.speculo/person/.gitkeep +0 -0
- package/template/.speculo/person-status.json +0 -1
- package/template/commands/archive.md +0 -68
- package/template/commands/caveman.md +0 -50
- package/template/commands/config-prune.md +0 -59
- package/template/commands/grill-me.md +0 -48
- package/template/commands/handoff.md +0 -59
- package/template/commands/scaffold-exercises.md +0 -56
- package/template/commands/write-a-skill.md +0 -52
- package/template/skills/caveman/SKILL.md +0 -38
- package/template/skills/caveman/references/compression-rules.md +0 -102
- package/template/skills/config-prune/SKILL.md +0 -66
- package/template/skills/grill-me/SKILL.md +0 -40
- package/template/skills/handoff/SKILL.md +0 -50
- package/template/skills/scaffold-exercises/SKILL.md +0 -41
- package/template/skills/scaffold-exercises/references/exercise-structure.md +0 -85
- package/template/skills/scaffold-exercises/references/lint-and-git.md +0 -54
- package/template/skills/speculo-write/SKILL.md +0 -56
- package/template/skills/speculo-write/references/asset-selection-sop.md +0 -67
- package/template/skills/speculo-write/references/authoring-quality-levers.md +0 -61
- package/template/skills/speculo-write/references/command-authoring-sop.md +0 -98
- package/template/skills/speculo-write/references/migration-sop.md +0 -101
- package/template/skills/speculo-write/references/persistence-contract-sop.md +0 -192
- package/template/skills/speculo-write/references/skill-authoring-sop.md +0 -212
- package/template/skills/speculo-write/references/validation-checklist.md +0 -85
- package/template/skills/speculo-write/references/workflow-authoring-sop.md +0 -132
- package/template/vendor/codebase-design/DEEPENING.md +0 -37
- package/template/vendor/codebase-design/DESIGN-IT-TWICE.md +0 -44
- package/template/vendor/codebase-design/SKILL.md +0 -114
- package/template/vendor/officecli/SKILL.md +0 -415
- package/template/vendor/resolving-merge-conflicts/SKILL.md +0 -14
- package/template/workflows/dev/01-grill-with-docs/01-grill-with-docs.md +0 -107
- package/template/workflows/dev/01-grill-with-docs/grill-context-scan.md +0 -30
- package/template/workflows/dev/01-grill-with-docs/grill-decision.md +0 -38
- package/template/workflows/dev/02-prd/02-prd.md +0 -70
- package/template/workflows/dev/02-prd/prd-synthesis.md +0 -30
- package/template/workflows/dev/02-prd/prd-zoom-out.md +0 -29
- package/template/workflows/dev/03-tdd/03-tdd.md +0 -158
- package/template/workflows/dev/03-tdd/mocking.md +0 -43
- package/template/workflows/dev/03-tdd/refactoring.md +0 -10
- package/template/workflows/dev/03-tdd/tdd-finish.md +0 -34
- package/template/workflows/dev/03-tdd/tdd-loop.md +0 -36
- package/template/workflows/dev/03-tdd/tdd-plan.md +0 -37
- package/template/workflows/dev/03-tdd/tests.md +0 -61
- package/template/workflows/dev/04-finalize/04-finalize.md +0 -137
- package/template/workflows/dev/04-finalize/completion-gate.md +0 -41
- package/template/workflows/dev/04-finalize/finalize-archive.md +0 -55
- package/template/workflows/dev/A-improve-architecture/A-improve-architecture.md +0 -143
- package/template/workflows/dev/A-improve-architecture/HTML-REPORT.md +0 -123
- package/template/workflows/dev/AGENTS.md +0 -87
- package/template/workflows/dev/D-docs-sync/D-docs-sync.md +0 -127
- package/template/workflows/dev/D-docs-sync/agents-contract.md +0 -95
- package/template/workflows/dev/D-docs-sync/changelog-contract.md +0 -155
- package/template/workflows/dev/D-docs-sync/config-contract.md +0 -75
- package/template/workflows/dev/D-docs-sync/docs-sync-diff.md +0 -86
- package/template/workflows/dev/D-docs-sync/docs-sync-finish.md +0 -37
- package/template/workflows/dev/D-docs-sync/docs-sync-state.md +0 -47
- package/template/workflows/dev/D-docs-sync/docs-sync-update.md +0 -44
- package/template/workflows/dev/D-docs-sync/knowledge-extract.md +0 -66
- package/template/workflows/dev/D-docs-sync/readme-contract.md +0 -124
- package/template/workflows/dev/D-docs-sync/state-json-schema.md +0 -172
- package/template/workflows/dev/H-diagnose/H-diagnose.md +0 -119
- package/template/workflows/dev/H-diagnose/diagnose-fix.md +0 -34
- package/template/workflows/dev/H-diagnose/diagnose-guide.md +0 -144
- package/template/workflows/dev/H-diagnose/diagnose-loop.md +0 -41
- package/template/workflows/dev/H-diagnose/scripts/hitl-loop.template.sh +0 -41
- package/template/workflows/dev/I-to-issues/I-to-issues.md +0 -140
- package/template/workflows/dev/I-to-issues/issues-slices.md +0 -211
- package/template/workflows/dev/M-domain-modeling/ADR-FORMAT.md +0 -74
- package/template/workflows/dev/M-domain-modeling/CONTEXT-FORMAT.md +0 -67
- package/template/workflows/dev/M-domain-modeling/M-domain-modeling.md +0 -118
- package/template/workflows/dev/R-review/R-review.md +0 -163
- package/template/workflows/dev/R-review/code-quality-checklist.md +0 -118
- package/template/workflows/dev/R-review/removal-checklist.md +0 -53
- package/template/workflows/dev/R-review/review-axes.md +0 -61
- package/template/workflows/dev/R-review/review-setup.md +0 -73
- package/template/workflows/dev/R-review/review-verdict.md +0 -43
- package/template/workflows/dev/R-review/security-checklist.md +0 -126
- package/template/workflows/dev/R-review/solid-checklist.md +0 -73
- package/template/workflows/dev/_templates/diagnosis-template.md +0 -20
- package/template/workflows/dev/_templates/docs-sync-report-template.md +0 -45
- package/template/workflows/dev/_templates/docs-sync-state-template.json +0 -14
- package/template/workflows/dev/_templates/domain-model-log-template.md +0 -20
- package/template/workflows/dev/_templates/grill-context-map-template.md +0 -20
- package/template/workflows/dev/_templates/grill-decision-log-template.md +0 -20
- package/template/workflows/dev/_templates/issues-slices-template.md +0 -106
- package/template/workflows/dev/_templates/prd-overview-template.md +0 -20
- package/template/workflows/dev/_templates/prd-template.md +0 -26
- package/template/workflows/dev/_templates/regression-template.md +0 -20
- package/template/workflows/dev/_templates/review-report-template.md +0 -30
- package/template/workflows/dev/_templates/review-sources-template.md +0 -33
- package/template/workflows/dev/_templates/review-verdict-template.md +0 -33
- package/template/workflows/dev/_templates/tdd-log-template.md +0 -23
- package/template/workflows/dev/_templates/tdd-plan-template.md +0 -35
- package/template/workflows/dev/_templates/tdd-verification-template.md +0 -26
- package/template/workflows/doc/AGENTS.md +0 -72
- package/template/workflows/doc/B-writing-beats/B-writing-beats.md +0 -79
- package/template/workflows/doc/B-writing-beats/writing-beats-append.md +0 -31
- package/template/workflows/doc/B-writing-beats/writing-beats-options.md +0 -29
- package/template/workflows/doc/E-edit-article/E-edit-article.md +0 -79
- package/template/workflows/doc/E-edit-article/edit-article-plan.md +0 -30
- package/template/workflows/doc/E-edit-article/edit-article-rewrite.md +0 -31
- package/template/workflows/doc/F-writing-fragments/F-writing-fragments.md +0 -80
- package/template/workflows/doc/F-writing-fragments/writing-fragments-interview.md +0 -32
- package/template/workflows/doc/F-writing-fragments/writing-fragments-log.md +0 -29
- package/template/workflows/doc/S-writing-shape/S-writing-shape.md +0 -81
- package/template/workflows/doc/S-writing-shape/writing-shape-block.md +0 -32
- package/template/workflows/doc/S-writing-shape/writing-shape-opening.md +0 -27
- package/template/workflows/doc/T-teach/T-teach.md +0 -147
- package/template/workflows/doc/T-teach/teach-lesson-wrap.md +0 -63
- package/template/workflows/doc/T-teach/teach-lesson.md +0 -53
- package/template/workflows/doc/T-teach/teach-mission.md +0 -33
- package/template/workflows/doc/T-teach/teach-resources.md +0 -36
- package/template/workflows/doc/_templates/edit-article-plan-template.md +0 -25
- package/template/workflows/doc/_templates/edit-article-template.md +0 -7
- package/template/workflows/doc/_templates/teach-glossary-template.md +0 -26
- package/template/workflows/doc/_templates/teach-learning-record-template.md +0 -38
- package/template/workflows/doc/_templates/teach-mission-template.md +0 -19
- package/template/workflows/doc/_templates/teach-resources-template.md +0 -18
- package/template/workflows/doc/_templates/writing-article-template.md +0 -7
- package/template/workflows/doc/_templates/writing-beat-options-template.md +0 -21
- package/template/workflows/doc/_templates/writing-fragments-template.md +0 -7
- package/template/workflows/doc/_templates/writing-interview-log-template.md +0 -21
- package/template/workflows/doc/_templates/writing-shape-log-template.md +0 -25
- package/template/workflows/person/AGENTS.md +0 -60
- /package/template/{.speculo/.config/adr → workflows/matt-pocock/_state/archive}/.gitkeep +0 -0
- /package/template/{.speculo/.config/context → workflows/matt-pocock/_state/changes}/.gitkeep +0 -0
- /package/template/{.speculo/archive/doc → workflows/person/_state/.config/context}/.gitkeep +0 -0
- /package/template/{.speculo/doc → workflows/person/_state/archive}/.gitkeep +0 -0
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# CONTEXT.md 格式
|
|
2
|
-
|
|
3
|
-
本文是项目术语表(通用语言)写法的**单一事实源**,由 `dev/M-domain-modeling` 拥有,`dev/01`、`dev/02`、`dev/04`、`dev/D`、`dev/A` 等工作流按需引用。
|
|
4
|
-
|
|
5
|
-
只有用户明确确认时,才按本格式创建或更新 `speculo/.speculo/.config/context/CONTEXT.md` / `speculo/.speculo/.config/context/CONTEXT-MAP.md`;未确认的术语只记录到调用方工作流的会话产物(如 `decision-log.md`、`domain-model-log.md`)。
|
|
6
|
-
|
|
7
|
-
## 结构
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
# {上下文名称}
|
|
11
|
-
|
|
12
|
-
{一到两句话描述这个上下文是什么、为什么存在。}
|
|
13
|
-
|
|
14
|
-
## 术语
|
|
15
|
-
|
|
16
|
-
**订单(Order)**:
|
|
17
|
-
{一到两句话描述该术语}
|
|
18
|
-
_避免使用_:Purchase、transaction
|
|
19
|
-
|
|
20
|
-
**发票(Invoice)**:
|
|
21
|
-
交付后向客户发送的付款请求。
|
|
22
|
-
_避免使用_:Bill、payment request
|
|
23
|
-
|
|
24
|
-
**客户(Customer)**:
|
|
25
|
-
下单的个人或组织。
|
|
26
|
-
_避免使用_:Client、buyer、account
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 规则
|
|
30
|
-
|
|
31
|
-
- **要有主见。** 当同一个概念有多个词汇时,选择最好的一个,将其他词列为「避免使用」的别名。
|
|
32
|
-
- **显式标记冲突。** 如果某个术语被合混地使用,在「已标记的合混」中明确指出并给出解决方案。
|
|
33
|
-
- **保持定义简洁。** 最多一到两句话。定义它「是什么」,而不是「做什么」。
|
|
34
|
-
- **展示关系。** 使用粗体术语名称,在明显的地方表达基数关系。
|
|
35
|
-
- **只包含本项目的上下文特有的术语。** 通用编程概念(超时、错误类型、工具模式)即使项目大量使用也不应该包含。添加术语前问自己:这是本项目上下文特有的概念,还是通用编程概念?只有前者才应该包含。
|
|
36
|
-
- **当自然分组出现时,用子标题分组术语。** 如果所有术语属于一个紧密相关的领域,平铺列表即可。
|
|
37
|
-
- **写一段示例对话。** 一段开发者与领域专家之间的对话,展示术语如何自然交互,并澄清相关概念之间的边界。
|
|
38
|
-
|
|
39
|
-
## 单上下文与多上下文仓库
|
|
40
|
-
|
|
41
|
-
**单上下文(大多数仓库):** `speculo/.speculo/.config/context/CONTEXT.md` 记录项目级术语表。
|
|
42
|
-
|
|
43
|
-
**多上下文:** `speculo/.speculo/.config/context/CONTEXT-MAP.md` 列出所有上下文、它们的位置以及它们之间的关系:
|
|
44
|
-
|
|
45
|
-
```md
|
|
46
|
-
# 上下文映射
|
|
47
|
-
|
|
48
|
-
## 上下文
|
|
49
|
-
|
|
50
|
-
- [Ordering](./ordering.md) —— 接收并跟踪客户订单
|
|
51
|
-
- [Billing](./billing.md) —— 生成发票并处理付款
|
|
52
|
-
- [Fulfillment](./fulfillment.md) —— 管理仓库拣货和发货
|
|
53
|
-
|
|
54
|
-
## 关系
|
|
55
|
-
|
|
56
|
-
- **Ordering → Fulfillment**:Ordering 发出 `OrderPlaced` 事件;Fulfillment 消费这些事件开始拣货
|
|
57
|
-
- **Fulfillment → Billing**:Fulfillment 发出 `ShipmentDispatched` 事件;Billing 消费这些事件生成发票
|
|
58
|
-
- **Ordering ↔ Billing**:共享 `CustomerId` 和 `Money` 类型
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
本工作流自动推断适用哪种结构:
|
|
62
|
-
|
|
63
|
-
- 如果 `speculo/.speculo/.config/context/CONTEXT-MAP.md` 存在,读取它以查找上下文
|
|
64
|
-
- 如果只有 `speculo/.speculo/.config/context/CONTEXT.md`,则为单上下文
|
|
65
|
-
- 如果都不存在,在第一个术语确定时按需创建 `speculo/.speculo/.config/context/CONTEXT.md`
|
|
66
|
-
|
|
67
|
-
当存在多个上下文时,推断当前主题与哪个上下文相关。如果不确定,就问。
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: dev/M-domain-modeling
|
|
3
|
-
category: dev
|
|
4
|
-
name: Domain Modeling
|
|
5
|
-
description: 主动构建与精炼项目领域模型——挑战术语、压测边界,并在决策结晶当下沉淀通用语言(CONTEXT)与架构决策(ADR)
|
|
6
|
-
keywords: [domain-modeling, context, adr, ubiquitous-language, 领域建模, 术语, 通用语言]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Domain Modeling 工作流执行指引
|
|
10
|
-
|
|
11
|
-
本工作流是 `dev/M` 入口,也是 dev 分类**领域模型的横向纪律与格式单一事实源**:在设计与讨论中*主动*构建、精炼项目领域模型,并在术语和决策结晶的当下立即沉淀。它既可独立进入(`dev/M`),也被 `dev/01`、`dev/02`、`dev/04`、`dev/D` 与 `dev/A` 在各自阶段中引用。
|
|
12
|
-
|
|
13
|
-
> **主动 vs 消费**:仅仅*读取* CONTEXT 取词汇**不是**本工作流——那是任何工作流都该有的一行习惯。本工作流用于你正在*改变*模型,而不仅是消费它时。
|
|
14
|
-
|
|
15
|
-
## 内置指引
|
|
16
|
-
|
|
17
|
-
### 何时使用
|
|
18
|
-
|
|
19
|
-
当 dev 工作流需要*改变*领域模型时使用——挑战或锐化术语、消解一词多义、记录难以逆转的架构决策、维护通用语言。典型触发:
|
|
20
|
-
|
|
21
|
-
- 用户用词与现有 CONTEXT 冲突,或同一概念出现多个词
|
|
22
|
-
- 讨论领域关系,需要用具体场景压测边界
|
|
23
|
-
- 出现「难以逆转 + 缺上下文会令人意外 + 真实权衡」的决策,值得记成 ADR
|
|
24
|
-
- 实现 / 重构 / PRD 中引入了 CONTEXT 里尚不存在的概念
|
|
25
|
-
|
|
26
|
-
### 输入
|
|
27
|
-
|
|
28
|
-
- 用户的计划、设计或当前讨论
|
|
29
|
-
- `speculo/.speculo/.config/context/CONTEXT.md`、`speculo/.speculo/.config/context/CONTEXT-MAP.md`、`speculo/.speculo/.config/adr/` 与相关代码
|
|
30
|
-
- 当前 change 目录:`speculo/.speculo/dev/<change>/`(`<change>` 必须为 `YYYY-MM-DD-<kebab-name>`,例:`2026-06-12-model-ordering`)
|
|
31
|
-
|
|
32
|
-
### 输出
|
|
33
|
-
|
|
34
|
-
- 会话沉淀记录:`speculo/.speculo/dev/<change>/domain-model-log.md`
|
|
35
|
-
- 经用户确认后更新 `speculo/.speculo/.config/context/CONTEXT.md`(或 `CONTEXT-MAP.md`)
|
|
36
|
-
- 经用户确认后在 `speculo/.speculo/.config/adr/` 新建 ADR
|
|
37
|
-
- 需要用户决策的术语 / 边界问题,每次只问一个
|
|
38
|
-
|
|
39
|
-
(`<change>` 格式:`YYYY-MM-DD-<kebab-name>`)
|
|
40
|
-
|
|
41
|
-
### 会话期间(主动纪律)
|
|
42
|
-
|
|
43
|
-
在讨论进行中持续执行,**不要批量**——在发生的当下捕获:
|
|
44
|
-
|
|
45
|
-
- **对照词汇表挑战**:用户用词与 CONTEXT 现有语言冲突时立即指出。「你的词汇表把『取消』定义为 X,但你似乎指 Y——到底是哪个?」
|
|
46
|
-
- **锐化模糊语言**:用户用含混或一词多义术语时,提出一个精确的规范术语。「你说『账户』——是指 Customer 还是 User?它们是不同的东西。」
|
|
47
|
-
- **用具体场景压测**:讨论领域关系时,发明探测边界的场景,迫使精确界定概念之间的边界。
|
|
48
|
-
- **与代码交叉引用**:用户陈述某事如何运作时,核对代码是否一致;矛盾即指出。「你的代码取消整个 Order,但你刚说支持部分取消——哪个对?」
|
|
49
|
-
- **内联沉淀**:术语一旦解决,立即按 `CONTEXT-FORMAT.md` 更新(用户确认后写 `.config/context/`);未确认的只记到 `domain-model-log.md`。
|
|
50
|
-
- **有节制地提供 ADR**:仅当「难以逆转 + 缺上下文会令人意外 + 真实权衡的结果」三条全部满足时,才按 `ADR-FORMAT.md` 提议创建 ADR;任一不满足则跳过。
|
|
51
|
-
|
|
52
|
-
> `CONTEXT.md` 必须完全不含实现细节——它是词汇表,不是 spec、草稿本或实现决策仓库。
|
|
53
|
-
|
|
54
|
-
### 渐进披露
|
|
55
|
-
|
|
56
|
-
- `CONTEXT-FORMAT.md`:撰写或更新项目术语表(CONTEXT / CONTEXT-MAP)时读取——**通用语言格式的单一事实源**。
|
|
57
|
-
- `ADR-FORMAT.md`:判断是否该写 ADR、以何种格式写时读取——**ADR 格式与判据的单一事实源**。
|
|
58
|
-
|
|
59
|
-
### 独立使用
|
|
60
|
-
|
|
61
|
-
本工作流**零硬依赖**,无需预先执行其他工作流即可独立进入(`dev/M`)。只需用户的领域讨论 + 当前 git 仓库即可启动;缺 change 目录时按下「自初始化」创建。
|
|
62
|
-
|
|
63
|
-
### 缺少 change 目录时的自初始化
|
|
64
|
-
|
|
65
|
-
若当前无对应 change 目录:
|
|
66
|
-
|
|
67
|
-
1. 从用户意图提取 `<kebab-name>`(如 `model-ordering-terms`)
|
|
68
|
-
2. 创建 `speculo/.speculo/dev/<YYYY-MM-DD>-<kebab-name>/`
|
|
69
|
-
3. 初始化 `.status.json`:
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"dev_entry": "dev/M",
|
|
73
|
-
"current_phase": "1. Model Session",
|
|
74
|
-
"phase_history": [],
|
|
75
|
-
"change_status": "active",
|
|
76
|
-
"embedded_guides": ["domain-modeling"],
|
|
77
|
-
"terms_resolved": [],
|
|
78
|
-
"adr_candidates": [],
|
|
79
|
-
"context_write_status": "none"
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
4. 在 `speculo/.speculo/dev-status.json` 的 `active` 数组追加该 change 目录名
|
|
83
|
-
|
|
84
|
-
## 阶段
|
|
85
|
-
|
|
86
|
-
> **惰性创建文件**——只在需要写入时才创建。`.config/context/CONTEXT.md` 与 `.config/adr/` 由 Speculo 初始化提供;若目标项目缺失,在第一个术语 / ADR 解决时按需创建。
|
|
87
|
-
|
|
88
|
-
### 1. Model Session — 词汇与决策沉淀
|
|
89
|
-
- 规范:本入口「会话期间(主动纪律)」+ 同目录 `CONTEXT-FORMAT.md`、`ADR-FORMAT.md`
|
|
90
|
-
- 模板:`../_templates/domain-model-log-template.md`
|
|
91
|
-
- 产物:`domain-model-log.md`;经用户确认后更新 `.config/context/` 与 `.config/adr/`
|
|
92
|
-
- 完成准则:
|
|
93
|
-
- 每个被挑战 / 锐化的术语都有结论(已写入 CONTEXT 或记为 `[待确认]`)
|
|
94
|
-
- 每个 ADR 候选都已按三条判据裁决(提议创建,或显式跳过并记原因)
|
|
95
|
-
- 写入 `.config/context/` 或 `.config/adr/` 的内容均经用户确认
|
|
96
|
-
- `domain-model-log.md` 无残留 `[TODO:]`
|
|
97
|
-
|
|
98
|
-
## 依赖
|
|
99
|
-
|
|
100
|
-
- 硬依赖:无
|
|
101
|
-
- 软依赖:无。可独立进入;也被 `../01-grill-with-docs/01-grill-with-docs.md`、`../02-prd/02-prd.md`、`../04-finalize/04-finalize.md`、`../D-docs-sync/D-docs-sync.md`、`../A-improve-architecture/A-improve-architecture.md` 在其阶段中引用。
|
|
102
|
-
|
|
103
|
-
## 状态扩展字段
|
|
104
|
-
|
|
105
|
-
本工作流需在同 change 的 `.status.json` 追加:
|
|
106
|
-
|
|
107
|
-
- `dev_entry` (string) — 固定为 `dev/M`
|
|
108
|
-
- `embedded_guides` (array) — 包含 `domain-modeling`
|
|
109
|
-
- `terms_resolved` (array) — 本会话解决的术语及结论
|
|
110
|
-
- `adr_candidates` (array) — ADR 候选及裁决(`created` | `skipped` + 原因)
|
|
111
|
-
- `context_write_status` (none | logged | context-updated | adr-created) — 领域模型沉淀状态
|
|
112
|
-
|
|
113
|
-
## 完成与状态更新
|
|
114
|
-
|
|
115
|
-
- 进入 phase 时更新 `current_phase` 和 `phase_history`。
|
|
116
|
-
- 术语 / 决策沉淀后更新 `terms_resolved`、`adr_candidates`、`context_write_status`。
|
|
117
|
-
- 写 `.config/context/` 或 `.config/adr/` **前必须经用户确认**(持久化写入责任表中,这两处 AI 仅在用户确认后写入)。
|
|
118
|
-
- 本工作流不自动完成 change;嵌入其他工作流时随宿主流程推进。
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: dev/R-review
|
|
3
|
-
category: dev
|
|
4
|
-
name: Review
|
|
5
|
-
description: 从固定比较点开始,按 Spec、Engineering、Standards 三个独立维度审查当前 diff,并给出带严重度的裁决
|
|
6
|
-
keywords: [review, diff, spec, engineering, standards, security, solid, pr, 审查]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Review 工作流执行指引
|
|
10
|
-
|
|
11
|
-
本工作流是 `dev/R` 入口,用于审查 `HEAD` 与用户提供的固定点之间的 diff。审查以**资深工程师视角**进行,结果必须分成三个**互相独立、互不掩盖**的维度,每条 finding 带严重度,最后给出整体裁决。
|
|
12
|
-
|
|
13
|
-
> **目录命名:** `<change>` 必须为 `YYYY-MM-DD-<kebab-name>`(例:`2026-06-12-review-auth-module`)。审查产物写入 `speculo/.speculo/dev/<change>/`。
|
|
14
|
-
|
|
15
|
-
## 内置指引
|
|
16
|
-
|
|
17
|
-
### 何时使用
|
|
18
|
-
|
|
19
|
-
当用户想审查分支、PR、进行中的变更,或要求 `review since <fixed-point>` 时使用。
|
|
20
|
-
|
|
21
|
-
### 三个审查维度
|
|
22
|
-
|
|
23
|
-
三个维度是三种独立的"镜头",**不合并、不重排、不让一个维度的结论掩盖另一个**:
|
|
24
|
-
|
|
25
|
-
| 维度 | 问题 | 关注 |
|
|
26
|
-
|------|------|------|
|
|
27
|
-
| **Spec** | 做对了吗? | 是否忠实实现来源 issue / PRD / spec:缺失需求、范围蔓延、看似实现但有问题的需求 |
|
|
28
|
-
| **Engineering** | 做好了吗? | 不依赖成文规则的工程质量:SOLID 与架构、安全与可靠性、错误处理、性能、边界、死代码 |
|
|
29
|
-
| **Standards** | 合规吗? | 是否违反仓库**已记录**的标准:RULES、ADR、CONTRIBUTING、lint / 格式 / 类型配置 |
|
|
30
|
-
|
|
31
|
-
若缺少 spec,Spec 维度跳过并报告 `no spec available`;若仓库无成文标准,Standards 维度报告检查范围并说明覆盖空白。Engineering 维度始终执行。
|
|
32
|
-
|
|
33
|
-
### 严重度模型
|
|
34
|
-
|
|
35
|
-
每条 finding 必须标注严重度:
|
|
36
|
-
|
|
37
|
-
| 级别 | 名称 | 含义 | 动作 |
|
|
38
|
-
|------|------|------|------|
|
|
39
|
-
| **P0** | Critical | 安全漏洞、数据丢失风险、正确性 bug | 必须阻断合并 |
|
|
40
|
-
| **P1** | High | 逻辑错误、显著 SOLID 违背、性能回退、关键需求缺失 | 合并前应修复 |
|
|
41
|
-
| **P2** | Medium | 代码异味、可维护性隐患、轻微 SOLID 违背、范围蔓延 | 本 PR 修或建后续项 |
|
|
42
|
-
| **P3** | Low | 风格、命名、小建议 | 可选改进 |
|
|
43
|
-
|
|
44
|
-
### 执行原则
|
|
45
|
-
|
|
46
|
-
- 用户说的任何东西都是固定点。若用户没有指定固定点,先询问;拿到前不要继续。
|
|
47
|
-
- 比较命令使用三点语法:`git diff <fixed-point>...HEAD`,同时记录 `git log <fixed-point>..HEAD --oneline`。
|
|
48
|
-
- **Worktree 模式**:若当前 change 为 worktree 隔离模式(`.status.json` 的 `worktree_enabled` 为真),fixed point 默认取 `base_branch`,且审查必须完整覆盖 change 分支树 `base_branch..change_branch` 的**每一个 commit**,不能只看最新工作区状态。此时读取 `../../../skills/worktree-isolation/SKILL.md` 的 `references/audit-branch-tree.md`;非 worktree 模式不读取该 skill。
|
|
49
|
-
- **Review-first**:本工作流默认只产出审查结论,**不修改代码**;除非用户在看到 findings 后明确授权修复。
|
|
50
|
-
- **诚实优先**:无法覆盖的区域要显式声明(见 `review-verdict.md` 的 clean-review 要求),不得用"看起来没问题"代替实际检查。
|
|
51
|
-
- 机器已强制的标准(lint / 类型 / 格式)只记录来源,不重复人工检查工具已覆盖的内容。
|
|
52
|
-
- 如果环境支持并行子代理,三个维度应并行执行;如果不支持,按三个独立上下文顺序执行,并在报告中保持分离。
|
|
53
|
-
|
|
54
|
-
### 渐进披露(Engineering 维度深度清单)
|
|
55
|
-
|
|
56
|
-
进入 Engineering 维度审查时,按需读取同目录清单:
|
|
57
|
-
|
|
58
|
-
- `solid-checklist.md`:检查 SOLID 违背与架构异味、给重构启发式时读取。
|
|
59
|
-
- `security-checklist.md`:检查安全漏洞、竞态、密钥、密码学与运行时风险时读取。
|
|
60
|
-
- `code-quality-checklist.md`:检查错误处理、性能 / 缓存、边界条件时读取。
|
|
61
|
-
- `removal-checklist.md`:识别死代码与删除候选、产出删除 / 推迟计划时读取。
|
|
62
|
-
|
|
63
|
-
### 独立使用
|
|
64
|
-
|
|
65
|
-
本工作流**零硬依赖**,无需预先执行 dev/01、dev/02、dev/I 等其他工作流即可独立进入。只需用户提供 fixed point(分支/commit/tag)+ 当前 git 仓库即可启动。
|
|
66
|
-
|
|
67
|
-
**独立进入流程:**
|
|
68
|
-
|
|
69
|
-
1. **fixed point**:若用户未指定,先询问;拿到前不继续。在 worktree 模式下默认取 `base_branch`。
|
|
70
|
-
2. **change 目录**:若用户未指定 `<change>` 目录,按 `YYYY-MM-DD-<kebab-name>` 格式创建(如 `2026-06-17-review-auth-refactor`),初始化 `.status.json` 并更新 `dev-status.json`。
|
|
71
|
-
3. **信息自采集**:若同 change 目录下无上游产物(PRD、slices、decision-log 等),**自行通过代码库探索采集审查所需上下文**,不要求用户先执行其他工作流:
|
|
72
|
-
- `git log <fixed-point>..HEAD --oneline` 提取 commit message 中的 issue/PR 引用
|
|
73
|
-
- 搜索仓库中与变更模块匹配的 spec 文档、README、设计文档
|
|
74
|
-
- 从代码注释、TODO/FIXME 和 commit message 正文推断需求意图
|
|
75
|
-
- 搜索 `speculo/.speculo/.config/RULES.md`、`speculo/.speculo/.config/adr/`、`AGENTS.md`、`CONTRIBUTING.md` 获取标准来源
|
|
76
|
-
- 搜索 `.editorconfig`、`eslint.config.*`、`biome.json`、`prettier.config.*`、`tsconfig.json` 获取机器强制标准
|
|
77
|
-
4. **深度搜索**:Spec 和 Standards 来源仍不足时:
|
|
78
|
-
- 对关键路径(auth/支付/数据写入/网络)执行额外的代码库考古(`git log -p -- <path>`)
|
|
79
|
-
- 搜索 `speculo/.speculo/doc/` 和 `speculo/.speculo/archive/` 中的领域文档
|
|
80
|
-
- 检查变更模块的现有测试文件以推断预期行为
|
|
81
|
-
5. **诚实优先**:找不到 spec 时明确记录 `no spec available`,不编造;找不到成文标准时记录覆盖空白,不把缺失当作"无问题"。Engineering 维度始终执行,不依赖任何外部产物。
|
|
82
|
-
|
|
83
|
-
### 缺少 change 目录时的自初始化
|
|
84
|
-
|
|
85
|
-
若当前无对应 change 目录,按以下步骤创建:
|
|
86
|
-
|
|
87
|
-
1. 从审查意图提取 `<kebab-name>`(如 `review-auth-refactor`、`review-api-changes`)
|
|
88
|
-
2. 创建 `speculo/.speculo/dev/<YYYY-MM-DD>-<kebab-name>/`
|
|
89
|
-
3. 初始化 `.status.json`:
|
|
90
|
-
```json
|
|
91
|
-
{
|
|
92
|
-
"dev_entry": "dev/R",
|
|
93
|
-
"current_phase": "1. Review Setup",
|
|
94
|
-
"phase_history": [],
|
|
95
|
-
"change_status": "active",
|
|
96
|
-
"review_fixed_point": null,
|
|
97
|
-
"review_diff_command": null,
|
|
98
|
-
"review_axes": ["spec", "engineering", "standards"],
|
|
99
|
-
"standards_sources": [],
|
|
100
|
-
"spec_sources": [],
|
|
101
|
-
"severity_summary": { "p0": 0, "p1": 0, "p2": 0, "p3": 0 },
|
|
102
|
-
"review_verdict": null,
|
|
103
|
-
"review_status": "collecting"
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
4. 在 `speculo/.speculo/dev-status.json` 的 `active` 数组中追加该 change 目录名
|
|
107
|
-
|
|
108
|
-
## 阶段
|
|
109
|
-
|
|
110
|
-
### 1. Review Setup — 固定点、范围与来源收集
|
|
111
|
-
- 规范:`review-setup.md`
|
|
112
|
-
- 模板:`../_templates/review-sources-template.md`
|
|
113
|
-
- 产物:`review-sources.md`
|
|
114
|
-
- 完成准则:
|
|
115
|
-
- 已记录 fixed point、diff 命令、commit 列表、diff 规模与分批策略
|
|
116
|
-
- 已列出 standards 来源与 spec 来源,或记录各自缺失
|
|
117
|
-
- 已标识关键路径(auth / 支付 / 数据写入 / 网络)
|
|
118
|
-
- `review-sources.md` 无残留 `[TODO:]`
|
|
119
|
-
|
|
120
|
-
### 2. Multi-Axis Review — 三维度审查
|
|
121
|
-
- 规范:`review-axes.md`
|
|
122
|
-
- 模板:`../_templates/review-report-template.md`
|
|
123
|
-
- 产物:`review-report.md`
|
|
124
|
-
- 完成准则:
|
|
125
|
-
- Spec / Engineering / Standards 分区独立呈现,不合并、不重排
|
|
126
|
-
- 每条 finding 带严重度(P0–P3)、文件/行或 hunk 依据,以及对应 spec / 清单 / 标准引用
|
|
127
|
-
- `review-report.md` 无残留 `[TODO:]`
|
|
128
|
-
|
|
129
|
-
### 3. Verdict & Next Steps — 裁决与后续确认
|
|
130
|
-
- 规范:`review-verdict.md`
|
|
131
|
-
- 模板:`../_templates/review-verdict-template.md`
|
|
132
|
-
- 产物:`review-verdict.md`
|
|
133
|
-
- 完成准则:
|
|
134
|
-
- 给出整体裁决(APPROVE / REQUEST_CHANGES / COMMENT)与严重度汇总
|
|
135
|
-
- 完成 clean-review 声明:检查了什么、未覆盖什么、残留风险
|
|
136
|
-
- 已向用户给出后续选项,未经确认不实施修复
|
|
137
|
-
- `review-verdict.md` 无残留 `[TODO:]`
|
|
138
|
-
|
|
139
|
-
## 依赖
|
|
140
|
-
|
|
141
|
-
- 硬依赖:无;用户提供 fixed point 即可进入
|
|
142
|
-
- 软依赖:无。若同 change 目录下存在其他工作流产物(如 prd.md、slices.md、decision-log.md),可继承其信息增强 Spec 维度审查;缺失时自行采集(commit message、代码注释、项目文档),不阻塞流程。审查完成后是否进入修复(`../03-tdd/03-tdd.md`)或归档(`../04-finalize/04-finalize.md`)由用户决定。
|
|
143
|
-
|
|
144
|
-
## 状态扩展字段
|
|
145
|
-
|
|
146
|
-
本工作流需在同 change 的 `.status.json` 追加:
|
|
147
|
-
|
|
148
|
-
- `dev_entry` (string) — 固定为 `dev/R`
|
|
149
|
-
- `review_fixed_point` (string) — 用户提供的比较点
|
|
150
|
-
- `review_diff_command` (string) — 实际使用的 diff 命令
|
|
151
|
-
- `review_axes` (array) — 实际执行的维度,取值自 `spec` | `engineering` | `standards`
|
|
152
|
-
- `standards_sources` (array) — Standards 审查读取的规则来源
|
|
153
|
-
- `spec_sources` (array) — Spec 审查读取的规格来源
|
|
154
|
-
- `severity_summary` (object) — 各严重度 finding 计数:`{ "p0": n, "p1": n, "p2": n, "p3": n }`
|
|
155
|
-
- `review_verdict` (approve | request_changes | comment | null) — 整体裁决
|
|
156
|
-
- `review_status` (collecting | reviewing | judged | completed | blocked) — 审查状态
|
|
157
|
-
|
|
158
|
-
## 完成与状态更新
|
|
159
|
-
|
|
160
|
-
- 进入每个 phase 时更新 `current_phase` 和 `phase_history`。
|
|
161
|
-
- 完成 setup 后写入 fixed point、diff 命令、`review_axes` 和来源清单。
|
|
162
|
-
- 完成报告后更新 `severity_summary`,置 `review_status: judged`。
|
|
163
|
-
- 完成裁决后写入 `review_verdict`,置 `review_status: completed`;但不自动完成 change —— 是否进入修复(`../03-tdd/03-tdd.md`)、收尾归档(`../04-finalize/04-finalize.md`)或其他动作由用户决定。
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
# 代码质量清单
|
|
2
|
-
|
|
3
|
-
服务 `R-review.md` 的 **Engineering 维度**。审查 diff 的错误处理、性能与边界条件时读取本文。重点标记会导致**静默失败**或**生产事故**的问题,并按下方"严重度提示"定级。
|
|
4
|
-
|
|
5
|
-
## 错误处理
|
|
6
|
-
|
|
7
|
-
### 需要标记的反模式
|
|
8
|
-
|
|
9
|
-
- **吞掉异常**:空 catch,或只打日志的 catch
|
|
10
|
-
```javascript
|
|
11
|
-
try { ... } catch (e) { } // 静默失败
|
|
12
|
-
try { ... } catch (e) { console.log(e) } // 打了日志就不管
|
|
13
|
-
```
|
|
14
|
-
- **过宽的 catch**:捕获 `Exception` / `Error` 基类而非具体类型
|
|
15
|
-
- **错误信息泄露**:把堆栈或内部细节暴露给用户
|
|
16
|
-
- **缺少错误处理**:可失败操作(I/O、网络、解析)周围没有 try-catch
|
|
17
|
-
- **异步错误处理**:未处理的 promise rejection、缺 `.catch()`、无 error boundary
|
|
18
|
-
|
|
19
|
-
### 应核对的最佳实践
|
|
20
|
-
|
|
21
|
-
- [ ] 错误在恰当的边界被捕获
|
|
22
|
-
- [ ] 错误信息对用户友好(不暴露内部细节)
|
|
23
|
-
- [ ] 错误带足够上下文记录,便于调试
|
|
24
|
-
- [ ] 异步错误被正确传播或处理
|
|
25
|
-
- [ ] 可恢复错误有定义好的兜底行为
|
|
26
|
-
- [ ] 关键错误触发告警 / 监控
|
|
27
|
-
|
|
28
|
-
### 追问
|
|
29
|
-
- "这个操作失败时会发生什么?"
|
|
30
|
-
- "调用方会知道出错了吗?"
|
|
31
|
-
- "有足够上下文调试这个错误吗?"
|
|
32
|
-
|
|
33
|
-
## 性能与缓存
|
|
34
|
-
|
|
35
|
-
### CPU 密集操作
|
|
36
|
-
- **热路径上的昂贵操作**:循环中编译正则、解析 JSON、做加密
|
|
37
|
-
- **阻塞主线程**:同步 I/O、无 worker / async 的重计算
|
|
38
|
-
- **重复计算**:同一计算被多次执行
|
|
39
|
-
- **缺少记忆化**:相同输入反复调用的纯函数
|
|
40
|
-
|
|
41
|
-
### 数据库与 I/O
|
|
42
|
-
- **N+1 查询**:循环里每个元素查一次,而非批量
|
|
43
|
-
```javascript
|
|
44
|
-
// 差:N+1
|
|
45
|
-
for (const id of ids) {
|
|
46
|
-
const user = await db.query(`SELECT * FROM users WHERE id = ?`, id)
|
|
47
|
-
}
|
|
48
|
-
// 好:批量
|
|
49
|
-
const users = await db.query(`SELECT * FROM users WHERE id IN (?)`, ids)
|
|
50
|
-
```
|
|
51
|
-
- **缺索引**:在未建索引的列上查询
|
|
52
|
-
- **过度取数**:只需几列却 SELECT *
|
|
53
|
-
- **无分页**:把整个数据集加载进内存
|
|
54
|
-
|
|
55
|
-
### 缓存问题
|
|
56
|
-
- **昂贵操作缺缓存**:重复的 API 调用、DB 查询、计算
|
|
57
|
-
- **缓存无 TTL**:脏数据被无限期返回
|
|
58
|
-
- **缓存无失效策略**:数据更新了但缓存没清
|
|
59
|
-
- **缓存键碰撞**:键唯一性不足
|
|
60
|
-
- **把用户私有数据全局缓存**:安全 / 隐私问题
|
|
61
|
-
|
|
62
|
-
### 内存
|
|
63
|
-
- **无界集合**:不断增长的数组 / map
|
|
64
|
-
- **大对象滞留**:持有引用阻止 GC
|
|
65
|
-
- **循环中字符串拼接**:应改用 StringBuilder / join
|
|
66
|
-
- **整文件加载**:应改用流式
|
|
67
|
-
|
|
68
|
-
### 追问
|
|
69
|
-
- "这个操作的时间复杂度是多少?"
|
|
70
|
-
- "数据量 10 倍 / 100 倍时行为如何?"
|
|
71
|
-
- "结果可缓存吗?该缓存吗?"
|
|
72
|
-
- "能批量代替逐条吗?"
|
|
73
|
-
|
|
74
|
-
## 边界条件
|
|
75
|
-
|
|
76
|
-
### Null / Undefined 处理
|
|
77
|
-
- **缺空值检查**:在可能为 null 的对象上访问属性
|
|
78
|
-
- **truthy / falsy 混淆**:`if (value)` 而 `0` 或 `""` 是合法值
|
|
79
|
-
- **过度可选链**:`a?.b?.c?.d` 掩盖了结构性问题
|
|
80
|
-
- **null 与 undefined 不一致**:混用且无明确约定
|
|
81
|
-
|
|
82
|
-
### 空集合
|
|
83
|
-
- **未处理空数组**:代码假设数组非空
|
|
84
|
-
- **空对象边界**:在空对象上 `for...in` 或 `Object.keys`
|
|
85
|
-
- **首 / 末元素访问**:`arr[0]` 或 `arr[arr.length-1]` 未先判空
|
|
86
|
-
|
|
87
|
-
### 数值边界
|
|
88
|
-
- **除零**:除法前缺检查
|
|
89
|
-
- **整数溢出**:超出安全整数范围的大数
|
|
90
|
-
- **浮点比较**:用 `===` 而非 epsilon 比较
|
|
91
|
-
- **负值**:本不该为负的索引或计数
|
|
92
|
-
- **off-by-one**:循环边界、数组切片、分页
|
|
93
|
-
|
|
94
|
-
### 字符串边界
|
|
95
|
-
- **空字符串**:未作为边界处理
|
|
96
|
-
- **纯空白字符串**:通过 truthy 检查但实际为空
|
|
97
|
-
- **超长字符串**:无长度上限导致内存 / 展示问题
|
|
98
|
-
- **Unicode 边界**:emoji、RTL 文本、组合字符
|
|
99
|
-
|
|
100
|
-
### 需要标记的危险模式
|
|
101
|
-
```javascript
|
|
102
|
-
const name = user.profile.name // 危险:无空值检查
|
|
103
|
-
const first = items[0] // 危险:数组访问未判空
|
|
104
|
-
const avg = total / count // 危险:除法未判零
|
|
105
|
-
if (value) { ... } // 危险:truthy 检查排除了 0、""、false
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### 追问
|
|
109
|
-
- "如果它是 null / undefined 会怎样?"
|
|
110
|
-
- "如果集合为空会怎样?"
|
|
111
|
-
- "这个数的合法范围是什么?"
|
|
112
|
-
- "边界值(0、-1、MAX_INT)处会怎样?"
|
|
113
|
-
|
|
114
|
-
## 严重度提示
|
|
115
|
-
|
|
116
|
-
- 会导致正确性 bug、数据损坏或生产事故的静默失败 → **P0 / P1**
|
|
117
|
-
- 性能回退、可维护性隐患、未覆盖的边界 → **P1 / P2**
|
|
118
|
-
- 局部健壮性改进 → **P3**
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# 删除候选与迭代计划清单
|
|
2
|
-
|
|
3
|
-
服务 `R-review.md` 的 **Engineering 维度**。审查 diff 引入或暴露的死代码、冗余、关停特性时读取本文。区分**现在可安全删除**与**需计划后再删**,审查阶段只给出候选与计划,**不在审查中直接删除代码**。
|
|
4
|
-
|
|
5
|
-
## 优先级
|
|
6
|
-
|
|
7
|
-
- [ ] **P0**:需立即删除(安全风险、显著成本、阻塞其他工作)
|
|
8
|
-
- [ ] **P1**:本迭代删除
|
|
9
|
-
- [ ] **P2**:进 backlog / 下个迭代
|
|
10
|
-
|
|
11
|
-
## 现在可安全删除
|
|
12
|
-
|
|
13
|
-
### 候选项:[名称 / 描述]
|
|
14
|
-
|
|
15
|
-
| 字段 | 内容 |
|
|
16
|
-
|------|------|
|
|
17
|
-
| **位置** | `path/to/file.ts:line` |
|
|
18
|
-
| **理由** | 为什么应该删除 |
|
|
19
|
-
| **证据** | 无引用、死特性开关、已废弃 API |
|
|
20
|
-
| **影响** | 无 / 低 —— 无活跃消费者 |
|
|
21
|
-
| **删除步骤** | 1. 删代码 2. 删测试 3. 删配置 |
|
|
22
|
-
| **验证** | 跑测试、确认无运行时错误、观察日志 |
|
|
23
|
-
|
|
24
|
-
## 推迟删除(需计划)
|
|
25
|
-
|
|
26
|
-
### 候选项:[名称 / 描述]
|
|
27
|
-
|
|
28
|
-
| 字段 | 内容 |
|
|
29
|
-
|------|------|
|
|
30
|
-
| **位置** | `path/to/file.ts:line` |
|
|
31
|
-
| **为何推迟** | 有活跃消费者、需迁移、需干系人签字 |
|
|
32
|
-
| **前置条件** | 特性开关关闭 2 周、遥测显示 0 使用 |
|
|
33
|
-
| **破坏性变更** | 列出 API / 契约变更 |
|
|
34
|
-
| **迁移计划** | 消费者迁移步骤 |
|
|
35
|
-
| **时间线** | 目标日期或迭代 |
|
|
36
|
-
| **负责人** | 责任人 / 团队 |
|
|
37
|
-
| **验证** | 确认可安全删除的指标(错误率、使用计数) |
|
|
38
|
-
| **回滚计划** | 出问题时如何恢复 |
|
|
39
|
-
|
|
40
|
-
## 删除前核对
|
|
41
|
-
|
|
42
|
-
- [ ] 全代码库搜索过所有引用(`rg`、`grep`)
|
|
43
|
-
- [ ] 检查过动态 / 反射式调用
|
|
44
|
-
- [ ] 确认无外部消费者(API、SDK、文档)
|
|
45
|
-
- [ ] 复核过特性开关遥测(如适用)
|
|
46
|
-
- [ ] 测试已更新 / 删除
|
|
47
|
-
- [ ] 文档已更新
|
|
48
|
-
- [ ] 已通知团队(如为共享代码)
|
|
49
|
-
|
|
50
|
-
## 严重度提示
|
|
51
|
-
|
|
52
|
-
- 引入的死代码 / 冗余本身一般是 **P3**;但当它**掩盖了正确性或安全风险**,或带来显著维护 / 成本负担时升级到 **P2 / P1**。
|
|
53
|
-
- 审查只产出删除候选与计划;实际删除交由后续 `../03-tdd/03-tdd.md` 或专门的清理任务执行。
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Multi-Axis Review Phase
|
|
2
|
-
|
|
3
|
-
## 输入
|
|
4
|
-
|
|
5
|
-
- `speculo/.speculo/dev/<change>/review-sources.md`
|
|
6
|
-
- `git diff <fixed-point>...HEAD`
|
|
7
|
-
- spec 来源文件或 `no spec available`
|
|
8
|
-
- standards 来源文件或覆盖空白说明
|
|
9
|
-
- Engineering 深度清单:同目录 `solid-checklist.md`、`security-checklist.md`、`code-quality-checklist.md`、`removal-checklist.md`
|
|
10
|
-
|
|
11
|
-
## 产物
|
|
12
|
-
|
|
13
|
-
- `speculo/.speculo/dev/<change>/review-report.md`,由 `../_templates/review-report-template.md` 填写
|
|
14
|
-
|
|
15
|
-
## 填写引导
|
|
16
|
-
|
|
17
|
-
三个维度各自独立成区,每条 finding 都要带**严重度(P0–P3)**、**文件/行或 hunk 依据**、**引用来源**,并尽量给出**可执行的修复建议**。
|
|
18
|
-
|
|
19
|
-
### Spec 维度(做对了吗)
|
|
20
|
-
|
|
21
|
-
1. 先读 spec(若有),再读 diff;若无 spec 且 `review-setup.md` 记录为 `no spec available`,则从以下自推断来源检查一致性:
|
|
22
|
-
- **commit message 推断**:commit message 中描述的需求是否在 diff 中完整实现
|
|
23
|
-
- **测试推断**:新增/修改的测试所描述的预期行为是否在 diff 中正确实现
|
|
24
|
-
- **代码注释推断**:diff 中 TODO/FIXME/HACK 标记的意图是否被正确落实
|
|
25
|
-
- **自推断仍不足时**:整区写 `no spec available — unable to verify spec compliance`
|
|
26
|
-
2. 报告:缺失需求、范围蔓延(spec 外的实现)、看似实现但有问题的需求。
|
|
27
|
-
3. 每条引用 spec 原文(若有)或推断来源(commit message/测试/注释)。
|
|
28
|
-
|
|
29
|
-
### Engineering 维度(做好了吗)
|
|
30
|
-
|
|
31
|
-
按需读取四份清单,逐项扫描 diff:
|
|
32
|
-
|
|
33
|
-
1. **SOLID 与架构**(`solid-checklist.md`):SRP/OCP/LSP/ISP/DIP 违背、代码异味;提重构时说明为何改善内聚 / 降低耦合,非平凡重构给增量计划。
|
|
34
|
-
2. **安全与可靠性**(`security-checklist.md`):注入 / XSS / SSRF / 路径穿越、认证授权、密钥泄露、竞态(TOCTOU、共享状态、DB 并发)、密码学、运行时风险;每条说明可利用性与影响。
|
|
35
|
-
3. **代码质量**(`code-quality-checklist.md`):错误处理(吞异常、异步错误)、性能(N+1、热路径昂贵操作、缓存)、边界条件(null、空集合、数值 / 字符串边界、off-by-one)。
|
|
36
|
-
4. **删除候选**(`removal-checklist.md`):死代码、冗余、关停特性;区分可安全删除与需计划,只产出候选与计划,不在审查中删代码。
|
|
37
|
-
|
|
38
|
-
### Standards 维度(合规吗)
|
|
39
|
-
|
|
40
|
-
1. 先读已记录标准(RULES、ADR、CONTRIBUTING、配置),再读 diff。
|
|
41
|
-
2. 报告违反**已成文**标准的位置,引用标准来源。
|
|
42
|
-
3. 工具已机器强制的项不重复人工检查;无成文标准时说明覆盖空白。
|
|
43
|
-
|
|
44
|
-
### 并行与隔离
|
|
45
|
-
|
|
46
|
-
- 如果可用,使用三个并行子代理分别审查 Spec、Engineering、Standards。
|
|
47
|
-
- 如果没有子代理,分三个独立小节顺序执行,不让任一维度的结论影响另一维度。
|
|
48
|
-
- 最终报告在 `## Spec`、`## Engineering`、`## Standards` 下并排呈现,可轻微清理措辞,但不要合并或重排 findings。
|
|
49
|
-
|
|
50
|
-
## 边界
|
|
51
|
-
|
|
52
|
-
- 不修复代码(review-first)。
|
|
53
|
-
- 不把三个维度混成一个优先级列表。
|
|
54
|
-
- 缺少 spec 时跳过 Spec 维度并明确写 `no spec available`;Engineering 维度始终执行。
|
|
55
|
-
- 严重度按各清单的"严重度提示"判定,不凭印象拔高或压低。
|
|
56
|
-
|
|
57
|
-
## 完成准则
|
|
58
|
-
|
|
59
|
-
- `review-report.md` 已按 Spec / Engineering / Standards 三区呈现
|
|
60
|
-
- 每条 finding 有严重度、明确依据和来源引用
|
|
61
|
-
- `.status.json` 写入 `severity_summary`,`review_status: judged`
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Review Setup Phase
|
|
2
|
-
|
|
3
|
-
## 输入
|
|
4
|
-
|
|
5
|
-
- 用户提供的 fixed point;如果缺失,先询问
|
|
6
|
-
- 当前 git 仓库
|
|
7
|
-
- 当前 change 目录:`speculo/.speculo/dev/<change>/`
|
|
8
|
-
|
|
9
|
-
## 独立进入时的来源深度搜索
|
|
10
|
-
|
|
11
|
-
当本工作流独立进入(无上游 PRD、slices、decision-log 等产物)时,在收集 spec 和 standards 来源时执行以下扩展搜索。**不要求用户先执行 dev/01、dev/02 或其他工作流。**
|
|
12
|
-
|
|
13
|
-
### Spec 来源的扩展发现(按优先级)
|
|
14
|
-
|
|
15
|
-
1. **commit message 提取**:`git log <fixed-point>..HEAD --oneline` + `git log <fixed-point>..HEAD --format="%B"` 提取全部 commit message 正文,搜索 issue/PR 引用(`#\d+`、`fixes #`、`closes #`、JIRA key 模式)
|
|
16
|
-
2. **commit message 全文搜索**:`git log <fixed-point>..HEAD --grep="<关键词>"` 搜索与变更主题相关的 commit
|
|
17
|
-
3. **代码注释/TODO 提取**:在 diff 涉及的文件中搜索注释、TODO、FIXME 和 HACK 标记——这些常包含需求意图
|
|
18
|
-
4. **本地 spec 文档搜索**:搜索仓库中与分支名、变更模块名匹配的 `.md` 文档、`docs/` 目录、`spec/` 目录
|
|
19
|
-
5. **Speculo 文档搜索**:搜索 `speculo/.speculo/doc/`、`speculo/.speculo/archive/` 中与变更模块相关的领域文档
|
|
20
|
-
6. **测试文件读取**:读取 diff 中测试文件的变更——新增测试描述了预期行为
|
|
21
|
-
7. **上游产物继承**(若存在):`speculo/.speculo/dev/<change>/prd.md`、`slices.md`、`decision-log.md`
|
|
22
|
-
8. **以上均无时**:记录 `no spec available`——Spec 维度跳过,不编造来源
|
|
23
|
-
|
|
24
|
-
### Standards 来源的扩展发现
|
|
25
|
-
|
|
26
|
-
1. **Speculo 配置搜索**:`speculo/.speculo/.config/RULES.md`、`speculo/.speculo/.config/adr/`、`speculo/.speculo/.config/context/`
|
|
27
|
-
2. **项目根文档搜索**:`AGENTS.md`、`CONTRIBUTING.md`、`CLAUDE.md`、`README.md`
|
|
28
|
-
3. **工具配置搜索**:`.editorconfig`、`eslint.config.*`、`biome.json`、`prettier.config.*`、`tsconfig.json`、`pyproject.toml`
|
|
29
|
-
4. **全部缺失时**:记录覆盖空白说明(如"仓库无 RULES.md、无 ADR、无 CONTRIBUTING.md——Standards 维度仅检查通用工程实践"),不把缺失当作"无问题"
|
|
30
|
-
|
|
31
|
-
## 产物
|
|
32
|
-
|
|
33
|
-
- `speculo/.speculo/dev/<change>/review-sources.md`,由 `../_templates/review-sources-template.md` 填写
|
|
34
|
-
|
|
35
|
-
## 填写引导
|
|
36
|
-
|
|
37
|
-
1. 沿用用户提供的 fixed point,不自行替换为其他分支。**Worktree 模式**(`.status.json` 的 `worktree_enabled` 为真)下,若用户未另行指定,fixed point 默认取 `base_branch`,并按 `../../../skills/worktree-isolation/SKILL.md` 的 `references/audit-branch-tree.md` 用 `git log <base_branch>..<change_branch> --oneline` 记录 change 分支树**全部 commit**、`git diff <base_branch>...<change_branch>` 取全量 diff,确保审查覆盖每个 commit。
|
|
38
|
-
2. 记录 `git diff <fixed-point>...HEAD` 和 `git log <fixed-point>..HEAD --oneline`。
|
|
39
|
-
3. 用 `git diff <fixed-point>...HEAD --stat` 评估 diff 规模并定分批策略:
|
|
40
|
-
- **无变更**:`git diff` 为空时,告知用户并询问是否改审 staged 变更或某个 commit 区间,拿到前不继续。
|
|
41
|
-
- **大 diff(> 500 行)**:先按文件 / 模块汇总,再按模块或功能分批审查。
|
|
42
|
-
- **混合关注点**:按逻辑功能分组,不只按文件顺序。
|
|
43
|
-
4. 标识关键路径:auth / 授权、支付 / 金额、数据写入、网络 / 外部调用、并发 —— 这些区域在 Engineering 维度需重点审查。
|
|
44
|
-
5. 寻找 spec 来源,按「独立进入时的来源深度搜索」中的 Spec 扩展发现顺序执行:
|
|
45
|
-
- commit message 中的 issue / PR 引用 → commit message 全文搜索
|
|
46
|
-
- 用户作为参数传入的路径
|
|
47
|
-
- 代码注释/TODO/FIXME 中的需求线索
|
|
48
|
-
- 仓库中与分支名或功能匹配的规格文档
|
|
49
|
-
- `speculo/.speculo/dev/<change>/prd.md`、`slices.md`、`decision-log.md`(若存在)
|
|
50
|
-
- `speculo/.speculo/doc/` 和 `speculo/.speculo/archive/` 中的领域文档
|
|
51
|
-
- 以上均无时记录 `no spec available`
|
|
52
|
-
6. 寻找 standards 来源,按「独立进入时的来源深度搜索」中的 Standards 扩展发现顺序执行:
|
|
53
|
-
- `speculo/.speculo/.config/RULES.md`
|
|
54
|
-
- `speculo/.speculo/.config/context/`
|
|
55
|
-
- `speculo/.speculo/.config/adr/`
|
|
56
|
-
- `AGENTS.md`、`CONTRIBUTING.md`、`CLAUDE.md`
|
|
57
|
-
- `.editorconfig`、`eslint.config.*`、`biome.json`、`prettier.config.*`、`tsconfig.json`
|
|
58
|
-
- 全部缺失时记录覆盖空白说明
|
|
59
|
-
7. 机器强制的标准只记录来源,不重复检查工具已覆盖的内容。
|
|
60
|
-
8. Engineering 维度不需要外部来源,但记录将依据同目录的 `solid-checklist.md`、`security-checklist.md`、`code-quality-checklist.md`、`removal-checklist.md`。
|
|
61
|
-
|
|
62
|
-
## 边界
|
|
63
|
-
|
|
64
|
-
- 不开始主观审查,先完成来源与范围收集。
|
|
65
|
-
- 找不到 spec 时不要编造;记录 `no spec available`。
|
|
66
|
-
- 找不到成文标准时记录覆盖空白,不把缺失当作"无问题"。
|
|
67
|
-
|
|
68
|
-
## 完成准则
|
|
69
|
-
|
|
70
|
-
- fixed point、diff 命令、commit 列表、diff 规模与分批策略已记录
|
|
71
|
-
- worktree 模式下已记录 change 分支树 `base_branch..change_branch` 的全部 commit
|
|
72
|
-
- standards 来源、spec 来源、关键路径已记录
|
|
73
|
-
- `.status.json` 写入 `review_fixed_point`、`review_diff_command`、`review_axes`、`standards_sources`、`spec_sources`,`review_status: collecting`
|