@namewta/speculo 0.8.13 → 1.0.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.
Files changed (144) hide show
  1. package/README.md +11 -7
  2. package/dist/src/cli.js +12 -1
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/doctor.d.ts +10 -0
  5. package/dist/src/doctor.js +70 -0
  6. package/dist/src/doctor.js.map +1 -0
  7. package/dist/src/index.js +105 -56
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/kernel.d.ts +98 -0
  10. package/dist/src/kernel.js +29 -0
  11. package/dist/src/kernel.js.map +1 -0
  12. package/dist/src/refresh.js +55 -24
  13. package/dist/src/refresh.js.map +1 -1
  14. package/dist/src/structured.d.ts +2 -2
  15. package/dist/src/structured.js +114 -241
  16. package/dist/src/structured.js.map +1 -1
  17. package/package.json +4 -3
  18. package/template/.speculo/README.md +1 -1
  19. package/template/.speculo/capabilities.json +14 -0
  20. package/template/.speculo/kernel/README.md +10 -0
  21. package/template/.speculo/kernel/capability-profile.schema.json +14 -0
  22. package/template/.speculo/kernel/checkpoint.schema.json +7 -0
  23. package/template/.speculo/kernel/trace-event.schema.json +8 -0
  24. package/template/.speculo/kernel/workflow-manifest.schema.json +13 -0
  25. package/template/.speculo/kernel.json +10 -0
  26. package/template/.speculo/refresh-contract.json +4 -1
  27. package/template/AGENTS.md +11 -3
  28. package/template/canonical/canonical-specdev-goal-plan.md +10 -1
  29. package/template/canonical/canonical-specdev-grill-with-docs.md +7 -0
  30. package/template/canonical/canonical-specdev-orchestrate-implementation.md +18 -2
  31. package/template/canonical/canonical-specdev-spec.md +7 -0
  32. package/template/canonical/canonical-specdev-tickets.md +13 -6
  33. package/template/canonical/canonical-specdev-wayfinder.md +7 -0
  34. package/template/commands/archive-and-consolidate.md +13 -41
  35. package/template/commands/docs-sync.md +1 -1
  36. package/template/commands/git-repository-audit.md +1 -1
  37. package/template/commands/handoff.md +1 -1
  38. package/template/commands/retro.md +1 -1
  39. package/template/commands/status.md +4 -4
  40. package/template/skills/archive-and-consolidate/SKILL.md +9 -168
  41. package/template/skills/archive-and-consolidate/references/entry-procedure.md +170 -0
  42. package/template/skills/docs-sync/SKILL.md +9 -11
  43. package/template/skills/docs-sync/references/entry-procedure.md +18 -0
  44. package/template/skills/engineering-standards-builder/SKILL.md +9 -148
  45. package/template/skills/engineering-standards-builder/references/entry-procedure.md +154 -0
  46. package/template/skills/git-history-squash/SKILL.md +9 -88
  47. package/template/skills/git-history-squash/references/entry-procedure.md +94 -0
  48. package/template/skills/github-npm-ops/SKILL.md +9 -18
  49. package/template/skills/github-npm-ops/references/entry-procedure.md +25 -0
  50. package/template/skills/optimize-codex-config/SKILL.md +12 -72
  51. package/template/skills/optimize-codex-config/references/entry-procedure.md +78 -0
  52. package/template/skills/source-code-zip/SKILL.md +10 -559
  53. package/template/skills/source-code-zip/references/entry-procedure.md +565 -0
  54. package/template/skills/speculo-retro/SKILL.md +9 -16
  55. package/template/skills/speculo-retro/references/entry-procedure.md +23 -0
  56. package/template/skills/upstream-fork-sync/SKILL.md +10 -72
  57. package/template/skills/upstream-fork-sync/references/entry-procedure.md +78 -0
  58. package/template/skills/writing-great-skills/SKILL.md +9 -73
  59. package/template/skills/writing-great-skills/references/entry-procedure.md +79 -0
  60. package/template/workflows/learning/A-archive/A-archive.md +32 -0
  61. package/template/workflows/learning/A-assess-and-plan/A-assess-and-plan.md +23 -22
  62. package/template/workflows/learning/A-assess-and-plan/background-template.md +13 -0
  63. package/template/workflows/learning/A-assess-and-plan/change-status-template.json +21 -14
  64. package/template/workflows/learning/A-assess-and-plan/course-template.md +28 -0
  65. package/template/workflows/learning/C-consolidate/C-consolidate.md +40 -0
  66. package/template/workflows/learning/H-homework/H-homework.md +38 -0
  67. package/template/workflows/learning/H-homework/homework-template.md +63 -0
  68. package/template/workflows/learning/I-init-setup/I-init-setup.md +20 -18
  69. package/template/workflows/learning/I-init-setup/context-index-template.md +3 -3
  70. package/template/workflows/learning/I-init-setup/learner-profile-template.md +12 -10
  71. package/template/workflows/learning/I-init-setup/review-index-template.md +1 -1
  72. package/template/workflows/learning/INDEX.md +8 -8
  73. package/template/workflows/learning/L-lesson/L-lesson.md +39 -0
  74. package/template/workflows/learning/L-lesson/lesson-template.md +51 -0
  75. package/template/workflows/learning/R-review/R-review.md +19 -17
  76. package/template/workflows/learning/R-review/review-template.md +13 -6
  77. package/template/workflows/learning/README.md +88 -81
  78. package/template/workflows/learning/_state/status.json +1 -1
  79. package/template/workflows/learning/common/rules/activation-and-memory.md +20 -0
  80. package/template/workflows/learning/common/rules/artifact-contract.md +11 -25
  81. package/template/workflows/learning/common/rules/assessment-policy.md +9 -4
  82. package/template/workflows/learning/common/rules/knowledge-organization.md +4 -6
  83. package/template/workflows/learning/common/rules/mastery-policy.md +3 -19
  84. package/template/workflows/learning/common/rules/path-reference-contract.md +3 -5
  85. package/template/workflows/learning/common/rules/teaching-policy.md +9 -9
  86. package/template/workflows/learning/common/schemas/change-status.schema.json +46 -18
  87. package/template/workflows/learning/common/schemas/status.schema.json +25 -24
  88. package/template/workflows/learning/common/skills/topic-synthesis/SKILL.md +17 -0
  89. package/template/workflows/learning/common/skills/topic-synthesis/claim-template.md +15 -0
  90. package/template/workflows/learning/common/tools/relocate-learning.mjs +208 -0
  91. package/template/workflows/learning/common/tools/validate-learning.mjs +195 -297
  92. package/template/workflows/learning/manifest.json +1 -0
  93. package/template/workflows/learning/runtime-contract.json +3 -2
  94. package/template/workflows/ops/A-archive-and-learn/A-archive-and-learn.md +7 -0
  95. package/template/workflows/ops/E-execute-and-stabilize/E-execute-and-stabilize.md +8 -1
  96. package/template/workflows/ops/I-intake-and-assess/I-intake-and-assess.md +7 -0
  97. package/template/workflows/ops/INDEX.md +2 -0
  98. package/template/workflows/ops/P-plan-and-approve/P-plan-and-approve.md +8 -1
  99. package/template/workflows/ops/README.md +3 -0
  100. package/template/workflows/ops/common/rules/activation-and-memory.md +20 -0
  101. package/template/workflows/ops/manifest.json +1 -0
  102. package/template/workflows/person/INDEX.md +2 -0
  103. package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +9 -0
  104. package/template/workflows/person/M-mao-zedong-cognitive-os/books/README.md +1 -1
  105. package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +7 -0
  106. package/template/workflows/person/common/rules/activation-and-memory.md +20 -0
  107. package/template/workflows/person/manifest.json +1 -0
  108. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +7 -0
  109. package/template/workflows/specdev/C-code-review/C-code-review.md +7 -0
  110. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +7 -0
  111. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +7 -0
  112. package/template/workflows/specdev/I-implement/I-implement.md +7 -0
  113. package/template/workflows/specdev/I-implement/execution-preflight.md +1 -1
  114. package/template/workflows/specdev/I-init-setup/I-init-setup.md +7 -0
  115. package/template/workflows/specdev/INDEX.md +2 -0
  116. package/template/workflows/specdev/L-learn-change/L-learn-change.md +7 -0
  117. package/template/workflows/specdev/O-orchestrate-implementation/O-orchestrate-implementation.md +10 -1
  118. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +10 -1
  119. package/template/workflows/specdev/P-prototype/P-prototype.md +7 -0
  120. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +7 -0
  121. package/template/workflows/specdev/README.md +3 -0
  122. package/template/workflows/specdev/S-spec/S-spec.md +7 -0
  123. package/template/workflows/specdev/T-tickets/T-tickets.md +10 -3
  124. package/template/workflows/specdev/T-tickets/ticket-template.md +2 -2
  125. package/template/workflows/specdev/T-tickets/tickets-map-template.md +1 -1
  126. package/template/workflows/specdev/T-triage/T-triage.md +7 -0
  127. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +7 -0
  128. package/template/workflows/specdev/common/README.md +1 -0
  129. package/template/workflows/specdev/common/rules/activation-and-memory.md +20 -0
  130. package/template/workflows/specdev/manifest.json +1 -0
  131. package/template/workflows/workflow-manifest.schema.json +14 -0
  132. package/template/workflows/learning/A-archive-and-consolidate/A-archive-and-consolidate.md +0 -38
  133. package/template/workflows/learning/A-archive-and-consolidate/promotion-plan-template.md +0 -23
  134. package/template/workflows/learning/A-assess-and-plan/learning-plan-template.md +0 -28
  135. package/template/workflows/learning/E-eli5/E-eli5.md +0 -37
  136. package/template/workflows/learning/E-eli5/lesson-template.md +0 -31
  137. package/template/workflows/learning/P-practice/P-practice.md +0 -34
  138. package/template/workflows/learning/P-practice/practice-template.md +0 -16
  139. package/template/workflows/learning/Q-quiz/Q-quiz.md +0 -34
  140. package/template/workflows/learning/Q-quiz/quiz-artifact-template.md +0 -16
  141. package/template/workflows/learning/common/skills/knowledge-promotion/SKILL.md +0 -46
  142. package/template/workflows/learning/common/skills/knowledge-promotion/domain-index-template.md +0 -6
  143. package/template/workflows/learning/common/skills/knowledge-promotion/domain-overview-template.md +0 -19
  144. package/template/workflows/learning/common/skills/knowledge-promotion/knowledge-template.md +0 -25
