@namewta/speculo 0.2.1 → 0.2.3

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.
Files changed (59) hide show
  1. package/README.md +7 -5
  2. package/package.json +1 -1
  3. package/template/.speculo/README.md +3 -3
  4. package/template/commands/docs-sync.md +1 -1
  5. package/template/commands/knowledge-prune.md +1 -1
  6. package/template/commands/retro.md +9 -7
  7. package/template/skills/docs-sync/SKILL.md +1 -1
  8. package/template/skills/docs-sync/assets/report-template.md +1 -1
  9. package/template/skills/docs-sync/references/readme-contract.md +2 -0
  10. package/template/skills/docs-sync/references/readme-writing-guide.md +294 -0
  11. package/template/skills/docs-sync/references/workflow-scope-contract.md +2 -2
  12. package/template/skills/knowledge-prune/SKILL.md +1 -1
  13. package/template/skills/knowledge-prune/references/audit-rules.md +1 -1
  14. package/template/skills/runtime-context/SKILL.md +3 -3
  15. package/template/skills/runtime-context/references/path-resolution.md +2 -2
  16. package/template/skills/speculo-retro/SKILL.md +1 -1
  17. package/template/workflows/matt-pocock/PERSISTENCE.md +80 -0
  18. package/template/workflows/matt-pocock/WORKFLOW.md +62 -115
  19. package/template/workflows/matt-pocock/atomic-skills/ask-matt.md +21 -0
  20. package/template/workflows/matt-pocock/atomic-skills/claude-handoff.md +21 -0
  21. package/template/workflows/matt-pocock/atomic-skills/code-review.md +21 -0
  22. package/template/workflows/matt-pocock/atomic-skills/codebase-design.md +21 -0
  23. package/template/workflows/matt-pocock/atomic-skills/diagnosing-bugs.md +21 -0
  24. package/template/workflows/matt-pocock/atomic-skills/domain-modeling.md +21 -0
  25. package/template/workflows/matt-pocock/atomic-skills/grill-me.md +21 -0
  26. package/template/workflows/matt-pocock/atomic-skills/grill-with-docs.md +21 -0
  27. package/template/workflows/matt-pocock/atomic-skills/grilling.md +21 -0
  28. package/template/workflows/matt-pocock/atomic-skills/handoff.md +21 -0
  29. package/template/workflows/matt-pocock/atomic-skills/implement.md +21 -0
  30. package/template/workflows/matt-pocock/atomic-skills/improve-codebase-architecture.md +21 -0
  31. package/template/workflows/matt-pocock/atomic-skills/loop-me.md +21 -0
  32. package/template/workflows/matt-pocock/atomic-skills/prototype.md +21 -0
  33. package/template/workflows/matt-pocock/atomic-skills/research.md +21 -0
  34. package/template/workflows/matt-pocock/atomic-skills/resolving-merge-conflicts.md +21 -0
  35. package/template/workflows/matt-pocock/atomic-skills/setup-matt-pocock-skills.md +21 -0
  36. package/template/workflows/matt-pocock/atomic-skills/tdd.md +21 -0
  37. package/template/workflows/matt-pocock/atomic-skills/teach.md +21 -0
  38. package/template/workflows/matt-pocock/atomic-skills/to-spec.md +21 -0
  39. package/template/workflows/matt-pocock/atomic-skills/to-tickets.md +21 -0
  40. package/template/workflows/matt-pocock/atomic-skills/triage.md +21 -0
  41. package/template/workflows/matt-pocock/atomic-skills/wayfinder.md +21 -0
  42. package/template/workflows/matt-pocock/atomic-skills/wizard.md +21 -0
  43. package/template/workflows/matt-pocock/atomic-skills/writing-beats.md +21 -0
  44. package/template/workflows/matt-pocock/atomic-skills/writing-fragments.md +21 -0
  45. package/template/workflows/matt-pocock/atomic-skills/writing-great-skills.md +21 -0
  46. package/template/workflows/matt-pocock/atomic-skills/writing-shape.md +20 -0
  47. package/template/workflows/matt-pocock/routes/architecture.md +4 -4
  48. package/template/workflows/matt-pocock/routes/diagnose.md +1 -1
  49. package/template/workflows/matt-pocock/routes/experimental.md +6 -6
  50. package/template/workflows/matt-pocock/routes/idea-to-delivery.md +11 -11
  51. package/template/workflows/matt-pocock/routes/merge-conflicts.md +1 -1
  52. package/template/workflows/matt-pocock/routes/productivity.md +3 -3
  53. package/template/workflows/matt-pocock/routes/research-prototype.md +2 -2
  54. package/template/workflows/matt-pocock/routes/review.md +1 -1
  55. package/template/workflows/matt-pocock/routes/setup.md +1 -1
  56. package/template/workflows/matt-pocock/routes/triage.md +3 -3
  57. package/template/workflows/matt-pocock/routes/wayfinder.md +3 -3
  58. package/template/workflows/person/PERSISTENCE.md +56 -0
  59. package/template/workflows/person/WORKFLOW.md +9 -27
package/README.md CHANGED
@@ -67,14 +67,16 @@ After initialization, the target project gains the following AI agent-callable a
67
67
 
68
68
  ### 2 Workflow Packages
69
69
 
