@namewta/speculo 0.6.0 → 0.7.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 +11 -11
- package/dist/src/cli.js +36 -128
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +2 -4
- package/dist/src/index.js +173 -151
- package/dist/src/index.js.map +1 -1
- package/package.json +6 -4
- package/template/.speculo/README.md +4 -0
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +133 -141
- package/template/canonical/canonical-specdev-goal-plan.md +394 -377
- package/template/canonical/canonical-specdev-grill-with-docs.md +241 -178
- package/template/canonical/canonical-specdev-spec.md +132 -122
- package/template/canonical/canonical-specdev-tickets.md +176 -156
- package/template/canonical/canonical-specdev-wayfinder.md +106 -108
- package/template/commands/archive-and-consolidate.md +10 -8
- package/template/commands/handoff.md +2 -0
- package/template/commands/retro.md +3 -3
- package/template/commands/status.md +5 -4
- package/template/skills/archive-and-consolidate/SKILL.md +5 -9
- package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +1 -1
- package/template/skills/archive-and-consolidate/references/archive-rules.md +4 -4
- package/template/skills/archive-and-consolidate/references/consolidation-rules.md +7 -8
- package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +5 -2
- package/template/skills/github-npm-ops/SKILL.md +4 -2
- package/template/skills/github-npm-ops/references/issue-transport.md +26 -0
- package/template/skills/github-npm-ops/references/preflight-checklist.md +1 -1
- package/template/skills/github-npm-ops/scripts/issue-transport.mjs +227 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +31 -145
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +4 -6
- package/template/workflows/specdev/C-code-review/C-code-review.md +42 -0
- package/template/workflows/specdev/C-code-review/code-review-template.md +42 -0
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +45 -48
- package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +44 -40
- package/template/workflows/specdev/D-diagnose-bugs/feedback-loop.md +41 -0
- package/template/workflows/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md +32 -0
- package/template/workflows/specdev/D-diagnose-bugs/scripts/hitl-loop.template.sh +26 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +3 -3
- package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +5 -20
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +17 -10
- package/template/workflows/specdev/G-grill-with-docs/adr-format.md +31 -17
- package/template/workflows/specdev/G-grill-with-docs/context-format.md +9 -29
- package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +10 -5
- package/template/workflows/specdev/G-grill-with-docs/stakeholder-questionnaire.md +45 -0
- package/template/workflows/specdev/I-implement/I-implement.md +29 -14
- package/template/workflows/specdev/I-implement/delegated-evidence-template.md +11 -0
- package/template/workflows/specdev/I-implement/evidence-template.md +24 -10
- package/template/workflows/specdev/I-implement/execution-preflight.md +4 -4
- package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +20 -0
- package/template/workflows/specdev/I-implement/tdd-mocking.md +19 -0
- package/template/workflows/specdev/I-implement/tdd-rules.md +14 -12
- package/template/workflows/specdev/I-implement/tdd-test-design.md +25 -0
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +12 -9
- package/template/workflows/specdev/I-init-setup/config-template.json +1 -1
- package/template/workflows/specdev/I-init-setup/domain-layout-template.md +2 -2
- package/template/workflows/specdev/I-init-setup/status-template.json +2 -3
- package/template/workflows/specdev/I-init-setup/tracking-template.md +3 -0
- package/template/workflows/specdev/INDEX.md +64 -26
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +48 -38
- package/template/workflows/specdev/P-goal-plan/completion-control.md +19 -53
- package/template/workflows/specdev/P-goal-plan/delegated-execution-template.md +33 -0
- package/template/workflows/specdev/P-goal-plan/delegated-execution.md +53 -0
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +9 -40
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +16 -68
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +20 -48
- package/template/workflows/specdev/P-prototype/P-prototype.md +46 -0
- package/template/workflows/specdev/P-prototype/logic-prototype.md +24 -0
- package/template/workflows/specdev/P-prototype/prototype-record-template.md +46 -0
- package/template/workflows/specdev/P-prototype/ui-prototype.md +21 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +1 -1
- package/template/workflows/specdev/S-spec/S-spec.md +2 -1
- package/template/workflows/specdev/T-tickets/T-tickets.md +3 -2
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +1 -1
- package/template/workflows/specdev/T-tickets/ticket-template.md +1 -1
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +1 -1
- package/template/workflows/specdev/T-triage/T-triage.md +65 -26
- package/template/workflows/specdev/T-triage/intake-protocol.md +32 -0
- package/template/workflows/specdev/T-triage/reconcile-protocol.md +34 -0
- package/template/workflows/specdev/T-triage/source-template.md +30 -0
- package/template/workflows/specdev/T-triage/triage-template.md +38 -24
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +3 -1
- package/template/workflows/specdev/_state/status.json +2 -3
- package/template/workflows/specdev/common/README.md +9 -2
- package/template/workflows/specdev/common/rules/artifact-contract.md +20 -9
- package/template/workflows/specdev/common/rules/change-completion.md +33 -0
- package/template/workflows/specdev/common/rules/deviation-control.md +2 -2
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +1 -1
- package/template/workflows/specdev/common/rules/path-ownership.md +3 -3
- package/template/workflows/specdev/common/schemas/change-status.schema.json +43 -0
- package/template/workflows/specdev/common/schemas/code-review.schema.json +22 -0
- package/template/workflows/specdev/common/schemas/diagnosis.schema.json +19 -0
- package/template/workflows/specdev/common/schemas/prototype-record.schema.json +24 -0
- package/template/workflows/specdev/common/schemas/source.schema.json +20 -0
- package/template/workflows/specdev/common/schemas/status.schema.json +20 -78
- package/template/workflows/specdev/common/schemas/triage.schema.json +21 -0
- package/template/workflows/specdev/common/skills/code-review/SKILL.md +49 -0
- package/template/workflows/specdev/common/skills/code-review/references/fowler-smells.md +18 -0
- package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +13 -0
- package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +22 -0
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +12 -9
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +18 -13
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +8 -6
- package/template/workflows/specdev/common/skills/research/SKILL.md +38 -26
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +3 -5
- package/template/workflows/specdev/common/tools/README.md +3 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +496 -30
- package/dist/src/migrate.d.ts +0 -38
- package/dist/src/migrate.js +0 -642
- package/dist/src/migrate.js.map +0 -1
- package/dist/src/skills-mirror.d.ts +0 -38
- package/dist/src/skills-mirror.js +0 -160
- package/dist/src/skills-mirror.js.map +0 -1
- package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +0 -15
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +0 -32
- package/template/workflows/specdev/I-implement/code-review-process.md +0 -17
- package/template/workflows/specdev/I-implement/tdd-examples.md +0 -14
- package/template/workflows/specdev/I-init-setup/status-labels-template.md +0 -55
|
@@ -3,85 +3,82 @@ id: specdev/diagnose-bugs
|
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: 诊断 Bug
|
|
6
|
-
description:
|
|
7
|
-
keywords: [bug, 诊断, 根因, 复现, 假设]
|
|
6
|
+
description: 先建立会在精确症状上变红的紧凑反馈回路,再通过最小化、排名假设和单变量探针确认根因,输出修复契约而不实施生产修复。
|
|
7
|
+
keywords: [bug, 诊断, 红灯, tight-loop, 根因, 复现, 假设]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# 诊断 Bug
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
D 的主导词是**红灯**:没有一条已执行且能在此 bug 上变红的紧凑命令,就没有可进入的假设阶段。D 默认只读项目代码,可以创建 change 诊断工件和经授权的临时可撤销探针;生产修复由 Implement 拥有。
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## 输入与所有权
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
- 分诊结果:`<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
18
|
-
- 当前领域上下文:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
19
|
-
- 当前架构决策:`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
20
|
-
- 诊断产物:`<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
21
|
-
- 诊断模板:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/diagnosis-template.md</Path>`
|
|
16
|
+
按存在情况读取:
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
- `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`
|
|
19
|
+
- `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
20
|
+
- `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
21
|
+
- `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
22
|
+
- 相关代码、测试、配置、日志和运行环境事实。
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
D 拥有:
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
- `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
27
|
+
- `<Path>{roots.state}/specdev/changes/{change}/diagnostics/</Path>`,仅在需要脚本、捕获物或临时探针结果时延迟创建。
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
## 流程
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
### 1. 建立并执行红灯回路
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
加载 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/feedback-loop.md</Path>`。按其顺序尝试测试、HTTP/CLI、浏览器、追踪回放、夹具、模糊循环、bisect、差分和最终 HITL。保存命令、至少一次真实输出、精确症状断言、运行时间、确定性或复现率,以及 Agent 可运行性。
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
无法建立回路时立即使用诊断模板写 `status: blocked`、`feedback_loop_ready: false`、已尝试方式和所需输入;假设表保持为空,保留 `current_work` 后返回。不得继续阅读代码来构造根因理论。
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
**完成标准**:一条已运行命令快速、可重复、由 Agent 执行,并能在用户精确症状上变红。
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
- 预期可观察结果;
|
|
41
|
-
- 反证实验;
|
|
42
|
-
- 若被证伪,下一个候选是什么。
|
|
39
|
+
### 2. 复现并最小化
|
|
43
40
|
|
|
44
|
-
|
|
41
|
+
运行回路确认捕获的是用户报告的故障。逐个删除输入、调用者、配置、数据和步骤,每次删除后重跑;只保留对红灯有负载作用的元素。非确定性 bug 通过并行、压力、固定时间/随机或缩小窗口提高到可调试复现率。
|
|
45
42
|
|
|
46
|
-
|
|
43
|
+
**完成标准**:剩余每个元素被移除都会使回路变绿,最小复现和最后红灯证据已持久化。
|
|
47
44
|
|
|
48
|
-
###
|
|
45
|
+
### 3. 假设与单变量探针
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
只有前两步完成后才加载 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md</Path>`。生成 3–5 个带预测的可证伪假设,先展示排名;用户 AFK 时保存 checkpoint 后继续。每个探针只检验一个预测,优先 debugger/REPL,其次定向日志;性能问题使用测量和分析器。
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
- 失败机制;
|
|
54
|
-
- 为什么此前未被测试或监控捕获;
|
|
55
|
-
- 影响范围;
|
|
56
|
-
- 为什么拟议修复能阻断机制;
|
|
57
|
-
- 修复可能引入的回归风险。
|
|
49
|
+
**完成标准**:根因由区分性实验确认,其他高排名候选有反证,所有临时探针有唯一清理标记。
|
|
58
50
|
|
|
59
|
-
|
|
51
|
+
### 4. 写入修复契约
|
|
60
52
|
|
|
61
|
-
|
|
53
|
+
使用 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/diagnosis-template.md</Path>` 写入 diagnosis:触发条件、失败机制、影响范围、漏检原因、必须改变、必须保持、正确 seam、回归测试、非目标、风险和回滚。
|
|
62
54
|
|
|
63
|
-
|
|
55
|
+
存在正确 seam 时,把最小复现定义为 I 必须先观察红灯的回归测试合同;不存在正确 seam 时明确记录架构缺口并路由 R。D 不编写生产修复。
|
|
64
56
|
|
|
65
|
-
|
|
57
|
+
### 5. 清理、验证与路由
|
|
66
58
|
|
|
67
|
-
|
|
59
|
+
重跑原始未最小化回路,确认当前诊断结论可解释症状;搜索唯一 `[DEBUG-...]` 前缀并删除临时插桩,无法删除项登记 owner 与删除条件。运行:
|
|
68
60
|
|
|
69
|
-
|
|
61
|
+
```bash
|
|
62
|
+
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
63
|
+
--stage diagnosis \
|
|
64
|
+
<Path>{roots.state}/specdev/changes/{change}</Path>
|
|
65
|
+
```
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
- 多行为、公共接口、迁移、安全或高风险:进入 `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>` 或 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`;
|
|
73
|
-
- 根因仍未知:保持 blocked,继续诊断或进入 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`。
|
|
67
|
+
根因确认后将本 Work 加入 `works_run` 并清空 `current_work`,返回 diagnosis 和下一 Work:局部修复进入 Tickets/I,公共行为或高风险进入 S/Tickets,缺 seam 进入 R,仍无根因则保持 blocked 或进入 W。
|
|
74
68
|
|
|
75
69
|
## 完成标准
|
|
76
70
|
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
71
|
+
- 红灯回路硬门有已执行证据;
|
|
72
|
+
- 最小复现的剩余元素都有负载作用;
|
|
73
|
+
- 假设有排名、预测和反证;
|
|
74
|
+
- 根因解释触发、机制、漏检和影响;
|
|
75
|
+
- 修复契约决策完备但未夹带生产修复;
|
|
76
|
+
- debug 插桩已清理或有明确 owner;
|
|
77
|
+
- diagnosis、状态、验证证据和下一 Work 路径一致。
|
|
84
78
|
|
|
85
79
|
## 子文件引用
|
|
86
80
|
|
|
81
|
+
- 反馈回路:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/feedback-loop.md</Path>`
|
|
82
|
+
- 假设与插桩:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md</Path>`
|
|
87
83
|
- 诊断模板:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/diagnosis-template.md</Path>`
|
|
84
|
+
- HITL 模板:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/scripts/hitl-loop.template.sh</Path>`
|
|
@@ -1,64 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
schema_version: 1
|
|
3
|
+
artifact: diagnosis
|
|
4
|
+
change: <YYYY-MM-DD-topic>
|
|
5
|
+
status: reproducing
|
|
6
|
+
feedback_loop_ready: false
|
|
7
|
+
red_command: null
|
|
8
|
+
red_evidence: null
|
|
9
|
+
cleanup_status: pending
|
|
10
|
+
updated_at: <ISO-8601>
|
|
11
|
+
---
|
|
2
12
|
|
|
3
|
-
|
|
4
|
-
- **来源:** `<Path>{roots.state}/specdev/changes/{change}/source-issue.md</Path>` / `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
5
|
-
- **诊断状态:** gathering / reproducing / testing-hypotheses / root-cause-confirmed / blocked
|
|
6
|
-
- **诊断工件:** `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
13
|
+
# Diagnosis: <问题>
|
|
7
14
|
|
|
8
15
|
## 1. 现象与影响
|
|
9
16
|
|
|
10
|
-
|
|
17
|
+
只记录可观察现象、受影响对象、严重度和时间范围。
|
|
11
18
|
|
|
12
|
-
## 2.
|
|
19
|
+
## 2. 红灯反馈回路
|
|
13
20
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
+
- **命令:**
|
|
22
|
+
- **至少一次真实输出:**
|
|
23
|
+
- **精确症状断言:**
|
|
24
|
+
- **耗时:**
|
|
25
|
+
- **确定性/复现率:**
|
|
26
|
+
- **Agent 可运行性:** autonomous / structured-HITL
|
|
27
|
+
- **无法建立时已尝试方式和所需输入:** 不适用 / ...
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
`feedback_loop_ready: false` 时以下假设表必须为空。
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|---|---|---|---|
|
|
26
|
-
| ... | ... | 日志、测试、代码、配置或用户报告 | high / medium / low |
|
|
31
|
+
## 3. 最小复现
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
- **环境与输入:**
|
|
34
|
+
- **剩余步骤:**
|
|
35
|
+
- **逐项删除证据:**
|
|
36
|
+
- **最后红灯证据:**
|
|
37
|
+
- **捕获物:** 无 / `<Path>{roots.state}/specdev/changes/{change}/diagnostics/<artifact></Path>`
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|---|---|---|---|---|---|
|
|
32
|
-
| 1 | ... | ... | ... | ... | confirmed / rejected / pending |
|
|
39
|
+
## 4. 假设与证伪
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
| 排名 | 假设与预测 | 支持证据 | 单变量实验 | 结果 |
|
|
42
|
+
|---|---|---|---|---|
|
|
35
43
|
|
|
36
44
|
## 5. 已确认根因
|
|
37
45
|
|
|
38
46
|
- **触发条件:**
|
|
39
|
-
- **失败机制:**
|
|
47
|
+
- **失败机制:**
|
|
40
48
|
- **根因位置:** `<Path>src/example.ts</Path>`
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
- **确认实验:**
|
|
44
|
-
|
|
45
|
-
根因未确认时不得把“最可能”写成结论,也不得直接把 change 标记为实现就绪。
|
|
49
|
+
- **漏检原因:**
|
|
50
|
+
- **为何排除其他候选:**
|
|
51
|
+
- **确认实验:**
|
|
46
52
|
|
|
47
53
|
## 6. 修复契约
|
|
48
54
|
|
|
49
55
|
- **必须改变:**
|
|
50
|
-
- **必须保持:**
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- **OUT:**
|
|
56
|
+
- **必须保持:**
|
|
57
|
+
- **正确测试 seam:** `<Path>test/example.test.ts</Path>` / 缺失并路由 R
|
|
58
|
+
- **回归测试:** 修复前红、修复后绿的具体合同
|
|
59
|
+
- **OUT:**
|
|
54
60
|
- **风险与回滚:**
|
|
55
61
|
- **推荐下游:** S-spec / T-tickets / I-implement / R-review-architecture
|
|
56
62
|
|
|
57
|
-
## 7.
|
|
63
|
+
## 7. 清理
|
|
58
64
|
|
|
59
|
-
-
|
|
60
|
-
- [
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- [ ] 修复边界与必须保持项明确;
|
|
64
|
-
- [ ] 未撤销的临时插桩为零,或已登记 owner 与后续删除条件。
|
|
65
|
+
- **原始回路重跑:**
|
|
66
|
+
- **`[DEBUG-...]` 搜索:**
|
|
67
|
+
- **一次性脚本/原型:**
|
|
68
|
+
- **未清理项 owner 与删除条件:** 无 / ...
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 红灯反馈回路
|
|
2
|
+
|
|
3
|
+
本文件只负责阶段 1–2。回路尚未满足完成门时,不加载假设或修复材料。
|
|
4
|
+
|
|
5
|
+
## 构建顺序
|
|
6
|
+
|
|
7
|
+
按大致顺序穷尽适用方式:
|
|
8
|
+
|
|
9
|
+
1. 能触及 bug 的失败测试;
|
|
10
|
+
2. 针对开发服务器的 curl/HTTP 脚本;
|
|
11
|
+
3. 固定输入的 CLI 调用和已知良好输出 diff;
|
|
12
|
+
4. 对 DOM、控制台或网络断言的无头浏览器脚本;
|
|
13
|
+
5. 回放真实请求、负载、事件或追踪捕获物;
|
|
14
|
+
6. 启动最小系统子集的一次性夹具;
|
|
15
|
+
7. 属性或模糊测试循环;
|
|
16
|
+
8. 可供 `git bisect run` 使用的状态检查夹具;
|
|
17
|
+
9. 旧/新版本或配置的差分循环;
|
|
18
|
+
10. 最后手段:复制并定制 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/scripts/hitl-loop.template.sh</Path>`。
|
|
19
|
+
|
|
20
|
+
## 收紧
|
|
21
|
+
|
|
22
|
+
把回路当作需要优化的产品:缩小启动范围和测试目标;断言精确症状而非“没有崩溃”;固定时间、随机、文件系统与网络。记录一次运行耗时和复现率。
|
|
23
|
+
|
|
24
|
+
非确定性问题以提高复现率为目标:批量运行、并行、增加压力、缩小时间窗口或注入 sleep,直到失败率稳定到可调试区间。
|
|
25
|
+
|
|
26
|
+
## 最小化
|
|
27
|
+
|
|
28
|
+
看见正确红灯后,逐项删除输入、调用者、配置、数据和步骤,每次只删除一项并重跑。删除后仍红则永久移除;变绿则恢复。完成时剩余每一项都承载故障。
|
|
29
|
+
|
|
30
|
+
## 无法建立回路
|
|
31
|
+
|
|
32
|
+
停止并列出尝试过的方式,请求以下之一:可复现环境、HAR/日志/core dump/带时间戳录屏等捕获物,或临时生产插桩授权。没有红灯不得进入假设。
|
|
33
|
+
|
|
34
|
+
## 完成门
|
|
35
|
+
|
|
36
|
+
- 命令已至少运行一次并保存调用与输出;
|
|
37
|
+
- 驱动真实 bug 路径并断言用户精确症状;
|
|
38
|
+
- 结果确定,或有稳定且足够高的复现率;
|
|
39
|
+
- 秒级或已证明是当前最短可行回路;
|
|
40
|
+
- Agent 可无人值守运行,或由结构化 HITL 脚本捕获结果;
|
|
41
|
+
- 最小复现的每个剩余元素都有负载作用。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 假设与单变量插桩
|
|
2
|
+
|
|
3
|
+
只在反馈回路已变红并最小化后加载。
|
|
4
|
+
|
|
5
|
+
## 排名假设
|
|
6
|
+
|
|
7
|
+
在测试前生成 3–5 个候选,按证据支持度、解释范围和验证成本排序。每个候选使用:
|
|
8
|
+
|
|
9
|
+
> 如果 X 是原因,那么改变 Y 会让红灯消失,或改变 Z 会使其更明显。
|
|
10
|
+
|
|
11
|
+
无法给出可观察预测的候选不是假设。测试前向用户展示排名;用户 AFK 时记录该 checkpoint 并按排名继续。
|
|
12
|
+
|
|
13
|
+
## 探针
|
|
14
|
+
|
|
15
|
+
每个探针只映射一个预测,一次只改变一个变量:
|
|
16
|
+
|
|
17
|
+
1. 环境支持时优先 debugger 或 REPL;
|
|
18
|
+
2. 其次在区分假设的边界放置定向日志;
|
|
19
|
+
3. 每条临时日志使用同一唯一前缀,如 `[DEBUG-a4f2]`;
|
|
20
|
+
4. 性能分支建立计时/分析器/查询计划基线,再执行二分;
|
|
21
|
+
5. 不使用“记录全部再 grep”代替实验设计。
|
|
22
|
+
|
|
23
|
+
## 根因确认
|
|
24
|
+
|
|
25
|
+
确认项必须同时解释触发条件、失败机制、漏检原因、影响范围、修复为何阻断机制及回归风险。只能缓解症状时标为 workaround。没有正确测试 seam 时记录架构发现并路由 Architecture Review。
|
|
26
|
+
|
|
27
|
+
## 完成门
|
|
28
|
+
|
|
29
|
+
- 每个已测候选有预测、实验、结果和结论;
|
|
30
|
+
- 确认根因能让红灯出现和消失;
|
|
31
|
+
- 其他高排名候选有区分性反证;
|
|
32
|
+
- 临时探针有唯一前缀、owner 和清理结果。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Human-in-the-loop reproduction loop. Copy and edit the steps, then let the
|
|
3
|
+
# Agent run the script while the user performs the prompted actions.
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
step() {
|
|
8
|
+
printf '\n>>> %s\n' "$1"
|
|
9
|
+
read -r -p " [Enter when done] " _
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
capture() {
|
|
13
|
+
local var="$1" question="$2" answer
|
|
14
|
+
printf '\n>>> %s\n' "$question"
|
|
15
|
+
read -r -p " > " answer
|
|
16
|
+
printf -v "$var" '%s' "$answer"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
# Replace these example steps with the exact reproduction.
|
|
20
|
+
step "Open the affected screen and prepare the failing action."
|
|
21
|
+
capture ERRORED "Run the action. Did the exact symptom occur? (y/n)"
|
|
22
|
+
capture ERROR_MSG "Paste the exact error or observed output (or 'none'):"
|
|
23
|
+
|
|
24
|
+
printf '\n--- Captured ---\n'
|
|
25
|
+
printf 'ERRORED=%s\n' "$ERRORED"
|
|
26
|
+
printf 'ERROR_MSG=%s\n' "$ERROR_MSG"
|
package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md
CHANGED
|
@@ -42,7 +42,7 @@ keywords: [认知导师, 教学, why, bug, 源码研究, 技术方案, 架构,
|
|
|
42
42
|
|
|
43
43
|
按存在情况读取:
|
|
44
44
|
|
|
45
|
-
- 原始请求:`<Path>{roots.state}/specdev/changes/{change}/source
|
|
45
|
+
- 原始请求:`<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`
|
|
46
46
|
- 分诊结果:`<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
47
47
|
- 诊断结果:`<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
48
48
|
- 当前领域上下文:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
@@ -74,7 +74,7 @@ keywords: [认知导师, 教学, why, bug, 源码研究, 技术方案, 架构,
|
|
|
74
74
|
2. 选择用户指定 change、唯一活跃 change,或按 SpecDev 协议创建新 change;多个候选必须先消歧;
|
|
75
75
|
3. 确认 `<Path>{roots.state}/specdev/config.json</Path>` 存在;不存在时先进入 `<Path>{roots.workflows}/specdev/I-init-setup/I-init-setup.md</Path>`;
|
|
76
76
|
4. 读取全局状态、change 状态和已有主产物;存在未完成会话时从其 `current_phase` 与未决问题恢复,不重新盘问已记录内容;
|
|
77
|
-
5.
|
|
77
|
+
5. 若当前 change 的 `current_work` 已是 `specdev/engineering-cognitive-mentor` 则恢复;为 null 时设置为该 id;指向其他 Work 时停止并先完成显式 handoff;
|
|
78
78
|
6. 主产物不存在时按模板初始化,存在时只做兼容性读取和真实增量更新。
|
|
79
79
|
|
|
80
80
|
**完成标准:**workspace 与 change 唯一;状态已登记;主产物已初始化或成功恢复;没有覆盖历史记录。
|
|
@@ -204,7 +204,7 @@ keywords: [认知导师, 教学, why, bug, 源码研究, 技术方案, 架构,
|
|
|
204
204
|
- 用户确认当前没有其他问题,或剩余问题被显式延后;
|
|
205
205
|
- 主产物包含完整 `MLOG`、最终综合和后续路线。
|
|
206
206
|
|
|
207
|
-
关闭时更新全局状态与 change
|
|
207
|
+
关闭时更新全局状态与 change 状态,将本 Work 去重加入 `works_run` 并清空 `current_work`,返回主产物完整路径及适用的下一 Work 完整路径。关闭本 Work 不等于完成或归档整个 change。
|
|
208
208
|
|
|
209
209
|
**完成标准:**主产物状态与全局状态一致;完整日志可恢复;未伪造理解或 change 完成状态。
|
|
210
210
|
|
|
@@ -25,26 +25,13 @@ change 状态:`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path
|
|
|
25
25
|
### 开始
|
|
26
26
|
|
|
27
27
|
- 在 `active` 中找到或创建当前 change;
|
|
28
|
-
-
|
|
28
|
+
- `current_work` 已是 `specdev/engineering-cognitive-mentor` 时恢复,为 null 时设置为该 id;指向其他 Work 时停止并要求先完成显式 handoff;
|
|
29
29
|
- `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `current_work` 同步设置为相同值;
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
```json
|
|
33
|
-
{
|
|
34
|
-
"change": "<change>",
|
|
35
|
-
"work_id": "specdev/engineering-cognitive-mentor",
|
|
36
|
-
"started_at": "<ISO-8601>",
|
|
37
|
-
"completed_at": null,
|
|
38
|
-
"result": null
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
若存在两条以上未完成记录,记录状态异常并停止自动写入,先请求消歧或修复。
|
|
30
|
+
- 全局索引不创建逐次调用日志;开始时间与恢复阶段由主产物 frontmatter、MLOG 和 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 承载。
|
|
43
31
|
|
|
44
32
|
### 等待用户或跨会话暂停
|
|
45
33
|
|
|
46
34
|
- 保持 `current_work` 为本 Work;
|
|
47
|
-
- 保持唯一 `work_history` 记录未完成;
|
|
48
35
|
- 更新主产物 `updated_at`、`current_phase`、`next_question`、`unresolved_questions` 与 `last_mlog_id`;
|
|
49
36
|
- 每轮在回复前先落盘,确保用户即使中断也可恢复。
|
|
50
37
|
|
|
@@ -52,10 +39,9 @@ change 状态:`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path
|
|
|
52
39
|
|
|
53
40
|
### 正常关闭
|
|
54
41
|
|
|
55
|
-
- 将唯一未完成 `work_history` 的 `completed_at` 写为当前时间,`result` 写为 `completed`;
|
|
56
42
|
- 将本 Work id 以去重方式加入 active change 的 `works_run`;
|
|
57
43
|
- active change 的 `current_work` 与 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `current_work` 设为 null;
|
|
58
|
-
- 不改变整个 change 的 `
|
|
44
|
+
- 不改变整个 change 的 `change_status`,除非用户明确结束或外部阻塞确实影响整个 change;
|
|
59
45
|
- 主产物 `status` 写为 `completed`,记录 `closed_at` 与理解确认状态。
|
|
60
46
|
|
|
61
47
|
### 外部阻塞
|
|
@@ -64,15 +50,14 @@ change 状态:`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path
|
|
|
64
50
|
|
|
65
51
|
- 主产物 `status: blocked`;
|
|
66
52
|
- 记录 blocker、已知事实、所需输入和恢复条件;
|
|
67
|
-
-
|
|
53
|
+
- 保留 `current_work` 作为唯一恢复指针;
|
|
68
54
|
- change 是否设为 blocked 取决于该阻塞是否阻止整个 change,不自动扩大。
|
|
69
55
|
|
|
70
56
|
### 用户取消
|
|
71
57
|
|
|
72
58
|
- 主产物 `status: cancelled`;
|
|
73
59
|
- 保存当前综合和完整 MLOG;
|
|
74
|
-
- `
|
|
75
|
-
- 清空 current_work;
|
|
60
|
+
- 清空全局与 change 状态的 `current_work`,但不将本 Work 加入 `works_run`;
|
|
76
61
|
- 不删除工件或日志。
|
|
77
62
|
|
|
78
63
|
## 3. 主产物幂等初始化
|
|
@@ -3,7 +3,7 @@ id: specdev/grill-with-docs
|
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: 设计访谈(带文档)
|
|
6
|
-
description: 以完整 frontier
|
|
6
|
+
description: 以完整 frontier 逐轮推进设计树,直到每个决策分支都已关闭并获得用户共识,同时持续维护当前 change 的设计树、日志、领域上下文和架构决策。
|
|
7
7
|
keywords: [设计访谈, grilling, design-tree, frontier, ADR, LOG, CONTEXT, 决策, 领域建模]
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -13,16 +13,16 @@ keywords: [设计访谈, grilling, design-tree, frontier, ADR, LOG, CONTEXT, 决
|
|
|
13
13
|
|
|
14
14
|
按**轮次**推进这棵树。**前沿(frontier)** 是所有前置条件已经确定的决策——那些现在就能问、不必猜测尚未得到答案的问题。每轮询问完整 frontier;用户的答案会重塑设计树并解除下一层问题的阻塞。
|
|
15
15
|
|
|
16
|
-
本 work
|
|
16
|
+
本 work 只把访谈写成当前 change 的可恢复工件:设计树保存进度,LOG 保存讨论轨迹,CONTEXT 保存本 change 已确认的规范语言,ADR 保存已成为本 change 下游合同的架构决定。这些工件不等于项目永久知识,也不构成实现授权;永久 namespace 对 G 只读,只有 `<Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>` 能在实现证据、毕业评估和用户确认通过后执行提升。
|
|
17
17
|
|
|
18
18
|
## 输入与产物
|
|
19
19
|
|
|
20
20
|
按存在情况读取:
|
|
21
21
|
|
|
22
22
|
- `<Path>{roots.state}/specdev/config.json</Path>`
|
|
23
|
-
- `<Path>{roots.state}/specdev/adr/</Path
|
|
24
|
-
- `<Path>{roots.state}/specdev/context/</Path
|
|
25
|
-
- `<Path>{roots.state}/specdev/changes/{change}/source
|
|
23
|
+
- `<Path>{roots.state}/specdev/adr/</Path>`(只读永久基线)
|
|
24
|
+
- `<Path>{roots.state}/specdev/context/</Path>`(只读永久基线)
|
|
25
|
+
- `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`
|
|
26
26
|
- `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
27
27
|
- `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
28
28
|
- `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
@@ -35,6 +35,7 @@ keywords: [设计访谈, grilling, design-tree, frontier, ADR, LOG, CONTEXT, 决
|
|
|
35
35
|
- `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`
|
|
36
36
|
- `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
37
37
|
- `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
38
|
+
- `<Path>{roots.state}/specdev/changes/{change}/questionnaires/</Path>`,仅在第三方 stakeholder 持有阻塞答案时延迟创建。
|
|
38
39
|
|
|
39
40
|
不存在的可选输入静默跳过,不把缺失文件伪装成已知事实。
|
|
40
41
|
|
|
@@ -67,6 +68,8 @@ keywords: [设计访谈, grilling, design-tree, frontier, ADR, LOG, CONTEXT, 决
|
|
|
67
68
|
- 高影响决策:进入设计树;
|
|
68
69
|
- 低影响实现细节:记录为实现者可自行决定,不制造决策节点。
|
|
69
70
|
|
|
71
|
+
阻塞答案既不可发现、当前用户也无法回答、但另一个明确 stakeholder 掌握时,加载 `<Path>{roots.workflows}/specdev/G-grill-with-docs/stakeholder-questionnaire.md</Path>`,生成问卷并保存恢复条件;不在本轮继续猜测该分支。
|
|
72
|
+
|
|
70
73
|
**完成标准**:每个候选问题已分类;用户只接收无法从环境发现的真实决策。
|
|
71
74
|
|
|
72
75
|
### 3. 建立设计树
|
|
@@ -92,18 +95,20 @@ keywords: [设计访谈, grilling, design-tree, frontier, ADR, LOG, CONTEXT, 决
|
|
|
92
95
|
|
|
93
96
|
**完成标准**:本轮开始时的完整 frontier 每个节点都有回答、明确延后或阻塞记录;所有状态已原子写入并重读。
|
|
94
97
|
|
|
95
|
-
### 5.
|
|
98
|
+
### 5. 同步 change-local 领域模型
|
|
96
99
|
|
|
97
|
-
加载 `<Path>{roots.workflows}/specdev/G-grill-with-docs/domain-modeling-rules.md</Path>`。每轮先写 LOG
|
|
100
|
+
加载 `<Path>{roots.workflows}/specdev/G-grill-with-docs/domain-modeling-rules.md</Path>`。每轮先写 LOG,再把已确认且本 change 下游必须使用的项目规范术语同步到 change CONTEXT,最后把同时满足三个准入条件、已成为本 change 合同的架构决定写入 change ADR。
|
|
98
101
|
|
|
99
|
-
历史轨迹只留在 LOG;未确认选项不写成已接受 ADR;已有 ADR 被替代时建立 supersedes
|
|
102
|
+
历史轨迹只留在 LOG;未确认选项不写成已接受 ADR;已有 change ADR 被替代时建立 supersedes 链。同步只更新本 change 工件,不创建、合并或改写永久 `context/`、`adr/`;它记录共识生长过程,不授权产品实现。
|
|
100
103
|
|
|
101
|
-
**完成标准**:LOG、CONTEXT、ADR 和 design tree
|
|
104
|
+
**完成标准**:LOG、CONTEXT、ADR 和 design tree 无冲突;每个同步结论都有用户回答或事实来源;永久 namespace 未被修改。
|
|
102
105
|
|
|
103
106
|
### 6. 共识确认与路由
|
|
104
107
|
|
|
105
108
|
frontier 为空时,向用户确认设计树的每个分支均已走过且已经达成共识。用户指出遗漏时新增节点并继续;只有明确确认后把 design tree 标为 `consensus`。
|
|
106
109
|
|
|
110
|
+
路由前使用 `<Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>` 的 `--stage grill` 校验当前 change;失败时保持本 Work 可恢复状态,不发布共识。
|
|
111
|
+
|
|
107
112
|
随后按成熟度路由:
|
|
108
113
|
|
|
109
114
|
- 通常进入 `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>`;
|
|
@@ -119,7 +124,8 @@ frontier 为空时,向用户确认设计树的每个分支均已走过且已
|
|
|
119
124
|
- 每轮询问的是完整 frontier,依赖未关闭的问题没有提前出现;
|
|
120
125
|
- 可发现事实由 Agent 查找,没有转交用户;
|
|
121
126
|
- design tree 通过 schema,LOG 指针完整;
|
|
122
|
-
- CONTEXT
|
|
127
|
+
- CONTEXT 只包含当前 change 已确认的规范语言,ADR 只包含满足条件且已成为本 change 合同的架构决定;
|
|
128
|
+
- 永久 `context/`、`adr/` 保持只读,未在 G 中执行知识提升;
|
|
123
129
|
- frontier 为空且用户明确确认共识;
|
|
124
130
|
- 状态、权威工件和下一 work 路径已返回;
|
|
125
131
|
- 未执行产品实现。
|
|
@@ -132,3 +138,4 @@ frontier 为空时,向用户确认设计树的每个分支均已走过且已
|
|
|
132
138
|
- ADR 格式:`<Path>{roots.workflows}/specdev/G-grill-with-docs/adr-format.md</Path>`
|
|
133
139
|
- CONTEXT 格式:`<Path>{roots.workflows}/specdev/G-grill-with-docs/context-format.md</Path>`
|
|
134
140
|
- LOG 格式:`<Path>{roots.workflows}/specdev/G-grill-with-docs/log-format.md</Path>`
|
|
141
|
+
- Stakeholder 问卷:`<Path>{roots.workflows}/specdev/G-grill-with-docs/stakeholder-questionnaire.md</Path>`
|
|
@@ -1,24 +1,38 @@
|
|
|
1
1
|
# ADR 格式
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本格式用于 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`。这里的 ADR 是当前 change 的架构决定合同,不是已经提升到永久 `<Path>{roots.state}/specdev/adr/</Path>` 的项目 ADR。
|
|
4
|
+
|
|
5
|
+
只有一个决定同时满足以下三个条件才写 ADR:
|
|
6
|
+
|
|
7
|
+
1. 难以逆转;
|
|
8
|
+
2. 没有上下文会令后续维护者惊讶;
|
|
9
|
+
3. 来自真实可行方案之间的权衡。
|
|
10
|
+
|
|
11
|
+
局部、可逆或没有实质替代方案的选择留在 Ticket/代码。一个 ADR 只表达一个决定。
|
|
4
12
|
|
|
5
13
|
```markdown
|
|
6
14
|
## ADR-###: <标题>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
|
|
16
|
+
**Status:** proposed / accepted / superseded / deprecated
|
|
17
|
+
**Source:** LOG-### / user decision / external specification
|
|
18
|
+
**Supersedes:** none / ADR-###
|
|
19
|
+
|
|
20
|
+
### Context
|
|
21
|
+
<缺少什么背景会让这个决定令人惊讶。>
|
|
22
|
+
|
|
23
|
+
### Decision
|
|
24
|
+
<清晰、规范且可验证的结论。>
|
|
25
|
+
|
|
26
|
+
### Trade-off
|
|
27
|
+
<认真考虑的替代方案,以及为什么接受当前代价。>
|
|
28
|
+
|
|
29
|
+
### Consequences
|
|
30
|
+
<真正重要的正面、负面和风险。>
|
|
31
|
+
|
|
32
|
+
### Verification / Migration
|
|
33
|
+
<仅在适用时出现。>
|
|
22
34
|
```
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
`accepted` 只表示用户已接受该决定作为当前 change 的下游合同;它不证明实现已经落地,也不代表永久知识毕业。修改已接受决定时新建 change ADR 并建立 supersedes 链,不重写历史。
|
|
37
|
+
|
|
38
|
+
只有 A 在 change 完成后对照代码、测试和 Evidence 重新验证,并通过毕业评估与用户确认,才能把决定写为永久 ADR;不通过的决定随归档 change 保留。
|
|
@@ -1,37 +1,17 @@
|
|
|
1
1
|
# CONTEXT 格式
|
|
2
2
|
|
|
3
|
-
CONTEXT
|
|
3
|
+
本格式用于 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`。它是当前 change 已确认、供本 change 下游使用的项目规范语言表,不是 workflow 级永久领域知识。每个文件只描述一个 bounded context;多个 context 的关系写入单独 Context Map。
|
|
4
4
|
|
|
5
5
|
```markdown
|
|
6
|
-
#
|
|
6
|
+
# <Bounded Context>
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **权威来源:** ADR / 代码 / 外部规范 / 用户确认
|
|
8
|
+
**<规范术语>**:<一到两句项目特有定义。>
|
|
9
|
+
_Avoid_: <会造成歧义或已废弃的同义词>
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- 边界:
|
|
16
|
-
- 示例:
|
|
17
|
-
- 反例:
|
|
18
|
-
- 不变量:
|
|
19
|
-
- 代码映射:<Path>src/example.ts</Path> / 无
|
|
20
|
-
- 别名与禁用词:
|
|
21
|
-
- 来源与最后核验:
|
|
22
|
-
|
|
23
|
-
## 概念关系
|
|
24
|
-
- 聚合、生命周期、依赖、拥有关系或状态转换
|
|
25
|
-
|
|
26
|
-
## 全局不变量
|
|
27
|
-
- 始终成立、可被验证且不属于单个 change 的规则
|
|
28
|
-
|
|
29
|
-
## 当前实现映射
|
|
30
|
-
- 领域概念与模块、接口、存储或事件之间的对应
|
|
11
|
+
**<另一个术语>**:<一到两句定义。>
|
|
12
|
+
_Avoid_: none
|
|
13
|
+
```
|
|
31
14
|
|
|
32
|
-
|
|
33
|
-
- 已知偏离、历史负担和待验证假设;不得伪装成已确认事实
|
|
15
|
+
不包含 owner、最后核验、代码路径、实现差距、change 历史、示例大表、普通编程概念或临时假设。来源和演进历史由 LOG/ADR/Spec 保存。
|
|
34
16
|
|
|
35
|
-
|
|
36
|
-
- LOG-###:增加、修订或废弃了什么
|
|
37
|
-
```
|
|
17
|
+
G 不把该文件复制或合并到永久 `<Path>{roots.state}/specdev/context/</Path>`。只有 A 在 change 完成后验证实现证据、应用毕业标准并获得用户确认,才生成或更新永久术语文件;未毕业内容随归档 change 保留。
|