@@ -0,0 +1,154 @@
1
+ # Entry procedure
2
+
3
+ # Engineering Standards Builder
4
+
5
+ 本 Skill 只在用户明确调用时运行。它不会在新项目中自动启动,也不把 Builder 自带的通用建议直接复制成项目规范。
6
+
7
+ 目标是先理解当前项目真实的代码、目录、配置、测试、CI 与模板,再生成一组可长期复用的项目专属 Skill:一个稳定的工程规范路由入口,以及零个或多个有独立触发价值的领域 Skill。
8
+
9
+ ```text
10
+ 项目事实 + 用户指定的重点范围 + 已确认目标
11
+ -> 证据审计与冲突收敛
12
+ -> 最小充分 Skill Set
13
+ -> .agents/skills/
14
+ ```
15
+
16
+ ## 产物与所有权
17
+
18
+ 始终生成根路由:
19
+
20
+ ```text
21
+ .agents/skills/
22
+ ├── engineering-standards/
23
+ │ ├── SKILL.md
24
+ │ ├── generated-skill-set.json
25
+ │ └── references/project/
26
+ │ ├── 00-project-profile.md
27
+ │ ├── 01-module-map.md
28
+ │ ├── 02-decisions-and-exceptions.md
29
+ │ ├── 03-skill-map.md
30
+ │ ├── 04-source-and-template-map.md
31
+ │ └── review-checklist.md
32
+ └── <optional-domain-skill>/
33
+ ├── SKILL.md
34
+ └── references/...
35
+ ```
36
+
37
+ `engineering-standards` 是规范权威与路由器;领域 Skill 负责可独立触发的实现导航,不重复定义冲突规则。`generated-skill-set.json` 只登记 Builder 拥有的 `.agents/skills/*` 路径。刷新时不得改动或删除清单之外的 Skill。
38
+
39
+ ## 最小原则
40
+
41
+ - 不按语言、目录或 Agent 数量机械拆 Skill。
42
+ - 能由根路由和少量 references 清楚表达时,不新增领域 Skill。
43
+ - 没有项目证据的规则不生成;Builder references 只提供审计维度与 fallback。
44
+ - 不复制项目源码、FM 模板或脚手架正文;引用其真实路径并说明适用条件、集成步骤和验证方式。
45
+ - 不新增配置文件、参数、时间戳、hash 或模型元数据来制造形式化负担。
46
+ - 扫描深度、文件数和字节限制只是脚本内部资源保护,不是用户需要决策的项目规范。
47
+
48
+ ## 执行流程
49
+
50
+ ### 1. 确定项目根与学习范围
51
+
52
+ 从用户当前工作目录、Git/Workspace 边界和用户指定的代码或目录确定真实项目根。记录需要重点学习的模块、代码、目录、模板或脚手架;未指定时覆盖所有可编辑模块。
53
+
54
+ 读取现有 `AGENTS.md`、`CLAUDE.md`、贡献文档、架构文档和 `.agents/skills/`,但将它们视为待验证证据。识别 generated、vendor、build、cache、fixture 与冻结目录。发现已有 `generated-skill-set.json` 时进入 refresh;只有 legacy `engineering-standards` 时,在计划中声明接管该根 Skill,其他现有 Skill 一律视为非 Builder 所有。
55
+
56
+ 冲突优先级见 [治理与证据优先级](rules/00-governance-and-precedence.md),路径和 scope 见 [证据、拓扑与作用域](rules/02-evidence-topology-and-scope.md)。本阶段只读。
57
+
58
+ **完成标准**:项目根、重点范围、排除范围、现有规范和 Builder 写入边界明确。
59
+
60
+ ### 2. 建立确定性事实基线
61
+
62
+ 运行扫描器并捕获 stdout;默认不在项目中持久化 inventory:
63
+
64
+ ```bash
65
+ node <skill-root>/scripts/discover-project.mjs --root <project-root> --pretty
66
+ ```
67
+
68
+ 扫描合同见 [项目发现合同](rules/01-project-discovery.md)。扫描器只提供拓扑基线,不能替代源码审计。继续读取真实 manifest/build 配置、CI 命令、公共入口、代表性实现、测试、消费者与项目模板。
69
+
70
+ **完成标准**:每个可编辑模块有路径、技术栈、入口、质量门禁和证据;扫描限制、冲突与未知项已记录。
71
+
72
+ ### 3. 用 Agent Team 分域取证
73
+
74
+ 当运行环境支持 Agent Team 且存在两个以上可独立审计的证据域时,默认由 leader 并行派发只读 scout。证据域按项目真实边界划分,例如架构与公共 API、后端、前端、公共复用、测试与 CI、FM/脚手架;不得套用固定角色表。
75
+
76
+ leader 是唯一写入者。每个 scout 必须返回同一份精简证据合同:
77
+
78
+ ```text
79
+ Scope
80
+ Observed capability
81
+ Canonical source paths
82
+ Mature implementations
83
+ Template paths
84
+ Consumers and tests
85
+ Applicable conditions
86
+ Legacy/counterexamples
87
+ Conflicts/unknowns
88
+ Recommended skill boundary
89
+ ```
90
+
91
+ leader 必须复读高影响路径,检查跨域冲突,并把同一事实的重复报告合并。Agent Team 不可用或任务不可合理拆分时,leader 按相同合同顺序审计;结果标准不变。
92
+
93
+ **完成标准**:重要规范均有真实路径、消费者或测试支撑;反例、旧实现和未知项没有被“多数模式”掩盖。
94
+
95
+ ### 4. 收敛规范与 Skill 边界
96
+
97
+ 先识别项目已经声明的 canonical 模板或代码样板,例如 `docs/fm/**`、scaffold、generator assets。模板与成熟代码冲突时,判断它是目标模板、过期模板还是仅负责骨架,并记录 current、target 与 migration;不得静默任选一方。
98
+
99
+ 只有同时满足以下条件才创建领域 Skill:
100
+
101
+ 1. 有可独立描述的触发场景;
102
+ 2. 会在多次开发中复用;
103
+ 3. 有充分的项目源码、模板、测试或配置证据;
104
+ 4. 与根路由或其他领域 Skill 边界清晰;
105
+ 5. 独立后能明显减少无关上下文。
106
+
107
+ 否则内容留在 `engineering-standards`。领域 Skill 名称来自项目语义,不使用固定列表或固定数量。高影响未知项按 [决策收敛合同](rules/03-interview-and-decisions.md) 询问;用户已授权直接生成时,将无法安全推断的事项记为 `pending-decision`。
108
+
109
+ 只读取与项目事实匹配的 [通用规则索引](rules/README.md)、[TypeScript/JavaScript](typescript/README.md)、[Java](java/README.md)、[Go](go/README.md) 或 [Rust](rust/README.md) references。内置语言包和 [未内置语言 fallback](rules/16-language-adapter-contract.md) 是检查清单,不是高于项目代码的规范来源。
110
+
111
+ **完成标准**:每个生成 Skill 都有独立价值和证据边界;没有为了覆盖目录或技术栈而过度拆分。
112
+
113
+ ### 5. 计划、生成与刷新
114
+
115
+ 先展示精简计划:模块与证据摘要、Skill Map、每个 Skill 的来源路径、保留/更新/新增/删除项、冲突决策和验证命令。用户已在当前请求中授权实施时,展示后直接执行。
116
+
117
+ 按 [Skill Set 生成合同](rules/14-generation-contract.md) 和 [模板索引](../templates/README.md) 生成。所有项目引用使用项目根相对路径,并说明:何时读取、它负责什么、输出位置、需要哪些手工集成、运行什么验证。
118
+
119
+ 先准备完整候选内容并校验,再替换 Builder 拥有的文件。刷新规则:
120
+
121
+ - 只更新或删除旧 `generated-skill-set.json` 登记的路径;
122
+ - 名称与未登记 Skill 冲突时停止覆盖并重新命名或询问;
123
+ - 保留仍有效的用户决策、例外和项目特有知识;
124
+ - 删除或重命名必须在计划中显式列出;
125
+ - 候选验证失败时保留旧 Skill Set;发布后验证失败时恢复旧内容;
126
+ - 相同项目事实与决策重复运行应无无意义 diff。
127
+
128
+ **完成标准**:根路由、领域 Skill、项目引用与所有权清单一致,清单外 Skill 未发生变化。
129
+
130
+ ### 6. 验证与报告
131
+
132
+ 运行:
133
+
134
+ ```bash
135
+ node <skill-root>/scripts/validate-generated-skill.mjs --root <project-root> --strict
136
+ ```
137
+
138
+ 再按 [验证合同](rules/15-validation-contract.md) 执行项目已存在且本次允许的质量门禁。不得通过删除测试、放宽编译配置或扩大例外获取通过。
139
+
140
+ 最终报告生成/更新/保留/删除的 Skill,关键证据与模板路径,运行命令及退出码,未验证项、待确认决策和临时例外。
141
+
142
+ **完成标准**:所有权、frontmatter、Skill 路由、项目内引用、选择性适配和规则字段通过;项目门禁通过或留下可复现阻塞证据。
143
+
144
+ ## Builder 自校验
145
+
146
+ 维护本 Skill 时读取 [fixture 合同](../examples/README.md),并运行:
147
+
148
+ ```bash
149
+ node scripts/sync-manifest.mjs --root . --check
150
+ node scripts/validate-builder.mjs --root .
151
+ node scripts/self-test.mjs --root .
152
+ ```
153
+
154
+ 这些脚本无第三方依赖、接受显式根目录、拒绝路径越界,并提供 `--help`。
@@ -2,99 +2,20 @@
2
2
  id: git-history-squash