70
- | Workflow | Routes | Description |
71
- |---|---|---|
72
- | **matt-pocock** | 10 | Route-first composition of Matt Pocock native skills (engineering + productivity) |
73
- | **person** | 1 | Persona-methodology-based consulting workflow |
70
+ | Workflow | Routes | Atomic coverage | Description |
71
+ |---|---:|---|---|
72
+ | **matt-pocock** | 10 | Complete vendor inventory | Route composition plus one-to-one access to every stable and experimental Matt Pocock SKILL |
73
+ | **person** | 1 | None | Persona-methodology-based consulting workflow without synthetic skill wrappers |
74
+
75
+ Every workflow ships a peer `PERSISTENCE.md` as its sole runtime contract. `WORKFLOW.md` and each `atomic-skills/<id>.md` entry load it first, so composed routes and direct atomic calls resolve the same state root, active change, namespaces, and confirmation boundaries.
74
76
 
75
77
  ### Vendor Skill Collections
76
78
 
77
- - **Matt Pocock skills** — Engineering (ask-matt, implement, wayfinder, tdd, code-review, diagnosing-bugs, prototyping, research, domain-modeling, codebase-design, triage, setup, to-spec, to-tickets, grill-with-docs, improve-codebase-architecture) and Productivity (grill-me, handoff, teach, writing-great-skills)
79
+ - **Matt Pocock skills** — The complete stable and explicitly enabled `in-progress` inventory, preserved as read-only vendor sources behind workflow-owned atomic wrappers.
78
80
 
79
81
  ## Documentation
80
82
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namewta/speculo",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Workflow-packaged specification-driven development assets with install, update, and migration tooling.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,8 +5,8 @@
5
5
  ## 读取顺序
6
6
 
7
7
  1. 读取 `workspace.json`,以当前打开项目为 `project_root` 解析公共 roots。
8
- 2. 读取 `../workflows/<workflow>/WORKFLOW.md` 的 `<runtime-context>` 与 `<persistence>`。
9
- 3. 读取 `<workflow>/status.json`,再读取 `changes/<change>/.status.json` 和当前 route 产物。
8
+ 2. `../workflows/<workflow>/WORKFLOW.md` 或 `atomic-skills/<id>.md` 进入,并首先读取同级 `PERSISTENCE.md` 的 `<runtime-context>`、`<persistence>` 与 change 启动协议。
9
+ 3. 读取 `<workflow>/status.json`,再读取 `changes/<change>/.status.json` 和当前 route/direct 产物。
10
10
  4. 历史 change 只从 `<workflow>/archive/YYYY-MM/<change>/` 读取。
11
11
  5. Command 报告位于 `commands/<command>/*.md`,command state 位于 `commands/<command>/state.json`。
12
12
  6. 首次 docs-sync 确认后读取 `<workflow>/docs-sync.json`;它分列该 workflow 的项目文档和私有 state 更新范围。
@@ -17,4 +17,4 @@
17
17
  - `docs-sync.json` 是 docs-sync command 拥有的延迟 sidecar,不进入 `_state`,也不授予越过 workflow 确认规则的权限。
18
18
  - `.config` 不是标准目录;只有 workflow 声明时才可使用。
19
19
  - Command 报告命名为 `<YYYY-MM-DD>-<scope>-<topic>[-NN].md`,禁止覆盖。
20
- - Skill 只使用调用方提供并完成边界校验的路径。
20
+ - Atomic wrapper 可独立启动,但只使用 `PERSISTENCE.md` 解析并完成边界校验的路径;raw vendor SKILL 不直接选择持久化根。
@@ -20,7 +20,7 @@ keywords: [docs-sync, readme, changelog, agents, documentation]
20
20
 
21
21
  1. 读取 `../skills/runtime-context/SKILL.md` 与 `../skills/docs-sync/SKILL.md`,解析 command 路径、`speculo/config.json`(不存在时以默认值静默降级)和全部已安装 workflow/state 根。
22
22
  2. 按 skill 的 Git 契约检查 tracked、staged、unstaged 与 untracked 内容;安全且校验通过时显式暂存并创建 checkpoint,异常时无损阻塞。
23
- 3. 读取全局 state、各 `WORKFLOW.md` 和 sidecar。首次运行统一展示全局与每个 workflow 的候选范围;用户确认后为所有已安装 workflow 创建 sidecar,空范围也保留。
23
+ 3. 读取全局 state、各 `WORKFLOW.md`、同级 `PERSISTENCE.md` 和 sidecar。首次运行统一展示全局与每个 workflow 的候选范围;用户确认后为所有已安装 workflow 创建 sidecar,空范围也保留。
24
24
  4. 由 skill 收集精确 commit 区间、archive 与声明 store 证据,整份审计命中文档并执行新增、更新、删除段落、合并或保留。整文件/目录删除和受保护知识仍逐次确认。
25
25
  5. 运行项目与文档校验,原子写入报告、state 和 sidecar,再显式暂存本次产物并创建同步或 no-op commit。
26
26
  6. 重新读取 Git、state、报告与 sidecar;只有工作区干净、节点可复现且所有文件已提交时完成。
@@ -14,7 +14,7 @@ keywords: [knowledge, prune, rules, lessons, context, adr]
14
14
 
15
15
  ## 执行
16
16
 
17
- 1. 读取 `../skills/runtime-context/SKILL.md`,解析 `speculo/config.json`(不存在时以默认值静默降级),选择 workflow 并解析其 `<persistence>` 声明的 knowledge/policy namespace。
17
+ 1. 读取 `../skills/runtime-context/SKILL.md`,解析 `speculo/config.json`(不存在时以默认值静默降级),选择 workflow 并解析其 `PERSISTENCE.md` 声明的 knowledge/policy namespace。
18
18
  2. 读取 `../skills/knowledge-prune/SKILL.md`,默认执行 dry-run,生成 `delete | merge | rewrite | keep | needs-confirmation` 清单。
19
19
  3. 将报告写入 command 专属目录;无用户确认时不删除、重命名或改写任何 namespace。
