@namewta/speculo 1.0.12 → 1.0.14
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 +3 -1
- package/package.json +1 -1
- package/template/canonical/canonical-specdev-goal-plan.md +8 -5
- package/template/canonical/canonical-specdev-grill-with-docs.md +5 -4
- package/template/canonical/canonical-specdev-spec.md +7 -4
- package/template/canonical/canonical-specdev-tickets.md +19 -4
- package/template/commands/handoff.md +1 -1
- package/template/commands/status.md +1 -1
- package/template/workflows/ops/H-host-manage/H-host-manage.md +3 -0
- package/template/workflows/ops/INDEX.md +1 -1
- package/template/workflows/ops/README.md +1 -1
- package/template/workflows/ops/common/CAPABILITIES.md +2 -2
- package/template/workflows/ops/common/USAGE.md +23 -4
- package/template/workflows/ops/common/examples/register.example.json +1 -1
- package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +522 -0
- package/template/workflows/ops/common/toolchains/volta-linux.json +35 -0
- package/template/workflows/ops/common/tools/bootstrap-volta.sh +210 -0
- package/template/workflows/ops/common/tools/bootstrap.sh +1 -0
- package/template/workflows/ops/common/tools/opslib/bootstrap.mjs +221 -0
- package/template/workflows/ops/common/tools/opslib/cli.mjs +27 -5
- package/template/workflows/ops/common/tools/opslib/core.mjs +12 -0
- package/template/workflows/ops/common/tools/opslib/host_recipes.mjs +20 -4
- package/template/workflows/ops/common/tools/opslib/transport.mjs +101 -22
- package/template/workflows/ops/common/tools/validate-ops.mjs +1 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +3 -3
- package/template/workflows/specdev/I-implement/references/implementation-procedure.md +1 -1
- package/template/workflows/specdev/I-init-setup/tracking-template.md +1 -1
- package/template/workflows/specdev/INDEX.md +1 -1
- package/template/workflows/specdev/README.md +4 -4
- package/template/workflows/specdev/T-tickets/ticket-template.md +1 -0
- package/template/workflows/specdev/T-triage/T-triage.md +44 -13
- package/template/workflows/specdev/T-triage/close-comment-template.md +42 -0
- package/template/workflows/specdev/T-triage/intake-protocol.md +6 -2
- package/template/workflows/specdev/T-triage/issue-body-template.md +34 -0
- package/template/workflows/specdev/T-triage/publish-protocol.md +92 -0
- package/template/workflows/specdev/T-triage/publish-template.md +49 -0
- package/template/workflows/specdev/T-triage/reconcile-protocol.md +3 -3
- package/template/workflows/specdev/T-triage/references/classification-map.md +53 -0
- package/template/workflows/specdev/T-triage/references/public-projection.md +66 -0
- package/template/workflows/specdev/T-triage/tools/publish-status.mjs +148 -0
- package/template/workflows/specdev/T-triage/triage-template.md +12 -1
- package/template/workflows/specdev/common/README.md +1 -0
- package/template/workflows/specdev/common/rules/artifact-contract.md +5 -4
- package/template/workflows/specdev/common/rules/change-completion.md +1 -1
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +2 -0
- package/template/workflows/specdev/common/rules/workflow-routing.md +2 -1
- package/template/workflows/specdev/common/schemas/publish.schema.json +21 -0
- package/template/workflows/specdev/common/schemas/ticket.schema.json +11 -0
- package/template/workflows/specdev/common/schemas/triage.schema.json +3 -1
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +173 -3
package/README.md
CHANGED
|
@@ -73,12 +73,14 @@ After initialization, the target project gains the following AI agent-callable a
|
|
|
73
73
|
| Workflow | Work Entries | Description |
|
|
74
74
|
|---|---:|---|
|
|
75
75
|
| **learning** | 9 | Evidence-aware learning for projects, products, subjects, languages, and skills: complete 30–40 minute plain-language lessons, Socratic inquiry lessons, Goal-Plan compilation for later external /goal execution (teach a mine-unit of ≤15 lessons, then fan out miners), single-file homework review, optional retention review, and provenance-preserving topic synthesis |
|
|
76
|
-
| **specdev** | 14 | Local-first specification-driven development: archive, code review, diagnosis, grilling, implementation, setup, learning, goal planning, prototyping, architecture review, specs, tickets, triage, and wayfinding |
|
|
76
|
+
| **specdev** | 14 | Local-first specification-driven development: archive, code review, diagnosis, grilling, implementation, setup, learning, goal planning, prototyping, architecture review, specs, tickets, triage (intake / reconcile / publish), and wayfinding |
|
|
77
77
|
| **ops** | 3 | Host inventory and project deployment: initialize, host manage, and APP/shared-service deploy with dual documentation |
|
|
78
78
|
| **person** | 2 | Persona-methodology and rigorous deliberation workflows (Mao Zedong Cognitive OS; Bidirectional Steelman Deliberation) |
|
|
79
79
|
|
|
80
80
|
Every workflow ships an `INDEX.md` as its auto-generated work catalog. Work entries follow `<Letter>-<work_name>/<Letter>-<work_name>.md` naming with progressive-disclosure sub-files, and resolve runtime paths via `<Path>{roots.xxx}/...</Path>` pointers in `workspace.json`.
|
|
81
81
|
|
|
82
|
+
SpecDev T-triage stays the only remote boundary. Use **intake** to freeze a source, **reconcile** to close that original source Issue after local completion, and **publish** to project each completed Ticket as a classified GitHub Issue (local-origin work included). GitHub is a projection and counter, not the development source of truth. Run both reconcile and publish when an intake Change should also count its tickets.
|
|
83
|
+
|
|
82
84
|
## Documentation
|
|
83
85
|
|
|
84
86
|
- [AGENTS.md](./AGENTS.md) — AI agent handbook (authoritative)
|
package/package.json
CHANGED
|
@@ -450,20 +450,21 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
450
450
|
| 工件 | 具体位置 | 必须决定 | 不应决定 |
|
|
451
451
|
|---|---|---|---|
|
|
452
452
|
| 来源快照 | `specdev/changes/{change}/source.md` | 原始请求、捕获时间、locator、hash 和关闭能力 | 当前产品合同或实现状态 |
|
|
453
|
-
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work
|
|
453
|
+
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work、源 Issue reconcile 状态和 publish_action | 详细实现方案、开发进度或票级发布账本 |
|
|
454
|
+
| 发布账本 | `specdev/changes/{change}/publish.md` | 票级 GitHub 投影的编号、标签、marker、state 和发布计数 | Ticket 契约、Evidence 原文或源 Issue 关闭 |
|
|
454
455
|
| 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
455
456
|
| 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
456
457
|
| 设计树 | `specdev/changes/{change}/design-tree.json` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
|
|
457
458
|
| Change 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 本 change 已确认、供下游使用的领域术语和语义 | 永久领域知识或临时会议记录 |
|
|
458
459
|
| Change 架构决策 | `specdev/changes/{change}/ADR.md` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
|
|
459
460
|
| Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
460
|
-
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket
|
|
461
|
+
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理或远程 Issue 编号 |
|
|
461
462
|
| Tickets Map | `specdev/changes/{change}/tickets-map.md` | 总体实施背景、项目 Skill 最低调用路由、依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
462
463
|
| Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
463
464
|
| Implementation Map | `specdev/changes/{change}/implementation-map.md` | Ready 成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision | 创建或改写子 Spec、Ticket 或实现细节 |
|
|
464
465
|
| Implementation Plan | `specdev/changes/{change}/implementation-plan.md` | 父 Lead、全局 workspace/实现上限、frontier/Wave/locks/integration queue 和可恢复进度投影 | 改写子 change 权威或伪造完成 |
|
|
465
466
|
| Implementation Orchestration Evidence | `specdev/changes/{change}/evidence/implementation-orchestration.md` | 成员完成、组合 Ticket 顺序/锁、repository integration、整体验证、漂移和残余风险 | 新产品/架构决定或单 Ticket Evidence 替代品 |
|
|
466
|
-
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 |
|
|
467
|
+
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策或远程 Issue 正文 |
|
|
467
468
|
| Change 学习图解 | `specdev/changes/{change}/learning/index.md` 与 `specdev/changes/{change}/learning/{number}_{topic}.md` | 面向零专业背景读者解释当前 change 的已验证工件、实现和测试事实;索引按序号持续追加 | 产品决定、架构决定、实现授权或 Learning workflow 知识 |
|
|
468
469
|
| 代码审查 | `specdev/changes/{change}/reviews/CR-###.md` | 固定点、标准轴和规范轴 finding | 实施修复或合并两轴排名 |
|
|
469
470
|
| UI 设计包 | `specdev/changes/{change}/prototypes/{design-id}/design-system.md`、`specdev/changes/{change}/prototypes/{design-id}/comparison/` 与 `specdev/changes/{change}/prototypes/{design-id}/final/` | 项目 UI 证据、功能风格候选、逐层用户决定、设计 token、交互合同和可运行 HTML/CSS/JS 投影 | 生产 UI 实现或替用户确认高影响偏好 |
|
|
@@ -493,7 +494,7 @@ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永
|
|
|
493
494
|
|
|
494
495
|
当前 change 决定与永久知识冲突时,必须在 LOG/ADR 中显式说明替代关系;它只约束当前 change,直到 A 决定是否提升并更新永久版本。
|
|
495
496
|
|
|
496
|
-
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。
|
|
497
|
+
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。GitHub 上由 publish 投影出的 Issue 不是开发权威;发布计数以 `specdev/changes/{change}/publish.md` 为准。
|
|
497
498
|
|
|
498
499
|
代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
|
|
499
500
|
|
|
@@ -628,6 +629,8 @@ Direct Spec Evidence 至少包含:用户批准与轻量合同、Lead、实施
|
|
|
628
629
|
|
|
629
630
|
父实现 change 的 Implementation Orchestration Evidence 不能替代子 Evidence。它至少记录最终 Map revision、全部成员最终状态和子证据指针、dependency/serialization 实际顺序、跨 change 合同检查、aggregate 命令/环境/结果、stale candidate 处理、偏差和残余风险。任何成员未 completed 或整体验证未通过时不得形成父完成证据。
|
|
630
631
|
|
|
632
|
+
Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按公共投影规则生成,不替代本文件的完整记录。
|
|
633
|
+
|
|
631
634
|
</evidence-and-verification>
|
|
632
635
|
|
|
633
636
|
<deviation-control>
|
|
@@ -713,7 +716,7 @@ Owner 原子更新 `specdev/changes/{change}/.status.json` 的 `change_status`
|
|
|
713
716
|
|
|
714
717
|
## 远程来源与归档
|
|
715
718
|
|
|
716
|
-
远程动作不参与本地完成判定。Triage 为 `pending-close`/`close-failed` 时先 reconcile;`closed`、`waived` 或 `not-applicable` 才允许 Archive
|
|
719
|
+
远程动作不参与本地完成判定。Triage `external_action` 为 `pending-close`/`close-failed` 时先 reconcile;`closed`、`waived` 或 `not-applicable` 才允许 Archive。Triage `publish_action` 为 `pending`/`publish-failed` 时先恢复或结束 publish;`not-requested`、`published` 或 `waived` 才允许 Archive。`not-requested` 是默认,未点过 publish 的 change 不被新模式绑架。归档后工件只读。
|
|
717
720
|
|
|
718
721
|
**完成标准**:完成声明可由本地工件、Git 与验证重建;只有一个 owner 命中;失败 candidate 不污染父分支。
|
|
719
722
|
|
|
@@ -251,20 +251,21 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
251
251
|
| 工件 | 具体位置 | 必须决定 | 不应决定 |
|
|
252
252
|
|---|---|---|---|
|
|
253
253
|
| 来源快照 | `specdev/changes/{change}/source.md` | 原始请求、捕获时间、locator、hash 和关闭能力 | 当前产品合同或实现状态 |
|
|
254
|
-
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work
|
|
254
|
+
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work、源 Issue reconcile 状态和 publish_action | 详细实现方案、开发进度或票级发布账本 |
|
|
255
|
+
| 发布账本 | `specdev/changes/{change}/publish.md` | 票级 GitHub 投影的编号、标签、marker、state 和发布计数 | Ticket 契约、Evidence 原文或源 Issue 关闭 |
|
|
255
256
|
| 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
256
257
|
| 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
257
258
|
| 设计树 | `specdev/changes/{change}/design-tree.json` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
|
|
258
259
|
| Change 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 本 change 已确认、供下游使用的领域术语和语义 | 永久领域知识或临时会议记录 |
|
|
259
260
|
| Change 架构决策 | `specdev/changes/{change}/ADR.md` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
|
|
260
261
|
| Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
261
|
-
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket
|
|
262
|
+
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理或远程 Issue 编号 |
|
|
262
263
|
| Tickets Map | `specdev/changes/{change}/tickets-map.md` | 总体实施背景、项目 Skill 最低调用路由、依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
263
264
|
| Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
264
265
|
| Implementation Map | `specdev/changes/{change}/implementation-map.md` | Ready 成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision | 创建或改写子 Spec、Ticket 或实现细节 |
|
|
265
266
|
| Implementation Plan | `specdev/changes/{change}/implementation-plan.md` | 父 Lead、全局 workspace/实现上限、frontier/Wave/locks/integration queue 和可恢复进度投影 | 改写子 change 权威或伪造完成 |
|
|
266
267
|
| Implementation Orchestration Evidence | `specdev/changes/{change}/evidence/implementation-orchestration.md` | 成员完成、组合 Ticket 顺序/锁、repository integration、整体验证、漂移和残余风险 | 新产品/架构决定或单 Ticket Evidence 替代品 |
|
|
267
|
-
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 |
|
|
268
|
+
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策或远程 Issue 正文 |
|
|
268
269
|
| Change 学习图解 | `specdev/changes/{change}/learning/index.md` 与 `specdev/changes/{change}/learning/{number}_{topic}.md` | 面向零专业背景读者解释当前 change 的已验证工件、实现和测试事实;索引按序号持续追加 | 产品决定、架构决定、实现授权或 Learning workflow 知识 |
|
|
269
270
|
| 代码审查 | `specdev/changes/{change}/reviews/CR-###.md` | 固定点、标准轴和规范轴 finding | 实施修复或合并两轴排名 |
|
|
270
271
|
| UI 设计包 | `specdev/changes/{change}/prototypes/{design-id}/design-system.md`、`specdev/changes/{change}/prototypes/{design-id}/comparison/` 与 `specdev/changes/{change}/prototypes/{design-id}/final/` | 项目 UI 证据、功能风格候选、逐层用户决定、设计 token、交互合同和可运行 HTML/CSS/JS 投影 | 生产 UI 实现或替用户确认高影响偏好 |
|
|
@@ -294,7 +295,7 @@ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永
|
|
|
294
295
|
|
|
295
296
|
当前 change 决定与永久知识冲突时,必须在 LOG/ADR 中显式说明替代关系;它只约束当前 change,直到 A 决定是否提升并更新永久版本。
|
|
296
297
|
|
|
297
|
-
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。
|
|
298
|
+
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。GitHub 上由 publish 投影出的 Issue 不是开发权威;发布计数以 `specdev/changes/{change}/publish.md` 为准。
|
|
298
299
|
|
|
299
300
|
代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
|
|
300
301
|
|
|
@@ -363,20 +363,21 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
363
363
|
| 工件 | 具体位置 | 必须决定 | 不应决定 |
|
|
364
364
|
|---|---|---|---|
|
|
365
365
|
| 来源快照 | `specdev/changes/{change}/source.md` | 原始请求、捕获时间、locator、hash 和关闭能力 | 当前产品合同或实现状态 |
|
|
366
|
-
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work
|
|
366
|
+
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work、源 Issue reconcile 状态和 publish_action | 详细实现方案、开发进度或票级发布账本 |
|
|
367
|
+
| 发布账本 | `specdev/changes/{change}/publish.md` | 票级 GitHub 投影的编号、标签、marker、state 和发布计数 | Ticket 契约、Evidence 原文或源 Issue 关闭 |
|
|
367
368
|
| 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
368
369
|
| 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
369
370
|
| 设计树 | `specdev/changes/{change}/design-tree.json` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
|
|
370
371
|
| Change 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 本 change 已确认、供下游使用的领域术语和语义 | 永久领域知识或临时会议记录 |
|
|
371
372
|
| Change 架构决策 | `specdev/changes/{change}/ADR.md` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
|
|
372
373
|
| Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
373
|
-
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket
|
|
374
|
+
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理或远程 Issue 编号 |
|
|
374
375
|
| Tickets Map | `specdev/changes/{change}/tickets-map.md` | 总体实施背景、项目 Skill 最低调用路由、依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
375
376
|
| Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
376
377
|
| Implementation Map | `specdev/changes/{change}/implementation-map.md` | Ready 成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision | 创建或改写子 Spec、Ticket 或实现细节 |
|
|
377
378
|
| Implementation Plan | `specdev/changes/{change}/implementation-plan.md` | 父 Lead、全局 workspace/实现上限、frontier/Wave/locks/integration queue 和可恢复进度投影 | 改写子 change 权威或伪造完成 |
|
|
378
379
|
| Implementation Orchestration Evidence | `specdev/changes/{change}/evidence/implementation-orchestration.md` | 成员完成、组合 Ticket 顺序/锁、repository integration、整体验证、漂移和残余风险 | 新产品/架构决定或单 Ticket Evidence 替代品 |
|
|
379
|
-
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 |
|
|
380
|
+
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策或远程 Issue 正文 |
|
|
380
381
|
| Change 学习图解 | `specdev/changes/{change}/learning/index.md` 与 `specdev/changes/{change}/learning/{number}_{topic}.md` | 面向零专业背景读者解释当前 change 的已验证工件、实现和测试事实;索引按序号持续追加 | 产品决定、架构决定、实现授权或 Learning workflow 知识 |
|
|
381
382
|
| 代码审查 | `specdev/changes/{change}/reviews/CR-###.md` | 固定点、标准轴和规范轴 finding | 实施修复或合并两轴排名 |
|
|
382
383
|
| UI 设计包 | `specdev/changes/{change}/prototypes/{design-id}/design-system.md`、`specdev/changes/{change}/prototypes/{design-id}/comparison/` 与 `specdev/changes/{change}/prototypes/{design-id}/final/` | 项目 UI 证据、功能风格候选、逐层用户决定、设计 token、交互合同和可运行 HTML/CSS/JS 投影 | 生产 UI 实现或替用户确认高影响偏好 |
|
|
@@ -406,7 +407,7 @@ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永
|
|
|
406
407
|
|
|
407
408
|
当前 change 决定与永久知识冲突时,必须在 LOG/ADR 中显式说明替代关系;它只约束当前 change,直到 A 决定是否提升并更新永久版本。
|
|
408
409
|
|
|
409
|
-
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。
|
|
410
|
+
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。GitHub 上由 publish 投影出的 Issue 不是开发权威;发布计数以 `specdev/changes/{change}/publish.md` 为准。
|
|
410
411
|
|
|
411
412
|
代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
|
|
412
413
|
|
|
@@ -557,6 +558,8 @@ Direct Spec Evidence 至少包含:用户批准与轻量合同、Lead、实施
|
|
|
557
558
|
|
|
558
559
|
父实现 change 的 Implementation Orchestration Evidence 不能替代子 Evidence。它至少记录最终 Map revision、全部成员最终状态和子证据指针、dependency/serialization 实际顺序、跨 change 合同检查、aggregate 命令/环境/结果、stale candidate 处理、偏差和残余风险。任何成员未 completed 或整体验证未通过时不得形成父完成证据。
|
|
559
560
|
|
|
561
|
+
Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按公共投影规则生成,不替代本文件的完整记录。
|
|
562
|
+
|
|
560
563
|
</evidence-and-verification>
|
|
561
564
|
|
|
562
565
|
<deviation-control>
|
|
@@ -179,6 +179,7 @@ change: <YYYY-MM-DD-topic>
|
|
|
179
179
|
id: T-01
|
|
180
180
|
title: <标题>
|
|
181
181
|
status: draft
|
|
182
|
+
kind: bug
|
|
182
183
|
planning_depth: standard
|
|
183
184
|
planning_depth_reason: <触发该深度的事实>
|
|
184
185
|
ready: false
|
|
@@ -505,20 +506,21 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
505
506
|
| 工件 | 具体位置 | 必须决定 | 不应决定 |
|
|
506
507
|
|---|---|---|---|
|
|
507
508
|
| 来源快照 | `specdev/changes/{change}/source.md` | 原始请求、捕获时间、locator、hash 和关闭能力 | 当前产品合同或实现状态 |
|
|
508
|
-
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work
|
|
509
|
+
| 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work、源 Issue reconcile 状态和 publish_action | 详细实现方案、开发进度或票级发布账本 |
|
|
510
|
+
| 发布账本 | `specdev/changes/{change}/publish.md` | 票级 GitHub 投影的编号、标签、marker、state 和发布计数 | Ticket 契约、Evidence 原文或源 Issue 关闭 |
|
|
509
511
|
| 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
510
512
|
| 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
511
513
|
| 设计树 | `specdev/changes/{change}/design-tree.json` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
|
|
512
514
|
| Change 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 本 change 已确认、供下游使用的领域术语和语义 | 永久领域知识或临时会议记录 |
|
|
513
515
|
| Change 架构决策 | `specdev/changes/{change}/ADR.md` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
|
|
514
516
|
| Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
515
|
-
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket
|
|
517
|
+
| Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理或远程 Issue 编号 |
|
|
516
518
|
| Tickets Map | `specdev/changes/{change}/tickets-map.md` | 总体实施背景、项目 Skill 最低调用路由、依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
517
519
|
| Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
518
520
|
| Implementation Map | `specdev/changes/{change}/implementation-map.md` | Ready 成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision | 创建或改写子 Spec、Ticket 或实现细节 |
|
|
519
521
|
| Implementation Plan | `specdev/changes/{change}/implementation-plan.md` | 父 Lead、全局 workspace/实现上限、frontier/Wave/locks/integration queue 和可恢复进度投影 | 改写子 change 权威或伪造完成 |
|
|
520
522
|
| Implementation Orchestration Evidence | `specdev/changes/{change}/evidence/implementation-orchestration.md` | 成员完成、组合 Ticket 顺序/锁、repository integration、整体验证、漂移和残余风险 | 新产品/架构决定或单 Ticket Evidence 替代品 |
|
|
521
|
-
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 |
|
|
523
|
+
| Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策或远程 Issue 正文 |
|
|
522
524
|
| Change 学习图解 | `specdev/changes/{change}/learning/index.md` 与 `specdev/changes/{change}/learning/{number}_{topic}.md` | 面向零专业背景读者解释当前 change 的已验证工件、实现和测试事实;索引按序号持续追加 | 产品决定、架构决定、实现授权或 Learning workflow 知识 |
|
|
523
525
|
| 代码审查 | `specdev/changes/{change}/reviews/CR-###.md` | 固定点、标准轴和规范轴 finding | 实施修复或合并两轴排名 |
|
|
524
526
|
| UI 设计包 | `specdev/changes/{change}/prototypes/{design-id}/design-system.md`、`specdev/changes/{change}/prototypes/{design-id}/comparison/` 与 `specdev/changes/{change}/prototypes/{design-id}/final/` | 项目 UI 证据、功能风格候选、逐层用户决定、设计 token、交互合同和可运行 HTML/CSS/JS 投影 | 生产 UI 实现或替用户确认高影响偏好 |
|
|
@@ -548,7 +550,7 @@ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永
|
|
|
548
550
|
|
|
549
551
|
当前 change 决定与永久知识冲突时,必须在 LOG/ADR 中显式说明替代关系;它只约束当前 change,直到 A 决定是否提升并更新永久版本。
|
|
550
552
|
|
|
551
|
-
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。
|
|
553
|
+
`specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。GitHub 上由 publish 投影出的 Issue 不是开发权威;发布计数以 `specdev/changes/{change}/publish.md` 为准。
|
|
552
554
|
|
|
553
555
|
代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
|
|
554
556
|
|
|
@@ -739,6 +741,8 @@ Direct Spec Evidence 至少包含:用户批准与轻量合同、Lead、实施
|
|
|
739
741
|
|
|
740
742
|
父实现 change 的 Implementation Orchestration Evidence 不能替代子 Evidence。它至少记录最终 Map revision、全部成员最终状态和子证据指针、dependency/serialization 实际顺序、跨 change 合同检查、aggregate 命令/环境/结果、stale candidate 处理、偏差和残余风险。任何成员未 completed 或整体验证未通过时不得形成父完成证据。
|
|
741
743
|
|
|
744
|
+
Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按公共投影规则生成,不替代本文件的完整记录。
|
|
745
|
+
|
|
742
746
|
</evidence-and-verification>
|
|
743
747
|
|
|
744
748
|
<deviation-control>
|
|
@@ -1525,6 +1529,17 @@ implementation owner 只在来源 worktree 修改授权项目路径,运行 Tic
|
|
|
1525
1529
|
"cancelled"
|
|
1526
1530
|
]
|
|
1527
1531
|
},
|
|
1532
|
+
"kind": {
|
|
1533
|
+
"enum": [
|
|
1534
|
+
"bug",
|
|
1535
|
+
"feature",
|
|
1536
|
+
"refactor",
|
|
1537
|
+
"investigation",
|
|
1538
|
+
"operations",
|
|
1539
|
+
"documentation",
|
|
1540
|
+
"review"
|
|
1541
|
+
]
|
|
1542
|
+
},
|
|
1528
1543
|
"planning_depth": {
|
|
1529
1544
|
"enum": [
|
|
1530
1545
|
"lite",
|
|
@@ -35,7 +35,7 @@ disable-model-invocation: true
|
|
|
35
35
|
|
|
36
36
|
如果用户传入了参数,将其视为对下一个会话重点内容的描述,并据此定制文档。
|
|
37
37
|
|
|
38
|
-
交接范围包含 SpecDev change 时,引用该 change 的 `source.md`、`triage.md
|
|
38
|
+
交接范围包含 SpecDev change 时,引用该 change 的 `source.md`、`triage.md`、`publish.md`(若请求过)、`.status.json` 和当前 owning 工件,不复制正文。若 `external_action` 为 `pending-close` 或 `close-failed`,必须记录准确远程 locator、已完成步骤、授权状态和恢复入口 `T-triage`;不得把待关闭误报为本地未完成。若 `publish_action` 为 `pending` 或 `publish-failed`,必须记录账本路径、失败行和下一步,恢复入口仍是 T-triage publish。
|
|
39
39
|
|
|
40
40
|
## 路径引用规范
|
|
41
41
|
|
|
@@ -11,7 +11,7 @@ keywords: [status, 状态, active, blocked]
|
|
|
11
11
|
1. 读取 `<Path>{roots.state}/workspace.json</Path>`,解析 `<Path>{roots.config}</Path>`(不存在时以默认值静默降级),获取全部已安装 workflow/state 根。
|
|
12
12
|
2. 扫描 `<Path>{roots.workflows}/{workflow}/INDEX.md</Path>`,得到已安装 workflow ids。
|
|
13
13
|
3. 对每个 id 读取 `<Path>{roots.state}/{workflow}/status.json</Path>`,按该 workflow 自己的 schema 解释,不把 SpecDev 字段套到其他 workflow。Learning schema v2 的 active/archived entry 携带 stable `change_id`、kind、parent/root、current locator、current_work、Homework 和 retention projection;递归 Change 位于 `changes/**` 或 `archive/**`,位置历史读取 `<Path>{roots.state}/learning/locations.json</Path>`。SpecDev 继续使用 schema v5 根级 `changes/<change>`/`archive/YYYY-MM/<change>`;Ops schema v3 使用 hosts/projects/deployments/allocations/bindings/releases 资源表,运行记录在 hosts/{host_id}/runs/{run_id} 或 releases/{run_id};保留的非空 v2 只作为旧证据读取,不转换旧批准。不得按 change 名跨 workflow 合并。
|
|
14
|
-
4. 报告 active 数量、各 Change 的 `current_work`、去重后的 `works_run`、生命周期、parent/root、最近更新时间和停滞 Change(`.status.json` 超过 14 天未更新)。SpecDev 额外报告调查 claims
|
|
14
|
+
4. 报告 active 数量、各 Change 的 `current_work`、去重后的 `works_run`、生命周期、parent/root、最近更新时间和停滞 Change(`.status.json` 超过 14 天未更新)。SpecDev 额外报告调查 claims、triage `external_action` / `publish_action`,以及 active+archive `publish.md` 汇总的 `published_issues`(含 `origin:local` / `origin:intake`)、`publish_skipped`、`publish_failed`;数字以本地账本为准,不扫 GitHub 当权威。可用 `<Path>{roots.workflows}/specdev/T-triage/tools/publish-status.mjs</Path>`。Learning 额外报告 domain/topic、Lesson/Homework、immediate/retention 和 synthesis 状态;Ops 按主机和 APP/公共服务分别展示 deployment_id、observed_version、路径、最后部署时间、共享绑定、plan/approval/run 状态与双边 docs-receipt。docs_pending/unknown 必须列异常;普通状态报告不读取或输出 private 明文账本,不把 OPS 资源套入 active/archived Change 统计。
|
|
15
15
|
5. 报告 archived 数量和完整 scope/project/change locator;Learning 同时读取 `context/REVIEW.md` 汇总到期 Review、topic evidence status 和需要刷新内容。预期归档目录或 `.status.json` 缺失、active/archived 重叠、parent cycle、位置登记不一致、未知 schema、断开链接和 malformed 目录均列为异常,不自动修复。
|
|
16
16
|
6. 报告没有 workflow 资产的孤立状态根,以及缺少状态根的已安装 workflow;不自动修复。
|
|
17
17
|
7. 用户要求持久化时写入 `<Path>{roots.state}/commands/status/{date}-workspace-{topic}[-NN].md</Path>`,并在报告中列出本次扫描的 workflow 选择。
|
|
@@ -19,6 +19,9 @@ keywords: [ops, host-manage, 主机, 持久化, 审批]
|
|
|
19
19
|
|
|
20
20
|
指定 local 或 SSH 的稳定 host_id;读取最近盘点与有限问题证据。初次 SSH 用用户已验证的 known_hosts,identity=discover 只允许只读探测;把返回身份明确登记后才允许计划和执行。
|
|
21
21
|
|
|
22
|
+
Linux SSH 目标若没有 Node:必须先 `ops.mjs bootstrap-node`(控制端校验已审核 tar 的 SHA256,scp 到目标,远端 POSIX 展开固定 Volta/Node),禁止把 POSIX 盘点只写在对话里。引导成功后必须 `ops.mjs enroll`(或 `register` 再 `probe --host`),`hosts/{host_id}/inventory/snapshot-*.json` 与 `status.json.hosts` 是完成标准的一部分。引导是 ops.mjs 第一阶段通道,需要明文 ack 与 SHA256,不走 plan/approve;已有 Node 的目标不重复安装、不改 `.bashrc`/`.profile`。缺 Node 只能阻塞 apply,不能阻塞登记。本轮仅 Linux SSH;Windows/macOS 仍要求目标已有 Node。
|
|
23
|
+
|
|
24
|
+
|
|
22
25
|
区分系统版本、用户默认、项目 pin、服务环境。environment-spec 支持明确版本的 uv、Volta、SDKMAN 管理配方;管理器缺失先用经过审核的安装器。保留旧默认与旧目录,不能为统一外观先删除旧环境。工作流不擅自改写用户 shell profile;激活新管理器入口是另一个明确的准备动作。
|
|
23
26
|
|
|
24
27
|
Docker 缺失使用经审核且版本固定的 Linux Engine 安装配方,完成服务、Compose、data-root、账号权限验证之后才进入 D。既有 data-root 不匹配时单独备份、停机、迁移、验证,不把 /var/lib/docker 直接 mv 当作安装步骤。镜像源按可信清单、样本哈希和目标网络测试,切换配置仍需批准。
|
|
@@ -24,7 +24,7 @@ keywords: [ops, 主机, SSH, 部署, Docker, 持久化, 公共服务, 运维]
|
|
|
24
24
|
## Work 激活
|
|
25
25
|
|
|
26
26
|
I-initialize:控制端初始化。
|
|
27
|
-
H-host-manage:本地或远程主机的环境、诊断、清理和维护。
|
|
27
|
+
H-host-manage:本地或远程主机的环境、诊断、清理和维护。Linux SSH 目标无 Node 时先走 USAGE 中的 `bootstrap-node` 再 `enroll`,盘点必须写入 `hosts/`。
|
|
28
28
|
D-project-deploy:业务 APP 与公共服务部署、复用、更新、停止及显式迁移。
|
|
29
29
|
|
|
30
30
|
三个入口都使用 plan → approve → apply → verify → dual-documents;不得自动激活额外旧 Work。
|
|
@@ -89,7 +89,7 @@ init/register/credential-put 是用户显式请求的部署机本地记录操作
|
|
|
89
89
|
|
|
90
90
|
## 阅读与操作入口
|
|
91
91
|
|
|
92
|
-
详细命令和可运行演练:`<Path>{roots.workflows}/ops/common/USAGE.md</Path>`。
|
|
92
|
+
详细命令和可运行演练:`<Path>{roots.workflows}/ops/common/USAGE.md</Path>`。Linux SSH 缺 Node 的固定 Volta 引导见 USAGE §1。
|
|
93
93
|
数据与账户:`<Path>{roots.workflows}/ops/common/rules/persistence-and-secrets.md</Path>`。
|
|
94
94
|
共享服务:`<Path>{roots.workflows}/ops/common/rules/shared-services.md</Path>`。
|
|
95
95
|
恢复:`<Path>{roots.workflows}/ops/common/rules/recovery.md</Path>`。
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|---|---|---|
|
|
7
7
|
| 控制端 | Node 标准库 CLI(ops.mjs);状态、锁、明文、计划、执行 | 无第三方 npm 包;控制端可本地执行完整闭环 |
|
|
8
8
|
| Linux local | 原生 oneshot;systemd 配置/权限/健康门;Docker Engine Compose | 本轮隔离 local oneshot 演练;systemd/Docker 需要真实有权限主机验收 |
|
|
9
|
-
| SSH | OpenSSH 密钥或 agent;固定 known_hosts;目标身份;可 sudo -n |
|
|
9
|
+
| SSH | OpenSSH 密钥或 agent;固定 known_hosts;目标身份;可 sudo -n;Linux 目标无 Node 时可走固定 Volta 引导 | 目标无 Node 时 Linux SSH 可走固定 Volta/Node 引导(pin 见 common/toolchains/volta-linux.json);Windows 仍要求已有 Node。本轮没有远程主机/ssh 客户端实机验证,由模拟 SSH/scp 覆盖;不实现交互式 SSH 密码登录 |
|
|
10
10
|
| Windows 原生 | PowerShell 引导、路径/DACL、同账户登录态 Scheduled Task | 不是无人登录的 Windows Service;真正后台服务需专用 adapter;本轮非 Windows 实机 |
|
|
11
11
|
| WSL | 单独登记为 Linux 执行目标 | 不把 Windows 主机路径/Docker Desktop VM 当作 WSL 根 |
|
|
12
12
|
| macOS | 身份探测、POSIX 路径、oneshot | 无 launchd 适配;不是承诺全部平台常驻部署 |
|
|
13
13
|
| Compose | JSON-as-YAML、显式 context/project、raw env_file、digest image、bind 与 VOLUME检查 | 要求 Compose >=2.30;strict Engine data-root;Docker Desktop 不自动迁移 |
|
|
14
|
-
| uv/Volta/SDKMAN |
|
|
14
|
+
| uv/Volta/SDKMAN | 明确版本准备与原默认保留配方;命令/默认验证;Volta 本体 + 固定 Node 镜像可由 Linux SSH `bootstrap-node` 安装 | 管理器安装包必须可信固定;旧 profile 不自动改写;项目真实兼容性另验 |
|
|
15
15
|
| 共享服务 | MySQL/Redis/MinIO 分配、existing 验证、owner/binding/依赖排序 | 无本轮数据库实机;未知产品须真实版本适配;没有万能数据库备份/恢复 |
|
|
16
16
|
| 升级/回滚/迁移 | 新 spec、固定版本、显式主机操作、跨机排序、逐步回执 | 没有隐式停机零损失承诺;没有自动生成任意项目迁移脚本 |
|
|
17
17
|
| 清理 | 只读诊断、cache/log 隔离、精确回执受控 purge | 不普遍删除 Windows/Linux 任意系统垃圾;不 drop_caches 或 prune volume |
|
|
@@ -10,9 +10,28 @@ node /path/to/ops/common/tools/ops.mjs --state /path/to/.speculo/ops init --cont
|
|
|
10
10
|
node /path/to/ops/common/tools/ops.mjs probe --output /safe/path/local-inventory.json
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
没有 Node 时运行 common/tools/bootstrap.sh probe 或 bootstrap.ps1 -Probe,只做检测。经过批准的本地安装器还需精确 SHA256 与确认字符串。完成后重新 init。
|
|
13
|
+
没有 Node 时运行 common/tools/bootstrap.sh probe 或 bootstrap.ps1 -Probe,只做检测。经过批准的本地安装器还需精确 SHA256 与确认字符串。完成后重新 init。SSH 目标缺 Node 不要对本机 bootstrap.sh 假装能装远端,改走下面的 `bootstrap-node`。
|
|
14
|
+
|
|
15
|
+
初次远端将 host.json 中 identity 写为 discover(仅 probe 支持),connection 包含 hostname、username、known_hosts,可选 port、identity_file、sudo、shell。known_hosts 必须已经通过可信方式核对,不能自动信任 ssh-keyscan 输出。目标还没有 Node 时不要填一个 PATH 上的 `node` 然后把盘点留在对话里:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
node /path/to/ops/common/tools/ops.mjs bootstrap-node --connection-file /safe/path/host-discovery.json --probe
|
|
19
|
+
# 若 tools.node=missing,准备已审核的 volta/node tar(SHA256 见 common/toolchains/volta-linux.json),再:
|
|
20
|
+
node /path/to/ops/common/tools/ops.mjs --state /path/to/.speculo/ops bootstrap-node --apply \
|
|
21
|
+
--connection-file /safe/path/host-discovery.json --host-id node-a --account ops --host-root /srv/ops \
|
|
22
|
+
--volta-archive /safe/volta-2.0.2-linux.tar.gz --volta-sha256 PINNED \
|
|
23
|
+
--node-archive /safe/node-v24.21.0-linux-x64.tar.gz --node-sha256 PINNED \
|
|
24
|
+
--ack I-APPROVE-THIS-BOOTSTRAP
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
引导把 `VOLTA_HOME` 放在 `{host.root}/_host/toolchains/{account}/volta`,`connection.node` 指向其中的 `bin/ops-node`(导出 VOLTA_HOME 后 exec 真实 Node),不改 `.bashrc`/`.profile`,不跑官方 `install.sh`。已有 Node 则 `skipped-existing-node`,原默认不动。随后必须落盘:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
node /path/to/ops/common/tools/ops.mjs --state /path/to/.speculo/ops enroll --file /safe/path/register.json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`enroll` 接受 `identity=discover` 与引导返回的绝对 `connection.node`,写入 `status.json` 与 `hosts/{host_id}/inventory/snapshot-*.json`。单独 `probe --connection-file` 仍只打印 JSON,下一步必须 enroll(或 register + `probe --host`)。
|
|
14
34
|
|
|
15
|
-
初次远端将 host.json 中 identity 写为 discover(仅 probe 支持),connection 包含 hostname、username、known_hosts、node,可选 port、identity_file、sudo、shell。known_hosts 必须已经通过可信方式核对,不能自动信任 ssh-keyscan 输出。
|
|
16
35
|
|
|
17
36
|
```sh
|
|
18
37
|
node /path/to/ops/common/tools/ops.mjs probe --connection-file /safe/path/host-discovery.json --output /safe/path/host-observed.json
|
|
@@ -63,7 +82,7 @@ node /path/to/ops/common/tools/ops.mjs --state /path/to/.speculo/ops environment
|
|
|
63
82
|
node /path/to/ops/common/tools/ops.mjs --state /path/to/.speculo/ops mirror-probe --host node-a --file /safe/path/mirror-candidates.json --allow-network
|
|
64
83
|
```
|
|
65
84
|
|
|
66
|
-
环境配方不抓 latest
|
|
85
|
+
环境配方不抓 latest;管理器缺失先明确准备安装器。Linux SSH 上 Volta 本体与固定 Node 镜像用 `bootstrap-node`,不要指望 environment-spec 自己装 Volta。来源测速不修改配置,证书/哈希失败候选不使用,真实配置更换通过 H 的精确 write-file/write-control/命令计划。不能将 Python/npm/Docker/Maven 镜像混为一套规则。
|
|
67
86
|
|
|
68
87
|
H.host_actions 支持 mkdir、write-file(host.root 内相对路径;不得写生成器负责的 README/DEPLOYMENTS/knowledge 账本)、write-control(精确系统控制文件:内置 docker daemon.json 与 ops-*.service,以及经理由/回滚/验证声明的 nginx、wireguard、非 ops- 前缀单元)、install-toolchain(明确写集/原默认/验证)、command(明确写集/验证)、defaults、quarantine、purge-quarantine。系统软件包安装使用明确批准的可信安装脚本,不自动猜当前发行版安装命令;Docker 示例见 service-profiles/docker-engine.md。主机级入口用 resource_updates.hosts[].host_services 与 spec.public_ingress 入账,不要为 Nginx/WireGuard 伪造 APP 部署。
|
|
69
88
|
|
|
@@ -105,7 +124,7 @@ node /path/to/ops/common/tools/ops.mjs --state /path/to/new-ops-state import-leg
|
|
|
105
124
|
|
|
106
125
|
```sh
|
|
107
126
|
node /path/to/ops/common/tools/demo-local.mjs --output /absolute/empty/demo-root
|
|
108
|
-
node --test /path/to/ops/common/tests/test_ops.mjs
|
|
127
|
+
node --test /path/to/ops/common/tests/test_ops.mjs /path/to/ops/common/tests/test_ops_bootstrap.mjs
|
|
109
128
|
node /path/to/ops/common/tools/validate-ops.mjs --self-check
|
|
110
129
|
```
|
|
111
130
|
|