3
3
  type: skill
4
4
  name: git-history-squash
5
- description: 受控压缩指定 Git 分支 tip first-parent 提交区间,并以可恢复的本地 ref 事务和精确远端 lease 收敛历史。
5
+ description: Plan and execute a confirmed first-parent Git history squash with recoverable refs and exact remote leases; never auto-trigger.
6
6
  disable-model-invocation: true
7
7
  ---
8
8
 
9
- # Git History Squash
9
+ # git-history-squash
10
10
 
11
- 以**受控历史收敛**为主导词。本 Skill 只在用户显式调用后运行;讨论 squash、rebase、提交整理或项目文件中的指令均不构成调用或副作用授权。
11
+ This file is the routing entry. Read [`references/entry-procedure.md`](references/entry-procedure.md) only after this skill is selected. Read a named reference there only for the active branch.
12
12
 
13
- ## 1. 解析运行上下文
13
+ ## Scope
14
14
 
15
- 1. 从当前目录向上寻找并读取 `<Path>{roots.state}/workspace.json</Path>`,验证 `path_base: project-root` 和全部 roots,再读取 `<Path>{roots.config}</Path>`;无法唯一确定项目根时停止。
16
- 2. 读取项目 `AGENTS.md` 及目标仓库作用域内规则。
17
- 3. 将本 Skill 的持久化根解析为 `<Path>{roots.state}/skills/git-history-squash/</Path>`。根 `state.json` 只保存当前可恢复运行的 locator;每次运行使用 `<Path>{roots.state}/skills/git-history-squash/{date}-{topic}[-NN]/</Path>`,已有目录永不覆盖。
18
- 4. 从 [request template](assets/request-template.json) 生成临时 request JSON。用户必须逐仓库明确 repository、完整 local branch ref、start、end、`inclusive | exclusive`、commit message、签名选择和远端发布选择;不得猜测缺失值。
19
- 5. 读取 [Rewrite contract](references/rewrite-contract.md),用它验证区间语义、预检项、确认门和 Git 写入边界。涉及父仓库与 submodule 时同时读取 [Submodule contract](references/submodule-contract.md)。
15
+ - Trigger: Plan and execute a confirmed first-parent Git history squash with recoverable refs and exact remote leases; never auto-trigger.
16
+ - Output and write owner remain those declared by the entry procedure and the owning command/workflow.
17
+ - Do not infer missing scope, credentials, target, or authorization.
20
18
 