20
20
  4. 用户确认后再次执行路径包含检查,逐项操作并复查 git、引用和报告结果。
@@ -10,6 +10,8 @@ keywords: [retro, 复盘, 痛点, feedback, issue, 优化, 反馈]
10
10
 
11
11
  ⚠️ **本命令在最后一步会通过 `gh` 向外部仓库创建 issue(外部写操作)。AI 必须先列出将要创建的 issue 清单与目标仓库并征求用户确认,确认前只输出计划,不调用 `gh`。**
12
12
 
13
+ 🔒 **目标仓库已写死:`NAMEWTA/Speculo`。** 本命令专为 Speculo 框架自身反馈而设计。不论 retro 在哪个项目仓库中被激活,issue 一律提交到 `NAMEWTA/Speculo`。不允许用户或 AI 覆盖此目标仓库。
14
+
13
15
  ## 归档路径模式
14
16
 
15
17
  报告文件:`speculo/.speculo/commands/retro/<YYYY-MM-DD>-<scope>-<topic>[-NN].md`
@@ -25,13 +27,13 @@ keywords: [retro, 复盘, 痛点, feedback, issue, 优化, 反馈]
25
27
 
26
28
  ## 执行步骤
27
29
 
28
- 1. 读取 `../skills/runtime-context/SKILL.md` 与 `../skills/speculo-retro/SKILL.md`,解析 `speculo/config.json`(不存在时以默认值静默降级),采集对话、command 报告、change 状态以及 workflow 声明的 lessons/knowledge store。
30
+ 1. 读取 `../skills/runtime-context/SKILL.md` 与 `../skills/speculo-retro/SKILL.md`,解析 `speculo/config.json`(不存在时以默认值静默降级),采集对话、command 报告、change 状态以及各 `PERSISTENCE.md` 声明的 lessons/knowledge store。
29
31
  2. 用该 skill 产出规范化复盘结论:去重、分级、根因化的 issue-ready 提案清单,附丢弃/合并说明与每条处置建议。
30
32
  3. 创建 command 专属目录 `speculo/.speculo/commands/retro/`,把复盘结论写入带 scope 的 Markdown 报告。
31
- 4. **解析目标仓库**:默认框架反馈上游 `NAMEWTA/Speculo`;用户在请求中显式指定其他 `owner/repo` 时覆盖默认。无论如何,在调用 `gh` 前回显解析到的 `owner/repo`,让用户确认或改正。
32
- 5. **去重**:读取 `../skills/github-npm-ops/SKILL.md` 的 `references/issue-pr-triage.md`,对每条 `disposition: file-issue` 的提案用 `gh issue list --repo <owner/repo> --search "<关键词>" --state all --limit 20` 检索;命中语义重复的默认跳过并记录 `dup_of`,仅当用户明确要求才补提。
33
- 6. **外部写操作边界**:向用户展示将要创建的 issue 清单(标题、类型/优先级标签、正文摘要、目标 `owner/repo`)与去重结果,等待用户明确确认。没有确认时只输出计划,不调用 `gh`。
34
- 7. 用户确认后,按优先级倒序逐条执行 `gh issue create --repo <owner/repo> --title "<title>" --body "<body>" --label "<type>,<priority>[,<area>]"`(多行正文可用 `--body-file` 指向不保留的临时文件)。任一条失败时停止后续创建,报告已建/未建清单,不重复创建同一条。
33
+ 4. **目标仓库(写死,不可覆盖)**:本命令的 issue 目标仓库固定为 `NAMEWTA/Speculo`。无论 retro 在哪个项目仓库中被激活,`gh issue create` 的 `--repo` 参数一律使用 `NAMEWTA/Speculo`。用户和 AI 均不得指定其他仓库。
34
+ 5. **去重**:读取 `../skills/github-npm-ops/SKILL.md` 的 `references/issue-pr-triage.md`,对每条 `disposition: file-issue` 的提案用 `gh issue list --repo NAMEWTA/Speculo --search "<关键词>" --state all --limit 20` 检索;命中语义重复的默认跳过并记录 `dup_of`,仅当用户明确要求才补提。
35
+ 6. **外部写操作边界**:向用户展示将要创建的 issue 清单(标题、类型/优先级标签、正文摘要、目标仓库 `NAMEWTA/Speculo`)与去重结果,等待用户明确确认。没有确认时只输出计划,不调用 `gh`。
36
+ 7. 用户确认后,按优先级倒序逐条执行 `gh issue create --repo NAMEWTA/Speculo --title "<title>" --body "<body>" --label "<type>,<priority>[,<area>]"`(多行正文可用 `--body-file` 指向不保留的临时文件)。任一条失败时停止后续创建,报告已建/未建清单,不重复创建同一条。
35
37
  8. 把每条提案的最终 issue 编号/URL 回写进本次报告的「提交结果」小节;返回报告路径、3-5 条复盘摘要和已创建 issue 链接清单。
36
38
 
37
39
  ## 产物模板
@@ -64,10 +66,10 @@ generated_at: [TODO: ISO-8601]
64
66
  [TODO: 列出被合并、丢弃或降级为「仅记教训」的项及原因。]
65
67
 
66
68
  ## 目标仓库
67
- [TODO: 解析到的 owner/repo 与用户确认结果。]
69
+ `NAMEWTA/Speculo`(写死,不可覆盖)
68
70
 
69
71
  ## 用户确认记录
70
- [TODO: 记录用户对 issue 清单与目标仓库的确认原文摘要。]
72
+ [TODO: 记录用户对 issue 清单的确认原文摘要。]
71
73
 
