@namewta/speculo 0.3.0 → 0.3.2
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 +1 -2
- package/dist/src/cli.js +40 -6
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/skills-mirror.d.ts +38 -0
- package/dist/src/skills-mirror.js +160 -0
- package/dist/src/skills-mirror.js.map +1 -0
- package/package.json +3 -2
- package/template/canonical/README.md +7 -1
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +2040 -0
- package/template/canonical/canonical-specdev-goal-plan.md +1379 -0
- package/template/canonical/canonical-specdev-grill-with-docs.md +848 -285
- package/template/canonical/canonical-specdev-spec.md +1061 -46
- package/template/canonical/canonical-specdev-tickets.md +1529 -175
- package/template/canonical/canonical-specdev-wayfinder.md +677 -107
- package/template/commands/git-repository-audit.md +682 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +69 -36
- package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +15 -0
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +32 -0
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +51 -51
- package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +64 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +252 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/architecture-guidance.md +90 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/bug-guidance.md +80 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/codebase-guidance.md +107 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/comprehension-and-closure.md +95 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/domain-learning-guidance.md +62 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/evidence-and-options.md +132 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/interaction-protocol.md +116 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/mentor-report-template.md +135 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/mode-routing.md +47 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +147 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/requirements-guidance.md +92 -0
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +100 -30
- package/template/workflows/specdev/G-grill-with-docs/adr-format.md +22 -77
- package/template/workflows/specdev/G-grill-with-docs/context-format.md +27 -53
- package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +6 -82
- package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +32 -49
- package/template/workflows/specdev/G-grill-with-docs/log-format.md +16 -98
- package/template/workflows/specdev/I-implement/I-implement.md +168 -52
- package/template/workflows/specdev/I-implement/code-review-process.md +10 -76
- package/template/workflows/specdev/I-implement/codebase-design-glossary.md +12 -109
- package/template/workflows/specdev/I-implement/deepening.md +12 -32
- package/template/workflows/specdev/I-implement/design-it-twice.md +6 -41
- package/template/workflows/specdev/I-implement/evidence-template.md +69 -0
- package/template/workflows/specdev/I-implement/execution-preflight.md +20 -0
- package/template/workflows/specdev/I-implement/tdd-examples.md +10 -135
- package/template/workflows/specdev/I-implement/tdd-rules.md +12 -28
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +81 -86
- package/template/workflows/specdev/I-init-setup/change-status-template.json +15 -0
- package/template/workflows/specdev/I-init-setup/config-template.json +26 -0
- package/template/workflows/specdev/I-init-setup/domain-layout-template.md +23 -0
- package/template/workflows/specdev/I-init-setup/status-labels-template.md +55 -0
- package/template/workflows/specdev/I-init-setup/status-template.json +7 -0
- package/template/workflows/specdev/I-init-setup/tracking-template.md +10 -0
- package/template/workflows/specdev/INDEX.md +165 -82
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +108 -44
- package/template/workflows/specdev/P-goal-plan/completion-control.md +79 -0
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +105 -0
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +115 -0
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +70 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +103 -40
- package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +58 -0
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +68 -0
- package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +11 -0
- package/template/workflows/specdev/S-spec/S-spec.md +103 -49
- package/template/workflows/specdev/S-spec/spec-readiness.md +16 -0
- package/template/workflows/specdev/S-spec/spec-template.md +95 -0
- package/template/workflows/specdev/T-tickets/T-tickets.md +146 -133
- package/template/workflows/specdev/T-tickets/decomposition-rules.md +56 -0
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +45 -0
- package/template/workflows/specdev/T-tickets/ticket-template.md +124 -0
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +52 -50
- package/template/workflows/specdev/T-triage/T-triage.md +32 -63
- package/template/workflows/specdev/T-triage/triage-template.md +29 -0
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +88 -155
- package/template/workflows/specdev/W-wayfinder/investigation-ticket-template.md +50 -0
- package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +46 -0
- package/template/workflows/specdev/_state/status.json +1 -1
- package/template/workflows/specdev/common/README.md +47 -0
- package/template/workflows/specdev/common/rules/artifact-contract.md +57 -0
- package/template/workflows/specdev/common/rules/code-commenting-rule.md +39 -0
- package/template/workflows/specdev/common/rules/deviation-control.md +43 -0
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +57 -0
- package/template/workflows/specdev/common/rules/path-ownership.md +35 -0
- package/template/workflows/specdev/common/rules/path-reference-contract.md +116 -0
- package/template/workflows/specdev/common/rules/planning-principles.md +57 -0
- package/template/workflows/specdev/common/rules/readiness-and-depth.md +51 -0
- package/template/workflows/specdev/common/schemas/change-status.schema.json +170 -0
- package/template/workflows/specdev/common/schemas/config.schema.json +54 -0
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +21 -0
- package/template/workflows/specdev/common/schemas/spec.schema.json +16 -0
- package/template/workflows/specdev/common/schemas/status.schema.json +149 -0
- package/template/workflows/specdev/common/schemas/ticket.schema.json +130 -0
- package/template/workflows/specdev/common/schemas/tickets-map.schema.json +14 -0
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +28 -0
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +30 -0
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +16 -0
- package/template/workflows/specdev/common/skills/research/SKILL.md +43 -0
- package/template/workflows/specdev/common/tools/README.md +16 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +1155 -0
- package/template/canonical/canonical-teach.md +0 -301
- package/template/workflows/specdev/A-archive-and-consolidate/archive-rules.md +0 -49
- package/template/workflows/specdev/A-archive-and-consolidate/cleanup-rules.md +0 -80
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-rules.md +0 -122
- package/template/workflows/specdev/A-archive-and-consolidate/discrimination-guide.md +0 -96
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-graduation.md +0 -51
- package/template/workflows/specdev/D-diagnose-bugs/cleanup-postmortem.md +0 -37
- package/template/workflows/specdev/D-diagnose-bugs/feedback-loop-techniques.md +0 -84
- package/template/workflows/specdev/D-diagnose-bugs/hypothesis-format.md +0 -46
- package/template/workflows/specdev/D-diagnose-bugs/instrumentation-rules.md +0 -51
- package/template/workflows/specdev/I-init-setup/domain-layout.md +0 -55
- package/template/workflows/specdev/I-init-setup/status-labels.md +0 -53
- package/template/workflows/specdev/I-init-setup/tracking-convention.md +0 -52
- package/template/workflows/specdev/P-goal-plan/execution-sections.md +0 -126
- package/template/workflows/specdev/P-goal-plan/governance-sections.md +0 -103
- package/template/workflows/specdev/P-goal-plan/input-validation.md +0 -94
- package/template/workflows/specdev/P-goal-plan/lead-orchestration-protocol.md +0 -158
- package/template/workflows/specdev/P-goal-plan/quick-reference-table.md +0 -60
- package/template/workflows/specdev/P-goal-plan/vision-sections.md +0 -80
- package/template/workflows/specdev/R-review-architecture/exploration-guide.md +0 -103
- package/template/workflows/specdev/R-review-architecture/html-report-template.md +0 -124
- package/template/workflows/specdev/T-triage/artifact-templates.md +0 -122
- package/template/workflows/specdev/T-triage/intake-rules.md +0 -71
- package/template/workflows/specdev/T-triage/routing-rules.md +0 -70
- package/template/workflows/specdev/T-triage/understanding-rules.md +0 -102
- package/template/workflows/specdev/_state/adr/.gitkeep +0 -0
- package/template/workflows/specdev/_state/context/.gitkeep +0 -0
- package/template/workflows/specdev/_state/research/.gitkeep +0 -0
- package/template/workflows/specdev/common/dev-worktree/SKILL.md +0 -48
- package/template/workflows/specdev/common/dev-worktree/references/create.md +0 -63
- package/template/workflows/specdev/common/dev-worktree/references/finalize.md +0 -102
- package/template/workflows/specdev/common/handoff/SKILL.md +0 -42
- package/template/workflows/specdev/common/neat-freak/SKILL.md +0 -210
- package/template/workflows/specdev/common/neat-freak/references/agent-paths.md +0 -72
- package/template/workflows/specdev/common/neat-freak/references/governance.md +0 -88
- package/template/workflows/specdev/common/neat-freak/references/sync-matrix.md +0 -77
- package/template/workflows/specdev/common/neat-freak/references/verification.md +0 -92
- package/template/workflows/specdev/common/neat-freak/scripts/audit-inventory.sh +0 -106
- package/template/workflows/specdev/common/prototype/LOGIC.md +0 -89
- package/template/workflows/specdev/common/prototype/SKILL.md +0 -78
- package/template/workflows/specdev/common/prototype/UI.md +0 -120
- package/template/workflows/specdev/common/research/SKILL.md +0 -54
- package/template/workflows/specdev/common/resolving-merge-conflicts/SKILL.md +0 -14
- package/template/workflows/specdev/common/scripts/hitl-loop.template.sh +0 -41
- package/template/workflows/specdev/common/triage/AGENT-BRIEF.md +0 -204
- package/template/workflows/specdev/common/triage/OUT-OF-SCOPE.md +0 -104
- package/template/workflows/specdev/common/triage/SKILL.md +0 -112
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# 知识毕业标准
|
|
2
|
-
|
|
3
|
-
判定变更中的知识是否值得提取到 specdev 的永久知识库(`adr/`、`context/`、`research/`)。默认只提取满足标准的;其余归为 `ephemeral`,留在归档变更中供未来按需查阅。
|
|
4
|
-
|
|
5
|
-
## 毕业标准(三项满足任一即提取)
|
|
6
|
-
|
|
7
|
-
1. **稳定机制**:知识描述的是持久架构模式、设计原则或系统约束,不是临时实现细节或过渡方案。
|
|
8
|
-
- ✅ "认证模块使用 JWT + refresh token 双令牌机制"
|
|
9
|
-
- ❌ "临时绕过了 rate limiter,等待 PR #342 合并后移除"
|
|
10
|
-
|
|
11
|
-
2. **重复教训**:同一洞察在多个变更中出现(>1 个变更引用或触及)。
|
|
12
|
-
- ✅ 三个不同变更都遇到"时区转换必须用 UTC 存储、展示层转换"的坑
|
|
13
|
-
- ❌ 仅在一个变更的调试过程中发现,未被其他变更证实
|
|
14
|
-
|
|
15
|
-
3. **接手者必知**:缺少此知识会导致后续开发者做出错误决策或重复已解决的争论。
|
|
16
|
-
- ✅ "选择 PostgreSQL 而非 MongoDB 的原因:需要 ACID 事务和 JSONB 的混合查询能力"
|
|
17
|
-
- ❌ "lint 配置将 max-line-length 设为 120 而非 100"
|
|
18
|
-
|
|
19
|
-
## 反毕业标准(满足任一项则不提取)
|
|
20
|
-
|
|
21
|
-
- 仅适用于单次变更的实现细节(具体行号、临时变量名、中间重构步骤)
|
|
22
|
-
- 已解决的临时变通方案(workaround 已被正式修复取代)
|
|
23
|
-
- 调试日志、故障排查过程记录(除非提炼出可复用的诊断方法)
|
|
24
|
-
- 变更自身的 ADR.md 已充分捕获的决策(不重复提取)
|
|
25
|
-
- 脱离完整变更上下文会产生误导的内容
|
|
26
|
-
- 纯个人偏好且无项目级约束力
|
|
27
|
-
|
|
28
|
-
## 决策流程
|
|
29
|
-
|
|
30
|
-
对每段待评估知识:
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
1. 满足任一毕业标准? → 否 → ephemeral(留在归档变更)
|
|
34
|
-
2. 触发任一反毕业标准? → 是 → ephemeral
|
|
35
|
-
3. 提取 → 进入目标知识库的比对与合并
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## specdev 三文件模型映射
|
|
39
|
-
|
|
40
|
-
specdev 每个变更遵循三文件模型(参见 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`)。知识提取按以下映射:
|
|
41
|
-
|
|
42
|
-
| 来源文件 | 知识类型 | 判定特征 | 目标知识库 |
|
|
43
|
-
|---------|---------|---------|-----------|
|
|
44
|
-
| **ADR.md** | 架构决策 | `## NNNN: Title` 条目,满足三条件(难以逆转 + 令人意外 + 真实权衡) | `<Path>{roots.state}/specdev/adr/</Path>` |
|
|
45
|
-
| **CONTEXT.md** | 领域术语 | `**术语名**:定义` + `_Avoid_` 条目,项目特有概念 | `<Path>{roots.state}/specdev/context/</Path>` |
|
|
46
|
-
| **LOG.md** | 设计决策 | `LOG-XXXX: accepted` 条目,满足 ADR 三条件但未正式记录 → 提升为 ADR | `<Path>{roots.state}/specdev/adr/</Path>` |
|
|
47
|
-
| **research/** | 研究产物 | 跨变更相关的研究发现(>1 变更引用或覆盖共享技术栈) | `<Path>{roots.state}/specdev/research/</Path>` |
|
|
48
|
-
|
|
49
|
-
## Ephemeral 分类
|
|
50
|
-
|
|
51
|
-
被判定为 `ephemeral` 的知识**不删除**——它随归档变更保留在 `<Path>{roots.state}/specdev/archive/<YYYY-MM>/<change>/</Path>` 中,供未来按需查阅。只是不提升到 workflow 级永久知识库。
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# 清理与事后分析
|
|
2
|
-
|
|
3
|
-
诊断完成、修复已由 I-implement 执行后,必须完成以下清理和复盘。
|
|
4
|
-
|
|
5
|
-
## 清理检查清单
|
|
6
|
-
|
|
7
|
-
逐项确认:
|
|
8
|
-
|
|
9
|
-
- [ ] 原始复现不再复现——重新运行阶段 2 的反馈回路,确认变绿
|
|
10
|
-
- [ ] 回归测试通过——I-implement 已为修复编写并通过回归测试
|
|
11
|
-
- [ ] 所有 `[DEBUG-xxxx]` 插桩已移除——`grep -r "\[DEBUG-"` 项目根目录,确认无残留
|
|
12
|
-
- [ ] 一次性原型已删除——移除所有为诊断创建的临时脚本、测试夹具、mock 数据
|
|
13
|
-
- [ ] 被证实的假设已记录到 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`,以便下一个调试者学习
|
|
14
|
-
|
|
15
|
-
## 记录根因
|
|
16
|
-
|
|
17
|
-
在 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` 中追加条目:
|
|
18
|
-
|
|
19
|
-
```markdown
|
|
20
|
-
## [YYYY-MM-DD] 诊断:<bug 简述>
|
|
21
|
-
|
|
22
|
-
- **根因**:<被证实的假设,包含技术细节>
|
|
23
|
-
- **验证方式**:<哪个探测确认了根因>
|
|
24
|
-
- **修复提交**:<I-implement 的提交 hash 或描述>
|
|
25
|
-
- **预防建议**:<什么本可以预防此 bug>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 事后分析
|
|
29
|
-
|
|
30
|
-
问:什么本可以预防这个 bug?从以下维度审视:
|
|
31
|
-
|
|
32
|
-
- **测试接缝**——是否缺少合适的测试接缝?如果有好的接缝,此 bug 是否会被更早发现?
|
|
33
|
-
- **接口设计**——接口是否暴露了容易误用的契约?深度是否足够防止调用者犯错?
|
|
34
|
-
- **数据边界**——是否缺少输入校验、类型约束或边界条件处理?
|
|
35
|
-
- **耦合**——是否因模块间的隐藏耦合导致变更的连锁反应?
|
|
36
|
-
|
|
37
|
-
如果答案涉及架构变更(没有好的测试接缝、纠缠的调用者、隐藏的耦合),将具体情况记录到 LOG.md 的预防建议中。在修复之后提出建议——此时比诊断开始时拥有更多信息。
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# 反馈回路构建技术
|
|
2
|
-
|
|
3
|
-
反馈回路是诊断的核心——一个紧凑的通过/失败信号,锚定 bug 的症状。以下技术按大致优先级排列,从最理想到最后手段。
|
|
4
|
-
|
|
5
|
-
## 构建方式
|
|
6
|
-
|
|
7
|
-
按顺序尝试,直到获得一个可工作的回路:
|
|
8
|
-
|
|
9
|
-
### 1. 失败测试
|
|
10
|
-
|
|
11
|
-
在能触及 bug 的任意接缝编写——单元测试、集成测试、端到端测试。优先选择现有的测试接缝。观察项目中已有的测试了解如何注入测试。
|
|
12
|
-
|
|
13
|
-
### 2. Curl / HTTP 脚本
|
|
14
|
-
|
|
15
|
-
针对正在运行的开发服务器。固定请求参数,对响应状态码和关键字段进行断言。
|
|
16
|
-
|
|
17
|
-
### 3. CLI 调用
|
|
18
|
-
|
|
19
|
-
带固定输入调用 CLI,将 stdout 与已知良好快照进行 diff。适合命令行工具和数据管道。
|
|
20
|
-
|
|
21
|
-
### 4. 无头浏览器脚本
|
|
22
|
-
|
|
23
|
-
Playwright 或 Puppeteer 驱动 UI,对 DOM 状态、控制台输出、网络请求进行断言。适合前端 bug。
|
|
24
|
-
|
|
25
|
-
### 5. 回放捕获的追踪数据
|
|
26
|
-
|
|
27
|
-
将真实网络请求、负载、事件日志保存到磁盘,在隔离环境中通过代码路径回放。适合需要真实数据的场景。
|
|
28
|
-
|
|
29
|
-
### 6. 一次性测试夹具
|
|
30
|
-
|
|
31
|
-
启动系统的最小子集——一个服务、模拟依赖——用单个函数调用驱动 bug 代码路径。适合微服务或多组件交互的 bug。
|
|
32
|
-
|
|
33
|
-
### 7. 属性 / 模糊测试循环
|
|
34
|
-
|
|
35
|
-
如果 bug 表现为"有时输出错误",运行 1000 次随机输入寻找故障模式。适合数据相关或边界条件 bug。
|
|
36
|
-
|
|
37
|
-
### 8. 二分查找夹具
|
|
38
|
-
|
|
39
|
-
如果 bug 出现在两个已知状态之间(commit、数据集、版本),自动化"在状态 X 启动、检查、重复"以便 `git bisect run`。
|
|
40
|
-
|
|
41
|
-
### 9. 差分循环
|
|
42
|
-
|
|
43
|
-
通过旧版本 vs 新版本(或两种配置)运行相同输入,对输出进行 diff。适合回归 bug。
|
|
44
|
-
|
|
45
|
-
### 10. HITL bash 脚本
|
|
46
|
-
|
|
47
|
-
最后手段。如果必须由人工点击,使用 `<Path>{roots.workflows}/specdev/common/scripts/hitl-loop.template.sh</Path>` 驱动人工操作,使循环仍然结构化。捕获的输出反馈给 agent。
|
|
48
|
-
|
|
49
|
-
复制模板,编辑步骤,运行脚本。脚本中的 `step` 函数显示指令并等待按 Enter,`capture` 函数显示问题并读取响应。结束时以 `KEY=VALUE` 格式打印捕获的值供 agent 解析。
|
|
50
|
-
|
|
51
|
-
## 收紧回路
|
|
52
|
-
|
|
53
|
-
将回路视为产品。一旦有了一个回路,收紧它:
|
|
54
|
-
|
|
55
|
-
- **更快**——缓存设置、跳过无关初始化、缩小测试范围
|
|
56
|
-
- **更清晰**——针对具体症状断言,而非"没崩溃"
|
|
57
|
-
- **更确定**——固定时间、种子随机数、隔离文件系统、冻结网络
|
|
58
|
-
|
|
59
|
-
一个 30 秒的抖动回路比没有回路好不了多少;一个 2 秒的确定性回路是调试的超能力。
|
|
60
|
-
|
|
61
|
-
## 非确定性 bug
|
|
62
|
-
|
|
63
|
-
目标不是干净的复现,而是更高的复现率。循环触发 100 次,并行化,增加压力,缩小时间窗口,注入 sleep。50% 抖动的 bug 是可调试的;1% 则不行——持续提高复现率直到可调试。
|
|
64
|
-
|
|
65
|
-
## 当确实无法构建回路时
|
|
66
|
-
|
|
67
|
-
停下来,明确说明。列出已尝试的方法。向用户请求:
|
|
68
|
-
|
|
69
|
-
1. 访问能复现的任何环境
|
|
70
|
-
2. 一个捕获的产物——HAR 文件、日志转储、核心转储、带时间戳的屏幕录制
|
|
71
|
-
3. 添加临时生产环境插桩的许可
|
|
72
|
-
|
|
73
|
-
在没有回路的情况下进入假设阶段是本规程要防止的核心失败模式。没有变红能力的命令,就没有后续阶段。
|
|
74
|
-
|
|
75
|
-
## 最小化协议
|
|
76
|
-
|
|
77
|
-
复现后,将场景缩小到仍能变红的最小场景。逐个削减以下元素,每次削减后重新运行回路:
|
|
78
|
-
|
|
79
|
-
1. 输入数据——减少字段、缩小数据集、简化参数
|
|
80
|
-
2. 调用者——移除中间层、直接调用核心逻辑
|
|
81
|
-
3. 配置——使用默认值、移除环境变量
|
|
82
|
-
4. 步骤——跳过前置操作、合并中间步骤
|
|
83
|
-
|
|
84
|
-
每个剩余元素必须有负载作用——移除其中任何一个都会使回路变绿。最小复现场景缩小了假设空间,并成为最终的回归测试基础。
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# 假设格式与诊断计划
|
|
2
|
-
|
|
3
|
-
在插桩之前生成多个排名假设。单一假设会锚定在第一个看似合理的想法上。每个假设必须是可证伪的——陈述其预测。
|
|
4
|
-
|
|
5
|
-
## 假设格式
|
|
6
|
-
|
|
7
|
-
每个假设使用以下模板:
|
|
8
|
-
|
|
9
|
-
> 如果 `<根因>` 是原因,那么 `<改变 X>` 会使 bug 消失 / `<改变 Z>` 会使它更糟。
|
|
10
|
-
|
|
11
|
-
无法陈述预测的假设只是感觉——精炼或丢弃它。
|
|
12
|
-
|
|
13
|
-
示例:
|
|
14
|
-
|
|
15
|
-
> 如果缓存键在用户 ID 包含特殊字符时生成错误,那么将用户 ID 替换为纯字母数字字符串会使 bug 消失,而保持原 ID 并在缓存查询前打印键值会显示格式错误的键。
|
|
16
|
-
|
|
17
|
-
## 排名规则
|
|
18
|
-
|
|
19
|
-
生成 3-5 个假设,按以下优先级排名:
|
|
20
|
-
|
|
21
|
-
1. **最近变更**——最近修改的代码区域优先。新代码是 bug 最常见的来源。
|
|
22
|
-
2. **数据边界**——涉及空值、特殊字符、极限值、类型转换的假设优先于一般逻辑错误。
|
|
23
|
-
3. **时序与并发**——涉及竞态条件、异步顺序、超时的假设在单线程同步假设之后。
|
|
24
|
-
4. **外部依赖**——涉及第三方库、API 响应变更、环境差异的假设排在最后。
|
|
25
|
-
|
|
26
|
-
## 诊断计划呈现
|
|
27
|
-
|
|
28
|
-
将排名假设列表作为诊断计划呈现给用户。使用以下格式:
|
|
29
|
-
|
|
30
|
-
```markdown
|
|
31
|
-
## 诊断计划
|
|
32
|
-
|
|
33
|
-
基于当前症状和代码库理解,以下是 3-5 个按优先级排名的可证伪假设:
|
|
34
|
-
|
|
35
|
-
1. **[假设名称]** —— 如果 `<根因>` 是原因,那么 `<预测>`。
|
|
36
|
-
2. **[假设名称]** —— 如果 `<根因>` 是原因,那么 `<预测>`。
|
|
37
|
-
...
|
|
38
|
-
|
|
39
|
-
请确认计划或调整优先级。你是否已经排除了其中任何一个?
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
用户通常拥有能立即重排名的领域知识——低成本检查点,大幅节省时间。向用户展示后等待确认。
|
|
43
|
-
|
|
44
|
-
## AFK 默认行为
|
|
45
|
-
|
|
46
|
-
如果用户 AFK(无响应),按排名继续——从排名最高的假设开始插桩验证。在每个假设被排除后,更新排名并继续下一个,无需等待确认。
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# 插桩验证规则
|
|
2
|
-
|
|
3
|
-
每个探测必须映射到诊断计划中的一个具体预测。每次只改变一个变量。
|
|
4
|
-
|
|
5
|
-
## 探测映射
|
|
6
|
-
|
|
7
|
-
在添加任何插桩之前,明确陈述:
|
|
8
|
-
|
|
9
|
-
- 此探测验证诊断计划中的哪个假设、哪个预测
|
|
10
|
-
- 期望看到什么结果(如果假设正确)
|
|
11
|
-
- 期望看到什么结果(如果假设错误)
|
|
12
|
-
|
|
13
|
-
每次探测后记录实际结果,与预测对照。如果预测不匹配,该假设被排除,移至下一个。
|
|
14
|
-
|
|
15
|
-
## 工具偏好
|
|
16
|
-
|
|
17
|
-
按优先级选择插桩方式:
|
|
18
|
-
|
|
19
|
-
### 1. 调试器 / REPL 检查
|
|
20
|
-
|
|
21
|
-
如果环境支持,优先使用。一个断点胜过十行日志。在关键路径上设置条件断点,检查变量状态和调用栈。
|
|
22
|
-
|
|
23
|
-
### 2. 针对性日志
|
|
24
|
-
|
|
25
|
-
在能区分假设的边界处添加日志——模块接口、数据转换点、分支条件。日志内容应包含:
|
|
26
|
-
|
|
27
|
-
- 所在假设的简短标识
|
|
28
|
-
- 关键变量的值
|
|
29
|
-
- 与预测相关的状态信息
|
|
30
|
-
|
|
31
|
-
### 3. 每条日志必须有明确的验证目标
|
|
32
|
-
|
|
33
|
-
全量日志淹没信号。每条日志单独对应一个假设预测,通过唯一前缀追溯到诊断计划中的具体条目。
|
|
34
|
-
|
|
35
|
-
## 调试日志标记
|
|
36
|
-
|
|
37
|
-
所有调试日志使用唯一前缀标记,格式为 `[DEBUG-xxxx]`,其中 `xxxx` 为 4 位随机字母数字(如 `[DEBUG-a4f2]`)。在日志消息中包含:
|
|
38
|
-
|
|
39
|
-
```javascript
|
|
40
|
-
console.log(`[DEBUG-a4f2] 缓存键: ${cacheKey}, 用户ID: ${userId}`)
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
最终的清理只需一次 `grep`——未标记的日志保留,已标记的日志删除。
|
|
44
|
-
|
|
45
|
-
## 性能分支
|
|
46
|
-
|
|
47
|
-
对于性能回归,日志通常是错误工具。替代方案:
|
|
48
|
-
|
|
49
|
-
1. 建立基线测量——计时夹具、`performance.now()`、分析器、查询计划
|
|
50
|
-
2. 二分查找——定位引入回归的变更点
|
|
51
|
-
3. 先测量,后修复——在没有测量基线的情况下,任何优化都是猜测
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# 领域文档布局
|
|
2
|
-
|
|
3
|
-
specdev 各 work 在探索代码库时应如何使用该仓库的领域文档。
|
|
4
|
-
|
|
5
|
-
## 布局:单上下文
|
|
6
|
-
|
|
7
|
-
specdev 使用单上下文布局——整个 workflow 共享一套领域术语和架构决策。每个变更目录 `changes/<change>/` 下维护三文件模型:
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
{state_root}/changes/<change>/
|
|
11
|
-
├── CONTEXT.md ← 领域词汇表
|
|
12
|
-
├── ADR.md ← 本变更相关的架构决策记录
|
|
13
|
-
└── LOG.md ← 设计决策日志
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
三个文件的权威格式由 `G-grill-with-docs` 定义,本文件不重复:
|
|
17
|
-
|
|
18
|
-
- **CONTEXT.md** —— 格式见 `<Path>{roots.workflows}/specdev/G-grill-with-docs/context-format.md</Path>`(规范术语 + `_Avoid_` 同义词列表)
|
|
19
|
-
- **ADR.md** —— 格式见 `<Path>{roots.workflows}/specdev/G-grill-with-docs/adr-format.md</Path>`(单文件、`## NNNN: 标题` 分段)
|
|
20
|
-
- **LOG.md** —— 格式见 `<Path>{roots.workflows}/specdev/G-grill-with-docs/log-format.md</Path>`(`## LOG-XXXX` 编号条目、文件末尾追加)
|
|
21
|
-
|
|
22
|
-
> specdev 将变更内领域文档限定在 `changes/<change>/` 目录内。经确认后的 ADR/CONTEXT 由 `A-archive-and-consolidate` 提升到永久目录 `{roots.state}/specdev/adr/` 与 `{roots.state}/specdev/context/`,始终反映项目当前现状。
|
|
23
|
-
|
|
24
|
-
## 路径解析规则
|
|
25
|
-
|
|
26
|
-
**本文件描述的路径均为相对于 `{state_root}` 的逻辑路径。** 实际写入时由 Speculo persistence 层映射到 `{roots.state}/specdev/` 命名空间下。
|
|
27
|
-
|
|
28
|
-
- `CONTEXT.md` → `{state_root}/changes/<current_change>/CONTEXT.md`
|
|
29
|
-
- `ADR.md` → `{state_root}/changes/<current_change>/ADR.md`
|
|
30
|
-
- `LOG.md` → `{state_root}/changes/<current_change>/LOG.md`
|
|
31
|
-
- `{state_root}` 由 runtime-context 解析为 `{roots.state}/specdev/`
|
|
32
|
-
- `<current_change>` 按 INDEX 启动协议从 `status.json` 的 `active` 数组确定
|
|
33
|
-
|
|
34
|
-
## 在探索之前
|
|
35
|
-
|
|
36
|
-
当 specdev work 需要领域上下文时,按以下顺序读取:
|
|
37
|
-
|
|
38
|
-
1. **永久目录**(若存在)—— `{state_root}/context/` 与 `{state_root}/adr/`,反映项目当前现状
|
|
39
|
-
2. **`CONTEXT.md`**(当前变更目录内)—— 本变更的领域语言
|
|
40
|
-
3. **`ADR.md`**(当前变更目录内)—— 涉及当前变更的架构决策
|
|
41
|
-
4. **`LOG.md`**(当前变更目录内)—— 设计决策历史
|
|
42
|
-
|
|
43
|
-
如果这些文件都不存在,静默继续。不要标记它们的缺失或预先建议创建。`G-grill-with-docs` 在领域知识或决策实际被确定时延迟创建它们。
|
|
44
|
-
|
|
45
|
-
## 使用术语表的词汇
|
|
46
|
-
|
|
47
|
-
输出中命名领域概念时,使用 `CONTEXT.md` 中定义的术语,不偏离到 `_Avoid_` 列表明确避免的同义词。如果需要的新概念尚未在术语表中,按 context-format 的增删改操作记录到 `CONTEXT.md` 并通知用户。
|
|
48
|
-
|
|
49
|
-
## 标记 ADR 冲突
|
|
50
|
-
|
|
51
|
-
如果输出与现有 ADR 矛盾,明确提出而不是默默覆盖:
|
|
52
|
-
|
|
53
|
-
> _与 ADR NNNN 矛盾 — 但值得重新讨论,因为……_
|
|
54
|
-
|
|
55
|
-
同时按 log-format 在 `LOG.md` 末尾追加一条日志条目(状态 `deferred`)记录冲突内容与重新讨论的理由;如采纳新方案,按 adr-format 的修改规则更新对应 ADR 状态。
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# 状态标签
|
|
2
|
-
|
|
3
|
-
specdev 的 issue 分诊(`T-triage` 及 `common/triage` skill)使用五种规范的状态角色来追踪工作项的生命周期。本文件将这些角色映射到持久化文件中使用的实际标签字符串。
|
|
4
|
-
|
|
5
|
-
| 角色 | 标签 | 含义 |
|
|
6
|
-
|------|------|------|
|
|
7
|
-
| `needs-triage` | `needs-triage` | 需要评估 —— 维护者需要判断此工作项的性质、优先级和归属 |
|
|
8
|
-
| `needs-info` | `needs-info` | 等待补充信息 —— 工作项描述不足,等待报告者或需求方提供更多上下文 |
|
|
9
|
-
| `ready-for-agent` | `ready-for-agent` | 可执行 —— 已完整定义,agent 无需额外人工上下文即可领取并开始工作 |
|
|
10
|
-
| `ready-for-human` | `ready-for-human` | 需人工处理 —— 工作项需要人工判断、审批或执行,不适合 agent 自动处理 |
|
|
11
|
-
| `wontfix` | `wontfix` | 不处理 —— 经评估后决定不予处理,保留记录以供追溯 |
|
|
12
|
-
|
|
13
|
-
## 使用方式
|
|
14
|
-
|
|
15
|
-
当 work 提及某个角色(例如"标记为需要评估"、"应用 ready-for-agent 状态")时,使用此表中对应的标签字符串写入持久化文件。
|
|
16
|
-
|
|
17
|
-
标签字符串写入位置取决于具体 work:
|
|
18
|
-
|
|
19
|
-
- **T-triage** —— 写入变更目录 `triage.md` 的推荐 status 字段(参见 T-triage 步骤 4)
|
|
20
|
-
- **其他 work** —— 引用这些角色时,在变更目录的相应产物文件中以元数据行形式记录
|
|
21
|
-
|
|
22
|
-
## 状态流转
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
needs-triage ──→ needs-info ──→ needs-triage ──→ ready-for-agent
|
|
26
|
-
│ │
|
|
27
|
-
│ ├──→ ready-for-human
|
|
28
|
-
│ │
|
|
29
|
-
└──────────────────→ wontfix ←──────────────────┘
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
- `needs-triage` → `needs-info`:评估后发现信息不足,退回补充
|
|
33
|
-
- `needs-triage` → `ready-for-agent`:已完整定义,可供 agent 执行
|
|
34
|
-
- `needs-triage` → `ready-for-human`:需要人工处理
|
|
35
|
-
- `needs-triage` → `wontfix`:决定不予处理
|
|
36
|
-
- `needs-info` → `needs-triage`:补充信息后重新评估
|
|
37
|
-
- `ready-for-agent` → `wontfix`:执行过程中发现不再适用
|
|
38
|
-
|
|
39
|
-
## 自定义标签
|
|
40
|
-
|
|
41
|
-
如果你的项目已有不同的标签命名习惯(例如使用 `bug:triage` 而不是 `needs-triage`),编辑右侧的"标签"列以匹配你实际使用的字符串。左侧的"角色"列不变——各 work 通过角色名引用状态,不直接依赖标签字符串。
|
|
42
|
-
|
|
43
|
-
例如,如果你的项目使用中文标签:
|
|
44
|
-
|
|
45
|
-
| 角色 | 标签 |
|
|
46
|
-
|------|------|
|
|
47
|
-
| `needs-triage` | `待评估` |
|
|
48
|
-
| `needs-info` | `待补充` |
|
|
49
|
-
| `ready-for-agent` | `可执行` |
|
|
50
|
-
| `ready-for-human` | `需人工` |
|
|
51
|
-
| `wontfix` | `不处理` |
|
|
52
|
-
|
|
53
|
-
确保标签字符串在实际使用位置(triage.md 等产物文件)保持一致。
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# 变更追踪:本地 Markdown
|
|
2
|
-
|
|
3
|
-
specdev workflow 的变更以 markdown 目录形式存储在 `{roots.state}/specdev/changes/` 中。
|
|
4
|
-
|
|
5
|
-
## 约定
|
|
6
|
-
|
|
7
|
-
- 每个变更一个目录:`{roots.state}/specdev/changes/<YYYY-MM-DD>-<topic>/`
|
|
8
|
-
- 例如:`changes/2026-07-21-add-auth-layer/`
|
|
9
|
-
- 当前活跃变更通过 `{roots.state}/specdev/status.json` 的 `active` 数组追踪,每个条目为包含 `change`、`current_work`、`works_run`、`result` 等字段的对象——完整字段定义见 `<Path>{roots.workflows}/specdev/INDEX.md</Path>` 的「状态字段」一节,此处不重复
|
|
10
|
-
- 归档变更移至:`{roots.state}/specdev/archive/YYYY-MM/<change>/`
|
|
11
|
-
- 例如:`archive/2026-07/2026-07-21-add-auth-layer/`
|
|
12
|
-
- 变更目录内的工作产物由各 work 定义,典型结构:
|
|
13
|
-
```
|
|
14
|
-
changes/<YYYY-MM-DD>-<topic>/
|
|
15
|
-
├── .status.json ← 本 change 的个体状态(见 INDEX.md「Per-change 状态文件」)
|
|
16
|
-
├── CONTEXT.md ← 领域词汇表(G-grill-with-docs 创建/更新)
|
|
17
|
-
├── ADR.md ← 架构决策记录(G-grill-with-docs 创建/更新)
|
|
18
|
-
├── LOG.md ← 设计决策日志(各 work 追加结论)
|
|
19
|
-
├── spec.md ← 需求规格(S-spec 创建)
|
|
20
|
-
├── tickets-map.md ← ticket 总体地图与执行清单(T-tickets 创建)
|
|
21
|
-
├── ticket/ ← 独立 ticket 文件(T-tickets 创建)
|
|
22
|
-
│ └── NN-<name>.md
|
|
23
|
-
├── map.md ← 寻路地图(W-wayfinder 创建)
|
|
24
|
-
├── goal-plan.md ← 目标规划文档(P-goal-plan 创建)
|
|
25
|
-
├── research/ ← 研究产物(common/research 维护,含 index.md)
|
|
26
|
-
└── prototype/ ← 原型产物(common/prototype 维护,含 index.md)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 当 work 说"发布到变更目录"时
|
|
30
|
-
|
|
31
|
-
在 `{roots.state}/specdev/changes/<change>/` 下创建或更新指定文件。如果变更目录尚未加入 `active` 数组,将其作为新条目(`{ change, current_work: null, works_run: [], result: null }`)追加到 `status.json` 的 `active` 中。
|
|
32
|
-
|
|
33
|
-
例如:`S-spec` 说"将规格发布到变更目录" → 写入 `<Path>{roots.state}/specdev/changes/<change>/spec.md</Path>`。
|
|
34
|
-
|
|
35
|
-
## 当 work 说"获取当前变更"时
|
|
36
|
-
|
|
37
|
-
按 `<Path>{roots.workflows}/specdev/INDEX.md</Path>` 启动协议执行:读取 `status.json` 的 `active` 数组——用户指定则匹配对应条目;唯一活跃则直接使用;无活跃则创建新变更目录并追加条目;多个候选则由用户消歧。
|
|
38
|
-
|
|
39
|
-
## 当 work 说"归档变更"时
|
|
40
|
-
|
|
41
|
-
将变更目录从 `{roots.state}/specdev/changes/<change>/` 移动到 `{roots.state}/specdev/archive/YYYY-MM/<change>/`(YYYY-MM 取变更日期中的年月),从 `status.json` 的 `active` 数组中移除对应条目,追加归档记录到 `completed` 数组。完整归档与知识沉淀规程见 `<Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>`。
|
|
42
|
-
|
|
43
|
-
## Wayfinding 操作
|
|
44
|
-
|
|
45
|
-
供 `W-wayfinder` 使用。**地图是单个文件** `{roots.state}/specdev/changes/<change>/map.md`,tickets 是地图文件内的编号小节,不是独立文件:
|
|
46
|
-
|
|
47
|
-
- **状态**:checkbox 标记——`- [ ]` 开放、`- [x]` 已解决
|
|
48
|
-
- **阻塞**:ticket 小节内的「被阻塞于」字段,以 ticket 标题引用
|
|
49
|
-
- **领取**:将 ticket 名称追加到 `status.json` 当前 change 条目的 `claimed_tickets` 数组,完成后移除
|
|
50
|
-
- **前沿**:开放、未被阻塞、未被领取的 tickets
|
|
51
|
-
|
|
52
|
-
完整地图结构与遍历规程见 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`。
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
# 执行章节 §4-5 编写规程
|
|
2
|
-
|
|
3
|
-
编写 goal-plan 的 Ticket DAG 和单 ticket 执行协议。这两个章节是 goal-plan 的核心工程内容,决定"按什么顺序做"和"每个怎么做"。
|
|
4
|
-
|
|
5
|
-
## §4 — Ticket DAG and Scheduling Order
|
|
6
|
-
|
|
7
|
-
tickets-map.md 的格式遵循权威模板 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`——执行清单为六列表格(编号 | Ticket | 被阻塞于 | Gate | Contract ID | 状态),依赖关系节支持门禁标注 DAG。
|
|
8
|
-
|
|
9
|
-
### DAG 构造
|
|
10
|
-
|
|
11
|
-
从 tickets-map.md 读取并丰富依赖图:
|
|
12
|
-
|
|
13
|
-
1. **读取 tickets-map.md** —— 读取执行清单表的 `被阻塞于` 列和基础 ASCII 依赖树
|
|
14
|
-
2. **构建邻接表** —— ticket A 阻塞 ticket B = A → B 的有向边
|
|
15
|
-
3. **检测循环** —— 如果有循环依赖,报告并停止,让用户先修复 tickets
|
|
16
|
-
4. **标注门禁层级** —— 结合合同或 spec 的优先级(P0/P1/P2)给每个 ticket 分配 gate 层级,将 Gate 标注**回写**到 tickets-map.md 执行清单表的 Gate 列:
|
|
17
|
-
- P0 = 阻塞所有后续工作的核心基础设施
|
|
18
|
-
- P1 = 主要功能切片
|
|
19
|
-
- P2 = 增强和边界情况
|
|
20
|
-
5. **填写 Contract ID** —— 如激活合同模式,将每个 ticket 覆盖的验收条目 ID 回写到 tickets-map.md 执行清单表的 Contract ID 列
|
|
21
|
-
|
|
22
|
-
### 门禁次序
|
|
23
|
-
|
|
24
|
-
P0 门禁先开,阻塞所有 P1/P2 关闭。ticket 可以在其依赖就绪后开始,不依赖门禁——但门禁关闭(和里程碑推进)严格遵循 P0→P1→P2 顺序。
|
|
25
|
-
|
|
26
|
-
### ASCII 图绘制
|
|
27
|
-
|
|
28
|
-
在 tickets-map.md 的「依赖关系」节中,将 T-tickets 写入的基础 ASCII 树形图**丰富**为门禁标注 DAG。遵循以下约定:
|
|
29
|
-
|
|
30
|
-
- 每行一个 ticket,缩进表示依赖深度
|
|
31
|
-
- `→` 表示依赖关系(A → B 表示 B 依赖 A)
|
|
32
|
-
- 用注释标注门禁边界:`--- P0 gate ---`
|
|
33
|
-
- 可立即开始的 ticket 标注 `[READY]`
|
|
34
|
-
- 扇出点标注 `[FAN-OUT: N路并行]`
|
|
35
|
-
- ticket 编号格式见 T-tickets(两位零填充纯数字,不含 `#`)
|
|
36
|
-
|
|
37
|
-
示例格式:
|
|
38
|
-
```
|
|
39
|
-
04 [READY] → 05 [FAN-OUT: 3路并行]
|
|
40
|
-
├→ 06 [P0]
|
|
41
|
-
├→ 07 [P1]
|
|
42
|
-
└→ 08 [P1]
|
|
43
|
-
--- P0 gate ---
|
|
44
|
-
06 → 09 [P1] → 10 [P2]
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
将丰富后的 DAG 回写到 tickets-map.md 的「依赖关系」节,替换 T-tickets 写入的基础版本。
|
|
48
|
-
|
|
49
|
-
### 并行规则
|
|
50
|
-
|
|
51
|
-
tickets-map.md 的「并行规则」节已由模板预设默认值(最大 3 并发、allowlist 不重叠、共享文件仅 Lead 修改)。P-goal-plan 根据实际 ticket 数量调整并发数(> 20 时可调至 4),并在 goal-plan.md §4 中引用 tickets-map.md 的并行规则(避免重复)。
|
|
52
|
-
|
|
53
|
-
### 草拟与确认
|
|
54
|
-
|
|
55
|
-
输出 DAG 图、门禁次序声明、并行规则。等待用户确认后,将门禁标注和 Contract ID 回写到 tickets-map.md,将完整 DAG 和门禁次序写入 goal-plan.md §4。
|
|
56
|
-
|
|
57
|
-
## §5 — Per-Ticket Execution Protocol
|
|
58
|
-
|
|
59
|
-
本协议是对 I-implement 的实例化执行;实现者必须同时遵循 I-implement 四步协议(设计检查→TDD→双轴审查→提交)。权威入口:`<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>`。
|
|
60
|
-
|
|
61
|
-
### 协议定制
|
|
62
|
-
|
|
63
|
-
根据 input-validation.md 检测到的执行模型选择协议骨架:
|
|
64
|
-
|
|
65
|
-
#### Lead+Subagent 模型(完整八步)
|
|
66
|
-
|
|
67
|
-
1. **读取** —— 实现者(Lead 与子代理)在开始前**必须按顺序读取以下文件**建立完整上下文:
|
|
68
|
-
|
|
69
|
-
| # | 文件 | 用途 |
|
|
70
|
-
|---|------|------|
|
|
71
|
-
| 1 | `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` | specdev 实现流程入口——设计检查、TDD 循环、双轴审查、提交 |
|
|
72
|
-
| 2 | 本 ticket 全文 | 验收标准、范围边界、交付物、保留/不动 |
|
|
73
|
-
| 3 | 合同/参考权威对应行(如激活) | 编号验收条目或对照路径 |
|
|
74
|
-
| 4 | 项目 skills(如有) | 前后端编排、构建规范、路由/菜单、数据库标准等项目级约定——按实际检出的 skill 路径追加,可变 |
|
|
75
|
-
|
|
76
|
-
Lead 读取 issue 全文、合同/参考权威对应行、ticket 的验收标准。如果激活参考权威模式,对照参考快照中的对应交互路径。
|
|
77
|
-
|
|
78
|
-
2. **派单** —— Lead 输出结构化派单行 `IMPLEMENTER_DISPATCH <n> issue=<url> gate=<P0|P1|P2> allowlist=<files> contract_ids=<...>`(`<n>` 编号格式见 T-tickets),然后生成实现子代理(使用当前可用的最强实现模型,唯一 name)。Lead+Subagent 模型下,加载 `<Path>{roots.workflows}/specdev/P-goal-plan/lead-orchestration-protocol.md</Path>` 获取完整的编排协议——包括子代理上下文载荷结构、handoff 交接、合并冲突解决、Worktree 隔离和收尾审查的详细步骤。
|
|
79
|
-
3. **实现** —— 子代理在 file allowlist 内实现变更,按 ticket 指定的测试矩阵运行测试;实现过程遵循 I-implement 的设计检查与 TDD 红绿循环。
|
|
80
|
-
4. **双轴审查** —— 实现完成后,立即启动两个审查子代理并行运行:
|
|
81
|
-
- `reviewer-standards-<n>`:代码质量、架构、测试覆盖
|
|
82
|
-
- `reviewer-spec-<n>`:spec 合规、验收标准
|
|
83
|
-
- 任一返回 REQUEST_CHANGES 则启动修复子代理
|
|
84
|
-
5. **门禁** —— 类型检查、测试、lint 全部通过。
|
|
85
|
-
6. **回写** —— 如果激活合同模式:更新合同条目状态为 `done` 或 `deviate`;如激活 ADR 模式:检查 ADR 状态无需变更。偏差条目如有则由 Lead 同步偏差表。
|
|
86
|
-
7. **关闭 issue** —— 附上验证证据(测试输出、commit SHA、如适用附截图)。
|
|
87
|
-
8. **Lead 纪律** —— Lead 自身不得实现代码。如果 Lead 发现自己在写实现代码,输出 `DELEGATION_VIOLATION` 并重新派单。子代理不得操作 Git——只由 Lead 提交。
|
|
88
|
-
|
|
89
|
-
#### 简化模型(精简协议)
|
|
90
|
-
|
|
91
|
-
1. **读取** —— 实现者在开始前**必须按顺序读取以下文件**建立完整上下文:
|
|
92
|
-
|
|
93
|
-
| # | 文件 | 用途 |
|
|
94
|
-
|---|------|------|
|
|
95
|
-
| 1 | `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` | specdev 实现流程入口——设计检查、TDD 循环、双轴审查、提交 |
|
|
96
|
-
| 2 | 本 ticket 文件 | 验收标准、范围边界、交付物 |
|
|
97
|
-
| 3 | spec 对应 User Story / 验收标准 | 行为与验收锚点 |
|
|
98
|
-
| 4 | 项目 skills(如有) | 项目级约定——按实际检出路径追加,可变 |
|
|
99
|
-
|
|
100
|
-
2. **实现** — 在 ticket 声明的范围内实现变更;遵循 I-implement 的设计检查与 TDD 红绿循环。
|
|
101
|
-
3. **审查** — 单审查者检查代码质量和 spec 合规(对齐 I-implement 双轴审查意图)。
|
|
102
|
-
4. **门禁** — 类型检查、测试通过。
|
|
103
|
-
5. **关闭** — 提交并关闭 issue。
|
|
104
|
-
|
|
105
|
-
### 草拟规则
|
|
106
|
-
|
|
107
|
-
- 协议步骤中的具体路径(合同路径、参考快照路径)从 input-validation 的检测结果填入
|
|
108
|
-
- 测试矩阵从 tickets 或 spec 的 Test Decisions 提取
|
|
109
|
-
- 双轴审查的派单模板写为可复制的文本块
|
|
110
|
-
- Lead 纪律写为不可协商的约束
|
|
111
|
-
- **§5 步骤 1 表格必须以 I-implement 为第一行**;项目 skills 仅作为后续可变项追加,不得因 skills 列表变化而挤掉或省略 I-implement
|
|
112
|
-
- ticket 编号、派单行、进度行一律使用纯数字(`01`),不使用 `#01`
|
|
113
|
-
|
|
114
|
-
### 草拟与确认
|
|
115
|
-
|
|
116
|
-
输出 §5 完整协议文本。等待用户确认后进入治理章节。
|
|
117
|
-
|
|
118
|
-
**完成标准**:§4 DAG 图无循环、门禁标注正确、对照表完整且经用户确认;§5 执行协议八步/精简流程已定制填入具体路径、测试矩阵和双轴审查模板,步骤 1 清单以 I-implement 为首项,经用户确认。
|
|
119
|
-
|
|
120
|
-
## 子文件引用
|
|
121
|
-
|
|
122
|
-
本文件按需加载以下子文件:
|
|
123
|
-
|
|
124
|
-
| 文件 | 内容 | 触发条件 |
|
|
125
|
-
|------|------|----------|
|
|
126
|
-
| `<Path>{roots.workflows}/specdev/P-goal-plan/lead-orchestration-protocol.md</Path>` | Lead 编排协议——派单上下文载荷、handoff 交接、合并冲突解决、Worktree 隔离的创建与收尾、里程碑收尾审查 | 使用 Lead+Subagent 模型时,在 §5 步骤 2「派单」加载,覆盖从派单到收尾的完整执行生命周期 |
|