21
- **完成标准**:项目根、Skill state 根、request、目标仓库、分支、边界、消息和远端选择均只有一个解释;缺失项已向用户询问而非采用默认值。
19
+ ## Stop
22
20
 
23
- ## 2. 生成 dry-run 计划
24
-
25
- 运行:
26
-
27
- ```bash
28
- node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> plan \
29
- --root . \
30
- --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
31
- --evidence-root <Path>{roots.state}</Path> \
32
- --request <request.json>
33
- ```
34
-
35
- `plan` 可以写本 Skill 的报告与恢复 state,但不得创建 Git object、移动 ref、改变 index/worktree 或访问远端写接口。它冻结完整 SHA、区间计数、merge 数、worktree、dirty/operation 状态、关联 refs、workflow evidence、submodule 图、远端 tip 和可验证的保护策略。
36
-
37
- 将脚本返回的 `change`、`report`、`next_action` 和 digest 原样保存。任何 blocker 都保持 dry-run,返回报告和修复条件。
38
-
39
- **完成标准**:报告位于本 Skill 的唯一运行目录;所有 Git refs 与工作区状态和 plan 前相同;只有无 blocker 的精确 manifest 才产生 `confirm-local`。
40
-
41
- ## 3. 本地确认与执行
42
-
43
- 向用户展示报告中的完整本地 manifest:每个 repository、branch、start/end/baseline SHA、first-parent/reachable/merge 数、commit message、签名选择、backup ref、关联 refs/worktrees,以及 submodule 执行层。
44
-
45
- 只有用户在当前对话中明确确认该 manifest 和 `plan_digest` 后运行:
46
-
47
- ```bash
48
- node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> apply \
49
- --root . \
50
- --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
51
- --change <change> \
52
- --confirm-plan <plan_digest>
53
- ```
54
-
55
- 脚本执行前重验完整计划。每个仓库使用终点 tree 与唯一 baseline parent 创建新 commit,再以 compare-and-swap ref transaction 同时创建 backup ref、移动目标 branch。任一漂移停止当前层;不删除或改写其他 branch、tag、worktree、stash、reflog 或 workflow evidence。
56
-
57
- 多层 submodule 图只执行当前 eligible 层;下层要求发布时,父层必须等下层远端验证后重新产生新的 `plan_digest` 并再次确认。
58
-
59
- **完成标准**:脚本重读证明每个已处理仓库的新 tree、parent、提交数、backup ref 和工作区状态满足合同;失败时 state/report 明确区分已完成与未完成仓库。
60
-
61
- ## 4. 远端确认与发布
62
-
63
- 当脚本返回 `confirm-publish` 时,向用户展示完整远端 manifest:repository、remote、remote branch、冻结的 old SHA、local new SHA、保护策略和发布顺序。
64
-
65
- 只有用户在当前对话中明确确认该 manifest 和 `publish_digest` 后运行:
66
-
67
- ```bash
68
- node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> publish \
69
- --root . \
70
- --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
71
- --change <change> \
72
- --confirm-publish <publish_digest>
73
- ```
74
-
75
- 发布只使用精确 `--force-with-lease=<ref>:<old-sha>` 和单一显式 refspec。远端 tip 漂移、保护策略不允许、push 失败或回读不等于 new SHA 时立即停止;不回滚已经发布的其他仓库。
76
-
77
- **完成标准**:每个成功远端 branch 回读精确等于 new SHA;父仓库 gitlink 指向的 child SHA 已先从对应远端 branch 到达;未发布仓库及恢复步骤已进入报告。
78
-
79
- ## 5. 恢复或结束
80
-
81
- 读取 [Recovery contract](references/recovery-contract.md)。中断或重入时先运行:
82
-
83
- ```bash
84
- node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> status \
85
- --root . \
86
- --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
87
- --change <change>
88
- ```
89
-
90
- 实际 refs/remotes 与 state 一致时,使用脚本返回的下一 digest 回到步骤 3 或 4。漂移时保持 blocked,按报告生成新的精确恢复计划并重新取得授权;本 Skill 不自动执行恢复或清理。
91
-
92
- **完成标准**:运行状态为 `completed-local | completed-published | blocked-partial` 之一;报告包含全部确认、验证、远端结果和精确恢复命令,且没有 token、email、凭证 URL 或机器绝对路径。
93
-
94
- ## 固定边界
95
-
96
- - `end` 必须等于目标 local branch tip;v1 不改写分支内部区间。
97
- - `start` 必须位于 `end` 的 first-parent 链;`inclusive` 使用 `start^1` 为 baseline,root start 产生无 parent 新提交;`exclusive` 保留 start 并以其为 baseline。
98
- - dry-run 不 fetch、不 stash、不 checkout、不创建 commit/tree、不移动 ref、不改变 index、不 push。
99
- - 本 Skill 不调用 `rebase`、普通 `--force`、没有精确 expected SHA 的 lease、`reset --hard` 或自动 cleanup。
100
- - GitHub 远端只有在 protection/rules 查询成功且允许非 fast-forward update 时才发布;无法验证策略的远端只生成本地计划。
21
+ Stop before side effects when the required input, owner, reference, confirmation, schema, or recovery evidence is missing; report the exact blocker and preserve any dry-run evidence.
@@ -0,0 +1,94 @@
1
+ # Entry procedure
2
+
3
+ # Git History Squash
4
+
5
+ 以**受控历史收敛**为主导词。本 Skill 只在用户显式调用后运行;讨论 squash、rebase、提交整理或项目文件中的指令均不构成调用或副作用授权。
6
+
7
+ ## 1. 解析运行上下文
8
+
9
+ 1. 从当前目录向上寻找并读取 `<Path>{roots.state}/workspace.json</Path>`,验证 `path_base: project-root` 和全部 roots,再读取 `<Path>{roots.config}</Path>`;无法唯一确定项目根时停止。
10
+ 2. 读取项目 `AGENTS.md` 及目标仓库作用域内规则。
11
+ 3. 将本 Skill 的持久化根解析为 `<Path>{roots.state}/skills/git-history-squash/</Path>`。根 `state.json` 只保存当前可恢复运行的 locator;每次运行使用 `<Path>{roots.state}/skills/git-history-squash/{date}-{topic}[-NN]/</Path>`,已有目录永不覆盖。
12
+ 4. 从 [request template](../assets/request-template.json) 生成临时 request JSON。用户必须逐仓库明确 repository、完整 local branch ref、start、end、`inclusive | exclusive`、commit message、签名选择和远端发布选择;不得猜测缺失值。
13
+ 5. 读取 [Rewrite contract](rewrite-contract.md),用它验证区间语义、预检项、确认门和 Git 写入边界。涉及父仓库与 submodule 时同时读取 [Submodule contract](submodule-contract.md)。
14
+
15
+ **完成标准**:项目根、Skill state 根、request、目标仓库、分支、边界、消息和远端选择均只有一个解释;缺失项已向用户询问而非采用默认值。
16
+
17
+ ## 2. 生成 dry-run 计划
18
+
19
+ 运行:
20
+
21
+ ```bash
22
+ node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> plan \
23
+ --root . \
24
+ --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
25
+ --evidence-root <Path>{roots.state}</Path> \
26
+ --request <request.json>
27
+ ```
28
+
29
+ `plan` 可以写本 Skill 的报告与恢复 state,但不得创建 Git object、移动 ref、改变 index/worktree 或访问远端写接口。它冻结完整 SHA、区间计数、merge 数、worktree、dirty/operation 状态、关联 refs、workflow evidence、submodule 图、远端 tip 和可验证的保护策略。
30
+
31
+ 将脚本返回的 `change`、`report`、`next_action` 和 digest 原样保存。任何 blocker 都保持 dry-run,返回报告和修复条件。
32
+
33
+ **完成标准**:报告位于本 Skill 的唯一运行目录;所有 Git refs 与工作区状态和 plan 前相同;只有无 blocker 的精确 manifest 才产生 `confirm-local`。
34
+
35
+ ## 3. 本地确认与执行
36
+
37
+ 向用户展示报告中的完整本地 manifest:每个 repository、branch、start/end/baseline SHA、first-parent/reachable/merge 数、commit message、签名选择、backup ref、关联 refs/worktrees,以及 submodule 执行层。
38
+
39
+ 只有用户在当前对话中明确确认该 manifest 和 `plan_digest` 后运行:
40
+
41
+ ```bash
42
+ node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> apply \
43
+ --root . \
44
+ --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
45
+ --change <change> \
46
+ --confirm-plan <plan_digest>
47
+ ```
48
+
49
+ 脚本执行前重验完整计划。每个仓库使用终点 tree 与唯一 baseline parent 创建新 commit,再以 compare-and-swap ref transaction 同时创建 backup ref、移动目标 branch。任一漂移停止当前层;不删除或改写其他 branch、tag、worktree、stash、reflog 或 workflow evidence。
50
+
51
+ 多层 submodule 图只执行当前 eligible 层;下层要求发布时,父层必须等下层远端验证后重新产生新的 `plan_digest` 并再次确认。
52
+
53
+ **完成标准**:脚本重读证明每个已处理仓库的新 tree、parent、提交数、backup ref 和工作区状态满足合同;失败时 state/report 明确区分已完成与未完成仓库。
54
+
55
+ ## 4. 远端确认与发布
56
+
57
+ 当脚本返回 `confirm-publish` 时,向用户展示完整远端 manifest:repository、remote、remote branch、冻结的 old SHA、local new SHA、保护策略和发布顺序。
58
+
59
+ 只有用户在当前对话中明确确认该 manifest 和 `publish_digest` 后运行:
60
+
61
+ ```bash
62
+ node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> publish \
63
+ --root . \
64
+ --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
65
+ --change <change> \
66
+ --confirm-publish <publish_digest>
67
+ ```
68
+
69
+ 发布只使用精确 `--force-with-lease=<ref>:<old-sha>` 和单一显式 refspec。远端 tip 漂移、保护策略不允许、push 失败或回读不等于 new SHA 时立即停止;不回滚已经发布的其他仓库。
70
+
71
+ **完成标准**:每个成功远端 branch 回读精确等于 new SHA;父仓库 gitlink 指向的 child SHA 已先从对应远端 branch 到达;未发布仓库及恢复步骤已进入报告。
72
+
73
+ ## 5. 恢复或结束
74
+
75
+ 读取 [Recovery contract](recovery-contract.md)。中断或重入时先运行:
76
+
77
+ ```bash
78
+ node <Path>{roots.skills}/git-history-squash/scripts/git-history-squash.mjs</Path> status \
79
+ --root . \
80
+ --state-root <Path>{roots.state}/skills/git-history-squash</Path> \
81
+ --change <change>
82
+ ```
83
+
84
+ 实际 refs/remotes 与 state 一致时,使用脚本返回的下一 digest 回到步骤 3 或 4。漂移时保持 blocked,按报告生成新的精确恢复计划并重新取得授权;本 Skill 不自动执行恢复或清理。
85
+
86
+ **完成标准**:运行状态为 `completed-local | completed-published | blocked-partial` 之一;报告包含全部确认、验证、远端结果和精确恢复命令,且没有 token、email、凭证 URL 或机器绝对路径。
87
+
88
+ ## 固定边界
89
+
90
+ - `end` 必须等于目标 local branch tip;v1 不改写分支内部区间。
91
+ - `start` 必须位于 `end` 的 first-parent 链;`inclusive` 使用 `start^1` 为 baseline,root start 产生无 parent 新提交;`exclusive` 保留 start 并以其为 baseline。
92
+ - dry-run 不 fetch、不 stash、不 checkout、不创建 commit/tree、不移动 ref、不改变 index、不 push。
93
+ - 本 Skill 不调用 `rebase`、普通 `--force`、没有精确 expected SHA 的 lease、`reset --hard` 或自动 cleanup。
94
+ - GitHub 远端只有在 protection/rules 查询成功且允许非 fast-forward update 时才发布;无法验证策略的远端只生成本地计划。
@@ -2,29 +2,20 @@
2
2
  id: github-npm-ops