72
74
  ## 提交结果
73
75
  [TODO: 列出每条提案对应的 issue 编号/URL,或未提交原因(重复/失败/用户撤回)。]
@@ -16,7 +16,7 @@ description: 基于可复现 Git 区间、用户确认范围和 workflow 规则
16
16
  1. 读取 `references/git-state-contract.md`,清理并提交可验证的既有工作区改动,解析上次基线与本次输入节点。完成标准:输入工作区干净,或已无损阻塞。
17
17
  2. 读取 `references/workflow-scope-contract.md`,发现全部已安装 workflow,并解析全局范围与每个 workflow 的确认清单。完成标准:首次运行已统一确认范围,每个 workflow 状态根都有合法 sidecar。
18
18
  3. 读取 `references/document-lifecycle-contract.md`,把输入区间和 workflow 证据映射为 `add | update | delete | merge | keep | propose-only`。完成标准:每个受影响资产已整份审计,而非只追加新段落。
19
- 4. 更新 README 时读取 `references/readme-contract.md`;更新 CHANGELOG 时读取 `references/changelog-contract.md`;更新代理手册时读取 `references/agents-contract.md`。需要创建或重建多层代理手册树时改用 `../agents-md-builder/SKILL.md`。
19
+ 4. 更新 README 时读取 `references/readme-contract.md`(同步规则)与 `references/readme-writing-guide.md`(内容写作规范);更新 CHANGELOG 时读取 `references/changelog-contract.md`;更新代理手册时读取 `references/agents-contract.md`。需要创建或重建多层代理手册树时改用 `../agents-md-builder/SKILL.md`。
20
20
  5. 验证项目和文档,按 `assets/report-template.md`、`assets/state-template.json` 与 `assets/workflow-scope-template.json` 返回原子写入内容。调用方提交显式文件列表并再次确认工作区干净。
21
21
 
22
22
  完成标准:项目文档与当前事实一致,过期和重复内容已删除或合并;报告可复现输入区间;state 与 sidecar 已提交;没有未确认的越权写入或遗留工作区改动。
@@ -30,7 +30,7 @@ generated_at: <ISO-8601>
30
30
 
31
31
  ## Workflow Sources
32
32
 
33
- [按 workflow 记录读取的 WORKFLOW、archive、声明 store 和受保护候选;空集合写 `[]`。]
33
+ [按 workflow 记录读取的 WORKFLOW/PERSISTENCE、archive、声明 store 和受保护候选;空集合写 `[]`。]
34
34
 
35
35
  ## Synced Assets
36
36
 
@@ -1,5 +1,7 @@
1
1
  # README 同步契约
2
2
 
3
+ > **内容写作规范参见 [readme-writing-guide.md](./readme-writing-guide.md)。** 本契约定义 README 的同步规则、触发条件和多语言铁律;具体到九段式结构、每节写什么、怎么写,请使用写作指南。
4
+
3
5
  README 面向首次接触项目、正在判断是否采用以及准备立即试用的读者。保留项目既有语言和风格,不强塞不适用的标准章节。
4
6
 
5
7
  ## 事实顺序
