@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,61 +0,0 @@
|
|
|
1
|
-
# 好测试与坏测试
|
|
2
|
-
|
|
3
|
-
## 好测试
|
|
4
|
-
|
|
5
|
-
**集成式**:通过真实接口测试,而不是 mock 内部组件。
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
// 好:测试可观察的行为
|
|
9
|
-
test("用户可以用有效购物车结算", async () => {
|
|
10
|
-
const cart = createCart();
|
|
11
|
-
cart.add(product);
|
|
12
|
-
const result = await checkout(cart, paymentMethod);
|
|
13
|
-
expect(result.status).toBe("confirmed");
|
|
14
|
-
});
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
特征:
|
|
18
|
-
|
|
19
|
-
- 测试用户/调用者关心的行为
|
|
20
|
-
- 只使用公共 API
|
|
21
|
-
- 能经受住内部重构
|
|
22
|
-
- 描述「做什么」,而不是「怎么做」
|
|
23
|
-
- 每个测试一个逻辑断言
|
|
24
|
-
|
|
25
|
-
## 坏测试
|
|
26
|
-
|
|
27
|
-
**实现细节测试**:与内部结构耦合。
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
// 坏:测试实现细节
|
|
31
|
-
test("checkout 调用了 paymentService.process", async () => {
|
|
32
|
-
const mockPayment = jest.mock(paymentService);
|
|
33
|
-
await checkout(cart, payment);
|
|
34
|
-
expect(mockPayment.process).toHaveBeenCalledWith(cart.total);
|
|
35
|
-
});
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
危险信号:
|
|
39
|
-
|
|
40
|
-
- mock 内部协作者
|
|
41
|
-
- 测试私有方法
|
|
42
|
-
- 断言调用次数/顺序
|
|
43
|
-
- 重构时测试坏了但行为没变
|
|
44
|
-
- 测试名称描述的是「怎么做」而不是「做什么」
|
|
45
|
-
- 通过外部手段验证而不是通过接口
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
// 坏:绕过接口来验证
|
|
49
|
-
test("createUser 保存到数据库", async () => {
|
|
50
|
-
await createUser({ name: "Alice" });
|
|
51
|
-
const row = await db.query("SELECT * FROM users WHERE name = ?", ["Alice"]);
|
|
52
|
-
expect(row).toBeDefined();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// 好:通过接口验证
|
|
56
|
-
test("createUser 使用户可被检索", async () => {
|
|
57
|
-
const user = await createUser({ name: "Alice" });
|
|
58
|
-
const retrieved = await getUser(user.id);
|
|
59
|
-
expect(retrieved.name).toBe("Alice");
|
|
60
|
-
});
|
|
61
|
-
```
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: dev/finalize
|
|
3
|
-
category: dev
|
|
4
|
-
name: Finalize & Archive
|
|
5
|
-
description: 在用证据证明 change 真正完成后,改变其状态并归档;没有新鲜验证证据不许宣称完成
|
|
6
|
-
keywords: [finalize, verify, complete, archive, 归档, 收尾, 完成验证]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Finalize & Archive 工作流执行指引
|
|
10
|
-
|
|
11
|
-
本工作流是 `dev/04` 入口,是开发主线的收尾环节(`dev/01` → `dev/02` → `dev/I` → `dev/03` → `dev/04`)。它在 change 的实现完成后,**先用证据证明"真的完成了",再改变状态并归档**。
|
|
12
|
-
|
|
13
|
-
> **目录命名:** `<change>` 必须为 `YYYY-MM-DD-<kebab-name>`(例:`2026-06-12-user-auth`)。归档目标为 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`,`<YYYY-MM>` 从 change 目录名中的日期提取。
|
|
14
|
-
|
|
15
|
-
## 内置指引
|
|
16
|
-
|
|
17
|
-
### 核心原则
|
|
18
|
-
|
|
19
|
-
> 在没有验证的情况下宣称工作完成,这不是高效,而是不诚实。**始终用证据支撑结论。**
|
|
20
|
-
|
|
21
|
-
### 铁律
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
没有新鲜的验证证据,不许宣称完成
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
如果你在本次推进中没有运行验证命令,就不能声称测试通过、构建成功或需求满足。对这条规则敷衍了事,就等于违背了它的精神。
|
|
28
|
-
|
|
29
|
-
### 门控函数
|
|
30
|
-
|
|
31
|
-
在把 change 标记为 completed 之前,对每个结论执行:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
1. 确定:什么命令能证明这个结论?
|
|
35
|
-
2. 运行:执行完整命令(重新运行,完整执行)
|
|
36
|
-
3. 阅读:完整输出,检查退出码,统计失败数
|
|
37
|
-
4. 验证:输出是否支持这个结论?
|
|
38
|
-
- 否 → 用证据说明实际状态,置 blocked
|
|
39
|
-
- 是 → 带证据陈述结论
|
|
40
|
-
5. 只有这时:才能做出结论
|
|
41
|
-
跳过任何一步 = 说谎,不是验证
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 常见失败模式
|
|
45
|
-
|
|
46
|
-
| 结论 | 需要 | 不够格 |
|
|
47
|
-
|------|------|--------|
|
|
48
|
-
| 测试通过 | 测试命令输出:0 failures | 之前的运行、"应该会通过" |
|
|
49
|
-
| Linter 无报错 | Linter 输出:0 errors | 部分检查、推断 |
|
|
50
|
-
| 构建成功 | 构建命令:exit 0 | linter 通过、日志看起来没问题 |
|
|
51
|
-
| Bug 已修复 | 测试原始症状:通过 | 代码改了,假设已修复 |
|
|
52
|
-
| 回归有效 | 红-绿循环已验证 | 测试只通过了一次 |
|
|
53
|
-
| 代理已完成 | VCS diff 显示变更 | 代理报告"成功" |
|
|
54
|
-
| 需求已满足 | 逐项核对清单 | 测试通过 |
|
|
55
|
-
|
|
56
|
-
### 红线 —— 停下来
|
|
57
|
-
|
|
58
|
-
出现以下任一情况,**不得进入归档**,回到验证:
|
|
59
|
-
|
|
60
|
-
- 使用"应该""大概""似乎"
|
|
61
|
-
- 验证前就表达满意("太好了""完美""搞定")
|
|
62
|
-
- 即将归档却没有新鲜验证
|
|
63
|
-
- 信任代理的成功报告而未独立核对 VCS diff
|
|
64
|
-
- 依赖部分验证或上一轮的旧结果
|
|
65
|
-
|
|
66
|
-
### 何时使用
|
|
67
|
-
|
|
68
|
-
当一个 change 的实现(`dev/03` 或 hotfix 修复)已结束,用户要把它**收尾、标记完成并归档**时使用。也可在 `dev/R` 审查通过后衔接进入。
|
|
69
|
-
|
|
70
|
-
### 与 `archive` 命令的关系
|
|
71
|
-
|
|
72
|
-
- 本工作流(`dev/04`)面向**单个当前 change** 的引导式收尾:先验证、改状态、再归档。
|
|
73
|
-
- `../../../commands/archive.md` 面向**批量**归档多个已 `completed` 的 change。两者共用同一套破坏性归档安全契约(先列清单、用户确认、不覆盖)。
|
|
74
|
-
|
|
75
|
-
## 阶段
|
|
76
|
-
|
|
77
|
-
### 1. Completion Verification — 完成前验证(门控)
|
|
78
|
-
- 规范:`completion-gate.md`
|
|
79
|
-
- 模板:`../_templates/completion-verification-template.md`
|
|
80
|
-
- 产物:`completion-verification.md`
|
|
81
|
-
- 完成准则:
|
|
82
|
-
- 每条完成结论都有**本次运行**的命令与输出证据
|
|
83
|
-
- 已对照来源(PRD / issue / slices / 用户任务)逐项核对需求清单
|
|
84
|
-
- 无调试残留与推测性功能
|
|
85
|
-
- (如适用)实现期引入的新领域术语 / 架构决策已按 `../M-domain-modeling/M-domain-modeling.md` 沉淀到 CONTEXT / ADR(模型未漂移);无新术语则不适用
|
|
86
|
-
- `completion-verification.md` 无残留 `[TODO:]`
|
|
87
|
-
- `.status.json` 的 `verification_status` 为 `verified` 或 `blocked`
|
|
88
|
-
|
|
89
|
-
### 2. Merge Back & Cleanup — 合并回原分支与清理(条件,仅 worktree 模式)
|
|
90
|
-
- 规范:`../../../skills/worktree-isolation/SKILL.md`(读其 `references/merge-and-cleanup.md`)
|
|
91
|
-
- 模板:无
|
|
92
|
-
- 产物:合并后的 base 分支、移除的 `.worktree/<change>/` 工作树与隔离分支
|
|
93
|
-
- 完成准则:
|
|
94
|
-
- 非 worktree 模式本 phase 标记 `skipped`,不读取该 skill
|
|
95
|
-
- `verification_status: verified` 且用户确认后才执行(破坏性)
|
|
96
|
-
- change 分支已合并回 `base_branch`(冲突即停、不强推),置 `worktree_status: merged`
|
|
97
|
-
- `.worktree/<change>/` 工作树与隔离分支已清理,置 `worktree_status: removed`
|
|
98
|
-
|
|
99
|
-
### 3. Finalize & Archive — 状态收尾与归档
|
|
100
|
-
- 规范:`finalize-archive.md`
|
|
101
|
-
- 模板:`../_templates/completion-summary-template.md`
|
|
102
|
-
- 产物:`completion-summary.md`,以及归档动作
|
|
103
|
-
- 完成准则:
|
|
104
|
-
- `verification_status` 为 `verified`(`blocked` 时不得归档)
|
|
105
|
-
- worktree 模式下,归档在 `base_branch` 上进行(change 目录已随 Phase 2 合并到达 base)
|
|
106
|
-
- `change_status` 先置 `completed`,再随归档置 `archived`
|
|
107
|
-
- change 目录已移动到 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`
|
|
108
|
-
- 已从 `speculo/.speculo/dev-status.json` 的 `active[]` 移除该 change
|
|
109
|
-
- `completion-summary.md` 无残留 `[TODO:]`
|
|
110
|
-
|
|
111
|
-
## 依赖
|
|
112
|
-
|
|
113
|
-
- 软依赖:`../03-tdd/03-tdd.md` 或 `../R-review/R-review.md`,scope: same-change
|
|
114
|
-
- 硬依赖:无;但归档要求当前 change 通过完成前验证
|
|
115
|
-
|
|
116
|
-
## 状态扩展字段
|
|
117
|
-
|
|
118
|
-
本工作流需在同 change 的 `.status.json` 追加:
|
|
119
|
-
|
|
120
|
-
- `dev_entry` (string) — 固定为 `dev/04`
|
|
121
|
-
- `verification_commands` (array) — 本次运行的验证命令及结果摘要
|
|
122
|
-
- `requirements_checklist` (array) — 逐项需求核对结果,每项含来源引用与 satisfied | missing | partial
|
|
123
|
-
- `verification_status` (verified | blocked) — 完成前验证结论
|
|
124
|
-
- `archived` (boolean) — 是否已完成归档
|
|
125
|
-
- `archive_path` (string|null) — 归档目标路径
|
|
126
|
-
- `worktree_status` (created | active | merged | removed) — 仅 worktree 模式;本工作流在 Phase 2 推进到 `merged` → `removed`(字段定义见 `../../../skills/worktree-isolation/SKILL.md`)
|
|
127
|
-
|
|
128
|
-
## 完成与状态更新
|
|
129
|
-
|
|
130
|
-
- 进入每个 phase 时更新 `current_phase` 和 `phase_history`。
|
|
131
|
-
- 完成验证后写入 `verification_commands`、`requirements_checklist`、`verification_status`。
|
|
132
|
-
- 多阶段 slices:完成前验证为 `verified` 后,把 slices 中该阶段 `<phase id="<phase-id>">` 的 `status` 由 `已实现` 置为 `已验证`(承接 `../03-tdd/03-tdd.md`「phase 阶段状态(XML 契约)」的最后一跳;无 slices 则跳过)。
|
|
133
|
-
- 验证为 `blocked` 时停在本工作流,回到 `../03-tdd/03-tdd.md` 或 `../H-diagnose/H-diagnose.md` 修复,不归档。
|
|
134
|
-
- 验证为 `verified` 且用户确认后:
|
|
135
|
-
- **worktree 模式**:先执行 Phase 2,自动把 change 分支合并回 `base_branch` 并清理工作树与隔离分支(`worktree_status: merged` → `removed`,冲突即停),再在 base 分支上归档;非 worktree 模式跳过 Phase 2。
|
|
136
|
-
- 置 `change_status: completed` → 执行归档 → 置 `change_status: archived`、`archived: true`、写 `archive_path`,并从 `speculo/.speculo/dev-status.json` 移除。
|
|
137
|
-
- 如有可沉淀经验,在用户或项目规则允许时追加到 `speculo/.speculo/.config/LESSONS.md`。
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Completion Verification Phase(门控)
|
|
2
|
-
|
|
3
|
-
本阶段是归档前的门控。**没有本次运行的验证证据,不许进入下一阶段。**
|
|
4
|
-
|
|
5
|
-
## 输入
|
|
6
|
-
|
|
7
|
-
- 当前 change 目录:`speculo/.speculo/dev/<change>/` 下的实现产物(多阶段在 `tdd/<phase-id>/` 下的 `implementation-log.md`、`verification.md` 等)
|
|
8
|
-
- 来源:PRD、issue、slices、诊断结论或用户明确任务
|
|
9
|
-
- 项目的测试 / 类型检查 / lint / 构建命令
|
|
10
|
-
- 变更 diff(VCS)
|
|
11
|
-
|
|
12
|
-
## 产物
|
|
13
|
-
|
|
14
|
-
- `speculo/.speculo/dev/<change>/completion-verification.md`,由 `../_templates/completion-verification-template.md` 填写
|
|
15
|
-
|
|
16
|
-
## 填写引导
|
|
17
|
-
|
|
18
|
-
按 `04-finalize.md` 的门控函数,对每个完成结论"确定命令 → 运行 → 读输出 → 验证 → 才下结论"。
|
|
19
|
-
|
|
20
|
-
1. **运行验证命令**:跑与变更相关的测试、类型检查、lint、构建。逐条记录**命令、退出码、通过/失败计数**。无法运行的命令记录原因,对应结论不得声称通过。
|
|
21
|
-
2. **逐项核对需求**:重读来源(PRD / issue / slices / 用户任务),建立需求清单,逐项标 `satisfied | missing | partial` 并引用来源;测试通过不能替代需求核对。
|
|
22
|
-
3. **回归证据**(若本 change 修了 bug):确认回归测试经过红-绿验证(写 → 通过 → 回退修复必须失败 → 恢复 → 通过),而不是只通过一次。
|
|
23
|
-
4. **代理产物核对**(若部分工作委派给子代理):检查 VCS diff 验证实际变更,不信任代理的"成功"报告。
|
|
24
|
-
5. **调试残留检查**:搜索临时日志、DEBUG 标记、一次性脚本、推测性 / 未启用功能并清理。
|
|
25
|
-
6. **下结论**:全部结论均有新鲜证据支撑 → `verification_status: verified`;任一关键项缺证据或失败 → `verification_status: blocked`,并写明实际状态与缺口。
|
|
26
|
-
|
|
27
|
-
## 边界
|
|
28
|
-
|
|
29
|
-
- 不夸大、不用"应该""大概""似乎"等措辞;信心 ≠ 证据。
|
|
30
|
-
- 不依赖上一轮的旧结果或部分检查。
|
|
31
|
-
- `blocked` 时不进入归档;回到 `../03-tdd/03-tdd.md` 或 `../H-diagnose/H-diagnose.md` 修复后重跑本阶段。
|
|
32
|
-
- 不修改 `speculo/.speculo/.config/RULES.md` 或用户未授权的项目规则文档。
|
|
33
|
-
|
|
34
|
-
## 完成准则
|
|
35
|
-
|
|
36
|
-
- `completion-verification.md` 记录了每条结论的命令与输出证据
|
|
37
|
-
- 需求清单逐项核对完成,含来源引用
|
|
38
|
-
- 调试残留已清理或明确说明
|
|
39
|
-
- `completion-verification.md` 无残留 `[TODO:]`
|
|
40
|
-
- 多阶段 slices:本阶段对应的 `<phase>` 状态已由 `已实现` 置为 `已验证`(无 slices 则不适用)
|
|
41
|
-
- `.status.json` 写入 `verification_commands`、`requirements_checklist`、`verification_status`
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Finalize & Archive Phase
|
|
2
|
-
|
|
3
|
-
本阶段把通过验证的 change 收尾并归档。**归档是破坏性目录移动,必须先列清单、经用户确认才执行。**
|
|
4
|
-
|
|
5
|
-
## 输入
|
|
6
|
-
|
|
7
|
-
- `speculo/.speculo/dev/<change>/completion-verification.md`,且 `verification_status: verified`
|
|
8
|
-
- 当前 change 的 `.status.json`
|
|
9
|
-
- 顶层索引 `speculo/.speculo/dev-status.json`
|
|
10
|
-
|
|
11
|
-
## 产物
|
|
12
|
-
|
|
13
|
-
- `speculo/.speculo/dev/<change>/completion-summary.md`,由 `../_templates/completion-summary-template.md` 填写
|
|
14
|
-
- 归档动作:change 目录移动到 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`
|
|
15
|
-
|
|
16
|
-
## 填写引导
|
|
17
|
-
|
|
18
|
-
### 前置门控
|
|
19
|
-
|
|
20
|
-
1. 确认 `verification_status: verified`。若为 `blocked`,**停止**,不收尾、不归档,回到验证或修复。
|
|
21
|
-
- **Worktree 模式**:本阶段前应已完成 `04-finalize.md` 的 Phase 2 Merge Back & Cleanup(`worktree_status: removed`),change 目录已随合并到达 `base_branch`,归档在 base 分支上对该目录执行。若 `worktree_status` 仍非 `removed`,先回 Phase 2 合并清理,再进入归档。
|
|
22
|
-
|
|
23
|
-
### 状态收尾
|
|
24
|
-
|
|
25
|
-
2. 写 `completion-summary.md`:交付边界、关键变更、验证证据指针(指向 `completion-verification.md`)、遗留事项。
|
|
26
|
-
3. 把当前 change `.status.json` 的 `change_status` 置为 `completed`。
|
|
27
|
-
4. 如有可沉淀经验,在用户或项目规则允许时追加到 `speculo/.speculo/.config/LESSONS.md`。
|
|
28
|
-
|
|
29
|
-
### 归档(破坏性,需确认)
|
|
30
|
-
|
|
31
|
-
本步与 `../../../commands/archive.md` 共用同一安全契约;此处作用域仅限**当前单个 change**:
|
|
32
|
-
|
|
33
|
-
5. 列出归档计划:源路径 `speculo/.speculo/dev/<change>/`、目标路径 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`、`updated_at`、最后 phase、是否仍在 `dev-status.json` 的 `active[]`。
|
|
34
|
-
6. 向用户展示计划并等待明确确认。**没有确认时只输出计划,不移动目录、不改索引。**
|
|
35
|
-
7. 若目标归档路径已存在,标记冲突并停止,不覆盖。
|
|
36
|
-
8. 用户确认后执行:
|
|
37
|
-
- 创建 `speculo/.speculo/archive/dev/<YYYY-MM>/`
|
|
38
|
-
- 移动 change 目录到 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`
|
|
39
|
-
- 从 `speculo/.speculo/dev-status.json` 的 `active[]` 删除该 change
|
|
40
|
-
- 把(已随目录移动的)`.status.json` 的 `change_status` 置为 `archived`,写 `archived: true`、`archive_path`
|
|
41
|
-
9. 若移动失败,停止后续动作,报告已完成与未完成项;不要回滚已成功的移动,除非用户明确要求。
|
|
42
|
-
|
|
43
|
-
## 边界
|
|
44
|
-
|
|
45
|
-
- `verification_status` 非 `verified` 时不得归档。
|
|
46
|
-
- 未获用户确认时不执行任何破坏性移动或索引修改。
|
|
47
|
-
- 不覆盖已存在的归档目标。
|
|
48
|
-
- 批量归档多个 change 时改用 `../../../commands/archive.md`。
|
|
49
|
-
|
|
50
|
-
## 完成准则
|
|
51
|
-
|
|
52
|
-
- `completion-summary.md` 无残留 `[TODO:]`
|
|
53
|
-
- change 目录已位于 `speculo/.speculo/archive/dev/<YYYY-MM>/<change>/`
|
|
54
|
-
- `speculo/.speculo/dev-status.json` 的 `active[]` 已移除该 change
|
|
55
|
-
- `.status.json` 的 `change_status: archived`,`archived: true`,`archive_path` 已写入
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: dev/A-improve-architecture
|
|
3
|
-
category: dev
|
|
4
|
-
name: Improve Architecture
|
|
5
|
-
description: 扫描代码库寻找深化机会,以可视化 HTML 报告呈现候选,再对选中方向深入质询并沉淀领域模型
|
|
6
|
-
keywords: [architecture, deepening, deep-module, refactor, 架构, 深化, 接缝]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Improve Architecture 工作流执行指引
|
|
10
|
-
|
|
11
|
-
本工作流是 `dev/A` 入口:浮现架构摩擦、提出**深化机会**(把浅模块转化为深模块的重构),目标是可测试性与 AI 可导航性。它**建立在共享设计词汇与项目领域模型之上**:
|
|
12
|
-
|
|
13
|
-
- 架构词汇与原则(模块 / 接口 / 深度 / 接缝 / 适配器 / 杠杆 / 局部性;删除测试、「接口就是测试表面」、「一个适配器 = 假设接缝,两个 = 真实接缝」)统一引用 `../../../vendor/codebase-design/SKILL.md`(及 `DEEPENING.md`)。在每条建议中**严格使用**这些术语——不要偏离到「组件 / 服务 / API / 边界」。
|
|
14
|
-
- 领域语言来自 `speculo/.speculo/.config/context/CONTEXT.md`(为好接缝命名);`speculo/.speculo/.config/adr/` 中的 ADR 记录本工作流**不应重新争议**的决策。领域模型的主动维护见 `../M-domain-modeling/M-domain-modeling.md`。
|
|
15
|
-
|
|
16
|
-
## 内置指引
|
|
17
|
-
|
|
18
|
-
### 何时使用
|
|
19
|
-
|
|
20
|
-
当用户想系统性发现并落实架构深化机会(让代码更可测试、对 AI 更可导航)时使用。也可由 `../H-diagnose/H-diagnose.md` 在修复后转入——当 Bug 根因涉及架构(没有好接缝、纠缠调用者、隐藏耦合)时。
|
|
21
|
-
|
|
22
|
-
### 输入
|
|
23
|
-
|
|
24
|
-
- 当前 git 仓库与待改进的代码区域
|
|
25
|
-
- `speculo/.speculo/.config/context/CONTEXT.md` 领域词汇、触及区域的 `speculo/.speculo/.config/adr/` ADR
|
|
26
|
-
- 设计词汇单一事实源 `../../../vendor/codebase-design/SKILL.md`、`DEEPENING.md`、`DESIGN-IT-TWICE.md`
|
|
27
|
-
- 当前 change 目录:`speculo/.speculo/dev/<change>/`(`<change>` 必须为 `YYYY-MM-DD-<kebab-name>`,例:`2026-06-12-deepen-order-intake`)
|
|
28
|
-
|
|
29
|
-
### 输出
|
|
30
|
-
|
|
31
|
-
- `speculo/.speculo/dev/<change>/architecture-candidates.md` —— 结构化深化候选清单
|
|
32
|
-
- `speculo/.speculo/dev/<change>/architecture-review.html` —— 可视化架构审查报告(前后对比图 + 推荐强度)
|
|
33
|
-
- `speculo/.speculo/dev/<change>/architecture-design.md` —— 选中候选经质询后的接口设计与决策
|
|
34
|
-
- 经用户确认后更新 `.config/context/`、`.config/adr/`(经 `../M-domain-modeling/`)
|
|
35
|
-
|
|
36
|
-
(`<change>` 格式:`YYYY-MM-DD-<kebab-name>`)
|
|
37
|
-
|
|
38
|
-
### 核心原则(引用 codebase-design)
|
|
39
|
-
|
|
40
|
-
- **删除测试**:对任何疑似浅的模块,想象删除它——复杂性会集中(好信号,值得深化)还是只是移动?
|
|
41
|
-
- **深度是接口的属性**:小接口 + 大量实现;深化 = 缩小接口、把复杂性吸收进实现。
|
|
42
|
-
- **接缝纪律**:一个适配器 = 假设接缝,两个 = 真实接缝;不要为单一实现凭空切接缝。
|
|
43
|
-
- 完整原则、依赖类别与「替换而非叠加」测试策略见 `../../../vendor/codebase-design/SKILL.md` 与 `DEEPENING.md`,本工作流不复制。
|
|
44
|
-
|
|
45
|
-
### 渐进披露
|
|
46
|
-
|
|
47
|
-
- `HTML-REPORT.md`:编写 `architecture-review.html` 时读取——完整 HTML 框架、图表模式与样式指南。
|
|
48
|
-
|
|
49
|
-
### 独立使用
|
|
50
|
-
|
|
51
|
-
本工作流**零硬依赖**,无需预先执行其他工作流即可独立进入(`dev/A`)。只需当前 git 仓库即可启动;缺 change 目录时按下「自初始化」创建;缺 CONTEXT / ADR 时按代码现状探索,不阻塞。
|
|
52
|
-
|
|
53
|
-
### 缺少 change 目录时的自初始化
|
|
54
|
-
|
|
55
|
-
若当前无对应 change 目录:
|
|
56
|
-
|
|
57
|
-
1. 从用户意图提取 `<kebab-name>`(如 `deepen-order-intake`)
|
|
58
|
-
2. 创建 `speculo/.speculo/dev/<YYYY-MM-DD>-<kebab-name>/`
|
|
59
|
-
3. 初始化 `.status.json`:
|
|
60
|
-
```json
|
|
61
|
-
{
|
|
62
|
-
"dev_entry": "dev/A",
|
|
63
|
-
"current_phase": "1. Scan",
|
|
64
|
-
"phase_history": [],
|
|
65
|
-
"change_status": "active",
|
|
66
|
-
"embedded_guides": ["improve-architecture"],
|
|
67
|
-
"candidate_count": 0,
|
|
68
|
-
"selected_candidate": null,
|
|
69
|
-
"report_path": null,
|
|
70
|
-
"architecture_status": "scanning"
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
4. 在 `speculo/.speculo/dev-status.json` 的 `active` 数组追加该 change 目录名
|
|
74
|
-
|
|
75
|
-
## 阶段
|
|
76
|
-
|
|
77
|
-
> **持久化铁律**:所有产物(含 HTML 报告)写入 `speculo/.speculo/dev/<change>/`,**禁止写入 `temp/`、系统临时目录或项目根目录**。
|
|
78
|
-
|
|
79
|
-
### 1. Scan — 探索深化候选
|
|
80
|
-
- 规范:本入口「核心原则」+ `../../../vendor/codebase-design/SKILL.md`、`../../../vendor/codebase-design/DEEPENING.md`
|
|
81
|
-
- 模板:无(候选条目结构见下「引导」第 4 步)
|
|
82
|
-
- 产物:`architecture-candidates.md`
|
|
83
|
-
- 引导:
|
|
84
|
-
1. 先读 `speculo/.speculo/.config/context/CONTEXT.md` 与触及区域的 `.config/adr/`。
|
|
85
|
-
2. 用 Agent 工具(`subagent_type=Explore`)有机地遍历代码库,注意摩擦:理解一个概念要在许多小模块间跳转?模块浅(接口几乎和实现一样复杂)?纯函数仅为可测试性而提取、真 bug 藏在其调用方式里(没有局部性)?紧耦合模块在接缝处泄漏?哪些区域难以通过当前接口测试?
|
|
86
|
-
3. 对每个疑似浅模块应用**删除测试**,保留「删除会集中复杂性」的候选。
|
|
87
|
-
4. 每个候选记录:**涉及文件**、**问题**(当前摩擦)、**解决方案**(通俗语言)、**收益**(用局部性 / 杠杆 / 测试改善表述)、**依赖类别**(进程内 / 本地可替换 / 端口与适配器 / mock)、**推荐强度**(强烈 / 值得探索 / 推测性)。
|
|
88
|
-
5. 与现有 ADR 冲突的候选,仅在摩擦真实到值得重审 ADR 时保留,并在条目中显式标注(如「与 ADR-0007 矛盾——但因……值得重新讨论」)。
|
|
89
|
-
- 完成准则:
|
|
90
|
-
- 候选均用 codebase-design 词汇命名(不散用「组件 / 服务 / 边界」)
|
|
91
|
-
- 每个候选含文件、问题、解决方案、收益、依赖类别、推荐强度
|
|
92
|
-
- `architecture-candidates.md` 无残留 `[TODO:]`
|
|
93
|
-
|
|
94
|
-
### 2. Report — 可视化架构审查报告
|
|
95
|
-
- 规范:`HTML-REPORT.md`
|
|
96
|
-
- 模板:无
|
|
97
|
-
- 产物:`architecture-review.html`
|
|
98
|
-
- 引导:
|
|
99
|
-
1. 按 `HTML-REPORT.md` 编写**自包含** HTML(Tailwind + Mermaid 走 CDN),每个候选一张卡片含**前后对比图**,结尾「首要推荐」段。
|
|
100
|
-
2. 写入 `speculo/.speculo/dev/<change>/architecture-review.html`(**不写临时目录**),用 OS 命令打开(macOS `open <path>`、Linux `xdg-open <path>`、Windows `start <path>`),并告知用户绝对路径。
|
|
101
|
-
3. 领域用 CONTEXT 词汇、架构用 codebase-design 词汇。
|
|
102
|
-
4. 此时不提接口设计;写入并打开后,询问用户:「这些候选你想探索哪一个?」
|
|
103
|
-
- 完成准则:
|
|
104
|
-
- HTML 自包含、每个候选有前后对比图与推荐强度徽章、含首要推荐段
|
|
105
|
-
- 报告写入 change 目录并已为用户打开
|
|
106
|
-
- 已请用户选择候选
|
|
107
|
-
|
|
108
|
-
### 3. Grill — 质询所选候选并沉淀
|
|
109
|
-
- 规范:`../../../skills/grill-me/SKILL.md`(逐问压测)+ `../M-domain-modeling/M-domain-modeling.md`(内联沉淀)
|
|
110
|
-
- 模板:无
|
|
111
|
-
- 产物:`architecture-design.md`;经用户确认后更新 `.config/context/`、`.config/adr/`
|
|
112
|
-
- 引导:
|
|
113
|
-
1. 用 `../../../skills/grill-me/SKILL.md` 与用户走设计树:约束、依赖、深化后模块形态、接缝后面是什么、哪些测试存活。
|
|
114
|
-
2. 决策结晶时按 `../M-domain-modeling/M-domain-modeling.md` 内联沉淀:深化模块用了 CONTEXT 没有的概念 → 加术语;锐化了模糊术语 → 更新 CONTEXT;用户以关键理由否决候选 → 按 ADR 三判据决定是否记 ADR(防止未来架构审查重复建议同一件事)。
|
|
115
|
-
3. 想探索深化模块的备选接口时,按 `../../../vendor/codebase-design/DESIGN-IT-TWICE.md` 的「设计两次」并行子代理模式。
|
|
116
|
-
- 完成准则:
|
|
117
|
-
- 选中候选的接口、依赖策略与适配器、存活测试已记入 `architecture-design.md`
|
|
118
|
-
- 决策结晶处的术语 / ADR 已按 `../M-domain-modeling/` 沉淀(经用户确认)
|
|
119
|
-
- `architecture-design.md` 无残留 `[TODO:]`
|
|
120
|
-
|
|
121
|
-
## 依赖
|
|
122
|
-
|
|
123
|
-
- 硬依赖:无(零依赖横向工作流)
|
|
124
|
-
- 软依赖:无。可独立进入;也可由 `../H-diagnose/H-diagnose.md` 修复后转入。建立在 `../../../vendor/codebase-design/`(设计词汇)与 `../M-domain-modeling/`(领域模型)之上;深化的实现落地交由 `../03-tdd/03-tdd.md`。
|
|
125
|
-
|
|
126
|
-
## 状态扩展字段
|
|
127
|
-
|
|
128
|
-
本工作流需在同 change 的 `.status.json` 追加:
|
|
129
|
-
|
|
130
|
-
- `dev_entry` (string) — 固定为 `dev/A`
|
|
131
|
-
- `embedded_guides` (array) — 包含 `improve-architecture`
|
|
132
|
-
- `candidate_count` (number) — 深化候选数量
|
|
133
|
-
- `selected_candidate` (string|null) — 用户选中的候选
|
|
134
|
-
- `report_path` (string|null) — `speculo/.speculo/dev/<change>/architecture-review.html`
|
|
135
|
-
- `architecture_status` (scanning | reported | grilling | designed | blocked) — 工作流状态
|
|
136
|
-
|
|
137
|
-
## 完成与状态更新
|
|
138
|
-
|
|
139
|
-
- 进入每个 phase 时更新 `current_phase` 和 `phase_history`。
|
|
140
|
-
- 报告生成后写入 `candidate_count`、`report_path`,置 `architecture_status: reported`。
|
|
141
|
-
- 用户选定并质询后写入 `selected_candidate`,置 `architecture_status: designed`。
|
|
142
|
-
- 写 `.config/context/` 或 `.config/adr/` 前必须经用户确认(经 `../M-domain-modeling/`)。
|
|
143
|
-
- 本工作流不自动完成 change;深化的实现交由 `../03-tdd/03-tdd.md` 落地。
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# HTML 报告格式
|
|
2
|
-
|
|
3
|
-
架构审查以单个**自包含 HTML 文件**渲染,写入 `speculo/.speculo/dev/<change>/architecture-review.html`(由入口 `A-improve-architecture.md` Phase 2 规定,**不写临时目录**)。Tailwind 和 Mermaid 均从 CDN 加载。Mermaid 可靠地处理图形状图表;手写 div 和内联 SVG 处理更具编辑性的可视化(质量图、横截面图)。两者混合使用——不要所有内容都依赖 Mermaid,否则会显得千篇一律。
|
|
4
|
-
|
|
5
|
-
## 脚手架
|
|
6
|
-
|
|
7
|
-
```html
|
|
8
|
-
<!doctype html>
|
|
9
|
-
<html lang="en">
|
|
10
|
-
<head>
|
|
11
|
-
<meta charset="utf-8" />
|
|
12
|
-
<title>Architecture review — {{repo name}}</title>
|
|
13
|
-
<script src="https://cdn.tailwindcss.com"></script>
|
|
14
|
-
<script type="module">
|
|
15
|
-
import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs";
|
|
16
|
-
mermaid.initialize({ startOnLoad: true, theme: "neutral", securityLevel: "loose" });
|
|
17
|
-
</script>
|
|
18
|
-
<style>
|
|
19
|
-
/* small custom layer for things Tailwind doesn't cover cleanly:
|
|
20
|
-
dashed seam lines, hand-drawn-feeling arrow heads, etc. */
|
|
21
|
-
.seam { stroke-dasharray: 4 4; }
|
|
22
|
-
.leak { stroke: #dc2626; }
|
|
23
|
-
.deep { background: linear-gradient(135deg, #0f172a, #1e293b); }
|
|
24
|
-
</style>
|
|
25
|
-
</head>
|
|
26
|
-
<body class="bg-stone-50 text-slate-900 font-sans">
|
|
27
|
-
<main class="max-w-5xl mx-auto px-6 py-12 space-y-12">
|
|
28
|
-
<header>...</header>
|
|
29
|
-
<section id="candidates" class="space-y-10">...</section>
|
|
30
|
-
<section id="top-recommendation">...</section>
|
|
31
|
-
</main>
|
|
32
|
-
</body>
|
|
33
|
-
</html>
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 页头
|
|
37
|
-
|
|
38
|
-
仓库名称、日期和紧凑图例:实线框 = 模块,虚线 = 接缝,红色箭头 = 泄漏,深色粗框 = 深层模块。没有介绍段落——直接进入候选方案。
|
|
39
|
-
|
|
40
|
-
## 候选卡片
|
|
41
|
-
|
|
42
|
-
图表承担主要信息量。文字稀疏、平实,使用 `../../../vendor/codebase-design/SKILL.md` 的术语表词汇,不铺陈。
|
|
43
|
-
|
|
44
|
-
每个候选方案为一个 `<article>`:
|
|
45
|
-
|
|
46
|
-
- **标题**——简短,命名深化操作(例如「折叠订单接收流水线」)。
|
|
47
|
-
- **徽章行**——推荐强度(`Strong` = 翡翠绿,`Worth exploring` = 琥珀色,`Speculative` = 石板灰),外加一个依赖类别标签(`in-process`、`local-substitutable`、`ports & adapters`、`mock`)。
|
|
48
|
-
- **文件**——等宽字体列表,`font-mono text-sm`。
|
|
49
|
-
- **Before / After 图表**——核心部分。两列并排。见下方模式。
|
|
50
|
-
- **问题**——一句话。痛点是什么。
|
|
51
|
-
- **解决方案**——一句话。改变了什么。
|
|
52
|
-
- **收益**——项目符号,每条 ≤6 个字。例如「测试只需命中一个接口」「定价逻辑不再泄漏」「删除 4 个浅层包装器」。
|
|
53
|
-
- **ADR 提示**(如适用)——琥珀色背景框中的一行说明。
|
|
54
|
-
|
|
55
|
-
没有解释性段落。如果图表需要一段文字才能理解,那就重绘图表。
|
|
56
|
-
|
|
57
|
-
## 图表模式
|
|
58
|
-
|
|
59
|
-
选择适合候选方案的模式。混合使用。不要让每张图表看起来都一样——多样性本身就是目的之一。
|
|
60
|
-
|
|
61
|
-
### Mermaid 图(依赖/调用流的常用工具)
|
|
62
|
-
|
|
63
|
-
当要表达「X 调用 Y 调用 Z,看看这有多乱」时,使用 Mermaid `flowchart` 或 `graph`。用 Tailwind 风格的卡片包裹它,避免显得突兀。使用 classDef 将泄漏边着色为红色,将深层模块着色为深色。时序图适合表达「Before:6 次往返;After:1 次」。
|
|
64
|
-
|
|
65
|
-
```html
|
|
66
|
-
<div class="rounded-lg border border-slate-200 bg-white p-4">
|
|
67
|
-
<pre class="mermaid">
|
|
68
|
-
flowchart LR
|
|
69
|
-
A[OrderHandler] --> B[OrderValidator]
|
|
70
|
-
B --> C[OrderRepo]
|
|
71
|
-
C -.leak.-> D[PricingClient]
|
|
72
|
-
classDef leak stroke:#dc2626,stroke-width:2px;
|
|
73
|
-
class C,D leak
|
|
74
|
-
</pre>
|
|
75
|
-
</div>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 手写框线箭头图(当 Mermaid 布局不理想时)
|
|
79
|
-
|
|
80
|
-
模块用带有边框和标签的 `<div>` 表示。箭头用绝对定位在相对容器上的内联 SVG `<line>` 或 `<path>` 元素表示。当你希望「After」图表呈现为一个粗边框的深层模块,内部变灰时,使用这种方式——Mermaid 无法渲染出正确的视觉重量。
|
|
81
|
-
|
|
82
|
-
### 横截面图(适合展示分层浅度)
|
|
83
|
-
|
|
84
|
-
堆叠水平条带(`h-12 border-l-4`)来展示调用经过的层级。Before:6 个薄层,每层几乎什么都不做。After:1 个粗条带,标注了合并后的职责。
|
|
85
|
-
|
|
86
|
-
### 质量图(适合展示「接口与实现一样宽」)
|
|
87
|
-
|
|
88
|
-
每个模块两个矩形——一个表示接口表面积,一个表示实现。Before:接口矩形几乎和实现矩形一样高(浅层)。After:接口矩形短,实现矩形高(深层)。
|
|
89
|
-
|
|
90
|
-
### 调用图折叠
|
|
91
|
-
|
|
92
|
-
Before:函数调用树,渲染为嵌套盒子。After:同一棵树折叠为一个盒子,内部现已内部化的调用在其中淡色显示。
|
|
93
|
-
|
|
94
|
-
## 样式指南
|
|
95
|
-
|
|
96
|
-
- 偏编辑风格,而非企业仪表盘风格。宽裕的留白。标题可选衬线字体(`font-serif` 与 stone/slate 配色搭配效果很好)。
|
|
97
|
-
- 颜色克制:一种强调色(翡翠绿或靛蓝)加红色表示泄漏,琥珀色表示警告。
|
|
98
|
-
- 图表高度保持在约 320px,以便 before/after 并排显示无需滚动。
|
|
99
|
-
- 图表内模块标签使用 `text-xs uppercase tracking-wider`——它们应该呈现为示意图风格,而非 UI 风格。
|
|
100
|
-
- 唯一的脚本是 Tailwind CDN 和 Mermaid ESM 导入。报告其余部分是静态的——没有应用代码,除 Mermaid 自身渲染外没有交互性。
|
|
101
|
-
|
|
102
|
-
## 首选推荐部分
|
|
103
|
-
|
|
104
|
-
一张较大的卡片。候选方案名称,一句说明原因的话,锚链接指向其卡片。仅此而已。
|
|
105
|
-
|
|
106
|
-
## 语气
|
|
107
|
-
|
|
108
|
-
平实中文,简洁——但架构名词和动词直接来自 `../../../vendor/codebase-design/SKILL.md`。简洁不是偏离术语表的借口。
|
|
109
|
-
|
|
110
|
-
**精确使用:** 模块(module)、接口(interface)、实现(implementation)、深度(depth)、深(deep)、浅(shallow)、接缝(seam)、适配器(adapter)、杠杆(leverage)、局部性(locality)。
|
|
111
|
-
|
|
112
|
-
**绝不替换:** 组件 / 服务 / 单元(表示 module)· API / 签名(表示 interface)· 边界(表示 seam)· 层 / 包装器(表示 module,当你的意思是 module 时)。
|
|
113
|
-
|
|
114
|
-
**符合风格的表述:**
|
|
115
|
-
|
|
116
|
-
- 「订单接收模块是浅的——接口几乎和实现一样复杂。」
|
|
117
|
-
- 「定价逻辑在接缝处泄漏。」
|
|
118
|
-
- 「深化:一个接口,一处可测。」
|
|
119
|
-
- 「两个适配器证明了接缝:生产用 HTTP,测试用内存。」
|
|
120
|
-
|
|
121
|
-
**收益项目符号**用术语表词汇命名收益:「局部性:bug 集中在一个模块」「杠杆:一个接口,N 个调用点」「接口缩小,实现吸收包装器」。不要写「更易维护」或「更干净的代码」——这些词不在术语表中,不应出现。
|
|
122
|
-
|
|
123
|
-
不模棱两可,不开场白,不写「值得注意的是……」。如果一句话可以变成项目符号,就变成项目符号。如果一个项目符号可以删掉,就删掉。如果一个词不在 `../../../vendor/codebase-design/SKILL.md` 术语表中,在发明新词之前先找一个术语表中有的词。
|