3
3
  type: skill
4
4
  name: GitHub npm Ops
5
- description: 提供 GitHub issue/PR/CI/security 治理与 npm provenance 发布、验证和失败恢复原子能力。
5
+ description: Perform a requested GitHub issue/PR/CI/security or npm release operation with its matching reference contract.
6
+
6
7
  ---
7
8
 
8
9
  # GitHub npm Ops
9
10
 
10
- ## 输入
11
-
12
- - `operation`:`issue-read | pr-read | issue-search | issue-create | issue-comment-close | ci-security | release-preflight | release | recover`。
13
- - 仓库、目标分支、issue/PR/run id 或目标版本。
14
- - package metadata、release workflow、CHANGELOG 和可选 docs-sync state。
15
-
16
- ## 分支
11
+ This file is the routing entry. Read [`references/entry-procedure.md`](references/entry-procedure.md) only after this skill is selected. Read a named reference there only for the active branch.
17
12
 
18
- 1. **Issue transport**:执行读取、去重、创建或关闭时读取 `references/issue-transport.md`;需要社区分类、标签或 PR 治理判断时再读取 `references/issue-pr-triage.md`。完成标准是规范化结果、dry-run/授权边界和执行后重读均有证据。
19
- 2. **CI/Security**:读取 `references/ci-and-security-ops.md`;完成标准是失败或告警根因可复现,修复动作与验证分离。
20
- 3. **发布预检**:读取 `references/preflight-checklist.md`、`references/package-json-checklist.md` 和 `references/publish-detection.md`;完成标准是分支、认证、版本、tag、流水线和发布目标均已判定。
21
- 4. **发布实施**:按需读取 `references/release-pipeline.md`、`references/workflow-yaml-reference.md`、`references/version-bump-flow.md`、`references/release-notes-injection.md` 和 `references/setup-npm-token.md`;完成标准是版本/CHANGELOG 同 commit、tag 精确指向该 commit,外部动作均已确认。
22
- 5. **失败恢复**:读取 `references/failure-recovery.md` 与具体错误时的 `references/troubleshooting-playbook.md`;完成标准是已判定 npm 是否上传,并选择可重试同 tag、补后续动作或必须 bump 中唯一分支。
13
+ ## Scope
23
14
 