@@ -0,0 +1,294 @@
1
+ # README 写作指南
2
+
3
+ README 面向首次接触项目的读者,需要在约 5 秒内回答三个问题:**这是什么、怎么用、值不值得用**。本指南定义 Speculo 项目的通用 README 结构与写作规范,供 `docs-sync` 及其他命令在生成或审计 README 时引用。
4
+
5
+ > **同步规则参见 [readme-contract.md](./readme-contract.md)。** 本指南定义"写什么内容"(内容规范);readme-contract.md 定义"何时同步、如何验证"(同步契约)。两者互补。
6
+
7
+ ## 九段式结构
8
+
9
+ 项目简单时合并相邻章节,README 很长时把 API、架构解释和贡献流程移到对应文档。以下九段覆盖从"吸引注意"到"引导参与"的完整认知漏斗。
10
+
11
+ | # | 段落 | 用途 | 缺失后果 |
12
+ |---|------|------|----------|
13
+ | 1 | **Header** | 项目名 + 一句话定位 + 徽章栏 + 语言切换 | 读者不知道项目是否活跃、能否跨语言阅读 |
14
+ | 2 | **About** | 价值主张 + 内容概览 + 独特卖点 | 读者无法快速判断项目是否解决他的问题 |
15
+ | 3 | **Quick Start** | 前置条件 → 安装命令 → 预期输出 | 读者放弃尝试 |
16
+ | 4 | **Project Structure** | ASCII 目录树 + 命名规范 | 读者不知道从哪里入手改代码 |
17
+ | 5 | **How to Study / Use** | 分步学习或使用方法 | 读者不知道怎么消化内容 |
18
+ | 6 | **Tech Stack** | 组件-包名-用途三列表 | 读者不知道需要什么依赖 |
19
+ | 7 | **Contributing** | Fork → Branch → Convention → Test → PR | 潜在贡献者不知道流程而放弃 |
20
+ | 8 | **License** | 类型 + LICENSE 文件链接 | 读者不确定能否合法使用 |
21
+ | 9 | **Footer** | 社区链接 + 跨语言导航 | 读者不知道怎么联系或获取更多信息 |
22
+
23
+ ---
24
+
25
+ ### 1. Header
26
+
27
+ **应包含:**
28
+ - 项目名居中(`<h1 align="center">Project Name</h1>`)
29
+ - 一句话 tagline —— 说明输入、输出或解决什么问题,删除空泛营销语
30
+ - 徽章栏:License、语言版本、包管理器、Stars、PRs、CI 状态等
31
+ - 语言切换链接:`[中文](./README-ZH.md)` ← → `[English](./README.md)`
32
+
33
+ **不应包含:**
34
+ - 超过一行的冗长描述(放到 About 段)
35
+ - 失效或状态无价值的徽章
36
+
37
+ **示例:**
38
+
39
+ ```markdown
40
+ <h1 align="center">My Project</h1>
41
+ <p align="center"><em>A one-line description of what it does.</em></p>
42
+ <p align="center">
43
+ <a href="./README-ZH.md">中文</a>
44
+ </p>
45
+ <p align="center">
46
+ <img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT">
47
+ <img src="https://img.shields.io/badge/Python-3.10+-green.svg" alt="Python 3.10+">
48
+ <img src="https://img.shields.io/github/stars/owner/repo?style=flat" alt="Stars">
49
+ </p>
50
+ ```
51
+
52
+ ---
53
+
54
+ ### 2. About
55
+
56
+ **应包含:**
57
+ - 一段清晰的价值主张:这个项目解决什么痛点、为谁解决
58
+ - 内容/功能概览表(若为学习型仓库:模块列表;若为工具型:核心功能)
59
+ - 1-3 个独特卖点(why this project over alternatives)
60
+
61
+ **不应包含:**
62
+ - 实现细节(放到项目结构或文档链接)
63
+ - 安装步骤(放到 Quick Start)
64
+ - 与其他项目逐行对比(冗长且容易过时)
65
+
66
+ **示例(学习型仓库):**
67
+
68
+ ```markdown
69
+ ## About
70
+
71
+ My Project 是一套从零到生产就绪的 XYZ 学习路线,每个模块以"带注释的可运行脚本"而非教程形式呈现 — 代码即教材。
72
+
73
+ | # | 模块 | 覆盖内容 |
74
+ |---|------|----------|
75
+ | 01 | Getting Started | 环境搭建、Hello World |
76
+ | 02 | Core Concepts | 核心抽象与生命周期 |
77
+ | ... | ... | ... |
78
+ ```
79
+
80
+ ---
81
+
82
+ ### 3. Quick Start
83
+
84
+ **应包含:**
85
+ - **前置条件**:运行时版本、系统依赖、必需的 API key 等
86
+ - **一步安装命令**:`npx`、`git clone`、`pip install` 等,可复制粘贴
87
+ - **预期输出**:读者执行后应该看到什么才算成功
88
+ - 预计耗时在 60 秒以内
89
+
90
+ **不应包含:**
91
+ - 长篇背景解释
92
+ - 多分支安装路径(初学者只需一条"最快路径")
93
+
94
+ **示例:**
95
+
96
+ ```markdown
97
+ ## Quick Start
98
+
99
+ **前置条件:** Node.js >= 22、npm >= 10
100
+
101
+ ```bash
102
+ npx my-package init
103
+ ```
104
+
105
+ 预期输出:
106
+
107
+ ```
108
+ ✔ Project initialized at ./my-project
109
+ ✔ 3 files created
110
+ ```
111
+ ```
112
+
113
+ ---
114
+
115
+ ### 4. Project Structure
116
+
117
+ **应包含:**
118
+ - ASCII 目录树(第一层级,不超过 2 层深度)
119
+ - 关键命名规范说明(文件前缀、目录约定等)
120
+ - 每个顶级目录的一句话用途
121
+
122
+ **不应包含:**
123
+ - 完整展开的文件树(冗长且随 commit 快速过时)
124
+ - 每个文件的详细说明(放到各自模块的文档中)
125
+
126
+ **示例:**
127
+
128
+ ```markdown
129
+ ## Project Structure
130
+
131
+ ```
132
+ .
133
+ ├── src/ # 源代码
134
+ ├── tests/ # 测试(文件名 = test_<module>.py)
135
+ ├── docs/ # 详细文档
136
+ ├── scripts/ # 运维/CI 辅助脚本
137
+ ├── pyproject.toml # 项目元数据与依赖
138
+ └── README.md
139
+ ```
140
+
141
+ 命名规范:源文件使用 `snake_case.py`,测试文件使用 `test_` 前缀。
142
+ ```
143
+
144
+ ---
145
+
146
+ ### 5. How to Study / Use
147
+
148
+ 此节因项目类型而异:
149
+
150
+ **学习型仓库:** 四步学习法
151
+ ```markdown
152
+ ## How to Study
153
+
154
+ 1. **选择模块** — 按编号顺序,每模块构建在前一模块之上
155
+ 2. **阅读注释** — 每个脚本包含详尽的中文注释,解释每行代码的"为什么"
156
+ 3. **运行脚本** — `python main-<NN>-<topic>.py`,观察输出
157
+ 4. **动手实验** — 修改参数、打破代码、修复它
158
+ ```
159
+
160
+ **工具/库型仓库:**
161
+ ```markdown
162
+ ## Usage
163
+
164
+ ```python
165
+ from mylib import Thing
166
+ t = Thing(config)
167
+ result = t.do("input")
168
+ ```
169
+
170
+ 详见 [docs/](./docs/)。
171
+ ```
172
+
173
+ ---
174
+
175
+ ### 6. Tech Stack
176
+
177
+ **格式:** 组件-包名-用途三列表,按层或类别分组。
178
+
179
+ **应包含:**
180
+ - 核心运行时与框架
181
+ - 关键依赖(用户需要知道的,不是全部 `node_modules`)
182
+
183
+ **示例:**
184
+
185
+ ```markdown
186
+ ## Tech Stack
187
+
188
+ | 组件 | 包名 | 用途 |
189
+ |------|------|------|
190
+ | Runtime | Python 3.10+ | 主运行环境 |
191
+ | Package Manager | uv | 依赖管理与虚拟环境 |
192
+ | LLM Framework | langchain | 大语言模型编排 |
193
+ | Vector Store | chromadb | 嵌入式向量存储与检索 |
194
+ ```
195
+
196
+ ---
197
+
198
+ ### 7. Contributing
199
+
200
+ **应包含:**
201
+ - Fork → Branch → Convention → Test → PR 简洁流程
202
+ - Commit 规范(如 Conventional Commits)
203
+ - 在哪提 issue、讨论设计
204
+
205
+ **不应包含:**
206
+ - 完整的 CLA 法律文本(链接到 CONTRIBUTING.md)
207
+
208
+ **示例:**
209
+
210
+ ```markdown
211
+ ## Contributing
212
+
213
+ 1. Fork 本仓库
214
+ 2. 从 `main` 分支创建功能分支:`git checkout -b feat/my-feature`
215
+ 3. 提交遵循 [Conventional Commits](https://www.conventionalcommits.org/)
216
+ 4. 确保现有测试通过并添加新测试
217
+ 5. 提交 PR 并描述改动原因
218
+
219
+ 欢迎提 issue 讨论新功能或报告 bug。
220
+ ```
221
+
222
+ ---
223
+
224
+ ### 8. License
225
+
226
+ **格式:** 一句话 + LICENSE 文件链接。
227
+
228
+ ```markdown
229
+ ## License
230
+
231
+ MIT © [Author] — 详见 [LICENSE](./LICENSE) 文件。
232
+ ```
233
+
234
+ ---
235
+
236
+ ### 9. Footer
237
+
238
+ **应包含:**
239
+ - 社区/联系链接(GitHub Discussions、Discord、Twitter 等)
240
+ - 跨语言 README 跳转链接(与 Header 的徽章栏中的语言切换呼应)
241
+
242
+ ```markdown
243
+ ---
244
+
245
+ <p align="center">
246
+ <a href="./README-ZH.md">中文文档</a>
247
+ &nbsp;·&nbsp;
248
+ <a href="https://github.com/owner/repo/discussions">Discussions</a>
249
+ &nbsp;·&nbsp;
250
+ <a href="https://github.com/owner/repo/issues">Report Bug</a>
251
+ </p>
252
+ ```
253
+
254
+ ---
255
+
256
+ ## 双语言原则
257
+
258
+ 遵循 [readme-contract.md](./readme-contract.md) 中的铁律:
259
+
260
+ - **`README.md` 始终为英文(EN)。** 与之配对的是 `README-ZH.md`,为一对一的中文翻译镜像。
261
+ - 两文件顶部互相提供可点击跳转链接。
262
+ - 结构完全对称,内容一一对应。标题顺序、命令、代码块、URL、表格字段保持对等;代码实体不翻译。
263
+ - `README.md` 内容变更时,`README-ZH.md` 必须在同一次同步中完成对应更新。
264
+
265
+ ---
266
+
267
+ ## 与其他资产的关系
268
+
269
+ | 资产 | 路径 | 关系 |
270
+ |------|------|------|
271
+ | readme-contract.md | `./readme-contract.md` | 同步规则与验证契约 —— 定义**何时更新**、触发条件、多语言铁律 |
272
+ | document-lifecycle-contract.md | `./document-lifecycle-contract.md` | 文档生命周期 —— 定义**如何决定** add/update/delete/merge |
273
+ | docs-sync SKILL.md | `../SKILL.md` | 编排 skill —— 调用本指南与 readme-contract.md 协同完成 README 审计 |
274
+ | 项目文档创建与维护规范 | `temp/项目文档创建与维护规范.md` | 背景参考 —— 综合 50+ 来源的文档规范研究(非运行时依赖) |
275
+
276
+ ---
277
+
278
+ ## 验证清单
279
+
280
+ 生成或审计 README 时逐项检查:
281
+
282
+ - [ ] Header 有项目名、tagline、徽章栏(至少 License + 语言版本)、语言切换链接
283
+ - [ ] About 在 3 秒内回答"这个项目是做什么的"
284
+ - [ ] Quick Start 可在 60 秒内完成并看到预期输出
285
+ - [ ] 安装命令可复制粘贴执行
286
+ - [ ] Project Structure 树与实际目录布局一致
287
+ - [ ] Tech Stack 表与 `package.json` / `pyproject.toml` 等 manifest 文件中的核心依赖一致
288
+ - [ ] Contributing 有可执行步骤
289
+ - [ ] License 类型与实际 LICENSE 文件一致
290
+ - [ ] Footer 有语言切换和社区链接
291
+ - [ ] 无过期命令、路径、参数、徽章、链接
292
+ - [ ] `README-ZH.md` 与 `README.md` 同步更新
293
+
294
+ 逐段删除测试:删掉后不影响采用决策或正确使用的内容应压缩、下沉或删除。
@@ -1,12 +1,12 @@
1
1
  # Workflow 范围契约
