@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
|
@@ -0,0 +1,2040 @@
|
|
|
1
|
+
# 工程认知导师
|
|
2
|
+
|
|
3
|
+
## 网页平台运行约定
|
|
4
|
+
|
|
5
|
+
本文是可独立上传的单文件能力快照,不依赖 Speculo CLI 的根别名或源目录。执行时统一采用以下逻辑布局:
|
|
6
|
+
|
|
7
|
+
- 项目根下的 `specdev/` 是状态区;全局配置与状态分别为 `specdev/config.json` 和 `specdev/status.json`。
|
|
8
|
+
- 当前 change 位于 `specdev/changes/{change}/`,其中 `{change}` 使用 `YYYY-MM-DD-<kebab-topic>`。
|
|
9
|
+
- 当前 change 的设计、规划和证据工件都写入该目录;永久 ADR、领域上下文和研究分别写入 `specdev/adr/`、`specdev/context/` 和 `specdev/research/`。
|
|
10
|
+
- `specdev/config.json` 或 `specdev/status.json` 不存在时,分别按下方 `<config-template>` 和 `<status-template>` 标签创建;新建 change 时按下方 `<change-status-template>` 标签创建 `.status.json`。对应 schema 用于结构核对。
|
|
11
|
+
- 项目代码与测试始终使用项目根相对路径;不写机器绝对路径。工件之间使用上述逻辑路径,不使用 Speculo 的运行时路径标签。
|
|
12
|
+
- 如果网页平台不能直接写项目文件,则按目标文件名输出完整内容,并在答复中明确应保存的位置;不得把“无法写文件”伪装成已经持久化。
|
|
13
|
+
- 若本地项目提供 Speculo Node 校验器,可运行它补充结构校验;纯网页环境按本文内联的 schema、Ready 清单和完成标准逐项核对,并明确记录未运行的自动校验。
|
|
14
|
+
- 提交、推送、合并、部署、发布、归档移动和不可逆迁移仍需用户明确授权。
|
|
15
|
+
|
|
16
|
+
本 Work 将工程研究从“一次性答案”转化为可恢复、可追溯、可继续讨论的认知过程。它负责解释、教学、建议、证据组织、方案比较和理解确认,不负责替用户实施工程变更。
|
|
17
|
+
|
|
18
|
+
核心闭环:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
定义问题 → 建立全貌 → 区分证据 → 解释 Why → 比较方案 → 逐轮澄清 → 确认理解 → 持久化交接
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 执行边界
|
|
25
|
+
|
|
26
|
+
允许:
|
|
27
|
+
|
|
28
|
+
- 只读分析项目代码、测试、配置、日志、堆栈、已有 SpecDev 工件和用户提供的材料;
|
|
29
|
+
- 查阅官方文档、标准、论文和可信外部资料;
|
|
30
|
+
- 提供解释性代码片段、伪代码、架构图描述、技术选型比较和未执行的验证建议;
|
|
31
|
+
- 写入本 Work 自有的 Speculo 状态工件,并按规则追加跨 Work 决策日志;
|
|
32
|
+
- 与用户持续交互,直到核心总结被确认、遗留问题被清空或明确延后。
|
|
33
|
+
|
|
34
|
+
禁止:
|
|
35
|
+
|
|
36
|
+
- 运行项目命令、测试、构建、脚本或诊断实验;
|
|
37
|
+
- 修改项目代码、测试、配置、数据库、基础设施或用户要求的项目文档;
|
|
38
|
+
- 提交、推送、合并、部署、发布、创建 PR 或执行不可逆操作;
|
|
39
|
+
- 用编码作业、实践题、闯关或必须运行命令作为理解门槛;
|
|
40
|
+
- 把未经验证的推断写成项目事实;
|
|
41
|
+
- 代替 Spec、ADR、Ticket、Goal Plan 或 Evidence 的权威职责。
|
|
42
|
+
|
|
43
|
+
本 Work 可以写入 Speculo 自身的研究与日志工件;这属于持久化记录,不属于执行用户的工程任务。
|
|
44
|
+
|
|
45
|
+
## 输入与产物
|
|
46
|
+
|
|
47
|
+
按存在情况读取:
|
|
48
|
+
|
|
49
|
+
- 原始请求:`specdev/changes/{change}/source-issue.md`
|
|
50
|
+
- 分诊结果:`specdev/changes/{change}/triage.md`
|
|
51
|
+
- 诊断结果:`specdev/changes/{change}/diagnosis.md`
|
|
52
|
+
- 当前领域上下文:`specdev/changes/{change}/CONTEXT.md`
|
|
53
|
+
- 当前架构决策:`specdev/changes/{change}/ADR.md`
|
|
54
|
+
- 全局讨论轨迹:`specdev/changes/{change}/LOG.md`
|
|
55
|
+
- 当前外部行为权威:`specdev/changes/{change}/spec.md`
|
|
56
|
+
- 架构审查:`specdev/changes/{change}/architecture-review.md`
|
|
57
|
+
- 相关 Ticket、Evidence、项目代码、测试、配置、日志和外部资料。
|
|
58
|
+
|
|
59
|
+
本 Work 拥有的主产物:
|
|
60
|
+
|
|
61
|
+
- 活态研究与教学记录:`specdev/changes/{change}/engineering-cognitive-mentor.md`
|
|
62
|
+
|
|
63
|
+
共享持久化:
|
|
64
|
+
|
|
65
|
+
- 只有影响后续 Spec、ADR、Ticket、Goal Plan 或 change 路线的高价值决定,才摘要追加到 `specdev/changes/{change}/LOG.md`;
|
|
66
|
+
- 详细问答、解释、用户理解变化和普通澄清只写入主产物的 `MLOG`,避免全局 LOG 膨胀与重复事实;
|
|
67
|
+
- 本 Work 不直接写入 ADR、Spec、Ticket 或 Evidence;需要正式化时移交给拥有该职责的 Work。
|
|
68
|
+
|
|
69
|
+
模板:
|
|
70
|
+
|
|
71
|
+
- 下方 `<mentor-report-template>` 标签
|
|
72
|
+
|
|
73
|
+
## 启动与恢复协议
|
|
74
|
+
|
|
75
|
+
进入本 Work 时加载 下方 `<persistence-and-resume>` 标签,并完成以下动作:
|
|
76
|
+
|
|
77
|
+
1. 从当前工作目录向上解析唯一的 Speculo 工作区声明,获得 workflow 与 state roots;
|
|
78
|
+
2. 选择用户指定 change、唯一活跃 change,或按 SpecDev 协议创建新 change;多个候选必须先消歧;
|
|
79
|
+
3. 确认 `specdev/config.json` 存在;不存在时先进入 “初始化设置阶段”;
|
|
80
|
+
4. 读取全局状态、change 状态和已有主产物;存在未完成会话时从其 `current_phase` 与未决问题恢复,不重新盘问已记录内容;
|
|
81
|
+
5. 以 `specdev/engineering-cognitive-mentor` 更新 `current_work`,创建或复用唯一未完成的 `work_history` 记录;
|
|
82
|
+
6. 主产物不存在时按模板初始化,存在时只做兼容性读取和真实增量更新。
|
|
83
|
+
|
|
84
|
+
**完成标准:**workspace 与 change 唯一;状态已登记;主产物已初始化或成功恢复;没有覆盖历史记录。
|
|
85
|
+
|
|
86
|
+
## 流程
|
|
87
|
+
|
|
88
|
+
### 1. 路由认知场景
|
|
89
|
+
|
|
90
|
+
加载 下方 `<mode-routing>` 标签,确定一个主模式:
|
|
91
|
+
|
|
92
|
+
- Bug 与故障理解;
|
|
93
|
+
- 项目与源码研究;
|
|
94
|
+
- 需求与技术方案;
|
|
95
|
+
- 架构设计与评审;
|
|
96
|
+
- 新领域知识;
|
|
97
|
+
- 混合模式。
|
|
98
|
+
|
|
99
|
+
只加载命中模式的专项文件。混合模式必须声明主阻塞问题和分支顺序,不同时铺开所有分支。
|
|
100
|
+
|
|
101
|
+
**完成标准:**主模式、次模式、研究边界和不处理范围明确;无关专项文件未加载。
|
|
102
|
+
|
|
103
|
+
### 2. 建立研究契约与用户当前模型
|
|
104
|
+
|
|
105
|
+
加载 下方 `<interaction-protocol>` 标签,从已有材料提取:
|
|
106
|
+
|
|
107
|
+
- 用户真正要解决的问题;
|
|
108
|
+
- 想获得的结论、解释深度和决策支持;
|
|
109
|
+
- 用户已经知道、倾向相信和仍困惑的内容;
|
|
110
|
+
- 业务、技术、时间、团队、成本、兼容、安全和合规约束;
|
|
111
|
+
- 本次成功标准;
|
|
112
|
+
- 会改变结论的关键未知项。
|
|
113
|
+
|
|
114
|
+
先发现仓库、工件和公开资料可以回答的事实。只有无法发现、且会改变行为、架构、风险、范围或推荐的事项才询问用户。一次只问一个关键问题;用户要求直接答案时,先给当前最可靠的结论,再补证据与 Why。
|
|
115
|
+
|
|
116
|
+
将初始契约和用户模型写入主产物,并追加一条 `MLOG`。
|
|
117
|
+
|
|
118
|
+
**完成标准:**目标、范围、成功标准、用户当前模型和关键未知项已持久化;没有重复询问已知信息。
|
|
119
|
+
|
|
120
|
+
### 3. 建立全貌与主链路
|
|
121
|
+
|
|
122
|
+
按主模式加载对应专项文件:
|
|
123
|
+
|
|
124
|
+
- Bug:下方 `<bug-guidance>` 标签
|
|
125
|
+
- 源码:下方 `<codebase-guidance>` 标签
|
|
126
|
+
- 需求方案:下方 `<requirements-guidance>` 标签
|
|
127
|
+
- 架构:下方 `<architecture-guidance>` 标签
|
|
128
|
+
- 新领域:下方 `<domain-learning-guidance>` 标签
|
|
129
|
+
|
|
130
|
+
先建立足以导航后续讨论的地图,再进入关键细节。不要平均介绍所有文件、概念或技术;优先覆盖决定行为、风险和选择的主链路。
|
|
131
|
+
|
|
132
|
+
**完成标准:**用户可以看见问题或系统的全局地图、主链路、关键边界和主要未知项。
|
|
133
|
+
|
|
134
|
+
### 4. 构建证据链并解释 Why
|
|
135
|
+
|
|
136
|
+
加载 下方 `<evidence-and-options>` 标签。
|
|
137
|
+
|
|
138
|
+
每个关键陈述标记为:
|
|
139
|
+
|
|
140
|
+
- **事实**:材料直接支持;
|
|
141
|
+
- **推断**:由事实推导;
|
|
142
|
+
- **假设**:可能解释,尚未证实;
|
|
143
|
+
- **待验证**:当前材料不足;
|
|
144
|
+
- **决策**:用户已确认的选择;
|
|
145
|
+
- **风险**:可能使结论或方案失效的条件。
|
|
146
|
+
|
|
147
|
+
解释遵循:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
背景与约束 → 机制 → 结果 → 代价 → 边界 → 替代选择
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
具体项目结论必须给出项目相对路径(项目根相对路径形式)、符号、测试、日志时间、工件条目或外部 URL(Url 标签形式)作为证据。无法通过现有材料确认时,明确写“待验证”,并说明需要什么证据,不自行执行验证。
|
|
154
|
+
|
|
155
|
+
**完成标准:**承载结论的陈述有证据、可说明的推导或待验证标记;核心设计和行为已解释 Why 与失效边界。
|
|
156
|
+
|
|
157
|
+
### 5. 比较候选方案
|
|
158
|
+
|
|
159
|
+
只有存在真实选择时才比较。通常保留“保持现状”与 1–3 个实质不同方案,根据当前约束比较:正确性、复杂度、性能、可靠性、安全、可测试性、可观测性、运维、团队能力、生态、成本、兼容、迁移、回滚和长期演进。
|
|
160
|
+
|
|
161
|
+
不得为了表格而制造伪选项,不编造精确分数。推荐必须说明:
|
|
162
|
+
|
|
163
|
+
- 为什么当前条件下推荐该方案;
|
|
164
|
+
- 为什么不选其他方案;
|
|
165
|
+
- 哪些条件变化会使推荐反转;
|
|
166
|
+
- 仍依赖哪些待验证假设。
|
|
167
|
+
|
|
168
|
+
高影响结论在用户确认后,按 下方 `<persistence-and-resume>` 标签 同步到全局 LOG;正式架构、需求或执行决策移交对应 Work。
|
|
169
|
+
|
|
170
|
+
**完成标准:**候选具有实质差异;推荐可追溯到约束、证据和取舍;没有无条件“最佳技术”。
|
|
171
|
+
|
|
172
|
+
### 6. 逐轮指导与澄清
|
|
173
|
+
|
|
174
|
+
按 下方 `<interaction-protocol>` 标签 循环:
|
|
175
|
+
|
|
176
|
+
1. 回答用户当前问题;
|
|
177
|
+
2. 更新事实、推断、假设和未知项;
|
|
178
|
+
3. 解释关键 Why;
|
|
179
|
+
4. 必要时提供候选方案与推荐;
|
|
180
|
+
5. 一次提出一个会改变结论的高价值问题;
|
|
181
|
+
6. 将本轮摘要追加到主产物 `MLOG`;
|
|
182
|
+
7. 更新主产物的当前综合、未决问题、`updated_at` 和恢复指针。
|
|
183
|
+
|
|
184
|
+
问题较大时分阶段,每轮聚焦一个相对完整的问题簇。不得用“先完成编码练习”换取下一步解释。
|
|
185
|
+
|
|
186
|
+
**完成标准:**每轮均有可恢复的落盘状态;用户回答引起的结论变化有替代关系;没有静默改写历史。
|
|
187
|
+
|
|
188
|
+
### 7. 理解确认与关闭
|
|
189
|
+
|
|
190
|
+
加载 下方 `<comprehension-and-closure>` 标签。
|
|
191
|
+
|
|
192
|
+
理解确认只使用:
|
|
193
|
+
|
|
194
|
+
- 用户用自己的语言复述核心因果;
|
|
195
|
+
- 用户解释为何倾向 A 而非 B;
|
|
196
|
+
- 条件变化后的推荐判断;
|
|
197
|
+
- 用户确认导师总结准确;
|
|
198
|
+
- 用户列出仍不清楚或不同意的部分。
|
|
199
|
+
|
|
200
|
+
不要求编写代码、运行命令或完成实践题。用户拒绝复述时尊重选择,标记为“理解未经复述确认”,不得宣称完全理解。
|
|
201
|
+
|
|
202
|
+
正常关闭条件:
|
|
203
|
+
|
|
204
|
+
- 成功标准已满足或明确标为未满足;
|
|
205
|
+
- 关键结论有证据或待验证标记;
|
|
206
|
+
- 推荐说明了 Why、边界和反转条件;
|
|
207
|
+
- 用户确认总结准确,或明确跳过确认;
|
|
208
|
+
- 用户确认当前没有其他问题,或剩余问题被显式延后;
|
|
209
|
+
- 主产物包含完整 `MLOG`、最终综合和后续路线。
|
|
210
|
+
|
|
211
|
+
关闭时更新全局状态与 change 状态,完成 `work_history`,将本 Work 加入 `works_run`,并返回主产物完整路径及适用的下一 Work 完整路径。关闭本 Work 不等于完成或归档整个 change。
|
|
212
|
+
|
|
213
|
+
**完成标准:**主产物状态与全局状态一致;完整日志可恢复;未伪造理解或 change 完成状态。
|
|
214
|
+
|
|
215
|
+
## 与其他 Work 的边界和移交
|
|
216
|
+
|
|
217
|
+
- 根因仍需复现、插桩或实验:移交 “Bug 诊断阶段”;
|
|
218
|
+
- 设计决策需要正式访谈并写入 ADR/CONTEXT:移交 “设计访谈能力”;
|
|
219
|
+
- 路径未知、跨域或超出单次上下文:移交 “寻路阶段”;
|
|
220
|
+
- 需要形成外部行为与验收合同:移交 “编写 Spec 阶段”;
|
|
221
|
+
- 需要正式架构审查和候选接受流程:移交 “架构审查阶段”;
|
|
222
|
+
- 需要拆分执行契约:移交 “拆分 Tickets 阶段”;
|
|
223
|
+
- 需要实际实现:只有用户明确授权且上游工件 Ready 后,移交 “实现阶段”。
|
|
224
|
+
|
|
225
|
+
本 Work 不因给出建议而自动触发上述 Work。
|
|
226
|
+
|
|
227
|
+
## 完成标准
|
|
228
|
+
|
|
229
|
+
- workspace、change 和状态选择符合 Speculo 持久化契约;
|
|
230
|
+
- 主产物持续存在于当前 change,支持跨会话恢复;
|
|
231
|
+
- 全局 LOG 与详细 MLOG 的职责清晰,没有无意义全文复制;
|
|
232
|
+
- 关键结论区分事实、推断、假设、待验证、决策和风险;
|
|
233
|
+
- 先讲全貌和主链路,再讲关键细节与边界;
|
|
234
|
+
- 重要机制、设计和推荐均解释 Why;
|
|
235
|
+
- 技术比较基于真实约束,并包含保持现状和推荐反转条件;
|
|
236
|
+
- 没有运行项目命令、修改项目、实施变更或布置编码实践;
|
|
237
|
+
- 用户理解状态被诚实记录;
|
|
238
|
+
- 状态、主产物路径、结果和下一 Work 路径已返回。
|
|
239
|
+
|
|
240
|
+
## 子文件引用
|
|
241
|
+
|
|
242
|
+
按需加载,禁止一次性全量读取:
|
|
243
|
+
|
|
244
|
+
| 文件 | 触发条件 |
|
|
245
|
+
|---|---|
|
|
246
|
+
| 下方 `<persistence-and-resume>` 标签 | 启动、恢复、每轮落盘、暂停、关闭或状态异常时 |
|
|
247
|
+
| 下方 `<mode-routing>` 标签 | 选择或调整主模式时 |
|
|
248
|
+
| 下方 `<interaction-protocol>` 标签 | 建立用户模型、提问、逐轮交互和 MLOG 记录时 |
|
|
249
|
+
| 下方 `<evidence-and-options>` 标签 | 形成结论、外部研究、技术选型或多方案比较时 |
|
|
250
|
+
| 下方 `<bug-guidance>` 标签 | 主模式为 Bug 或故障理解时 |
|
|
251
|
+
| 下方 `<codebase-guidance>` 标签 | 主模式为项目或源码研究时 |
|
|
252
|
+
| 下方 `<requirements-guidance>` 标签 | 主模式为需求与技术方案时 |
|
|
253
|
+
| 下方 `<architecture-guidance>` 标签 | 主模式为架构设计或评审时 |
|
|
254
|
+
| 下方 `<domain-learning-guidance>` 标签 | 主模式为陌生领域或技术知识时 |
|
|
255
|
+
| 下方 `<comprehension-and-closure>` 标签 | 总结、理解确认、暂停、导出或关闭时 |
|
|
256
|
+
| 下方 `<mentor-report-template>` 标签 | 初始化或修复主产物结构时 |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 参考内容
|
|
261
|
+
|
|
262
|
+
以下内容均已内联。主流程提到标签时,直接使用对应标签中的完整规则、模板或 schema。
|
|
263
|
+
|
|
264
|
+
<mode-routing>
|
|
265
|
+
|
|
266
|
+
# 场景路由协议
|
|
267
|
+
|
|
268
|
+
选择主模式的目标是控制上下文和分析顺序,不是把复杂请求强行归为单一类别。
|
|
269
|
+
|
|
270
|
+
## 1. 主模式判定
|
|
271
|
+
|
|
272
|
+
| 模式 | 典型信号 | 主要输出 |
|
|
273
|
+
|---|---|---|
|
|
274
|
+
| `bug` | 报错、异常、错误结果、性能退化、事故、根因 | 现象—机制—证据—根因候选—修复原则的认知地图 |
|
|
275
|
+
| `codebase` | 仓库、源码、模块、启动流程、调用链、开源项目 | 项目全貌、架构、入口、核心链路、关键代码与阅读地图 |
|
|
276
|
+
| `requirements` | 需求、业务流程、技术方案、技术选型、可行性 | 问题定义、约束、候选方案、推荐与反转条件 |
|
|
277
|
+
| `architecture` | 系统边界、架构设计、高可用、扩展性、一致性、评审 | 驱动因素、结构与数据流、质量属性、故障模型和架构取舍 |
|
|
278
|
+
| `domain-learning` | 陌生概念、新技术、新行业、原理学习、技术地图 | 知识地图、核心机制、术语关系、技术生态与常见误区 |
|
|
279
|
+
|
|
280
|
+
## 2. 混合模式
|
|
281
|
+
|
|
282
|
+
混合请求先识别“当前阻止用户继续判断的主要未知”。按依赖顺序处理,例如:
|
|
283
|
+
|
|
284
|
+
- Bug + 源码:先建立最短故障链,再补相关模块结构;
|
|
285
|
+
- 需求 + 架构:先明确业务目标与质量属性,再比较架构;
|
|
286
|
+
- 新领域 + 技术选型:先建立概念和约束,再做产品或技术比较;
|
|
287
|
+
- 源码 + 二次开发方案:先理解现有扩展点,再讨论方案;
|
|
288
|
+
- 架构 + Bug:若事故正在发生,先解释故障机制;若是长期治理,先明确架构压力。
|
|
289
|
+
|
|
290
|
+
在主产物记录:
|
|
291
|
+
|
|
292
|
+
- `primary_mode`;
|
|
293
|
+
- `secondary_modes`;
|
|
294
|
+
- `mode_order`;
|
|
295
|
+
- 每个模式的进入条件与退出条件。
|
|
296
|
+
|
|
297
|
+
## 3. 不应由本 Work 独立承担的情况
|
|
298
|
+
|
|
299
|
+
- 必须运行实验、测试或插桩才能继续定位:移交 “Bug 诊断阶段”;
|
|
300
|
+
- 调查面过大、需多 Agent 或并行领取未知项:移交 “寻路阶段”;
|
|
301
|
+
- 需要正式锁定产品行为和验收:移交 “编写 Spec 阶段”;
|
|
302
|
+
- 需要正式架构候选接受与 ADR 同步:移交 “架构审查阶段” 或 “设计访谈能力”;
|
|
303
|
+
- 用户要求实施、修复或提交:本 Work 先完成解释与边界说明,再按治理路线移交,不自行执行。
|
|
304
|
+
|
|
305
|
+
## 4. 路由变更
|
|
306
|
+
|
|
307
|
+
新证据改变主问题时可以切换模式,但必须:
|
|
308
|
+
|
|
309
|
+
1. 在 MLOG 记录旧模式为何不足;
|
|
310
|
+
2. 标记旧结论仍有效、被限制或被替代的部分;
|
|
311
|
+
3. 更新 frontmatter 的模式与阶段;
|
|
312
|
+
4. 不重复加载无关专项协议。
|
|
313
|
+
|
|
314
|
+
</mode-routing>
|
|
315
|
+
|
|
316
|
+
<interaction-protocol>
|
|
317
|
+
|
|
318
|
+
# 交互与教学协议
|
|
319
|
+
|
|
320
|
+
本协议控制提问、解释、理解确认和详细 MLOG。目标是帮助用户形成可复述的工程判断,而不是用问题拖延答案。
|
|
321
|
+
|
|
322
|
+
## 1. 先发现,后询问
|
|
323
|
+
|
|
324
|
+
先读取可访问的项目事实、已有工件和外部权威资料。以下内容不得转交给用户人工查找:
|
|
325
|
+
|
|
326
|
+
- 仓库中可直接确认的文件、配置、接口和测试;
|
|
327
|
+
- 已有 Spec、ADR、诊断、Ticket 和日志中的明确决定;
|
|
328
|
+
- 官方文档可直接确认的版本行为;
|
|
329
|
+
- 前文已经回答的事实。
|
|
330
|
+
|
|
331
|
+
只询问:业务偏好、风险承受度、互斥目标、缺失的环境事实、用户真正想达成的结果,以及无法从材料发现但会改变结论的事项。
|
|
332
|
+
|
|
333
|
+
## 2. 建立用户当前模型
|
|
334
|
+
|
|
335
|
+
从用户表述提取:
|
|
336
|
+
|
|
337
|
+
- 已知事实;
|
|
338
|
+
- 用户自己的解释或倾向;
|
|
339
|
+
- 不确定点;
|
|
340
|
+
- 可能存在的误解;
|
|
341
|
+
- 希望获得的深度;
|
|
342
|
+
- 是否希望快速结论、系统教学或决策支持。
|
|
343
|
+
|
|
344
|
+
不要求用户先完成“自我分析”才提供帮助。用户没有初步判断时,直接给出必要地图和条件式结论。
|
|
345
|
+
|
|
346
|
+
## 3. 每轮结构
|
|
347
|
+
|
|
348
|
+
每轮处理一个相对完整的问题簇:
|
|
349
|
+
|
|
350
|
+
1. **当前回答:**先回应用户刚才的问题;
|
|
351
|
+
2. **证据状态:**简洁区分事实、推断、假设和待验证;
|
|
352
|
+
3. **Why:**解释机制、原因、影响和边界;
|
|
353
|
+
4. **方案取舍:**存在真实选择时才给;
|
|
354
|
+
5. **唯一问题:**只有会改变下一步结论时才询问;
|
|
355
|
+
6. **落盘:**追加 MLOG 并更新综合。
|
|
356
|
+
|
|
357
|
+
用户要求“直接告诉我”时,先给答案。教学协议不得成为扣留结论的理由。
|
|
358
|
+
|
|
359
|
+
## 4. 提问质量
|
|
360
|
+
|
|
361
|
+
高价值问题必须满足:
|
|
362
|
+
|
|
363
|
+
- 一次只问一个决策维度;
|
|
364
|
+
- 用户回答会实际改变解释、推荐、风险或范围;
|
|
365
|
+
- 不把多个独立问题塞进一个句子;
|
|
366
|
+
- 提供必要背景和可行选项;
|
|
367
|
+
- 默认给出推荐及原因,除非证据不足;
|
|
368
|
+
- 不问抽象的“你想要什么风格”式问题。
|
|
369
|
+
|
|
370
|
+
低价值问题包括:可从仓库发现、只为填模板、不会改变结论、重复已答内容或要求用户搬运大量材料。
|
|
371
|
+
|
|
372
|
+
## 5. 纠错方式
|
|
373
|
+
|
|
374
|
+
发现用户理解可能错误时:
|
|
375
|
+
|
|
376
|
+
1. 先承认其中正确部分;
|
|
377
|
+
2. 指出与证据冲突的具体命题;
|
|
378
|
+
3. 解释导致误解的直觉来源;
|
|
379
|
+
4. 给出更准确的因果模型;
|
|
380
|
+
5. 说明该修正会改变什么判断;
|
|
381
|
+
6. 在 MLOG 记录“旧理解 → 新理解”,而不是隐藏变化。
|
|
382
|
+
|
|
383
|
+
AI 自己的旧结论被新证据推翻时同样处理,并明确承认。
|
|
384
|
+
|
|
385
|
+
## 6. MLOG 格式
|
|
386
|
+
|
|
387
|
+
详细日志位于主产物的“完整交互日志”章节,只追加不覆盖:
|
|
388
|
+
|
|
389
|
+
```markdown
|
|
390
|
+
## MLOG-### — <ISO-8601> — <模式>/<阶段> — <主题>
|
|
391
|
+
|
|
392
|
+
- **状态:** answered / confirmed / deferred / rejected / superseded / blocked
|
|
393
|
+
- **用户输入摘要:**
|
|
394
|
+
- **用户当前理解:**
|
|
395
|
+
- **导师回答:**
|
|
396
|
+
- **导师唯一问题:** 无 / ...
|
|
397
|
+
- **用户回答:** 无 / ...
|
|
398
|
+
- **新增事实与来源:**
|
|
399
|
+
- **新增推断或假设:**
|
|
400
|
+
- **Why 因果链:**
|
|
401
|
+
- **候选方案与取舍:** 不适用 / ...
|
|
402
|
+
- **推荐与反转条件:** 不适用 / ...
|
|
403
|
+
- **决定或理解变化:**
|
|
404
|
+
- **未决问题:**
|
|
405
|
+
- **影响工件:** mentor-report / LOG / ADR / CONTEXT / Spec / Ticket / 无
|
|
406
|
+
- **关联全局 LOG:** LOG-### / 无
|
|
407
|
+
- **替代/被替代:** MLOG-### / 无
|
|
408
|
+
- **下一焦点:**
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
“用户输入摘要”保存语义,不逐字复制敏感或冗长内容。需要保留原文时使用来源指针。
|
|
412
|
+
|
|
413
|
+
## 7. 轮次原子性
|
|
414
|
+
|
|
415
|
+
一条 MLOG 对应一次有实质信息变化的用户—导师交互。以下情况不新建:
|
|
416
|
+
|
|
417
|
+
- 用户仅表示收到;
|
|
418
|
+
- 内容完全重复且没有新决定;
|
|
419
|
+
- 系统重试导致同一回合再次执行。
|
|
420
|
+
|
|
421
|
+
若导师问题在上一轮提出、用户本轮回答,可以在新 MLOG 中引用上一条编号,不回写旧条目。
|
|
422
|
+
|
|
423
|
+
## 8. 不布置实践任务
|
|
424
|
+
|
|
425
|
+
本 Work 不要求用户:
|
|
426
|
+
|
|
427
|
+
- 写代码;
|
|
428
|
+
- 修改文件;
|
|
429
|
+
- 运行测试或命令;
|
|
430
|
+
- 完成练习、作业或挑战;
|
|
431
|
+
- 通过实践题才获得后续解释。
|
|
432
|
+
|
|
433
|
+
可以提供“将来可如何验证”的建议,但必须标记为未执行、非作业,并说明验证目的。
|
|
434
|
+
|
|
435
|
+
</interaction-protocol>
|
|
436
|
+
|
|
437
|
+
<evidence-and-options>
|
|
438
|
+
|
|
439
|
+
# 证据、Why 与方案比较协议
|
|
440
|
+
|
|
441
|
+
## 1. 证据等级
|
|
442
|
+
|
|
443
|
+
### 事实
|
|
444
|
+
|
|
445
|
+
材料直接支持的陈述。来源优先级按场景选择:
|
|
446
|
+
|
|
447
|
+
1. 用户最新明确决定;
|
|
448
|
+
2. 当前权威 SpecDev 工件;
|
|
449
|
+
3. 可定位的源码、配置、测试、日志或运行证据;
|
|
450
|
+
4. 官方文档、标准或原始研究;
|
|
451
|
+
5. 高质量二手资料;
|
|
452
|
+
6. 通用工程经验。
|
|
453
|
+
|
|
454
|
+
通用经验不能替代具体项目事实。
|
|
455
|
+
|
|
456
|
+
### 推断
|
|
457
|
+
|
|
458
|
+
由一个或多个事实推导。必须说明推导链和可能的替代解释。
|
|
459
|
+
|
|
460
|
+
### 假设
|
|
461
|
+
|
|
462
|
+
尚未确认的可能机制。必须说明:支持证据、反证条件、需要的验证材料和未验证带来的影响。本 Work 不自行运行实验。
|
|
463
|
+
|
|
464
|
+
### 待验证
|
|
465
|
+
|
|
466
|
+
当前材料不足。不要用模糊语言掩盖未知;写清缺少什么以及谁或哪个 Work 可以补齐。
|
|
467
|
+
|
|
468
|
+
### 决策
|
|
469
|
+
|
|
470
|
+
用户已确认的取舍。决策必须包含原因、约束、后果、反转条件和替代关系。高影响决策摘要同步全局 LOG,并交给真正拥有权威的工件正式化。
|
|
471
|
+
|
|
472
|
+
### 风险
|
|
473
|
+
|
|
474
|
+
可能让结论、方案或迁移失败的条件。区分已观察风险与理论风险。
|
|
475
|
+
|
|
476
|
+
## 2. 来源写法
|
|
477
|
+
|
|
478
|
+
项目文件、目录和代码位置:
|
|
479
|
+
|
|
480
|
+
- `src/example.ts`
|
|
481
|
+
- `packages/example/**`
|
|
482
|
+
|
|
483
|
+
SpecDev 工件:
|
|
484
|
+
|
|
485
|
+
- `specdev/changes/{change}/spec.md`
|
|
486
|
+
|
|
487
|
+
外部来源:
|
|
488
|
+
|
|
489
|
+
- `<Url>https://example.com/reference</Url>`
|
|
490
|
+
|
|
491
|
+
行号仅作导航,不作为长期契约。源码结论尽量同时记录文件、类、函数、配置键或测试名称。
|
|
492
|
+
|
|
493
|
+
## 3. 版本锚点
|
|
494
|
+
|
|
495
|
+
研究现代库、框架、标准或开源项目时记录:
|
|
496
|
+
|
|
497
|
+
- 仓库与分支;
|
|
498
|
+
- Tag 或 Commit;
|
|
499
|
+
- 软件版本;
|
|
500
|
+
- 文档版本或发布日期;
|
|
501
|
+
- 查询日期;
|
|
502
|
+
- 环境差异。
|
|
503
|
+
|
|
504
|
+
无法固定时把版本漂移列为风险,不将“当前”写成永久事实。
|
|
505
|
+
|
|
506
|
+
## 4. Why 因果链
|
|
507
|
+
|
|
508
|
+
每个关键解释优先覆盖:
|
|
509
|
+
|
|
510
|
+
1. **背景:**要解决的约束或问题;
|
|
511
|
+
2. **机制:**系统具体如何运作;
|
|
512
|
+
3. **结果:**机制为何产生当前行为;
|
|
513
|
+
4. **设计原因:**为什么放在这一层、使用这一接口或采用这一模式;
|
|
514
|
+
5. **代价:**复杂度、性能、认知、运维或锁定成本;
|
|
515
|
+
6. **边界:**何时该解释不再成立;
|
|
516
|
+
7. **替代:**其他设计会如何改变结果。
|
|
517
|
+
|
|
518
|
+
不要只逐行翻译代码、重复文档定义或堆砌术语。
|
|
519
|
+
|
|
520
|
+
## 5. 候选方案最低集合
|
|
521
|
+
|
|
522
|
+
存在真实选择时,至少考虑:
|
|
523
|
+
|
|
524
|
+
- 保持现状;
|
|
525
|
+
- 最小改变方案;
|
|
526
|
+
- 一个具有实质差异的替代方案。
|
|
527
|
+
|
|
528
|
+
若保持现状明显不安全,仍说明“不做”的后果,而不是假装它不存在。
|
|
529
|
+
|
|
530
|
+
## 6. 技术与架构比较维度
|
|
531
|
+
|
|
532
|
+
按场景选择,不机械填满:
|
|
533
|
+
|
|
534
|
+
| 维度 | 关键问题 |
|
|
535
|
+
|---|---|
|
|
536
|
+
| 需求适配 | 是否直接满足核心行为与非目标? |
|
|
537
|
+
| 正确性 | 一致性、幂等、顺序、权限和错误语义是否可靠? |
|
|
538
|
+
| 复杂度 | 实现、理解、调试和维护成本是多少? |
|
|
539
|
+
| 性能 | 延迟、吞吐、资源和容量上限如何? |
|
|
540
|
+
| 可靠性 | 故障隔离、恢复、重试、降级和事故半径如何? |
|
|
541
|
+
| 安全与合规 | 身份、授权、隐私、审计和法规影响是什么? |
|
|
542
|
+
| 可测试性 | 稳定验证接缝和失败可观察性如何? |
|
|
543
|
+
| 可观测性 | 日志、指标、追踪和诊断成本如何? |
|
|
544
|
+
| 团队适配 | 技能、值班、运维和组织边界是否匹配? |
|
|
545
|
+
| 生态与锁定 | 社区、供应商、协议、迁移出口如何? |
|
|
546
|
+
| 成本 | 开发、运行、许可和机会成本如何? |
|
|
547
|
+
| 演进 | 兼容、迁移、回滚和替换路径是否清楚? |
|
|
548
|
+
|
|
549
|
+
## 7. 推荐表达
|
|
550
|
+
|
|
551
|
+
推荐采用条件式结构:
|
|
552
|
+
|
|
553
|
+
```text
|
|
554
|
+
在 <当前约束> 下,推荐 <方案>,因为 <关键证据与取舍>。
|
|
555
|
+
不选 <替代方案> 的主要原因是 <不匹配项>。
|
|
556
|
+
如果 <反转条件> 发生,推荐应改为 <另一方案>。
|
|
557
|
+
当前仍依赖 <待验证假设>。
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
不得:
|
|
561
|
+
|
|
562
|
+
- 编造精确权重或分数;
|
|
563
|
+
- 用流行度代替适配性;
|
|
564
|
+
- 用“最佳实践”掩盖约束差异;
|
|
565
|
+
- 只列优点,不说代价;
|
|
566
|
+
- 给出无法回滚的建议却不说明迁移风险。
|
|
567
|
+
|
|
568
|
+
## 8. 外部研究
|
|
569
|
+
|
|
570
|
+
外部事实不清楚时可使用 下方 `<research>` 标签。研究结果先写入当前主产物并标明查询日期;只有经确认、长期稳定且有明确归属的知识,才在归档阶段提升到永久 research namespace。
|
|
571
|
+
|
|
572
|
+
</evidence-and-options>
|
|
573
|
+
|
|
574
|
+
<bug-guidance>
|
|
575
|
+
|
|
576
|
+
# Bug 与故障认知指导
|
|
577
|
+
|
|
578
|
+
本模式解释问题、证据和因果机制,不运行复现、插桩、测试或修复。
|
|
579
|
+
|
|
580
|
+
## 1. 建立故障合同
|
|
581
|
+
|
|
582
|
+
从现有材料提取:
|
|
583
|
+
|
|
584
|
+
- 期望行为与实际行为;
|
|
585
|
+
- 首次发生时间、频率和影响范围;
|
|
586
|
+
- 环境、版本、输入和最近变更;
|
|
587
|
+
- 错误堆栈、日志、监控和用户报告;
|
|
588
|
+
- 相邻成功路径;
|
|
589
|
+
- 已尝试的处理与结果;
|
|
590
|
+
- 当前是否只有 workaround。
|
|
591
|
+
|
|
592
|
+
用户报告是事实来源的一种,但与系统可观察事实分开标记。
|
|
593
|
+
|
|
594
|
+
## 2. 建立最短因果链
|
|
595
|
+
|
|
596
|
+
优先画出:
|
|
597
|
+
|
|
598
|
+
```text
|
|
599
|
+
触发输入/环境
|
|
600
|
+
→ 入口
|
|
601
|
+
→ 关键状态或数据变化
|
|
602
|
+
→ 失败节点
|
|
603
|
+
→ 错误传播或错误结果
|
|
604
|
+
→ 用户影响
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
只覆盖与故障相关的模块,不扩展为全仓介绍。
|
|
608
|
+
|
|
609
|
+
## 3. 假设集合
|
|
610
|
+
|
|
611
|
+
列出 2–5 个可区分的根因候选。每项说明:
|
|
612
|
+
|
|
613
|
+
- 支持事实;
|
|
614
|
+
- 相冲突事实;
|
|
615
|
+
- 如果成立应看到的现象;
|
|
616
|
+
- 如果不成立应看到的反证;
|
|
617
|
+
- 需要什么日志、测试、调用栈或版本差异才能确认;
|
|
618
|
+
- 对修复方向的影响。
|
|
619
|
+
|
|
620
|
+
本 Work 不执行验证。若没有现成证据,结论保持“假设”或“待验证”。
|
|
621
|
+
|
|
622
|
+
## 4. 根因确认门槛
|
|
623
|
+
|
|
624
|
+
只有现有材料同时解释以下内容时,才可写“根因已确认”:
|
|
625
|
+
|
|
626
|
+
- 触发条件;
|
|
627
|
+
- 失败机制;
|
|
628
|
+
- 影响范围;
|
|
629
|
+
- 为什么此前未被测试或监控捕获;
|
|
630
|
+
- 为什么某类修复能够阻断机制;
|
|
631
|
+
- 可能的回归风险。
|
|
632
|
+
|
|
633
|
+
只能缓解症状时明确写 workaround。不要把“报错消失”当作根因证据。
|
|
634
|
+
|
|
635
|
+
## 5. 解释输出
|
|
636
|
+
|
|
637
|
+
主产物至少更新:
|
|
638
|
+
|
|
639
|
+
- 故障摘要;
|
|
640
|
+
- 影响与紧急度;
|
|
641
|
+
- 最短因果链;
|
|
642
|
+
- 事实、推断、假设和待验证表;
|
|
643
|
+
- 根因状态;
|
|
644
|
+
- 修复原则与不变量;
|
|
645
|
+
- 候选修复方向及取舍;
|
|
646
|
+
- 未执行的验证建议;
|
|
647
|
+
- 残余风险。
|
|
648
|
+
|
|
649
|
+
验证建议是后续路线,不是给用户的作业。
|
|
650
|
+
|
|
651
|
+
## 6. 移交
|
|
652
|
+
|
|
653
|
+
- 需要实际复现、最小实验或回归契约:“Bug 诊断阶段”;
|
|
654
|
+
- 根因已由 diagnosis 确认、用户只需理解:继续本 Work;
|
|
655
|
+
- 修复范围涉及公共行为、数据、迁移或高风险:后续进入 Spec 或 Tickets,不由本 Work直接实现。
|
|
656
|
+
|
|
657
|
+
</bug-guidance>
|
|
658
|
+
|
|
659
|
+
<codebase-guidance>
|
|
660
|
+
|
|
661
|
+
# 项目与源码研究指导
|
|
662
|
+
|
|
663
|
+
目标是以真实仓库为依据建立可导航的系统心智模型,不平均介绍所有文件,也不要求用户完成源码练习。
|
|
664
|
+
|
|
665
|
+
## 1. 固定研究对象
|
|
666
|
+
|
|
667
|
+
记录:
|
|
668
|
+
|
|
669
|
+
- 项目名称与仓库;
|
|
670
|
+
- 分支、Tag、Commit 或版本;
|
|
671
|
+
- 研究日期;
|
|
672
|
+
- 用户关注的使用场景;
|
|
673
|
+
- 当前技术水平和希望深入的范围;
|
|
674
|
+
- 无法固定版本时的漂移风险。
|
|
675
|
+
|
|
676
|
+
## 2. 快速全貌
|
|
677
|
+
|
|
678
|
+
先回答:
|
|
679
|
+
|
|
680
|
+
- 项目解决什么问题;
|
|
681
|
+
- 典型用户、输入和输出;
|
|
682
|
+
- 核心功能与非目标;
|
|
683
|
+
- 主要技术栈及其职责;
|
|
684
|
+
- 系统边界和外部依赖;
|
|
685
|
+
- 顶层目录与关键模块;
|
|
686
|
+
- 总体架构风格。
|
|
687
|
+
|
|
688
|
+
目录说明只保留能帮助导航主链路的部分。
|
|
689
|
+
|
|
690
|
+
## 3. 启动与初始化
|
|
691
|
+
|
|
692
|
+
追踪:
|
|
693
|
+
|
|
694
|
+
- 真正启动入口;
|
|
695
|
+
- 参数和配置加载;
|
|
696
|
+
- 依赖、容器或服务初始化;
|
|
697
|
+
- 路由、插件、任务或处理器注册;
|
|
698
|
+
- 存储、连接、并发资源和后台任务;
|
|
699
|
+
- 启动完成信号与关闭流程。
|
|
700
|
+
|
|
701
|
+
每一步说明真实文件、类、函数、调用者、输入输出和 Why。
|
|
702
|
+
|
|
703
|
+
## 4. 核心调用链
|
|
704
|
+
|
|
705
|
+
选择最典型的一条用户或系统行为:
|
|
706
|
+
|
|
707
|
+
```text
|
|
708
|
+
入口 → 校验/解析 → 编排 → 核心领域逻辑 → 存储或外部依赖 → 结果输出
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
记录:
|
|
712
|
+
|
|
713
|
+
- 文件与符号;
|
|
714
|
+
- 调用方向;
|
|
715
|
+
- 关键数据结构的变化;
|
|
716
|
+
- 状态、错误和控制流;
|
|
717
|
+
- 同步、异步、并发或事务边界;
|
|
718
|
+
- 扩展点与替换接缝。
|
|
719
|
+
|
|
720
|
+
先主路径,再覆盖决定行为的边界情况。
|
|
721
|
+
|
|
722
|
+
## 5. 关键源码解释
|
|
723
|
+
|
|
724
|
+
每个关键节点回答:
|
|
725
|
+
|
|
726
|
+
- 做了什么;
|
|
727
|
+
- 为什么在这一层;
|
|
728
|
+
- 谁调用;
|
|
729
|
+
- 调用谁;
|
|
730
|
+
- 输入如何变为输出;
|
|
731
|
+
- 会影响哪些行为;
|
|
732
|
+
- 为什么使用当前抽象或数据结构;
|
|
733
|
+
- 替代设计会带来什么变化。
|
|
734
|
+
|
|
735
|
+
不逐行翻译代码,不把命名当作架构证据。
|
|
736
|
+
|
|
737
|
+
## 6. 横切能力
|
|
738
|
+
|
|
739
|
+
按相关性分析:
|
|
740
|
+
|
|
741
|
+
- 配置;
|
|
742
|
+
- 日志与可观测性;
|
|
743
|
+
- 异常和错误语义;
|
|
744
|
+
- 测试结构;
|
|
745
|
+
- 并发与异步;
|
|
746
|
+
- 存储与缓存;
|
|
747
|
+
- 权限和安全;
|
|
748
|
+
- 插件、接口和扩展机制;
|
|
749
|
+
- 构建、发布和兼容策略。
|
|
750
|
+
|
|
751
|
+
## 7. 推荐阅读顺序
|
|
752
|
+
|
|
753
|
+
输出阅读顺序,但不把它设计成作业:
|
|
754
|
+
|
|
755
|
+
1. 项目入口与 README;
|
|
756
|
+
2. 构建和配置;
|
|
757
|
+
3. 一条核心链路;
|
|
758
|
+
4. 对应测试;
|
|
759
|
+
5. 核心抽象与数据模型;
|
|
760
|
+
6. 错误、并发、存储和扩展;
|
|
761
|
+
7. Issue、PR 与历史演进。
|
|
762
|
+
|
|
763
|
+
说明每一步“为什么此时读它”,而不是仅列文件清单。
|
|
764
|
+
|
|
765
|
+
## 8. 产物更新
|
|
766
|
+
|
|
767
|
+
主产物至少包含:项目定位、技术栈、目录地图、架构、启动入口、核心链路、关键源码、设计原因、横切能力、证据索引、推荐阅读顺序和待验证项。
|
|
768
|
+
|
|
769
|
+
</codebase-guidance>
|
|
770
|
+
|
|
771
|
+
<requirements-guidance>
|
|
772
|
+
|
|
773
|
+
# 需求与技术方案指导
|
|
774
|
+
|
|
775
|
+
本模式把“想要一个功能”还原为用户问题、行为合同、约束和可解释的技术选择。它不直接创建权威 Spec 或 Ticket。
|
|
776
|
+
|
|
777
|
+
## 1. 问题定义
|
|
778
|
+
|
|
779
|
+
区分:
|
|
780
|
+
|
|
781
|
+
- 用户或业务问题;
|
|
782
|
+
- 期望结果;
|
|
783
|
+
- 请求中的具体功能想法;
|
|
784
|
+
- 成功指标;
|
|
785
|
+
- 明确非目标;
|
|
786
|
+
- 当前流程和痛点;
|
|
787
|
+
- 谁受影响、谁批准、谁运维。
|
|
788
|
+
|
|
789
|
+
功能想法不是天然的需求结论。
|
|
790
|
+
|
|
791
|
+
## 2. 行为与约束地图
|
|
792
|
+
|
|
793
|
+
梳理:
|
|
794
|
+
|
|
795
|
+
- 参与者与权限;
|
|
796
|
+
- 主要用户流程;
|
|
797
|
+
- 输入、输出、状态和业务规则;
|
|
798
|
+
- 正常、异常和边界场景;
|
|
799
|
+
- 数据、不变量和生命周期;
|
|
800
|
+
- 兼容、迁移和发布限制;
|
|
801
|
+
- 性能、可靠性、安全、隐私、审计、成本和时间约束;
|
|
802
|
+
- 可观察成功状态。
|
|
803
|
+
|
|
804
|
+
## 3. 关键未知项
|
|
805
|
+
|
|
806
|
+
分为:
|
|
807
|
+
|
|
808
|
+
- 可从现有项目发现的事实;
|
|
809
|
+
- 需要用户做业务取舍的 decision-needed;
|
|
810
|
+
- 需要外部研究的技术事实;
|
|
811
|
+
- 可延后到 Ticket 或实现阶段的低影响细节。
|
|
812
|
+
|
|
813
|
+
只询问前两类中真正会改变方案的事项。
|
|
814
|
+
|
|
815
|
+
## 4. 方案形成
|
|
816
|
+
|
|
817
|
+
每个方案说明:
|
|
818
|
+
|
|
819
|
+
- 核心思路;
|
|
820
|
+
- 满足哪些行为和约束;
|
|
821
|
+
- 依赖的假设;
|
|
822
|
+
- 数据和接口影响;
|
|
823
|
+
- 失败模式;
|
|
824
|
+
- 实施与认知复杂度;
|
|
825
|
+
- 兼容、迁移和回滚;
|
|
826
|
+
- 可观测性与运维;
|
|
827
|
+
- 长期演进;
|
|
828
|
+
- 不适用条件。
|
|
829
|
+
|
|
830
|
+
至少比较保持现状、最小方案和一个实质替代方案。
|
|
831
|
+
|
|
832
|
+
## 5. 技术栈比较
|
|
833
|
+
|
|
834
|
+
先比较“能力和约束”,再比较具体产品。避免仅按流行度、性能榜或个人偏好选择。
|
|
835
|
+
|
|
836
|
+
示例层级:
|
|
837
|
+
|
|
838
|
+
```text
|
|
839
|
+
需求约束
|
|
840
|
+
→ 架构能力(同步/异步、事务/最终一致、托管/自建)
|
|
841
|
+
→ 技术类别(关系库、消息系统、缓存、工作流引擎)
|
|
842
|
+
→ 具体产品与版本
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
若具体产品信息可能变化,必须查当前官方资料并记录查询日期。
|
|
846
|
+
|
|
847
|
+
## 6. 推荐与决策支持
|
|
848
|
+
|
|
849
|
+
推荐说明:
|
|
850
|
+
|
|
851
|
+
- 当前最关键的 2–4 个决策驱动因素;
|
|
852
|
+
- 推荐方案如何满足它们;
|
|
853
|
+
- 被拒方案在哪些约束上不匹配;
|
|
854
|
+
- 反转条件;
|
|
855
|
+
- 未验证假设;
|
|
856
|
+
- 需要正式写入 Spec 或 ADR 的事项。
|
|
857
|
+
|
|
858
|
+
## 7. 移交
|
|
859
|
+
|
|
860
|
+
- 需求和行为仍不清:“设计访谈能力”;
|
|
861
|
+
- 外部行为、范围和验收已清楚:“编写 Spec 阶段”;
|
|
862
|
+
- 方案已锁定且需要执行切片:“拆分 Tickets 阶段”。
|
|
863
|
+
|
|
864
|
+
主产物保留解释与讨论历史,但不冒充上述权威工件。
|
|
865
|
+
|
|
866
|
+
</requirements-guidance>
|
|
867
|
+
|
|
868
|
+
<architecture-guidance>
|
|
869
|
+
|
|
870
|
+
# 架构设计与评审指导
|
|
871
|
+
|
|
872
|
+
本模式解释架构驱动因素、边界、数据与故障流、候选设计和长期取舍,不以“更优雅”为理由制造无目标重构,也不直接修改代码或 ADR。
|
|
873
|
+
|
|
874
|
+
## 1. 架构压力
|
|
875
|
+
|
|
876
|
+
明确触发原因:
|
|
877
|
+
|
|
878
|
+
- 新业务能力;
|
|
879
|
+
- 性能或容量;
|
|
880
|
+
- 可靠性和事故;
|
|
881
|
+
- 安全、隐私或合规;
|
|
882
|
+
- 团队与组织边界;
|
|
883
|
+
- 维护成本和变更热点;
|
|
884
|
+
- 迁移、替换或供应商风险。
|
|
885
|
+
|
|
886
|
+
没有真实压力时,保持现状应是强候选。
|
|
887
|
+
|
|
888
|
+
## 2. 系统上下文
|
|
889
|
+
|
|
890
|
+
建立:
|
|
891
|
+
|
|
892
|
+
- 用户和外部系统;
|
|
893
|
+
- 信任边界;
|
|
894
|
+
- 输入、输出和协议;
|
|
895
|
+
- 数据所有权;
|
|
896
|
+
- 部署和运行边界;
|
|
897
|
+
- 当前约束与不可变条件。
|
|
898
|
+
|
|
899
|
+
## 3. 当前结构地图
|
|
900
|
+
|
|
901
|
+
按目标范围梳理:
|
|
902
|
+
|
|
903
|
+
- 模块和公共接口;
|
|
904
|
+
- 数据、控制和错误流;
|
|
905
|
+
- 同步、异步和事务边界;
|
|
906
|
+
- 状态、缓存和共享资源;
|
|
907
|
+
- 依赖方向与生命周期;
|
|
908
|
+
- 测试和可观测接缝;
|
|
909
|
+
- 变更热点、接缝泄漏、时间耦合和事故半径。
|
|
910
|
+
|
|
911
|
+
## 4. 质量属性场景
|
|
912
|
+
|
|
913
|
+
不要只写“高性能”“高可用”。将其具体化为:
|
|
914
|
+
|
|
915
|
+
```text
|
|
916
|
+
来源 → 刺激 → 环境 → 目标对象 → 响应 → 可衡量结果
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
本 Work 可以说明应如何衡量,但不自行运行测试。
|
|
920
|
+
|
|
921
|
+
## 5. 候选架构
|
|
922
|
+
|
|
923
|
+
每个候选至少说明:
|
|
924
|
+
|
|
925
|
+
- 组件和边界;
|
|
926
|
+
- 接口与数据所有权;
|
|
927
|
+
- 主流程和失败流程;
|
|
928
|
+
- 一致性、幂等、重试和顺序;
|
|
929
|
+
- 扩容、降级和恢复;
|
|
930
|
+
- 安全与审计;
|
|
931
|
+
- 运维和可观测性;
|
|
932
|
+
- 迁移、兼容和回滚;
|
|
933
|
+
- 团队与组织影响;
|
|
934
|
+
- 新增复杂度和长期锁定。
|
|
935
|
+
|
|
936
|
+
## 6. 设计机制与 Why
|
|
937
|
+
|
|
938
|
+
重点解释:
|
|
939
|
+
|
|
940
|
+
- 为什么在这里划边界;
|
|
941
|
+
- 为什么同步或异步;
|
|
942
|
+
- 为什么由该组件拥有数据;
|
|
943
|
+
- 为什么使用当前一致性模型;
|
|
944
|
+
- 为什么错误在该层处理;
|
|
945
|
+
- 为什么引入或拒绝缓存、队列、事件、服务拆分;
|
|
946
|
+
- 哪些条件会使设计失效。
|
|
947
|
+
|
|
948
|
+
## 7. 评审结论
|
|
949
|
+
|
|
950
|
+
候选结论分为:接受、调整、延后、拒绝。详细讨论记录在 MLOG;高影响用户决定摘要进入全局 LOG。
|
|
951
|
+
|
|
952
|
+
本 Work 不直接写 ADR。需要正式架构决定时移交:
|
|
953
|
+
|
|
954
|
+
- 逐项设计访谈:“设计访谈能力”;
|
|
955
|
+
- 基于真实代码压力的正式评审:“架构审查阶段”。
|
|
956
|
+
|
|
957
|
+
## 8. 输出
|
|
958
|
+
|
|
959
|
+
主产物至少包含:架构压力、上下文、当前结构、质量属性场景、候选架构、方案对比、推荐与反转条件、迁移与风险、待正式化决定和未决问题。
|
|
960
|
+
|
|
961
|
+
</architecture-guidance>
|
|
962
|
+
|
|
963
|
+
<domain-learning-guidance>
|
|
964
|
+
|
|
965
|
+
# 新领域与技术知识指导
|
|
966
|
+
|
|
967
|
+
目标是建立可迁移的概念与因果模型,不输出百科式文件堆积,也不布置练习任务。
|
|
968
|
+
|
|
969
|
+
## 1. 学习目标
|
|
970
|
+
|
|
971
|
+
明确用户最终需要:
|
|
972
|
+
|
|
973
|
+
- 能解释概念;
|
|
974
|
+
- 能阅读项目或文档;
|
|
975
|
+
- 能参与技术选型;
|
|
976
|
+
- 能评审设计;
|
|
977
|
+
- 能定位常见问题;
|
|
978
|
+
- 或只需要快速建立全貌。
|
|
979
|
+
|
|
980
|
+
目标决定深度,不按固定章节灌输全部知识。
|
|
981
|
+
|
|
982
|
+
## 2. 前置与知识地图
|
|
983
|
+
|
|
984
|
+
建立四层地图:
|
|
985
|
+
|
|
986
|
+
1. 必须先理解的前置概念;
|
|
987
|
+
2. 能解释大多数场景的核心机制;
|
|
988
|
+
3. 技术生态、实现类别与典型产品;
|
|
989
|
+
4. 边缘主题和可暂时查阅内容。
|
|
990
|
+
|
|
991
|
+
说明概念之间的依赖,不平均展开。
|
|
992
|
+
|
|
993
|
+
## 3. 核心概念解释
|
|
994
|
+
|
|
995
|
+
每个核心概念回答:
|
|
996
|
+
|
|
997
|
+
- 它解决什么问题;
|
|
998
|
+
- 它的机制;
|
|
999
|
+
- 为什么需要它;
|
|
1000
|
+
- 与相邻概念的区别;
|
|
1001
|
+
- 一个典型例子;
|
|
1002
|
+
- 一个反例或不适用场景;
|
|
1003
|
+
- 常见误解;
|
|
1004
|
+
- 在真实工程中的影响。
|
|
1005
|
+
|
|
1006
|
+
类比只能辅助,必须说明类比边界。
|
|
1007
|
+
|
|
1008
|
+
## 4. 技术生态
|
|
1009
|
+
|
|
1010
|
+
比较技术时先分清层级:概念、协议、架构模式、实现类别、产品和托管服务。不得把不同层级放在同一表格中直接排名。
|
|
1011
|
+
|
|
1012
|
+
记录版本、发布日期和查询日期。快速演进领域优先使用官方文档和原始资料。
|
|
1013
|
+
|
|
1014
|
+
## 5. 理解连接
|
|
1015
|
+
|
|
1016
|
+
通过对话帮助用户连接:
|
|
1017
|
+
|
|
1018
|
+
```text
|
|
1019
|
+
问题 → 概念 → 机制 → 工程后果 → 技术选择 → 边界
|
|
1020
|
+
```
|
|
1021
|
+
|
|
1022
|
+
可以邀请用户复述或判断条件变化,但不要求编码、运行命令或完成作业。
|
|
1023
|
+
|
|
1024
|
+
## 6. 输出
|
|
1025
|
+
|
|
1026
|
+
主产物至少包含:学习目标、前置知识、知识地图、核心概念、因果关系、技术生态、方案区别、典型误区、版本风险、用户已确认理解和剩余问题。
|
|
1027
|
+
|
|
1028
|
+
</domain-learning-guidance>
|
|
1029
|
+
|
|
1030
|
+
<comprehension-and-closure>
|
|
1031
|
+
|
|
1032
|
+
# 理解确认、暂停与关闭协议
|
|
1033
|
+
|
|
1034
|
+
## 1. 诚实的理解状态
|
|
1035
|
+
|
|
1036
|
+
本 Work 使用以下状态:
|
|
1037
|
+
|
|
1038
|
+
- `unverified`:尚未进行总结确认;
|
|
1039
|
+
- `partial`:部分核心点已确认,仍有关键疑问;
|
|
1040
|
+
- `confirmed`:用户确认总结准确,并能复述至少一个核心因果或取舍;
|
|
1041
|
+
- `accepted-summary`:用户确认总结准确,但未进行独立复述;
|
|
1042
|
+
- `declined`:用户不希望进行理解确认;
|
|
1043
|
+
- `blocked`:缺少外部信息,无法完成关键解释。
|
|
1044
|
+
|
|
1045
|
+
不得写“用户完全理解”作为可观测事实。
|
|
1046
|
+
|
|
1047
|
+
## 2. 轻量确认方式
|
|
1048
|
+
|
|
1049
|
+
一次选择最相关的一种:
|
|
1050
|
+
|
|
1051
|
+
### 因果复述
|
|
1052
|
+
|
|
1053
|
+
请用户用一两句话说明“为什么会这样”,而不是背定义。
|
|
1054
|
+
|
|
1055
|
+
### 方案取舍
|
|
1056
|
+
|
|
1057
|
+
请用户说明当前为何选 A 而不是 B,以及什么条件会改变选择。
|
|
1058
|
+
|
|
1059
|
+
### 条件变化
|
|
1060
|
+
|
|
1061
|
+
给出一个关键约束变化,请用户判断原结论是否仍成立。
|
|
1062
|
+
|
|
1063
|
+
### 总结确认
|
|
1064
|
+
|
|
1065
|
+
导师给出结构化总结,请用户指出不准确、不清楚或不同意之处。
|
|
1066
|
+
|
|
1067
|
+
### 疑问清单
|
|
1068
|
+
|
|
1069
|
+
请用户确认是否还有未覆盖的问题。
|
|
1070
|
+
|
|
1071
|
+
这些不是考试,不设标准答案评分,不以通过为继续回答的条件。
|
|
1072
|
+
|
|
1073
|
+
## 3. 用户跳过
|
|
1074
|
+
|
|
1075
|
+
用户拒绝复述或只想拿到文档时:
|
|
1076
|
+
|
|
1077
|
+
- 立即尊重;
|
|
1078
|
+
- 状态写为 `accepted-summary` 或 `declined`;
|
|
1079
|
+
- 在最终综合中说明理解未经独立复述确认;
|
|
1080
|
+
- 不继续追问。
|
|
1081
|
+
|
|
1082
|
+
## 4. 暂停
|
|
1083
|
+
|
|
1084
|
+
当用户表示稍后继续,或当前回合自然中止:
|
|
1085
|
+
|
|
1086
|
+
- 主产物保持 `status: active`;
|
|
1087
|
+
- 记录当前阶段、下一焦点、唯一待回答问题和恢复所需材料;
|
|
1088
|
+
- 保持 `current_work` 为本 Work;
|
|
1089
|
+
- 返回主产物路径;
|
|
1090
|
+
- 不生成虚假的最终结论。
|
|
1091
|
+
|
|
1092
|
+
## 5. 提前导出
|
|
1093
|
+
|
|
1094
|
+
用户要求立刻输出完整 Markdown 时:
|
|
1095
|
+
|
|
1096
|
+
- 主产物即为导出对象;
|
|
1097
|
+
- 状态根据事实写 `active`、`blocked` 或 `completed`;
|
|
1098
|
+
- 所有空缺章节写“不适用”或“待验证”;
|
|
1099
|
+
- 完整 MLOG 按编号保留;
|
|
1100
|
+
- 不为了美观删除矛盾、旧假设或被替代决定。
|
|
1101
|
+
|
|
1102
|
+
## 6. 正常关闭检查
|
|
1103
|
+
|
|
1104
|
+
逐项检查:
|
|
1105
|
+
|
|
1106
|
+
1. 目标和成功标准是否已回答;
|
|
1107
|
+
2. 关键结论是否有证据、推导或待验证标记;
|
|
1108
|
+
3. 主链路和 Why 是否清楚;
|
|
1109
|
+
4. 方案是否包含保持现状、取舍和反转条件;
|
|
1110
|
+
5. 用户是否确认总结准确或明确跳过;
|
|
1111
|
+
6. 是否还有问题;
|
|
1112
|
+
7. 剩余问题是否被明确延后并说明影响;
|
|
1113
|
+
8. 是否需要移交其他 Work。
|
|
1114
|
+
|
|
1115
|
+
## 7. 最终回复
|
|
1116
|
+
|
|
1117
|
+
返回:
|
|
1118
|
+
|
|
1119
|
+
- 本次核心结论;
|
|
1120
|
+
- 理解确认状态;
|
|
1121
|
+
- 未决或待验证项;
|
|
1122
|
+
- 主产物完整路径;
|
|
1123
|
+
- 下一 Work 完整路径或“无”;
|
|
1124
|
+
- 明确说明本 Work 未执行代码、命令或工程变更。
|
|
1125
|
+
|
|
1126
|
+
关闭本 Work 不自动将 change 标 completed,也不自动归档。
|
|
1127
|
+
|
|
1128
|
+
</comprehension-and-closure>
|
|
1129
|
+
|
|
1130
|
+
<persistence-and-resume>
|
|
1131
|
+
|
|
1132
|
+
# 持久化与恢复协议
|
|
1133
|
+
|
|
1134
|
+
本协议是工程认知导师 Work 的状态与落盘权威。它细化 Speculo 全局持久化契约,不改变其他 Work 的工件职责。
|
|
1135
|
+
|
|
1136
|
+
## 1. 根与 change 解析
|
|
1137
|
+
|
|
1138
|
+
1. 从当前工作目录向上寻找唯一的 Speculo 工作区声明(`.speculo` 下的 workspace 配置);
|
|
1139
|
+
2. 第一个唯一命中的目录为 project root;多个候选或用户指定目录冲突时停止并消歧;
|
|
1140
|
+
3. `path_base` 必须为 `project-root`;
|
|
1141
|
+
4. 读取 roots 后,将 Work 路径解析为 SpecDev 的 E-engineering-cognitive-mentor 能力集合,状态路径解析为 `specdev/`;
|
|
1142
|
+
5. 用户指定 change 优先;否则唯一 active change 直接使用;没有 active change 时按 `YYYY-MM-DD-<kebab-topic>` 创建;多个 active change 不得猜测。
|
|
1143
|
+
|
|
1144
|
+
若 `specdev/config.json` 不存在,先进入 “初始化设置阶段”。
|
|
1145
|
+
|
|
1146
|
+
## 2. 状态文件
|
|
1147
|
+
|
|
1148
|
+
全局状态:`specdev/status.json`。
|
|
1149
|
+
|
|
1150
|
+
change 状态:`specdev/changes/{change}/.status.json`。
|
|
1151
|
+
|
|
1152
|
+
主产物:`specdev/changes/{change}/engineering-cognitive-mentor.md`。
|
|
1153
|
+
|
|
1154
|
+
跨 Work 决策日志:`specdev/changes/{change}/LOG.md`。
|
|
1155
|
+
|
|
1156
|
+
### 开始
|
|
1157
|
+
|
|
1158
|
+
- 在 `active` 中找到或创建当前 change;
|
|
1159
|
+
- 设置该 change 的 `current_work` 为 `specdev/engineering-cognitive-mentor`;
|
|
1160
|
+
- `specdev/changes/{change}/.status.json` 的 `current_work` 同步设置为相同值;
|
|
1161
|
+
- 在 `work_history` 中查找该 change 与 work id 的未完成记录;存在唯一一条时复用,不重复创建;不存在时追加:
|
|
1162
|
+
|
|
1163
|
+
```json
|
|
1164
|
+
{
|
|
1165
|
+
"change": "<change>",
|
|
1166
|
+
"work_id": "specdev/engineering-cognitive-mentor",
|
|
1167
|
+
"started_at": "<ISO-8601>",
|
|
1168
|
+
"completed_at": null,
|
|
1169
|
+
"result": null
|
|
1170
|
+
}
|
|
1171
|
+
```
|
|
1172
|
+
|
|
1173
|
+
若存在两条以上未完成记录,记录状态异常并停止自动写入,先请求消歧或修复。
|
|
1174
|
+
|
|
1175
|
+
### 等待用户或跨会话暂停
|
|
1176
|
+
|
|
1177
|
+
- 保持 `current_work` 为本 Work;
|
|
1178
|
+
- 保持唯一 `work_history` 记录未完成;
|
|
1179
|
+
- 更新主产物 `updated_at`、`current_phase`、`next_question`、`unresolved_questions` 与 `last_mlog_id`;
|
|
1180
|
+
- 每轮在回复前先落盘,确保用户即使中断也可恢复。
|
|
1181
|
+
|
|
1182
|
+
等待用户回答不是 blocked,不应把 change 标为 blocked。
|
|
1183
|
+
|
|
1184
|
+
### 正常关闭
|
|
1185
|
+
|
|
1186
|
+
- 将唯一未完成 `work_history` 的 `completed_at` 写为当前时间,`result` 写为 `completed`;
|
|
1187
|
+
- 将本 Work id 以去重方式加入 active change 的 `works_run`;
|
|
1188
|
+
- active change 的 `current_work` 与 `specdev/changes/{change}/.status.json` 的 `current_work` 设为 null;
|
|
1189
|
+
- 不改变整个 change 的 `result` 或 `change_status`,除非用户明确结束、取消或外部阻塞确实影响整个 change;
|
|
1190
|
+
- 主产物 `status` 写为 `completed`,记录 `closed_at` 与理解确认状态。
|
|
1191
|
+
|
|
1192
|
+
### 外部阻塞
|
|
1193
|
+
|
|
1194
|
+
只有缺少权限、不可访问资料、必须等待第三方结果或存在互斥权威冲突时才标 blocked:
|
|
1195
|
+
|
|
1196
|
+
- 主产物 `status: blocked`;
|
|
1197
|
+
- 记录 blocker、已知事实、所需输入和恢复条件;
|
|
1198
|
+
- 完成当前 `work_history`,结果为 `blocked`;
|
|
1199
|
+
- change 是否设为 blocked 取决于该阻塞是否阻止整个 change,不自动扩大。
|
|
1200
|
+
|
|
1201
|
+
### 用户取消
|
|
1202
|
+
|
|
1203
|
+
- 主产物 `status: cancelled`;
|
|
1204
|
+
- 保存当前综合和完整 MLOG;
|
|
1205
|
+
- `work_history.result` 写为 `cancelled`;
|
|
1206
|
+
- 清空 current_work;
|
|
1207
|
+
- 不删除工件或日志。
|
|
1208
|
+
|
|
1209
|
+
## 3. 主产物幂等初始化
|
|
1210
|
+
|
|
1211
|
+
主产物不存在时,使用 下方 `<mentor-report-template>` 标签 创建。
|
|
1212
|
+
|
|
1213
|
+
主产物已存在时:
|
|
1214
|
+
|
|
1215
|
+
- 不重新生成或覆盖;
|
|
1216
|
+
- 读取 frontmatter、当前综合、未决问题和最后一个 `MLOG`;
|
|
1217
|
+
- 可补齐缺失的可选章节,但不得重排或改写历史日志;
|
|
1218
|
+
- 未识别的新字段原样保留;
|
|
1219
|
+
- schema version 1 缺失可选字段时按空值读取,在真实更新时补齐。
|
|
1220
|
+
|
|
1221
|
+
## 4. 每轮落盘顺序
|
|
1222
|
+
|
|
1223
|
+
每次有实质交互时按以下顺序写入:
|
|
1224
|
+
|
|
1225
|
+
1. 追加新的 `MLOG-###`;
|
|
1226
|
+
2. 更新主产物的当前综合、证据表、方案表和未决问题;
|
|
1227
|
+
3. 若有高影响决定,摘要追加全局 `LOG-###`;
|
|
1228
|
+
4. 更新主产物 frontmatter 的阶段、状态、理解状态、时间和最后日志编号;
|
|
1229
|
+
5. 更新 `specdev/changes/{change}/.status.json` 的 `updated_at`;
|
|
1230
|
+
6. 返回用户回复。
|
|
1231
|
+
|
|
1232
|
+
写入中断时,以已追加的 MLOG 为恢复锚点;不得为同一用户回合重复追加。可以用时间、上一条 MLOG 和用户输入摘要检测重复。
|
|
1233
|
+
|
|
1234
|
+
## 5. MLOG 与全局 LOG 的职责
|
|
1235
|
+
|
|
1236
|
+
### MLOG:详细、Work 专属
|
|
1237
|
+
|
|
1238
|
+
主产物中的 MLOG 保存:用户问题摘要、导师问题、用户回答、解释、证据变化、误解修正、方案比较、理解确认和下一焦点。
|
|
1239
|
+
|
|
1240
|
+
### 全局 LOG:高影响、跨 Work
|
|
1241
|
+
|
|
1242
|
+
只有满足以下任一条件才追加到 `specdev/changes/{change}/LOG.md`:
|
|
1243
|
+
|
|
1244
|
+
- 用户确认或拒绝会改变产品行为、范围、验收、架构边界、迁移、安全或重大风险的选择;
|
|
1245
|
+
- 某项结论阻止或允许进入 Spec、Ticket、Goal Plan 或 Implement;
|
|
1246
|
+
- 先前跨 Work 决策被替代;
|
|
1247
|
+
- 需要其他 Work 恢复时必须知道的阻塞或 handoff。
|
|
1248
|
+
|
|
1249
|
+
全局 LOG 条目使用 “设计访谈阶段的全局 LOG 条目格式”,并在“事实与来源”或“后续”中引用对应 `MLOG-###` 与主产物完整路径。
|
|
1250
|
+
|
|
1251
|
+
普通教学解释、低影响偏好和用户的每个追问不得复制到全局 LOG。
|
|
1252
|
+
|
|
1253
|
+
## 6. 恢复读取顺序
|
|
1254
|
+
|
|
1255
|
+
跨会话恢复时按顺序读取:
|
|
1256
|
+
|
|
1257
|
+
1. `specdev/status.json`;
|
|
1258
|
+
2. `specdev/changes/{change}/.status.json`;
|
|
1259
|
+
3. `specdev/changes/{change}/engineering-cognitive-mentor.md`;
|
|
1260
|
+
4. 其中列出的权威输入与外部引用;
|
|
1261
|
+
5. `specdev/changes/{change}/LOG.md` 中与 MLOG 关联的高影响条目;
|
|
1262
|
+
6. 按当前模式加载所需专项协议。
|
|
1263
|
+
|
|
1264
|
+
恢复后先向用户简短说明:当前模式、已确认结论、未决问题和下一焦点。不要重新复述全文或重新询问已回答问题。
|
|
1265
|
+
|
|
1266
|
+
## 7. 工件冲突
|
|
1267
|
+
|
|
1268
|
+
冲突按 下方 `<artifact-contract>` 标签 裁决。
|
|
1269
|
+
|
|
1270
|
+
- 用户最新明确决定优先;
|
|
1271
|
+
- 主产物是教学综合与详细 MLOG 的权威,不是产品行为或架构决定的最终权威;
|
|
1272
|
+
- 若主产物与 ADR、Spec 或 Ticket 冲突,指出冲突并移交真正拥有该决定的 Work 修订;
|
|
1273
|
+
- 代码事实可以证明旧解释过时,但不能静默改写用户目标;
|
|
1274
|
+
- 所有替代通过新 MLOG 和必要的全局 LOG 记录,不删除旧内容。
|
|
1275
|
+
|
|
1276
|
+
## 8. 敏感信息
|
|
1277
|
+
|
|
1278
|
+
不得将令牌、密码、密钥、完整个人数据、内部凭证、生产连接串或未脱敏客户数据写入 Speculo 状态。日志只保存脱敏摘要和安全的来源指针。
|
|
1279
|
+
|
|
1280
|
+
</persistence-and-resume>
|
|
1281
|
+
|
|
1282
|
+
<mentor-report-template>
|
|
1283
|
+
|
|
1284
|
+
## 产物 YAML 头部
|
|
1285
|
+
|
|
1286
|
+
生成该工件时,将以下字段写在文档开头的 YAML frontmatter 中:
|
|
1287
|
+
|
|
1288
|
+
```yaml
|
|
1289
|
+
schema_version: 1
|
|
1290
|
+
artifact: engineering-cognitive-mentor
|
|
1291
|
+
change: <YYYY-MM-DD-topic>
|
|
1292
|
+
status: active
|
|
1293
|
+
primary_mode: null
|
|
1294
|
+
secondary_modes: []
|
|
1295
|
+
current_phase: intake
|
|
1296
|
+
understanding_status: unverified
|
|
1297
|
+
started_at: <ISO-8601>
|
|
1298
|
+
updated_at: <ISO-8601>
|
|
1299
|
+
closed_at: null
|
|
1300
|
+
last_mlog_id: null
|
|
1301
|
+
next_question: null
|
|
1302
|
+
```
|
|
1303
|
+
|
|
1304
|
+
# 工程认知导师记录:<主题>
|
|
1305
|
+
|
|
1306
|
+
> **工件职责:** 本文是当前 change 的工程认知综合、详细问答轨迹与恢复入口。产品行为以 Spec 为权威,架构决定以 ADR 为权威,执行契约以 Ticket 为权威。本文不得覆盖这些工件。
|
|
1307
|
+
|
|
1308
|
+
## 1. 会话与研究契约
|
|
1309
|
+
|
|
1310
|
+
- **用户目标:**
|
|
1311
|
+
- **期望输出:**
|
|
1312
|
+
- **成功标准:**
|
|
1313
|
+
- **研究范围:**
|
|
1314
|
+
- **不处理范围:**
|
|
1315
|
+
- **主模式:**
|
|
1316
|
+
- **次模式与顺序:**
|
|
1317
|
+
- **版本/分支/Commit/查询日期:**
|
|
1318
|
+
- **关键约束:**
|
|
1319
|
+
- **权威输入:**
|
|
1320
|
+
|
|
1321
|
+
## 2. 用户当前认知模型
|
|
1322
|
+
|
|
1323
|
+
### 已经知道
|
|
1324
|
+
|
|
1325
|
+
### 当前判断或倾向
|
|
1326
|
+
|
|
1327
|
+
### 困惑与不确定点
|
|
1328
|
+
|
|
1329
|
+
### 已纠正的误解
|
|
1330
|
+
|
|
1331
|
+
## 3. 执行摘要
|
|
1332
|
+
|
|
1333
|
+
> 持续更新当前最可靠的总结。历史变化保留在 MLOG,不在本节复制全部讨论。
|
|
1334
|
+
|
|
1335
|
+
## 4. 全局地图与主链路
|
|
1336
|
+
|
|
1337
|
+
### 全貌
|
|
1338
|
+
|
|
1339
|
+
### 主链路
|
|
1340
|
+
|
|
1341
|
+
### 关键边界
|
|
1342
|
+
|
|
1343
|
+
## 5. 事实、推断、假设与待验证
|
|
1344
|
+
|
|
1345
|
+
| ID | 类型 | 陈述 | 来源或推导 | 状态/影响 |
|
|
1346
|
+
|---|---|---|---|---|
|
|
1347
|
+
|
|
1348
|
+
## 6. 核心机制与 Why
|
|
1349
|
+
|
|
1350
|
+
### 背景与约束
|
|
1351
|
+
|
|
1352
|
+
### 机制
|
|
1353
|
+
|
|
1354
|
+
### 结果与影响
|
|
1355
|
+
|
|
1356
|
+
### 设计原因
|
|
1357
|
+
|
|
1358
|
+
### 代价与边界
|
|
1359
|
+
|
|
1360
|
+
## 7. 候选方案与技术栈比较
|
|
1361
|
+
|
|
1362
|
+
| 方案 | 核心思路 | 适用约束 | 优点 | 代价/风险 | 迁移与回滚 | 反转条件 |
|
|
1363
|
+
|---|---|---|---|---|---|---|
|
|
1364
|
+
|
|
1365
|
+
### 当前推荐
|
|
1366
|
+
|
|
1367
|
+
### 不选其他方案的原因
|
|
1368
|
+
|
|
1369
|
+
### 仍依赖的假设
|
|
1370
|
+
|
|
1371
|
+
## 8. 模式专项分析
|
|
1372
|
+
|
|
1373
|
+
> 根据 Bug、源码、需求、架构或新领域模式填写。不适用内容写“不适用”。
|
|
1374
|
+
|
|
1375
|
+
## 9. 已确认决定与理解变化
|
|
1376
|
+
|
|
1377
|
+
| ID | 类型 | 结论 | 原因 | 来源 | 替代关系 | 影响工件 |
|
|
1378
|
+
|---|---|---|---|---|---|---|
|
|
1379
|
+
|
|
1380
|
+
## 10. 未决问题与待验证项
|
|
1381
|
+
|
|
1382
|
+
| ID | 问题 | 为什么重要 | 所需信息/证据 | 是否阻塞 | 建议归属 |
|
|
1383
|
+
|---|---|---|---|---|---|
|
|
1384
|
+
|
|
1385
|
+
## 11. 理解确认
|
|
1386
|
+
|
|
1387
|
+
- **状态:** unverified
|
|
1388
|
+
- **导师最终总结:**
|
|
1389
|
+
- **用户复述或确认:**
|
|
1390
|
+
- **仍不清楚/不同意:**
|
|
1391
|
+
- **是否还有其他问题:**
|
|
1392
|
+
|
|
1393
|
+
## 12. 后续路线与移交
|
|
1394
|
+
|
|
1395
|
+
- **下一焦点:**
|
|
1396
|
+
- **下一 Work:** 无
|
|
1397
|
+
- **移交原因:**
|
|
1398
|
+
- **恢复说明:**
|
|
1399
|
+
|
|
1400
|
+
## 13. 完整交互日志
|
|
1401
|
+
|
|
1402
|
+
> MLOG 只追加不覆盖。结论变化时新增条目并引用旧编号。
|
|
1403
|
+
|
|
1404
|
+
## MLOG-001 — <ISO-8601> — <模式>/<阶段> — 初始化
|
|
1405
|
+
|
|
1406
|
+
- **状态:** answered
|
|
1407
|
+
- **用户输入摘要:**
|
|
1408
|
+
- **用户当前理解:**
|
|
1409
|
+
- **导师回答:**
|
|
1410
|
+
- **导师唯一问题:** 无
|
|
1411
|
+
- **用户回答:** 无
|
|
1412
|
+
- **新增事实与来源:**
|
|
1413
|
+
- **新增推断或假设:**
|
|
1414
|
+
- **Why 因果链:**
|
|
1415
|
+
- **候选方案与取舍:** 不适用
|
|
1416
|
+
- **推荐与反转条件:** 不适用
|
|
1417
|
+
- **决定或理解变化:**
|
|
1418
|
+
- **未决问题:**
|
|
1419
|
+
- **影响工件:** mentor-report
|
|
1420
|
+
- **关联全局 LOG:** 无
|
|
1421
|
+
- **替代/被替代:** 无
|
|
1422
|
+
- **下一焦点:**
|
|
1423
|
+
|
|
1424
|
+
</mentor-report-template>
|
|
1425
|
+
|
|
1426
|
+
<artifact-contract>
|
|
1427
|
+
|
|
1428
|
+
# 工件职责与权威裁决
|
|
1429
|
+
|
|
1430
|
+
SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个工件只承担自己的权威边界。
|
|
1431
|
+
|
|
1432
|
+
## 1. 工件职责
|
|
1433
|
+
|
|
1434
|
+
| 工件 | 具体位置 | 必须决定 | 不应决定 |
|
|
1435
|
+
|---|---|---|---|
|
|
1436
|
+
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入和下一 work | 详细实现方案 |
|
|
1437
|
+
| 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
1438
|
+
| 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
1439
|
+
| 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 当前领域术语、语义和稳定不变量 | 临时会议记录 |
|
|
1440
|
+
| 架构决策 | `specdev/changes/{change}/ADR.md` | 已接受架构决策、原因、后果和替代关系 | 尚未决定的方案集合 |
|
|
1441
|
+
| Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
1442
|
+
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理 |
|
|
1443
|
+
| Tickets Map | `specdev/changes/{change}/tickets-map.md` | 依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
1444
|
+
| Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
1445
|
+
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策 |
|
|
1446
|
+
|
|
1447
|
+
## 2. 权威顺序
|
|
1448
|
+
|
|
1449
|
+
同一事项冲突时按下列顺序裁决:
|
|
1450
|
+
|
|
1451
|
+
1. 用户最新明确决定;
|
|
1452
|
+
2. 当前已接受架构决策:`specdev/changes/{change}/ADR.md`;
|
|
1453
|
+
3. 当前外部行为权威:`specdev/changes/{change}/spec.md`;
|
|
1454
|
+
4. 当前 Ticket 契约:`specdev/changes/{change}/ticket/NN-<ticket-name>.md`;
|
|
1455
|
+
5. 当前跨 Ticket 编排:`specdev/changes/{change}/goal-plan.md`;
|
|
1456
|
+
6. 当前代码与运行事实;
|
|
1457
|
+
7. 旧计划、旧日志和未经确认的推断。
|
|
1458
|
+
|
|
1459
|
+
代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
|
|
1460
|
+
|
|
1461
|
+
## 3. 来源追踪
|
|
1462
|
+
|
|
1463
|
+
高影响条目应带来源标识:
|
|
1464
|
+
|
|
1465
|
+
- `USER-DECISION:<date-or-summary>`;
|
|
1466
|
+
- `ADR-###`;
|
|
1467
|
+
- `US-###` 或 `AC-###`;
|
|
1468
|
+
- `CODE:project/relative/path`;
|
|
1469
|
+
- `RESEARCH:<Url>https://example.com/source</Url>`;
|
|
1470
|
+
- `DIAG-###`。
|
|
1471
|
+
|
|
1472
|
+
来源追踪解释“为什么这样决定”,不要求为普通描述逐句加标签。
|
|
1473
|
+
|
|
1474
|
+
## 4. 冲突处理
|
|
1475
|
+
|
|
1476
|
+
1. 指明冲突事项和双方来源;
|
|
1477
|
+
2. 判断冲突属于事实过时、产品取舍、架构取舍、Ticket 范围还是调度问题;
|
|
1478
|
+
3. 按本规则的权威顺序提出裁决;
|
|
1479
|
+
4. 若改变外部行为、公共契约、数据、安全、范围、迁移或验收,必须获得用户或指定批准人决定;
|
|
1480
|
+
5. 更新真正拥有该决策的工件;
|
|
1481
|
+
6. 在 `specdev/changes/{change}/LOG.md` 保留被替代结论和原因;
|
|
1482
|
+
7. 重新执行结构校验;纯网页环境按本文的内联规则人工核对。
|
|
1483
|
+
|
|
1484
|
+
不得仅在下游工件中覆盖上游权威。
|
|
1485
|
+
|
|
1486
|
+
</artifact-contract>
|
|
1487
|
+
|
|
1488
|
+
<deviation-control>
|
|
1489
|
+
|
|
1490
|
+
# 偏差控制
|
|
1491
|
+
|
|
1492
|
+
偏差是“当前事实或实现需要偏离已批准工件”的显式事件。偏差不是普通进度说明,也不能作为先改后补文档的许可证。
|
|
1493
|
+
|
|
1494
|
+
## 1. 偏差等级
|
|
1495
|
+
|
|
1496
|
+
- **local**:只改变局部实现,不改变 Ticket 的行为、范围、公共契约、路径所有权或验证;记录到 Evidence 后可继续。
|
|
1497
|
+
- **ticket**:改变 Ticket 的执行路线、可写范围、局部契约或验收映射,但不改变 Spec;必须停止相关修改、更新 Ticket 并获得 owner 或 Lead 批准。
|
|
1498
|
+
- **spec**:改变外部行为、范围、用户故事、验收合同或非功能要求;必须返回 “编写 Spec 阶段”。
|
|
1499
|
+
- **architecture**:改变已接受架构决策或公共架构约束;必须返回 “设计访谈能力” 并更新 `specdev/changes/{change}/ADR.md`。
|
|
1500
|
+
- **release**:改变迁移、兼容窗口、发布门禁、回滚或不可逆批准点;必须停止并获得明确人工批准。
|
|
1501
|
+
|
|
1502
|
+
## 2. 触发条件
|
|
1503
|
+
|
|
1504
|
+
以下任一情况必须建立偏差:
|
|
1505
|
+
|
|
1506
|
+
- 当前代码事实使批准路线不可行;
|
|
1507
|
+
- 需要修改 Ticket 未授权的项目路径;
|
|
1508
|
+
- 需要修改 shared path,但当前实现者不是 owner;
|
|
1509
|
+
- 验证接缝无法证明验收合同;
|
|
1510
|
+
- 发现新的安全、数据、兼容、性能或迁移风险;
|
|
1511
|
+
- 依赖、合同或外部参考权威已变化;
|
|
1512
|
+
- 实际行为将与 Spec 或 ADR 不一致。
|
|
1513
|
+
|
|
1514
|
+
## 3. 偏差记录
|
|
1515
|
+
|
|
1516
|
+
偏差记录写入对应 Evidence:`specdev/changes/{change}/evidence/T-NN.md`,并至少包含:
|
|
1517
|
+
|
|
1518
|
+
- 偏差 ID 与等级;
|
|
1519
|
+
- 触发事实和证据;
|
|
1520
|
+
- 受影响工件与路径;
|
|
1521
|
+
- 继续、回退、修订或拆分的选项;
|
|
1522
|
+
- 推荐方案和风险;
|
|
1523
|
+
- 批准人、批准时间和批准范围;
|
|
1524
|
+
- 最终处理结果。
|
|
1525
|
+
|
|
1526
|
+
需要改变上层工件时,Evidence 只记录事件;真正的权威变更必须写回对应 Spec、Ticket、ADR 或 Goal Plan。
|
|
1527
|
+
|
|
1528
|
+
## 4. 停止规则
|
|
1529
|
+
|
|
1530
|
+
- 未批准的 ticket、spec、architecture 或 release 偏差不得继续实现。
|
|
1531
|
+
- 不得通过扩大 `writable_paths`、删除测试、降低断言或把风险改写成“已知限制”来绕过停止。
|
|
1532
|
+
- 偏差影响并发 Agent 时,Lead 必须暂停受影响 Wave,重新计算路径所有权、依赖和 Gate。
|
|
1533
|
+
|
|
1534
|
+
</deviation-control>
|
|
1535
|
+
|
|
1536
|
+
<research>
|
|
1537
|
+
|
|
1538
|
+
# SpecDev Research
|
|
1539
|
+
|
|
1540
|
+
## 触发
|
|
1541
|
+
|
|
1542
|
+
当外部 API、库版本、协议、法规、产品能力或最佳实践会改变设计/实现决策,且当前材料不足时使用。
|
|
1543
|
+
|
|
1544
|
+
## 流程
|
|
1545
|
+
|
|
1546
|
+
1. 写清楚要支持的具体决策和停止条件。
|
|
1547
|
+
2. 优先官方文档、规范、源代码、论文或维护者材料;技术问题优先一手来源。
|
|
1548
|
+
3. 核对版本、发布日期、适用环境和已知限制。
|
|
1549
|
+
4. 区分:来源明确事实、代码库事实、推断、建议。
|
|
1550
|
+
5. 对关键结论至少交叉验证;来源冲突时并列呈现,不强行调和。
|
|
1551
|
+
6. 记录摘要、证据、置信度、对 ADR/Spec/Ticket 的影响和仍未知项。
|
|
1552
|
+
7. 长期有效且经实现验证后才可由 Archive 提升到永久 research。
|
|
1553
|
+
|
|
1554
|
+
## 输出模板
|
|
1555
|
+
|
|
1556
|
+
```markdown
|
|
1557
|
+
# Research: <问题>
|
|
1558
|
+
- 决策用途:
|
|
1559
|
+
- 范围/版本:
|
|
1560
|
+
- 停止条件:
|
|
1561
|
+
|
|
1562
|
+
## Findings
|
|
1563
|
+
### R-001
|
|
1564
|
+
- 结论:
|
|
1565
|
+
- 类型:官方事实 / 代码事实 / 推断 / 建议
|
|
1566
|
+
- 来源:
|
|
1567
|
+
- 置信度:high / medium / low
|
|
1568
|
+
- 适用限制:
|
|
1569
|
+
- 对工件影响:
|
|
1570
|
+
|
|
1571
|
+
## Conflicts and Unknowns
|
|
1572
|
+
## Recommendation
|
|
1573
|
+
```
|
|
1574
|
+
|
|
1575
|
+
不得长篇复制受版权保护的来源;使用短引文和自己的准确摘要。
|
|
1576
|
+
|
|
1577
|
+
</research>
|
|
1578
|
+
|
|
1579
|
+
<config-template>
|
|
1580
|
+
|
|
1581
|
+
```json
|
|
1582
|
+
{
|
|
1583
|
+
"schema_version": 3,
|
|
1584
|
+
"interaction_language": "zh-CN",
|
|
1585
|
+
"artifact_language": "zh-CN",
|
|
1586
|
+
"git": {
|
|
1587
|
+
"auto_commit": false,
|
|
1588
|
+
"default_branch": null,
|
|
1589
|
+
"worktree_for_parallel": true
|
|
1590
|
+
},
|
|
1591
|
+
"execution": {
|
|
1592
|
+
"max_parallel": 3,
|
|
1593
|
+
"deep_ticket_human_approval": true,
|
|
1594
|
+
"shared_path_owner": "lead"
|
|
1595
|
+
},
|
|
1596
|
+
"verification": {
|
|
1597
|
+
"test": null,
|
|
1598
|
+
"typecheck": null,
|
|
1599
|
+
"lint": null,
|
|
1600
|
+
"build": null
|
|
1601
|
+
},
|
|
1602
|
+
"planning": {
|
|
1603
|
+
"default_depth": "standard",
|
|
1604
|
+
"require_ready_gate": true,
|
|
1605
|
+
"require_evidence": true
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
```
|
|
1609
|
+
|
|
1610
|
+
</config-template>
|
|
1611
|
+
|
|
1612
|
+
<config-schema>
|
|
1613
|
+
|
|
1614
|
+
```json
|
|
1615
|
+
{
|
|
1616
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1617
|
+
"$id": "urn:speculo:specdev:config:v3",
|
|
1618
|
+
"title": "SpecDev Configuration",
|
|
1619
|
+
"type": "object",
|
|
1620
|
+
"required": ["schema_version", "interaction_language", "artifact_language", "git", "execution", "verification", "planning"],
|
|
1621
|
+
"properties": {
|
|
1622
|
+
"schema_version": {"const": 3},
|
|
1623
|
+
"interaction_language": {"type": "string", "minLength": 1},
|
|
1624
|
+
"artifact_language": {"type": "string", "minLength": 1},
|
|
1625
|
+
"git": {
|
|
1626
|
+
"type": "object",
|
|
1627
|
+
"required": ["auto_commit", "default_branch", "worktree_for_parallel"],
|
|
1628
|
+
"properties": {
|
|
1629
|
+
"auto_commit": {"type": "boolean"},
|
|
1630
|
+
"default_branch": {"type": ["string", "null"]},
|
|
1631
|
+
"worktree_for_parallel": {"type": "boolean"}
|
|
1632
|
+
},
|
|
1633
|
+
"additionalProperties": true
|
|
1634
|
+
},
|
|
1635
|
+
"execution": {
|
|
1636
|
+
"type": "object",
|
|
1637
|
+
"required": ["max_parallel", "deep_ticket_human_approval", "shared_path_owner"],
|
|
1638
|
+
"properties": {
|
|
1639
|
+
"max_parallel": {"type": "integer", "minimum": 1},
|
|
1640
|
+
"deep_ticket_human_approval": {"type": "boolean"},
|
|
1641
|
+
"shared_path_owner": {"type": "string", "minLength": 1}
|
|
1642
|
+
},
|
|
1643
|
+
"additionalProperties": true
|
|
1644
|
+
},
|
|
1645
|
+
"verification": {
|
|
1646
|
+
"type": "object",
|
|
1647
|
+
"required": ["test", "typecheck", "lint", "build"],
|
|
1648
|
+
"properties": {
|
|
1649
|
+
"test": {"type": ["string", "null"]},
|
|
1650
|
+
"typecheck": {"type": ["string", "null"]},
|
|
1651
|
+
"lint": {"type": ["string", "null"]},
|
|
1652
|
+
"build": {"type": ["string", "null"]}
|
|
1653
|
+
},
|
|
1654
|
+
"additionalProperties": true
|
|
1655
|
+
},
|
|
1656
|
+
"planning": {
|
|
1657
|
+
"type": "object",
|
|
1658
|
+
"required": ["default_depth", "require_ready_gate", "require_evidence"],
|
|
1659
|
+
"properties": {
|
|
1660
|
+
"default_depth": {"enum": ["lite", "standard", "deep"]},
|
|
1661
|
+
"require_ready_gate": {"type": "boolean"},
|
|
1662
|
+
"require_evidence": {"type": "boolean"}
|
|
1663
|
+
},
|
|
1664
|
+
"additionalProperties": true
|
|
1665
|
+
}
|
|
1666
|
+
},
|
|
1667
|
+
"additionalProperties": true
|
|
1668
|
+
}
|
|
1669
|
+
```
|
|
1670
|
+
|
|
1671
|
+
</config-schema>
|
|
1672
|
+
|
|
1673
|
+
<status-template>
|
|
1674
|
+
|
|
1675
|
+
```json
|
|
1676
|
+
{
|
|
1677
|
+
"schema_version": 3,
|
|
1678
|
+
"workflow": "specdev",
|
|
1679
|
+
"active": [],
|
|
1680
|
+
"work_history": [],
|
|
1681
|
+
"completed": []
|
|
1682
|
+
}
|
|
1683
|
+
```
|
|
1684
|
+
|
|
1685
|
+
</status-template>
|
|
1686
|
+
|
|
1687
|
+
<status-schema>
|
|
1688
|
+
|
|
1689
|
+
```json
|
|
1690
|
+
{
|
|
1691
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1692
|
+
"$id": "urn:speculo:specdev:status:v3",
|
|
1693
|
+
"title": "SpecDev Global Status",
|
|
1694
|
+
"type": "object",
|
|
1695
|
+
"required": [
|
|
1696
|
+
"schema_version",
|
|
1697
|
+
"workflow",
|
|
1698
|
+
"active",
|
|
1699
|
+
"work_history",
|
|
1700
|
+
"completed"
|
|
1701
|
+
],
|
|
1702
|
+
"properties": {
|
|
1703
|
+
"schema_version": {
|
|
1704
|
+
"const": 3
|
|
1705
|
+
},
|
|
1706
|
+
"workflow": {
|
|
1707
|
+
"const": "specdev"
|
|
1708
|
+
},
|
|
1709
|
+
"active": {
|
|
1710
|
+
"type": "array",
|
|
1711
|
+
"items": {
|
|
1712
|
+
"type": "object",
|
|
1713
|
+
"required": [
|
|
1714
|
+
"change",
|
|
1715
|
+
"current_work",
|
|
1716
|
+
"works_run",
|
|
1717
|
+
"result"
|
|
1718
|
+
],
|
|
1719
|
+
"properties": {
|
|
1720
|
+
"change": {
|
|
1721
|
+
"type": "string"
|
|
1722
|
+
},
|
|
1723
|
+
"current_work": {
|
|
1724
|
+
"type": [
|
|
1725
|
+
"string",
|
|
1726
|
+
"null"
|
|
1727
|
+
]
|
|
1728
|
+
},
|
|
1729
|
+
"works_run": {
|
|
1730
|
+
"type": "array",
|
|
1731
|
+
"items": {
|
|
1732
|
+
"type": "string"
|
|
1733
|
+
}
|
|
1734
|
+
},
|
|
1735
|
+
"result": {
|
|
1736
|
+
"type": [
|
|
1737
|
+
"string",
|
|
1738
|
+
"null"
|
|
1739
|
+
]
|
|
1740
|
+
},
|
|
1741
|
+
"claimed_investigations": {
|
|
1742
|
+
"type": "array",
|
|
1743
|
+
"items": {
|
|
1744
|
+
"type": "object",
|
|
1745
|
+
"required": [
|
|
1746
|
+
"id",
|
|
1747
|
+
"owner",
|
|
1748
|
+
"claimed_at"
|
|
1749
|
+
],
|
|
1750
|
+
"properties": {
|
|
1751
|
+
"id": {
|
|
1752
|
+
"type": "string"
|
|
1753
|
+
},
|
|
1754
|
+
"owner": {
|
|
1755
|
+
"type": "string"
|
|
1756
|
+
},
|
|
1757
|
+
"session": {
|
|
1758
|
+
"type": [
|
|
1759
|
+
"string",
|
|
1760
|
+
"null"
|
|
1761
|
+
]
|
|
1762
|
+
},
|
|
1763
|
+
"claimed_at": {
|
|
1764
|
+
"type": "string"
|
|
1765
|
+
}
|
|
1766
|
+
},
|
|
1767
|
+
"additionalProperties": true
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
},
|
|
1771
|
+
"additionalProperties": true
|
|
1772
|
+
}
|
|
1773
|
+
},
|
|
1774
|
+
"work_history": {
|
|
1775
|
+
"type": "array",
|
|
1776
|
+
"items": {
|
|
1777
|
+
"type": "object",
|
|
1778
|
+
"required": [
|
|
1779
|
+
"change",
|
|
1780
|
+
"work_id",
|
|
1781
|
+
"started_at",
|
|
1782
|
+
"completed_at",
|
|
1783
|
+
"result"
|
|
1784
|
+
],
|
|
1785
|
+
"properties": {
|
|
1786
|
+
"change": {
|
|
1787
|
+
"type": "string"
|
|
1788
|
+
},
|
|
1789
|
+
"work_id": {
|
|
1790
|
+
"type": "string",
|
|
1791
|
+
"pattern": "^specdev/"
|
|
1792
|
+
},
|
|
1793
|
+
"started_at": {
|
|
1794
|
+
"type": "string"
|
|
1795
|
+
},
|
|
1796
|
+
"completed_at": {
|
|
1797
|
+
"type": [
|
|
1798
|
+
"string",
|
|
1799
|
+
"null"
|
|
1800
|
+
]
|
|
1801
|
+
},
|
|
1802
|
+
"result": {
|
|
1803
|
+
"type": [
|
|
1804
|
+
"string",
|
|
1805
|
+
"null"
|
|
1806
|
+
]
|
|
1807
|
+
}
|
|
1808
|
+
},
|
|
1809
|
+
"additionalProperties": true
|
|
1810
|
+
}
|
|
1811
|
+
},
|
|
1812
|
+
"completed": {
|
|
1813
|
+
"type": "array",
|
|
1814
|
+
"items": {
|
|
1815
|
+
"type": "object",
|
|
1816
|
+
"required": [
|
|
1817
|
+
"change",
|
|
1818
|
+
"archived_at",
|
|
1819
|
+
"archive_path"
|
|
1820
|
+
],
|
|
1821
|
+
"properties": {
|
|
1822
|
+
"change": {
|
|
1823
|
+
"type": "string"
|
|
1824
|
+
},
|
|
1825
|
+
"archived_at": {
|
|
1826
|
+
"type": "string"
|
|
1827
|
+
},
|
|
1828
|
+
"archive_path": {
|
|
1829
|
+
"type": "string",
|
|
1830
|
+
"pattern": "^specdev/archive/[0-9]{4}-[0-9]{2}/.+/$"
|
|
1831
|
+
}
|
|
1832
|
+
},
|
|
1833
|
+
"additionalProperties": true
|
|
1834
|
+
}
|
|
1835
|
+
}
|
|
1836
|
+
},
|
|
1837
|
+
"additionalProperties": true
|
|
1838
|
+
}
|
|
1839
|
+
```
|
|
1840
|
+
|
|
1841
|
+
</status-schema>
|
|
1842
|
+
|
|
1843
|
+
<change-status-template>
|
|
1844
|
+
|
|
1845
|
+
```json
|
|
1846
|
+
{
|
|
1847
|
+
"schema_version": 3,
|
|
1848
|
+
"artifact": "change-status",
|
|
1849
|
+
"change": "<YYYY-MM-DD-topic>",
|
|
1850
|
+
"change_status": "active",
|
|
1851
|
+
"current_work": null,
|
|
1852
|
+
"created_at": "<ISO-8601>",
|
|
1853
|
+
"updated_at": "<ISO-8601>",
|
|
1854
|
+
"completed_at": null,
|
|
1855
|
+
"archived": false,
|
|
1856
|
+
"archive_path": null,
|
|
1857
|
+
"blockers": [],
|
|
1858
|
+
"deviations": [],
|
|
1859
|
+
"worktrees": []
|
|
1860
|
+
}
|
|
1861
|
+
```
|
|
1862
|
+
|
|
1863
|
+
</change-status-template>
|
|
1864
|
+
|
|
1865
|
+
<change-status-schema>
|
|
1866
|
+
|
|
1867
|
+
```json
|
|
1868
|
+
{
|
|
1869
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1870
|
+
"$id": "urn:speculo:specdev:change-status:v3",
|
|
1871
|
+
"title": "SpecDev Change Status",
|
|
1872
|
+
"type": "object",
|
|
1873
|
+
"required": [
|
|
1874
|
+
"schema_version",
|
|
1875
|
+
"artifact",
|
|
1876
|
+
"change",
|
|
1877
|
+
"change_status",
|
|
1878
|
+
"current_work",
|
|
1879
|
+
"created_at",
|
|
1880
|
+
"updated_at",
|
|
1881
|
+
"completed_at",
|
|
1882
|
+
"archived",
|
|
1883
|
+
"archive_path",
|
|
1884
|
+
"blockers",
|
|
1885
|
+
"deviations"
|
|
1886
|
+
],
|
|
1887
|
+
"properties": {
|
|
1888
|
+
"schema_version": {
|
|
1889
|
+
"const": 3
|
|
1890
|
+
},
|
|
1891
|
+
"artifact": {
|
|
1892
|
+
"const": "change-status"
|
|
1893
|
+
},
|
|
1894
|
+
"change": {
|
|
1895
|
+
"type": "string",
|
|
1896
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
1897
|
+
},
|
|
1898
|
+
"change_status": {
|
|
1899
|
+
"enum": [
|
|
1900
|
+
"active",
|
|
1901
|
+
"blocked",
|
|
1902
|
+
"completed",
|
|
1903
|
+
"archived"
|
|
1904
|
+
]
|
|
1905
|
+
},
|
|
1906
|
+
"current_work": {
|
|
1907
|
+
"type": [
|
|
1908
|
+
"string",
|
|
1909
|
+
"null"
|
|
1910
|
+
]
|
|
1911
|
+
},
|
|
1912
|
+
"created_at": {
|
|
1913
|
+
"type": "string",
|
|
1914
|
+
"minLength": 1
|
|
1915
|
+
},
|
|
1916
|
+
"updated_at": {
|
|
1917
|
+
"type": "string",
|
|
1918
|
+
"minLength": 1
|
|
1919
|
+
},
|
|
1920
|
+
"completed_at": {
|
|
1921
|
+
"type": [
|
|
1922
|
+
"string",
|
|
1923
|
+
"null"
|
|
1924
|
+
]
|
|
1925
|
+
},
|
|
1926
|
+
"archived": {
|
|
1927
|
+
"type": "boolean"
|
|
1928
|
+
},
|
|
1929
|
+
"archive_path": {
|
|
1930
|
+
"anyOf": [
|
|
1931
|
+
{
|
|
1932
|
+
"type": "null"
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"type": "string",
|
|
1936
|
+
"pattern": "^specdev/archive/[0-9]{4}-[0-9]{2}/.+/$"
|
|
1937
|
+
}
|
|
1938
|
+
]
|
|
1939
|
+
},
|
|
1940
|
+
"blockers": {
|
|
1941
|
+
"type": "array",
|
|
1942
|
+
"items": {
|
|
1943
|
+
"type": "string"
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
"deviations": {
|
|
1947
|
+
"type": "array",
|
|
1948
|
+
"items": {
|
|
1949
|
+
"type": "string"
|
|
1950
|
+
}
|
|
1951
|
+
},
|
|
1952
|
+
"worktrees": {
|
|
1953
|
+
"type": "array",
|
|
1954
|
+
"items": {
|
|
1955
|
+
"type": "object",
|
|
1956
|
+
"required": [
|
|
1957
|
+
"ticket_id",
|
|
1958
|
+
"owner",
|
|
1959
|
+
"provider",
|
|
1960
|
+
"base_sha",
|
|
1961
|
+
"branch",
|
|
1962
|
+
"workspace_ref",
|
|
1963
|
+
"status",
|
|
1964
|
+
"updated_at"
|
|
1965
|
+
],
|
|
1966
|
+
"properties": {
|
|
1967
|
+
"ticket_id": {
|
|
1968
|
+
"type": "string",
|
|
1969
|
+
"pattern": "^T-[0-9]{2,}$"
|
|
1970
|
+
},
|
|
1971
|
+
"owner": {
|
|
1972
|
+
"type": "string",
|
|
1973
|
+
"minLength": 1
|
|
1974
|
+
},
|
|
1975
|
+
"provider": {
|
|
1976
|
+
"enum": [
|
|
1977
|
+
"native",
|
|
1978
|
+
"git",
|
|
1979
|
+
"external"
|
|
1980
|
+
]
|
|
1981
|
+
},
|
|
1982
|
+
"base_sha": {
|
|
1983
|
+
"type": "string",
|
|
1984
|
+
"minLength": 1
|
|
1985
|
+
},
|
|
1986
|
+
"branch": {
|
|
1987
|
+
"type": "string",
|
|
1988
|
+
"minLength": 1
|
|
1989
|
+
},
|
|
1990
|
+
"workspace_ref": {
|
|
1991
|
+
"type": "string",
|
|
1992
|
+
"minLength": 1,
|
|
1993
|
+
"pattern": "^(?!/)(?![A-Za-z]:[\\\\/]).+"
|
|
1994
|
+
},
|
|
1995
|
+
"status": {
|
|
1996
|
+
"enum": [
|
|
1997
|
+
"planned",
|
|
1998
|
+
"active",
|
|
1999
|
+
"review",
|
|
2000
|
+
"integrated",
|
|
2001
|
+
"removed",
|
|
2002
|
+
"blocked"
|
|
2003
|
+
]
|
|
2004
|
+
},
|
|
2005
|
+
"updated_at": {
|
|
2006
|
+
"type": "string",
|
|
2007
|
+
"minLength": 1
|
|
2008
|
+
}
|
|
2009
|
+
},
|
|
2010
|
+
"additionalProperties": true
|
|
2011
|
+
}
|
|
2012
|
+
}
|
|
2013
|
+
},
|
|
2014
|
+
"allOf": [
|
|
2015
|
+
{
|
|
2016
|
+
"if": {
|
|
2017
|
+
"properties": {
|
|
2018
|
+
"change_status": {
|
|
2019
|
+
"const": "archived"
|
|
2020
|
+
}
|
|
2021
|
+
}
|
|
2022
|
+
},
|
|
2023
|
+
"then": {
|
|
2024
|
+
"properties": {
|
|
2025
|
+
"archived": {
|
|
2026
|
+
"const": true
|
|
2027
|
+
},
|
|
2028
|
+
"archive_path": {
|
|
2029
|
+
"type": "string",
|
|
2030
|
+
"pattern": "^specdev/archive/[0-9]{4}-[0-9]{2}/.+/$"
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
2034
|
+
}
|
|
2035
|
+
],
|
|
2036
|
+
"additionalProperties": true
|
|
2037
|
+
}
|
|
2038
|
+
```
|
|
2039
|
+
|
|
2040
|
+
</change-status-schema>
|