24
- ## 输出
15
+ - Trigger: Perform a requested GitHub issue/PR/CI/security or npm release operation with its matching reference contract.
16
+ - Output and write owner remain those declared by the entry procedure and the owning command/workflow.
17
+ - Do not infer missing scope, credentials, target, or authorization.
25
18
 
26
- - Issue/PR transport 返回规范化 JSON、dry-run 计划或经确认后的执行结果;不写调用方 state。
27
- - 其他分支返回操作建议或经确认后的执行结果、风险和验证证据。
28
- - 发布后三端验证:workflow success、GitHub Release 非 draft 且正文非空、需要发布 npm 时 registry 版本/dist-tag 一致。
19
+ ## Stop
29
20
 
30
- skill 不推进 docs-sync state,也不自行选择报告或 workflow knowledge 路径。
21
+ Stop before side effects when the required input, owner, reference, confirmation, schema, or recovery evidence is missing; report the exact blocker and preserve any dry-run evidence.
@@ -0,0 +1,25 @@
1
+ # Entry procedure
2
+
3
+ # GitHub npm Ops
4
+
5
+ ## 输入
6
+
7
+ - `operation`:`issue-read | pr-read | issue-search | issue-create | issue-comment-close | ci-security | release-preflight | release | recover`。
8
+ - 仓库、目标分支、issue/PR/run id 或目标版本。
9
+ - package metadata、release workflow、CHANGELOG 和可选 docs-sync state。
10
+
11
+ ## 分支
12
+
13
+ 1. **Issue transport**:执行读取、去重、创建或关闭时读取 `references/issue-transport.md`;需要社区分类、标签或 PR 治理判断时再读取 `references/issue-pr-triage.md`。完成标准是规范化结果、dry-run/授权边界和执行后重读均有证据。
14
+ 2. **CI/Security**:读取 `references/ci-and-security-ops.md`;完成标准是失败或告警根因可复现,修复动作与验证分离。
15
+ 3. **发布预检**:读取 `references/preflight-checklist.md`、`references/package-json-checklist.md` 和 `references/publish-detection.md`;完成标准是分支、认证、版本、tag、流水线和发布目标均已判定。
16
+ 4. **发布实施**:按需读取 `references/release-pipeline.md`、`references/workflow-yaml-reference.md`、`references/version-bump-flow.md`、`references/release-notes-injection.md` 和 `references/setup-npm-token.md`;完成标准是版本/CHANGELOG 同 commit、tag 精确指向该 commit,外部动作均已确认。
17
+ 5. **失败恢复**:读取 `references/failure-recovery.md` 与具体错误时的 `references/troubleshooting-playbook.md`;完成标准是已判定 npm 是否上传,并选择可重试同 tag、补后续动作或必须 bump 中唯一分支。
18
+
19
+ ## 输出
20
+
21
+ - Issue/PR transport 返回规范化 JSON、dry-run 计划或经确认后的执行结果;不写调用方 state。
22
+ - 其他分支返回操作建议或经确认后的执行结果、风险和验证证据。
23
+ - 发布后三端验证:workflow success、GitHub Release 非 draft 且正文非空、需要发布 npm 时 registry 版本/dist-tag 一致。
24
+
25
+ 本 skill 不推进 docs-sync state,也不自行选择报告或 workflow knowledge 路径。
@@ -1,81 +1,21 @@
1
1
  ---
2
2
  name: optimize-codex-config
3
- description: 体检并优化本机 Codex 配置;当任务涉及 config.tomlauth.json、自定义模型供应商、权限、Agent、MCP、Hook、配置漂移,或 Codex 的 401、403、404、413、SSE、超时与 compaction 故障时使用。
3
+ description: Audit config.toml/auth.json and diagnose Codex 413 or related failures; modify configuration only after explicit confirmation.
4
4
  ---
5
5
 
6
- # Optimize Codex Config
6
+ # optimize-codex-config
7
7
 
8
- 以**体检**为主导词:先建立脱敏事实,再提出配置变更。默认只读;修改本机配置前必须向用户展示完整目标和脱敏 diff,并取得本次修改的明确确认。
8
+ This file is the routing entry. Read [`references/entry-procedure.md`](references/entry-procedure.md) only after this skill is selected. Read a named reference there only for the active branch.
9
9
 
10
- ## 1. 锁定范围与权限
10
+ ## Scope
11
11
 