2
2
 
3
- docs-sync 必须遵循每个 workflow 的 `WORKFLOW.md`、持久化声明与确认规则。`docs-sync.json` 是 command 拥有的标准延迟 sidecar,不属于 workflow `_state` 固定骨架。
3
+ docs-sync 必须遵循每个 workflow 的 `WORKFLOW.md` 与同级 `PERSISTENCE.md`。`docs-sync.json` 是 command 拥有的标准延迟 sidecar,不属于 workflow `_state` 固定骨架。
4
4
 
5
5
  ## 发现
6
6
 
7
7
  1. 从 `speculo/workflows/*/WORKFLOW.md` 发现已安装 workflow。
8
8
  2. 每个包必须有匹配的 `speculo/.speculo/<workflow>/` 状态根;包或状态根单边缺失时阻塞,不猜测归属。
9
- 3. 读取 `<runtime-context>`、`<persistence>`、固定 archive 和所有 `consumers` 包含 `docs-sync` 的 store。
9
+ 3. 读取同级 `PERSISTENCE.md` 的 `<runtime-context>`、`<persistence>`、固定 archive 和所有 `consumers` 包含 `docs-sync` 的 store。
10
10
  4. 状态根存在但没有已安装 package 时只报告 orphan,不创建 sidecar。
11
11
 