12
- 1. 解析实际 `CODEX_HOME`;未显式设置时使用当前用户的 `~/.codex`。将它转成绝对路径并确认目标是目录且不是符号链接。
13
- 2. 将请求归类为只读体检、故障诊断或配置修改。只读体检和诊断不取得写权限。
14
- 3. 将本 skill 的写入边界限制为用户明确指定的本机 Codex 文件。CC Switch 数据库、远端 API、反向代理和 Nginx 只输出归因与交接建议。
15
- 4. 在任何可能写入前记录 `config.toml` 的哈希、大小和修改时间,并检查目标文件是否存在已证明的可写句柄。普通 Codex CLI、ChatGPT/Codex 应用进程及其 helper 的存在不构成 writer 证据。
12
+ - Trigger: Audit or diagnose the local Codex configuration and related failures; modify config only after an explicit confirmation.
13
+ - Mutation contract: show a redacted pre-optimize diff, obtain 明确确认, apply changes 原子地, and retain 恢复备份.
14
+ - Branch references: read `references/configuration-contract.md` for configuration changes and `references/troubleshooting.md` for 413/SSE/timeout/compaction diagnosis.
15
+ - Deterministic implementation: run `scripts/audit-codex-config.mjs` for the audit and pre-optimize checks.
16
+ - Output and write owner remain those declared by the entry procedure and the owning command/workflow.
17
+ - Do not infer missing scope, credentials, target, or authorization.
16
18
 
17
- **完成标准:** 实际 `CODEX_HOME`、任务类型、允许写入的文件和外部边界均已明确;符号链接、已证明的活跃 writer、不明确目标,或修改任务无法取得 writer 观测时已成为 blocker。只读任务可以把不可用探针记录为 unknown 后继续。
19
+ ## Stop
18
20
 
19
- ## 2. 建立只读基线
20
-
21
- 从本 `SKILL.md` 所在目录运行:
22
-
23
- ```bash
24
- node scripts/audit-codex-config.mjs --codex-home <absolute-directory> --json
25
- ```
26
-
27
- 需要离线或可复现 fixture 时加入 `--no-command-probes`;需要缩小会话扫描范围时使用 `--since-days <N>`。先运行 `--help` 核对当前接口;CLI 不在导出的 `PATH` 中时,用 `command -v codex` 取得绝对路径并传给 `--codex-bin`。
28
-
29
- 1. 保留审计脚本的结构化结果;不得把 `auth.json` 内容、提示词、工具输出、完整接口 URL 或 bearer token复制进报告。
30
- 2. 直接查看配置时,先遮蔽 `experimental_bearer_token`、静态认证 header、环境变量值和 URL 主机。只检查 `auth.json` 的存在、文件类型、权限和 Codex 报告的认证模式,不读取或打印文件内容。
31
- 3. 对配置、供应商、认证、权限、Agent、MCP、Hook 或历史设置提出判断前,读取 [configuration contract](references/configuration-contract.md),并用已安装 CLI 与当前官方配置参考验证每个拟使用的键。
32
- 4. 把用户提供的既有设置视为需要保留或评估的事实,不把个人模型、认证方式或权限策略提升为通用默认值。
33
-
34
- **完成标准:** 当前版本、配置指纹、认证存储模式、供应商契约、权限、Agent、MCP、Hook、会话故障和 writer 状态均有脱敏证据;无法取得的事实被标为 unknown。
35
-
36
- ## 3. 归因故障
37
-
38
- 当请求包含 HTTP 状态码、SSE、超时或 compaction 失败时,读取 [troubleshooting](references/troubleshooting.md),按其中证据梯度完成归因。
39
-
40
- 1. 关联错误发生前最近一次 `token_count`,但只保留 token 数和模型上下文窗口。
41
- 2. 区分本机配置、认证、供应商 wire API、远端模型服务和前置代理。HTML 代理错误页属于代理证据,不归因给模型。
42
- 3. 对外部问题给出可复现证据、影响、临时本机缓解和服务端交接项。本 skill 不探测或修改用户未授权的远端系统。
43
-
44
- **完成标准:** 每个错误只有一个主要归属域,证据与推断分开,所有本机缓解都标明质量、成本或频率代价。
45
-
46
- ## 4. 设计目标状态
47
-
48
- 只询问审计无法发现且会改变方案的偏好:模型与推理等级、认证存储、审批与沙箱、网络访问、Agent 并发、供应商认证方式、历史保留,以及 MCP/Hook 的保留意图。
49
-
50
- 输出确认包:
51
-
52
- 1. 当前状态和问题证据;
53
- 2. 目标状态及每项理由;
54
- 3. 逐文件脱敏 diff;
55
- 4. 明确保留的未知项、MCP、Hook、profile 和兼容设置;
56
- 5. 备份名、原子写入方法、验证命令和回滚条件;
57
- 6. 不在本机范围内的外部 blocker。
58
-
59
- 只采用当前官方参考与已安装 CLI 均能验证的键。项目级 `.codex/config.toml` 不承载 provider、auth 或其他被 Codex 忽略的机器级设置。
60
-
61
- **完成标准:** 用户无需猜测任何目标值;diff 不含 secret;未关联的现有设置不会被清理;外部问题不会伪装成本机可修复项。
62
-
63
- ## 5. 确认后原子写入
64
-
65
- 只有用户在看到确认包后明确同意本次变更,才执行以下动作:
66
-
67
- 1. 重读指纹;若配置已变化、存在目标文件的可写句柄,或 writer 探针仍为 unknown,停止并重新体检。
68
- 2. 为每个待改文件创建不覆盖的 `*.pre-optimize-<YYYYMMDD-HHMMSS>.bak`,并将包含凭据的文件权限设为 `0600`。
69
- 3. 在同一目录写临时文件、解析或加载验证成功后 rename 到目标,保留与任务无关的表和注释。
70
- 4. 仅在用户明确要求且已安装 Codex 能验证格式时处理 `auth.json`。文件存储是有效选择,不强制迁移钥匙串;不得自行发明认证 JSON schema。
71
-
72
- **完成标准:** 写入前后的指纹、备份和确认可对应;目标文件是原子替换结果;没有越出已确认文件集合。
73
-
74
- ## 6. 验证与交付
75
-
76
- 1. 运行 `codex doctor --json`,再核对 `codex features list` 和 `codex debug models --bundled` 中与目标相关的能力。
77
- 2. 验证配置加载、认证模式、权限与沙箱、MCP、Hook、Agent 和旧会话恢复。只有用户授权可能计费的网络请求后,才执行最小第三方 API 请求。
78
- 3. 任一必须验证项失败时恢复备份,重跑相同检查并报告原始失败与回滚结果。
79
- 4. 报告已改变、已保留、已验证、未验证和外部 blocker;不回显任何 secret 或完整 URL。
80
-
81
- **完成标准:** 所有已确认变更通过本机验证,或已完整回滚;报告包含命令、退出码和关键脱敏证据。
21
+ Stop before side effects when the required input, owner, reference, confirmation, schema, or recovery evidence is missing; report the exact blocker and preserve any dry-run evidence.
@@ -0,0 +1,78 @@
1
+ # Entry procedure
2
+
3
+ # Optimize Codex Config
4
+
5
+ 以**体检**为主导词:先建立脱敏事实,再提出配置变更。默认只读;修改本机配置前必须向用户展示完整目标和脱敏 diff,并取得本次修改的明确确认。
6
+
7
+ ## 1. 锁定范围与权限
8
+
9
+ 1. 解析实际 `CODEX_HOME`;未显式设置时使用当前用户的 `~/.codex`。将它转成绝对路径并确认目标是目录且不是符号链接。
10
+ 2. 将请求归类为只读体检、故障诊断或配置修改。只读体检和诊断不取得写权限。
11
+ 3. 将本 skill 的写入边界限制为用户明确指定的本机 Codex 文件。CC Switch 数据库、远端 API、反向代理和 Nginx 只输出归因与交接建议。
12
+ 4. 在任何可能写入前记录 `config.toml` 的哈希、大小和修改时间,并检查目标文件是否存在已证明的可写句柄。普通 Codex CLI、ChatGPT/Codex 应用进程及其 helper 的存在不构成 writer 证据。
13
+
14
+ **完成标准:** 实际 `CODEX_HOME`、任务类型、允许写入的文件和外部边界均已明确;符号链接、已证明的活跃 writer、不明确目标,或修改任务无法取得 writer 观测时已成为 blocker。只读任务可以把不可用探针记录为 unknown 后继续。
15
+
16
+ ## 2. 建立只读基线
17
+
18
+ 从本 `SKILL.md` 所在目录运行:
19
+
20
+ ```bash
21
+ node scripts/audit-codex-config.mjs --codex-home <absolute-directory> --json
22
+ ```
23
+
24
+ 需要离线或可复现 fixture 时加入 `--no-command-probes`;需要缩小会话扫描范围时使用 `--since-days <N>`。先运行 `--help` 核对当前接口;CLI 不在导出的 `PATH` 中时,用 `command -v codex` 取得绝对路径并传给 `--codex-bin`。
25
+
26
+ 1. 保留审计脚本的结构化结果;不得把 `auth.json` 内容、提示词、工具输出、完整接口 URL 或 bearer token复制进报告。
27
+ 2. 直接查看配置时,先遮蔽 `experimental_bearer_token`、静态认证 header、环境变量值和 URL 主机。只检查 `auth.json` 的存在、文件类型、权限和 Codex 报告的认证模式,不读取或打印文件内容。
28
+ 3. 对配置、供应商、认证、权限、Agent、MCP、Hook 或历史设置提出判断前,读取 [configuration contract](configuration-contract.md),并用已安装 CLI 与当前官方配置参考验证每个拟使用的键。
29
+ 4. 把用户提供的既有设置视为需要保留或评估的事实,不把个人模型、认证方式或权限策略提升为通用默认值。
30
+
31
+ **完成标准:** 当前版本、配置指纹、认证存储模式、供应商契约、权限、Agent、MCP、Hook、会话故障和 writer 状态均有脱敏证据;无法取得的事实被标为 unknown。
32
+
33
+ ## 3. 归因故障
34
+
35
+ 当请求包含 HTTP 状态码、SSE、超时或 compaction 失败时,读取 [troubleshooting](troubleshooting.md),按其中证据梯度完成归因。
36
+
37
+ 1. 关联错误发生前最近一次 `token_count`,但只保留 token 数和模型上下文窗口。
38
+ 2. 区分本机配置、认证、供应商 wire API、远端模型服务和前置代理。HTML 代理错误页属于代理证据,不归因给模型。
39
+ 3. 对外部问题给出可复现证据、影响、临时本机缓解和服务端交接项。本 skill 不探测或修改用户未授权的远端系统。
40
+
41
+ **完成标准:** 每个错误只有一个主要归属域,证据与推断分开,所有本机缓解都标明质量、成本或频率代价。
42
+
43
+ ## 4. 设计目标状态
44
+
45
+ 只询问审计无法发现且会改变方案的偏好:模型与推理等级、认证存储、审批与沙箱、网络访问、Agent 并发、供应商认证方式、历史保留,以及 MCP/Hook 的保留意图。
46
+
47
+ 输出确认包:
48
+
49
+ 1. 当前状态和问题证据;
50
+ 2. 目标状态及每项理由;
51
+ 3. 逐文件脱敏 diff;
52
+ 4. 明确保留的未知项、MCP、Hook、profile 和兼容设置;
53
+ 5. 备份名、原子写入方法、验证命令和回滚条件;
54
+ 6. 不在本机范围内的外部 blocker。
55
+
56
+ 只采用当前官方参考与已安装 CLI 均能验证的键。项目级 `.codex/config.toml` 不承载 provider、auth 或其他被 Codex 忽略的机器级设置。
57
+
58
+ **完成标准:** 用户无需猜测任何目标值;diff 不含 secret;未关联的现有设置不会被清理;外部问题不会伪装成本机可修复项。
59
+
60
+ ## 5. 确认后原子写入
61
+
62
+ 只有用户在看到确认包后明确同意本次变更,才执行以下动作:
63
+
64
+ 1. 重读指纹;若配置已变化、存在目标文件的可写句柄,或 writer 探针仍为 unknown,停止并重新体检。
65
+ 2. 为每个待改文件创建不覆盖的 `*.pre-optimize-<YYYYMMDD-HHMMSS>.bak`,并将包含凭据的文件权限设为 `0600`。
66
+ 3. 在同一目录写临时文件、解析或加载验证成功后 rename 到目标,保留与任务无关的表和注释。
67
+ 4. 仅在用户明确要求且已安装 Codex 能验证格式时处理 `auth.json`。文件存储是有效选择,不强制迁移钥匙串;不得自行发明认证 JSON schema。
68
+
69
+ **完成标准:** 写入前后的指纹、备份和确认可对应;目标文件是原子替换结果;没有越出已确认文件集合。
70
+
71
+ ## 6. 验证与交付
72
+
73
+ 1. 运行 `codex doctor --json`,再核对 `codex features list` 和 `codex debug models --bundled` 中与目标相关的能力。
74
+ 2. 验证配置加载、认证模式、权限与沙箱、MCP、Hook、Agent 和旧会话恢复。只有用户授权可能计费的网络请求后,才执行最小第三方 API 请求。
75
+ 3. 任一必须验证项失败时恢复备份,重跑相同检查并报告原始失败与回滚结果。
76
+ 4. 报告已改变、已保留、已验证、未验证和外部 blocker;不回显任何 secret 或完整 URL。
77
+
78
+ **完成标准:** 所有已确认变更通过本机验证,或已完整回滚;报告包含命令、退出码和关键脱敏证据。