12
12
  ## Sidecar v1
@@ -12,7 +12,7 @@ description: dry-run 审计 workflow 声明的知识与策略 namespace,返回
12
12
  ## 输入
13
13
 
14
14
  - `runtime-context` 返回的 workflow/state 根。
15
- - `WORKFLOW.md#persistence` 中 role 为 knowledge、policy 或 legacy-knowledge 的 namespace。
15
+ - `PERSISTENCE.md#persistence` 中 role 为 knowledge、policy 或 legacy-knowledge 的 namespace。
16
16
  - 用户确认状态:`dry-run | confirmed`。
17
17
 
18
18
  ## 流程
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 扫描范围
4
4
 
5
- 1. 读取目标 workflow 的 `<persistence>`,选择 role 为 `knowledge | policy | legacy-knowledge` 且真实存在的 store。
5
+ 1. 读取目标 workflow `PERSISTENCE.md` 的 `<persistence>`,选择 role 为 `knowledge | policy | legacy-knowledge` 且真实存在的 store。
6
6
  2. `create="lazy"` 但不存在的 store 记为 `missing`,不为审计而创建;`existing-only` store 只读。
7
7
  3. 扫描代码、文档、active changes 和 archive 中对 ADR、CONTEXT、LESSONS、RULES 及具体文件名的引用。
8
8
 
@@ -7,18 +7,18 @@ description: 解析 Speculo 项目根、资产根和 workflow 状态根,向 co
7
7
 
8
8
  # Runtime Context
9
9
 
10
- 从项目根注册表和 workflow XML 声明构造一次运行所需的全部路径。调用方持有持久化责任;本 skill 只解析和验证路径。
10
+ 从项目根注册表和 workflow `PERSISTENCE.md` 构造一次运行所需的全部路径。调用方持有持久化责任;本 skill 只解析和验证路径。
11
11
 
12
12
  ## 输入
13
13
 
14
14
  - 当前工作目录或用户指定的项目目录。
15
- - workflow id,以及对应 `WORKFLOW.md` 中的 `<runtime-context>` 和 `<persistence>`。
15
+ - workflow id,以及对应 `PERSISTENCE.md` 中的 `<runtime-context>` 和 `<persistence>`。
16
16
  - 可选 change 名称和 command id。
17
17
 
18
18
  ## 流程
19
19
 
20
20
  1. 按 `references/path-resolution.md` 向上定位 `speculo/.speculo/workspace.json`;找不到唯一项目根时返回 blocked。
21
- 2. 读取注册表与 workflow 根别名,解析 `workflow/state/commands/skills/vendor`。
21
+ 2. 读取注册表与 workflow `PERSISTENCE.md`,解析 `workflow/state/commands/skills/vendor`。
22
22
  - 对每个解析后的 vendor root 执行存在性验证:目标目录必须存在,否则返回明确错误信息指明缺失的具体路径,禁止静默跳过。
23
23
  - 任一路径越界或目标缺失时返回 blocked。
24
24
  3. 读取 `speculo/config.json`(若存在);不存在时以默认值静默降级(`language: "en"`、`persistence.root_override: null`、`defaults.confirm_before_external_write: true`、`defaults.report_language: "en"`)。
@@ -14,7 +14,7 @@
14
14
 
15
15
  ## Workflow 绑定
16
16
 
17
- 读取 workflow 的 `<runtime-context>`:
17
+ 读取 workflow 同级 `PERSISTENCE.md` 的 `<runtime-context>`:
18
18
 
19
19
  - `base` 必须引用 `workspace.json#roots` 中已有根。
20
20
  - `path` 不能是绝对路径,不能包含 `..` 或反斜杠。
@@ -38,4 +38,4 @@ change_root = changes_root/<change>
38
38
  - `<artifact root="change">` 只能落在当前 change。
39
39
  - `<artifact root="state">` 只能落在 `<persistence>` 声明的额外命名空间。
40
40
  - command 报告只能落在 `state/commands/<command>/`,skill 不自行选择路径。
41
- - raw vendor skill 未经 workflow runtime context 激活时,不承诺 Speculo 持久化边界。
41
+ - raw vendor SKILL 只通过同 workflow 的一对一 atomic wrapper 激活;wrapper 先加载 `PERSISTENCE.md`,嵌套 skill 名称继续解析到 wrapper。
@@ -10,7 +10,7 @@ description: 从 Speculo 使用证据中提取、去重、分级和根因化摩
10
10
  ## 输入
11
11
 
12
12
  - 当前对话与本次使用的 commands/workflows。
13
- - `commands/<command>/*.md` 报告、active change 状态、archive 和 workflow 声明的 lessons/knowledge store。
13
+ - `commands/<command>/*.md` 报告、active change 状态、archive 和 `PERSISTENCE.md` 声明的 lessons/knowledge store。
14
14
  - 可选已有 issues,用于语义去重。
15
15
 
16
16
  ## 流程
@@ -0,0 +1,80 @@
1
+ # Matt Pocock Persistence
2
+
3
+ 本文件是 `matt-pocock` 的唯一运行契约。`WORKFLOW.md` 与 `atomic-skills/*.md` 只能引用本文件,不得复制 runtime roots、store、change 启动或副作用规则。无论从 workflow 还是 atomic wrapper 进入,都先读取项目根 `speculo/.speculo/workspace.json`,再执行本文件。
4
+
5
+ ## 运行时根
6
+
7
+ ```xml
8
+ <runtime-context>
9
+ <root id="workflow" base="workflows" path="matt-pocock" />
10
+ <root id="state" base="state" path="matt-pocock" />
11
+ <root id="vendor:matt-pocock" base="vendor" path="matt-pocock" />
12
+ </runtime-context>
13
+ ```
14
+
15
+ ## 持久化命名空间
16
+
17
+ ```xml
18
+ <persistence root="state">
19
+ <store id="index" role="index" kind="file" path="status.json" create="initialize" />
20
+ <store id="changes" role="active" kind="directory" path="changes" create="initialize" />
21
+ <store id="archive" role="archive" kind="directory" path="archive" create="initialize" />
22
+ <store id="knowledge" role="knowledge" kind="directory" path="knowledge" create="lazy" consumers="docs-sync,retro,knowledge-prune" />
23
+ <store id="policy" role="policy" kind="directory" path="policy" create="lazy" consumers="docs-sync,knowledge-prune" />
24
+ <store id="integrations" role="integration" kind="directory" path="integrations" create="lazy" />
25
+ <store id="backlog" role="backlog" kind="directory" path="backlog" create="lazy" consumers="retro" />
26
+ <store id="legacy-config" role="legacy-knowledge" kind="directory" path=".config" create="existing-only" legacy="true" consumers="docs-sync,retro,knowledge-prune" />
27
+ </persistence>
28
+ ```
29
+
30
+ `status.json`、`changes/` 和 `archive/` 是固定骨架;lazy store 只在产生对应内容并确认长期归属时创建。已有 `.config/` 只读,不接收新内容。
31
+
32
+ ## 启动协议
33
+
34
+ ```xml
35
+ <sequence>
36
+ <phase id="resolve-runtime" order="1">
37
+ <skill root="skills" path="runtime-context/SKILL.md" activation="required" />
38
+ <completion>workspace、config、workflow/state/vendor roots 均已解析并通过边界与存在性检查;同一运行已解析时复用结果。</completion>
39
+ </phase>
40
+ <phase id="select-change" order="2">
41
+ <artifact root="state" path="status.json" />
42
+ <completion>已选择用户指定或唯一 active change;没有 active change 时原子创建 `changes/YYYY-MM-DD-&lt;kebab-topic&gt;/.status.json` 并更新索引;多个候选时先消歧。</completion>
43
+ </phase>
44
+ </sequence>
45
+ ```
46
+
47
+ 创建 change 时初始化 schema version 1、workflow/name/timestamps、`change_status: active`、空的 `route_history`、`skill_history` 与 `external_refs`。已有 change 缺少这些数组时按空数组读取,在下一次真实更新时补齐,不要求迁移。
48
+
49
+ ## 状态字段
50
+
51
+ ```xml
52
+ <state-schema>
53
+ <field name="current_route" type="string|null" />
54
+ <field name="route_history" type="array" />
55
+ <field name="skill_history" type="array" />
56
+ <field name="external_refs" type="array" />
57
+ <field name="legacy_source" type="object|null" />
58
+ </state-schema>
59
+ ```
60
+
61
+ - route 调用维护 `current_route` 与 `route_history`;direct atomic 调用保持二者不变。
62
+ - 每次 atomic wrapper 调用向 `skill_history` 追加 skill id、`direct|route` 模式、进入/完成时间、结果和真实的项目相对产物路径。
63
+ - 外部系统结果只写入 `external_refs`;状态不保存派生绝对路径。
64
+
65
+ ## 路径分配
66
+
67
+ 1. route 的 `<artifact>` 指针优先,wrapper 使用调用方已声明路径。
68
+ 2. direct 调用没有 route 产物声明时,运行时文件由目标 skill 在当前 change 内按需新建;只强制 `change_root` 边界,不强制 `atomic-skills/<id>` 子目录。
69
+ 3. 项目代码、测试和用户明确要求的项目文档属于项目产物,可写入经确认的项目相对路径;同时把验证或结果指针记录到当前 change。
70
+ 4. 长期知识、规则和集成配置先在 change 中形成,经确认后才写入已声明的 lazy store。raw skill 中的 `CONTEXT.md`、ADR、`docs/agents/`、`.out-of-scope/` 等逻辑位置分别映射到 `knowledge`、`integrations` 或 `policy`,不在项目根自行创建私有运行状态。
71
+ 5. 临时原型、数据库、脚本和报告必须删除或吸收;保留的结论写入当前 change。raw skill 指向系统临时目录、当前目录或 `.scratch/` 时,同样受本规则约束。
72
+
73
+ raw skill 内部提及另一个 `/skill` 时,解析到 `atomic-skills/<skill-id>.md`;只有该 wrapper 可以直接引用对应 vendor `SKILL.md`。
74
+
75
+ ## 副作用边界
76
+
77
+ - 发布 issue、评论、标签,写 secret,启动后台 agent,提交代码,继续 merge/rebase,合并或删除 worktree 前,展示动作与目标并取得明确确认。
78
+ - 已确认动作的结果、URL、commit 或失败状态写入 `external_refs`;敏感值不得写入 change 或状态。
79
+ - vendor 内容保持只读;所有路径改写和确认规则由本文件提供。
80
+