From 637b4d7e64232af4447aaeb0b9b53b73af1328a4 Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Thu, 10 Sep 2026 00:07:58 -0400 Subject: [PATCH] docs: correct what the third preset made stale, and declare a version Four things a 0.1.0 tag would otherwise have shipped as wrong. The hook contract did not mention the standards preset at all. That document exists to say honestly, per requirement, what is specified and what is shipped, so a silent omission is the failure it is designed to prevent. It now names the preset and says plainly that it is not an adapter for anything the contract specifies: it reports a project's own declared checks after a commit, a different axis from the freeze, merge and continuity behaviour, and it blocks nothing. That is a deliberate specification baseline update; no requirement changed. platforms.md still said the presets "use five groups". Three of them register six. That was a factual error, not wording, and the Chinese mirror carried it too. The user-facing hook status still read "continuity + checkpoints", so the page advertised two presets while shipping three. Nothing carried a version. The installed copy now ships a VERSION file and --check-hooks reports it, which is the whole requirement: a user can tell which release a project has. No frontmatter change, so no host is asked to tolerate an unknown key, and no comparison or migration machinery, which would be more than the question needs. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016cCs5DdUjLDkP8V3Z5x6XH --- README.md | 2 +- README.zh-CN.md | 2 +- dist/claude-code/structured-coding/README.md | 2 +- .../structured-coding/README.zh-CN.md | 2 +- dist/claude-code/structured-coding/VERSION | 1 + .../references/hook-contract.md | 2 +- .../structured-coding/references/platforms.md | 4 ++-- .../references/platforms.zh-CN.md | 4 ++-- dist/codex/structured-coding/README.md | 2 +- dist/codex/structured-coding/README.zh-CN.md | 2 +- dist/codex/structured-coding/VERSION | 1 + .../references/hook-contract.md | 2 +- .../structured-coding/references/platforms.md | 4 ++-- .../references/platforms.zh-CN.md | 4 ++-- dist/structured-coding-claude-code.zip | Bin 111861 -> 112311 bytes dist/structured-coding-codex.zip | Bin 112205 -> 112655 bytes docs/content.en.json | 4 ++-- docs/content.zh-CN.json | 4 ++-- docs/index.html | 2 +- docs/index.zh-CN.html | 2 +- scripts/build_packages.py | 1 + scripts/hook_install.py | 6 ++++-- scripts/test_hook_presets.py | 2 ++ scripts/test_standards.py | 11 +++++++++++ structured-coding/README.md | 2 +- structured-coding/README.zh-CN.md | 2 +- structured-coding/VERSION | 1 + structured-coding/references/hook-contract.md | 2 +- structured-coding/references/platforms.md | 4 ++-- .../references/platforms.zh-CN.md | 4 ++-- translations.json | 18 +++++++++--------- 31 files changed, 59 insertions(+), 40 deletions(-) create mode 100644 dist/claude-code/structured-coding/VERSION create mode 100644 dist/codex/structured-coding/VERSION create mode 100644 structured-coding/VERSION diff --git a/README.md b/README.md index ab4f8d4..eb270b0 100644 --- a/README.md +++ b/README.md @@ -183,7 +183,7 @@ Open the part relevant to your current question. Use the resource links above fo
Optional hooks: installation, coverage, and limits -

OPTIONAL CONTINUITY + CHECKPOINTS · NO MERGE GUARD

Choose continuity for compact recovery, checkpoints for commit/review reminders, or both. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.

Choose your optional presets

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
+

OPTIONAL CONTINUITY + CHECKPOINTS + STANDARDS · NO MERGE GUARD

Choose continuity for compact recovery, checkpoints for commit/review reminders, standards to run your declared checks after a commit, or any combination. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.

Choose your optional presets

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --hooks continuity checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --check-hooks
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 5810ce3..21d4f29 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -183,7 +183,7 @@ scope 按工具分别设置,因为正确答案本来就因工具而异:只
 
可选 hook:安装、覆盖范围和限制 -

可选 CONTINUITY + CHECKPOINTS · 尚无 MERGE GUARD

需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,也可同时安装。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。

选择需要的 preset

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
+

可选 CONTINUITY + CHECKPOINTS + STANDARDS · 无 MERGE GUARD

需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,需要在 commit 后跑你声明的检查可选 standards,也可任意组合。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。

选择需要的 preset

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --hooks continuity checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --check-hooks
diff --git a/dist/claude-code/structured-coding/README.md b/dist/claude-code/structured-coding/README.md
index b910af7..2666d71 100644
--- a/dist/claude-code/structured-coding/README.md
+++ b/dist/claude-code/structured-coding/README.md
@@ -232,7 +232,7 @@ On resume, reload the current design, filled contract, and full execution rules;
 
 ## Optional hooks: installation, coverage, and limits
 
-Choose continuity for compact recovery, checkpoints for commit/review reminders, or both. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
+Choose continuity for compact recovery, checkpoints for commit/review reminders, standards to run your declared checks after a commit, or any combination. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/dist/claude-code/structured-coding/README.zh-CN.md b/dist/claude-code/structured-coding/README.zh-CN.md
index bdedf05..82ad56f 100644
--- a/dist/claude-code/structured-coding/README.zh-CN.md
+++ b/dist/claude-code/structured-coding/README.zh-CN.md
@@ -232,7 +232,7 @@ Compact 是 host 为腾出 context 而压缩聊天历史的过程,不是新建
 
 ## 可选 hook:安装、覆盖范围和限制
 
-需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,也可同时安装。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
+需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,需要在 commit 后跑你声明的检查可选 standards,也可任意组合。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/dist/claude-code/structured-coding/VERSION b/dist/claude-code/structured-coding/VERSION
new file mode 100644
index 0000000..6e8bf73
--- /dev/null
+++ b/dist/claude-code/structured-coding/VERSION
@@ -0,0 +1 @@
+0.1.0
diff --git a/dist/claude-code/structured-coding/references/hook-contract.md b/dist/claude-code/structured-coding/references/hook-contract.md
index ca700a4..bd37038 100644
--- a/dist/claude-code/structured-coding/references/hook-contract.md
+++ b/dist/claude-code/structured-coding/references/hook-contract.md
@@ -1,6 +1,6 @@
 # Hook behavior contract
 
-Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The requirements below remain the complete target, not a claim of full adapter coverage.
+Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The optional [standards preset](standards.md) is **not** an adapter for anything specified here: it reports a project's own declared checks and review conventions after a direct `git commit`, which is a different axis from the freeze, merge and continuity behaviour this contract describes, and it blocks nothing. The requirements below remain the complete target, not a claim of full adapter coverage.
 
 This contract translates the workflow's freeze, merge, and context-continuity requirements into observable behavior. Event names below describe the workflow; actual host adapters are separate work. Supported host events and their sources are listed in [platforms.md](platforms.md).
 
diff --git a/dist/claude-code/structured-coding/references/platforms.md b/dist/claude-code/structured-coding/references/platforms.md
index a14f482..3047d1d 100644
--- a/dist/claude-code/structured-coding/references/platforms.md
+++ b/dist/claude-code/structured-coding/references/platforms.md
@@ -31,11 +31,11 @@ From the cloned repository, use the exact project Git root (quote paths with spa
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks.
+Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks. The installed copy carries its release in `VERSION`, and `--check-hooks` reports it, so you can tell which one a project has.
 
 Codex requires trust at **two** levels, and a registration is inert until both are given. First the project: until it is trusted, Codex loads no project-local hooks at all and says so on stderr, naming the file it wants the entry in. That entry must live in the `config.toml` under `CODEX_HOME`; a `-c projects."".trust_level="trusted"` override on the command line does **not** satisfy it, which is the failure that looks like hooks being delivered but ignored. Second, each hook definition is trusted by its own content hash, so changing a command asks again. Both are Codex's own mechanism; neither is granted by this installer. Claude Code has no equivalent second level.
 
-Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. Both use five groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
+Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. All three together register six groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
 
 One aggregate receipt owns the original settings backup. Legacy continuity receipts remain readable and migrate only on an explicit state change; check, preview and unchanged reinstall do not rewrite them. Existing customized runtime dependencies are never overwritten: compare/back up the installed skill and explicitly update it first. Missing, changed or duplicate owned groups, unknown receipt schemas, and redirected/unverifiable paths cause refusal. New installations register commands that contain no machine-specific path, so a registration committed to a shared settings file works on a teammate's machine; each machine still reviews and trusts the hooks itself. An installation made by an older release keeps its absolute commands, stays inspectable and removable, and is rewritten only by `--upgrade-registration`, which changes every command and therefore requires trusting the hooks again. `--check-hooks` says whether a registration is portable, and names the recorded interpreter only for an absolute one.
 
diff --git a/dist/claude-code/structured-coding/references/platforms.zh-CN.md b/dist/claude-code/structured-coding/references/platforms.zh-CN.md
index 8b66fc9..af19c8d 100644
--- a/dist/claude-code/structured-coding/references/platforms.zh-CN.md
+++ b/dist/claude-code/structured-coding/references/platforms.zh-CN.md
@@ -31,11 +31,11 @@ Codex 的目录和调用方式依据 [OpenAI 官方 skills 文档](https://learn
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。
+Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。安装后的副本在 `VERSION` 里带着自己的发布版本,`--check-hooks` 会报告它,所以你能知道某个项目装的是哪一版。
 
 Codex 的信任分**两层**,两层都给到之前注册都是空转的。第一层是项目:在项目被信任之前,Codex 根本不加载任何 project-local hook,并会在 stderr 上说明,同时指出它要求写入的文件。那条记录必须写在 `CODEX_HOME` 下的 `config.toml` 里;命令行上的 `-c projects."".trust_level="trusted"` 覆盖**不满足**这一条,而这种失败看起来像是 hook 被送达却被忽略了。第二层是每个 hook 定义按自身内容 hash 单独信任,所以改动命令会重新询问。两层都是 Codex 自己的机制,installer 都不会替你授予。Claude Code 没有对应的第二层。
 
-安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。组合安装共五个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
+安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。三个一起安装共六个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
 
 一份 aggregate receipt 保存原始设置备份。旧 continuity receipt 仍可读取,仅在明确改变安装状态时迁移;检查、预览和未改变选择的重装都不改写它。installer 不覆盖定制过的 runtime 依赖:先比较、备份已有 skill,再明确升级。自有 group 缺失、被修改或重复,receipt schema 未知,以及路径被重定向或无法核验,都会导致拒绝。新安装注册的命令不含任何机器相关路径,因此提交到共享设置文件里的注册在同事的机器上同样有效;每台机器仍需自己审阅并信任这些 hook。旧版本装出来的注册保留其绝对路径命令,仍可检查、仍可移除,只有 `--upgrade-registration` 会重写它;重写会改变每一条命令,因此需要重新信任这些 hook。`--check-hooks` 会说明注册是否可移植,并且只对绝对路径的注册报告记录的 interpreter。
 
diff --git a/dist/codex/structured-coding/README.md b/dist/codex/structured-coding/README.md
index b910af7..2666d71 100644
--- a/dist/codex/structured-coding/README.md
+++ b/dist/codex/structured-coding/README.md
@@ -232,7 +232,7 @@ On resume, reload the current design, filled contract, and full execution rules;
 
 ## Optional hooks: installation, coverage, and limits
 
-Choose continuity for compact recovery, checkpoints for commit/review reminders, or both. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
+Choose continuity for compact recovery, checkpoints for commit/review reminders, standards to run your declared checks after a commit, or any combination. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/dist/codex/structured-coding/README.zh-CN.md b/dist/codex/structured-coding/README.zh-CN.md
index bdedf05..82ad56f 100644
--- a/dist/codex/structured-coding/README.zh-CN.md
+++ b/dist/codex/structured-coding/README.zh-CN.md
@@ -232,7 +232,7 @@ Compact 是 host 为腾出 context 而压缩聊天历史的过程,不是新建
 
 ## 可选 hook:安装、覆盖范围和限制
 
-需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,也可同时安装。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
+需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,需要在 commit 后跑你声明的检查可选 standards,也可任意组合。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/dist/codex/structured-coding/VERSION b/dist/codex/structured-coding/VERSION
new file mode 100644
index 0000000..6e8bf73
--- /dev/null
+++ b/dist/codex/structured-coding/VERSION
@@ -0,0 +1 @@
+0.1.0
diff --git a/dist/codex/structured-coding/references/hook-contract.md b/dist/codex/structured-coding/references/hook-contract.md
index ca700a4..bd37038 100644
--- a/dist/codex/structured-coding/references/hook-contract.md
+++ b/dist/codex/structured-coding/references/hook-contract.md
@@ -1,6 +1,6 @@
 # Hook behavior contract
 
-Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The requirements below remain the complete target, not a claim of full adapter coverage.
+Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The optional [standards preset](standards.md) is **not** an adapter for anything specified here: it reports a project's own declared checks and review conventions after a direct `git commit`, which is a different axis from the freeze, merge and continuity behaviour this contract describes, and it blocks nothing. The requirements below remain the complete target, not a claim of full adapter coverage.
 
 This contract translates the workflow's freeze, merge, and context-continuity requirements into observable behavior. Event names below describe the workflow; actual host adapters are separate work. Supported host events and their sources are listed in [platforms.md](platforms.md).
 
diff --git a/dist/codex/structured-coding/references/platforms.md b/dist/codex/structured-coding/references/platforms.md
index a14f482..3047d1d 100644
--- a/dist/codex/structured-coding/references/platforms.md
+++ b/dist/codex/structured-coding/references/platforms.md
@@ -31,11 +31,11 @@ From the cloned repository, use the exact project Git root (quote paths with spa
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks.
+Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks. The installed copy carries its release in `VERSION`, and `--check-hooks` reports it, so you can tell which one a project has.
 
 Codex requires trust at **two** levels, and a registration is inert until both are given. First the project: until it is trusted, Codex loads no project-local hooks at all and says so on stderr, naming the file it wants the entry in. That entry must live in the `config.toml` under `CODEX_HOME`; a `-c projects."".trust_level="trusted"` override on the command line does **not** satisfy it, which is the failure that looks like hooks being delivered but ignored. Second, each hook definition is trusted by its own content hash, so changing a command asks again. Both are Codex's own mechanism; neither is granted by this installer. Claude Code has no equivalent second level.
 
-Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. Both use five groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
+Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. All three together register six groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
 
 One aggregate receipt owns the original settings backup. Legacy continuity receipts remain readable and migrate only on an explicit state change; check, preview and unchanged reinstall do not rewrite them. Existing customized runtime dependencies are never overwritten: compare/back up the installed skill and explicitly update it first. Missing, changed or duplicate owned groups, unknown receipt schemas, and redirected/unverifiable paths cause refusal. New installations register commands that contain no machine-specific path, so a registration committed to a shared settings file works on a teammate's machine; each machine still reviews and trusts the hooks itself. An installation made by an older release keeps its absolute commands, stays inspectable and removable, and is rewritten only by `--upgrade-registration`, which changes every command and therefore requires trusting the hooks again. `--check-hooks` says whether a registration is portable, and names the recorded interpreter only for an absolute one.
 
diff --git a/dist/codex/structured-coding/references/platforms.zh-CN.md b/dist/codex/structured-coding/references/platforms.zh-CN.md
index 8b66fc9..af19c8d 100644
--- a/dist/codex/structured-coding/references/platforms.zh-CN.md
+++ b/dist/codex/structured-coding/references/platforms.zh-CN.md
@@ -31,11 +31,11 @@ Codex 的目录和调用方式依据 [OpenAI 官方 skills 文档](https://learn
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。
+Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。安装后的副本在 `VERSION` 里带着自己的发布版本,`--check-hooks` 会报告它,所以你能知道某个项目装的是哪一版。
 
 Codex 的信任分**两层**,两层都给到之前注册都是空转的。第一层是项目:在项目被信任之前,Codex 根本不加载任何 project-local hook,并会在 stderr 上说明,同时指出它要求写入的文件。那条记录必须写在 `CODEX_HOME` 下的 `config.toml` 里;命令行上的 `-c projects."".trust_level="trusted"` 覆盖**不满足**这一条,而这种失败看起来像是 hook 被送达却被忽略了。第二层是每个 hook 定义按自身内容 hash 单独信任,所以改动命令会重新询问。两层都是 Codex 自己的机制,installer 都不会替你授予。Claude Code 没有对应的第二层。
 
-安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。组合安装共五个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
+安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。三个一起安装共六个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
 
 一份 aggregate receipt 保存原始设置备份。旧 continuity receipt 仍可读取,仅在明确改变安装状态时迁移;检查、预览和未改变选择的重装都不改写它。installer 不覆盖定制过的 runtime 依赖:先比较、备份已有 skill,再明确升级。自有 group 缺失、被修改或重复,receipt schema 未知,以及路径被重定向或无法核验,都会导致拒绝。新安装注册的命令不含任何机器相关路径,因此提交到共享设置文件里的注册在同事的机器上同样有效;每台机器仍需自己审阅并信任这些 hook。旧版本装出来的注册保留其绝对路径命令,仍可检查、仍可移除,只有 `--upgrade-registration` 会重写它;重写会改变每一条命令,因此需要重新信任这些 hook。`--check-hooks` 会说明注册是否可移植,并且只对绝对路径的注册报告记录的 interpreter。
 
diff --git a/dist/structured-coding-claude-code.zip b/dist/structured-coding-claude-code.zip
index 4c1e8726177a447cef8ba5c3b6a6e82643a7809e..0482f69bcb82623eca06a3ced264ebd00ed1a855 100644
GIT binary patch
delta 18311
zcmV)FK)=8B=?1s$1{+XI0|XQR000O8001RjObYqS5+witxoQ9a86|peB8-JuE
ze2CKNSp%GMWE@5ksa@w&9V}jzA;bkP2XIk!L0PbbfJeaCd^a8`$zq=v)%htckzM}E6jiQ-G6ssGnpUrhR^H@LES@+y6*^i7+3iWt%S3_J+lvH
zGdcd4Z`5p7cKaD^!ryI(pZUcHXO4f~G5D1-($DqEVMoZR^fTFD0Z~8KyXE-m-%sTE
z`=t$bJv2(+(o8=)+bBd>$()6IjOaH6r9pES*9Gn~B&WkisF>4tG=A)ekAM5{A6k78
z74oiaDWIazwPXtYOzv;Y6GE&KK50Z--$dLq1S@pU03To}J8d}L2zxF&A
z7;d;3w;}my3?WWVZ}ejIQC0{&EKI^!Ahi5^>(I&YT&Q#7iHP&=^|l@YVjMq6ZU~KX
zTt~X}z?Z?Uvq8Ld+pUWn0lAuk>s{LjhNUGLmuldTMc8Ow1V63Q&XJ-@_5(NX7Tll9&;BTBkazU_9`9l7_Q02%Nt$Q$a`Ip|}$mb4;m8P?ce5
z#)C)+;}hTPvwrDz=(WsZUE+AKiusi1Mml4*GAHt9M(|CyW`E!i=!^XBOqvug=~vm3
zG~qwF6u!|{xG~(DQAJ{(o&VRP)GiG8W3tI4$sK=E<35dpt61IdXs#F_xWGo5E>Ph6Y=c38R7k$jv
zK|KEAata3Kl*KvIrht^HSq3uPOe-3Ty_woQy6_uF;>%I@Tx6k{^h0Z{-xZJe;vbv~
zaJ7%w-artqF2bHh>)J->5FD6AIrW|M(G4^YkJ{LB_kT>xSEb~@6Z|bEc${U8=LlKg
z@O3`qIX92F6dA{g`5oI8N)sqoT-i}LC8O}=Nw=5H*uGDY*SU6N%jut-j;510%o
zF^7LT8-Gz4QjoAp{kb`!$W&00-dG^&v}Y_BYae3Z8FLTEGzGHIgZ1!@JLu}u|6*Z+
zrSp48=lYJBwt~j$IRK@q>NDTO+v|#kKRQx)X3a4VMGwIiI^BY9^v1iMIpAC9~
z3$GX1+~>jc$|81N{cMYV5MOKB?r?KGAJyymUVq`Hz3(O=zCuMyt|XPRGPPmBSTKvOf9>Q%pUBK*Vpa%b7erNdr)^I5Lq$8CCJRg7xUOm=1RHg6
z(Daoh5WIORJ;8_L_(Br=tFtp5SizLyX0skSdVG^v52MDuV-bf(SHT)lZp5$<}#-{1XJ@kL|7fxQ0_Tq6NDRbK~=4GQrl;?}e=(&4X`H*Ue8Fe*2LgUI&p@
z@YZZ}k~fu}EZ69dumu8?6=0e2|)Kpv(8v1KIW}sg|vzU4QNL
zratg=1Q6+vj|?1}zK%x4k8;ZJ$8yzL)~Hf|6Dc}!1)!xaJFbjFz4j=Grd$5vOq;sKbAYXZX4v?D+6p&PYkB~UHR=$jyYuU<$YJJDS4p}L5eKt;-nc5s98UU)0h;aEPDaH3FnAV%%7SD{8^<-a3hFZZ$D>V^ZOD9tv+8-#+`w4IoV
zcOJ`H`gS0>k|%o2n+HV!^K>T#x9nWz-fmdc+eG-NFAgnnH(h3pM
zbS2xM<*@MMvt@P}qFsGp7dURosEsHc3z5ucIl1WrPJ7G^U41JP)h>@6aWAK2mk;8
zC0#%jd=Ww_005h2001GAaDf$(Fb9_|t^o+Ma3z=@f9`$F)oN4H^i*yC9{uW*9pX6%
znTnl$o$8OV?X4>n0ZC=VY}N8zI1yHiq|sK75<)G$KkGmp^r%)S7|j}g8f0vC(xo;`
zRZn{6GfJ*VgF-DKUppbpSLr*yHlxA!Fz
zf8f1j=lWv(H_!Da&e;d;?II0PR^VAz@^*W2p!csf#b0>f&^-MW=8z$EroYsX1ARA=
zv95S~GJc~Q1B!kAOO2h3-$MBJ*CTm!d@byle>)@Y9m8%5x*St1sYixPQ4S#f(LSv`
zVCBTHKmFYGtTW+}*<(m~Jj*nZttYn3ZO&CoS9G+(te$`h!entWL9eph)Su0Mg0V5P
zKOMsBlvmmnISHJE-9UzLk{-g1URUkymQ6SW#E(QX1Tt&ZktkFmDC>HAmqyx)oW{O2d&(}Q^dH{
zP4WLtvcTIaWJqRd&dfPCGrU#5;|f|t$TN(F80kzaR(a!&`k&L$7{-Y)RwGq8
zn5vw@B$gEb;B_NXJS-I{ooRVZU*%Nte=%1egp>xQ=jQ&W+%x~>!%BlkecGw!e
zxaH1AxSW?>Eh8JM2M!v
z?&_qFX}_>mUl;}vbnzzDVM#W>sVP4>x@#`UGL+GiAH#dq@(RP@AS$B~tv?tzmLwn6!AycXduBX@@87uHAM3~aztcj`~KZNaTtq5mNcr&Lv
zzif{K@P39UTwF3uX0RQ47lKV^nEQ|3i=}Rw#$@jXyLMf5MYmy3xA3@$xy($6@wX&~
z$zV3q;=kC;uqd(OW1dr%e@K`IaYlI<3`z<q(q6)Sxk{1ltfxy#|;ONaHnxnM&wL|CO%!@44otz^QS~B$8aR6I}>h@aZraD`)o*vYP2_v_}1u
z=h{A@XP;noYTHl!dt=HtBNz4nXYp1b-7qp^H)
z&cyKFcvsaBUhR)1fBPY;uHVcUaN0tK7135Tll#yDyu`gtWq230)=rmMPElLM)_wvH
zO?I1Xx}4{BVQuqn&HW{f4P4=Q^XL+6$!b}{dEJLAbh*QV8fBUIQ?x^g^N(VcZ8jRg
zT6moNYJZ~7JLlOvk#PmlhJ&b@NtM0zn09FCBJR$$QicbSe{AoW3RdJy`B`>M`bl~v
z=4B~|S0GC>Z=#PkStpXN7*DIEBEgfl((IrV@iV-DMAxRSGeQnml2JdWX;)1wfF4Q!
z7R;U(t@3!$B9%eGT0n(GQh@^J{xou5lV$viEjzhNkL!u3mUH!I+G-Ukm^9w#c&629
zlZ%?iwd4~mf5ovM2D_E(XArb=vaVQPKj5Yuwq~1m|qRP_&R`t^w1WOZq+y+sXztbo+7S)*D&2TZz;x7+B=T!>o}uc(X16
zi?UdZ6vQYD+7}Mu{OZ@TZjrq64ZVyJdGfR&z`gjMe_MnJDBK-LMr8!k>Lt~GO6MIm
z`BQr3jXl=G9uK+r18z8aR=}l?%(csr1X9!0%yNau$FvD9v5%x4M4m*{iHrRTAh>U)T!@uUn62=&j4z!l$h>JQgpf
z18ti9e=}xGH}BRaFt?sGPO%$PQ-1ByBS2>A=KE6_B|Ls^Dr|@2?9KfcNVMGh=t~kAuEUKxL={s9~##C(Fg+w+(e;1JzjoFp#Z;mobl{ZJ(wl)*Z+w!8G
zsFaYMo$;Rka)<}`5&J*q*&>WkUH#UT=hR%jX}l~ha?j2k9zfGRIt|4+gLKPlYM({I
zjx!P@b_XB{>yJls?6e%-gL;|6eJk_frR#c9PXZHZ+%xwAP_M<4>G@)|KfCkaUGeL&
ze}Nvkw?$baC*$3jY8M4dYgMGuY3}1eWSQTp4?PKgpdpuj8x0p(W7F0XT~<~PUNAAt
zuKO+11X(FR@JkP%w3X7P37qs?twvq$J|9M+aETbZPg6&^e+_?on#XoIoH>RjV??hNq6X?A@0E>k?EYl;
z4a6m$6c5>db8_N}Nnkf;?P9J@4;q!}bBHj({4J;5x3rmZxACnwwV
zmhA7-uoolMa+rW}>%xL>-R`^1z=UlIMFy~Xe#La7<+rpprKu2eNuD?kHfz~)w%kGF
z;2bT>{yh@}$-Sz)4S(STp24PmmNXf}+x<>w{N;z<ZO0aC}qEoKl#+V^81fX_KWEldK+!=Aq^IaUc)!88QI+ps6>|?P=Xn_!^GJm
z!k<=ZnG=KoYdi7(hrzm8tE7B-0Ly&^QWGeQ`VI{**C
z$=l{92{-GrdH)WhPt6YLLx+`v2bBZ3F$mMPG|em$^yJmQJgJY4v5yBj`F^7J#@mprZk8k2K@60^ils0$6K9G;E{
z000060000PlW>6*4^~A|Q%O%wGte{CGvERMvtC=Jy9&i4;P06d006`-mkk#IK!2{P
z;3K;F6=AJd5^Zt9mNb&8JT)C1RuV{(D1!hS2~bvr7qjXQn3%pzWFQ
zLM90yANO(YIXCf*xvJ|AX6<(NSk#Tl>Z)yQ)}Ec+x3=y4OY{BrKQ6BpKd)}?%>C{1
zV)bfuv3OYBT$|tjtx*)t^kZbJ+(!F;{;!zOo0ut6O8+*6j~1ezjF@+MP33e=&{A>Z5C(r$y!4
zrpq|D@!cA;&A$KMtXfleQ{m~xZ42MJ#^q-HY;w1;UD?je1BMx_nA0BWf`1E2OYVP@
zHQPM*=IRHSWxp@lDQ-L1#>%`lKNgvj<=M(y{S}iQ3-^Szwb&z%g
zySCor*~|pP$T)sxUUenx@Q3-;5A&-(&M}g!Hg%JUtz>*`ec!b@?eJRT_O_@@S0&TB
z{B)PT#R#^^`#q*#)GHny#(!dAKg&(o1MFrn2fjYHyQ10}e{fl`DPYVUO#0FkocT~U
zu$#rG^{*~#UwBhLRWNl{TAE#bDyvt!aMMSukXtr(!%3{k3%Im3k6R3>CVqs)c15=1
zx_EuF!IU(^NBpp9>b=Cmrg82!7R<836JwFEbn8rOF>^bSXtM^JF7~G0mh9@z61_HJqOx^i4yadhVPPV&FW%>lM$
z0Q#b>o98*#*1~Rc@4T1H^uEptNtYQxp>YyKSuppZDfYG@EPwc7TgkMWqAXpW9CXg$
z*kdK)-n=`MfU4HTT_PN+n8p&Dv;ks>A>FmRx*_7x=Ps_eaxMpyeqqt3$e9%F^Mo7h
zzpN1=*>1kJ-p#L;i_6Jyxhaqiw%s9|kr%(YY8vifzR?bo9&rO=>EeFVZ^z;a%1Hh(hm#AIC~+1JD3yh1FBOOVGCbF^iV>v-!fmyFPqSD-dtipb2|b=cS5
z$#;0P^fi-!$rmFL2{;vlZ1Bl7a8iZA8dtg_tZja+*JgF;=eB8!&0y=C?P3LBviThN
zMwmzVC@hS&EACYLZk}b<8gXRdjLFb1w|A3}+rb5x;(q{)J2E^l8F!0XBp%`1UQ>cF
zsrMm|BrhcLWKv*;Q|Pi9-xw;+J(omcF|1q}(PUlMrLzh+$%Qh*R-A!LPlz$6ssGkC
zA97&t%v{zoKv8WNiE%YyW{r^$MH840xq=}tRudywuY*rHFoHUQHpX*lVCz5NE~e$v
z4!59|Wq(p1#)h_K17|!N2gF7dJv;l!!x!{C(J2P!eBfrOHer1!xxC9ld0c+X$}T6O
z00r=P&Y+!ZWTo3;ZLn>?&|w_S%;KvtW(}z_4vGAWc?E8JbGy7-JmACK^5@m^om_ppynDU8JTqVU_xnHp
z+q_*oEbmr}H|7%5_+Dr+9+W6|`2ag~1%F`Ga0ro}L;^4-n6(F|I$hSq&CkobU-02y
ze_GuwFULziyVL9>8!eib|Hm%+p}+My`*&y8MDg3Zm#9onM(rd-R=%HLxNXOLMxWfMcOu#6f9HJj24+RY=mdDKcVGUT0lz5#YHyjDNV58!;=Kwl4-D7kff|5
z|7Af`x>gf)9cgYO!!O4UXCf~5-kf8j-d&b9haWnWm;L7fNM?7(>O
z>@)D7sjEPM2BbA+-6RC{v51l%DQSmYkRgb0k(iQfym4*UR6(^cJbzul{E$sDF2l4p
zWV|l!ZkcxpeoGo|L=vT{`YwYs@|qMus!PIfg1{cts#vl26tw06502D5Aao!X6Wpl(
zeM+gY9g5*3DU`+vBkx)g8&P=EFlEG3v&EI*_&+Aci%w=$@^yK1129T;0aA)coydH3
z%Ht6S0{f`~O?vQvvVVvyB|RkgO+iRH`+B%r9X-+F$ng3tjEM5g{0!U)TBKi+5^Sq3
z)&7P)FQL_W%`xho>AFVN^jDcx%!Q*ZN-mDhCZ^jkjC7*D2>#=Roe#qf5S%r{&cO<~
z$y2NchE$5?lI)xh*T`+4*=R39S5@k6zpNaHA)OcSiE!g~cVC+6bKYQDH#83Gz1
zmuBqvu)4XPhCvWXOqGBD+U`<)In|Kt{pU5%oBJQJoHw{;(T`-w##
zw>zMNuKJNC5`UzYj#R3AsTE~jae@0as5=Q+KY5CJf@$jWNM*wRVhn>@6}17W+s^sG
z!Yn-zV>P2x33>XbK2L4MVis60jgAkE8!B(+;(R3jL!&14HG0HQYet!Lg1-W;p>dH|
zQkYn-1#ImZ!+3E4)o6eLo}5e)8e$9SV-BhqWn5@81%I(9A6Zys`B80(bD5B^D|Iyu
zDLvO*(+SJzQ6m(u9=vgdYK-Oa&6~Gy*IpW0s7(N(Knv;*+RxO5?L$M&4>*XlVgj3j
zs;p%ZV_O72{<$x-gC2HpnKlpHT-!6so98UyE9Q=`DhiL!H%-mEb0zHagm634NGsv>CS-K&Sk6t&X7#O<#
zsDBlI(8u`STEa7P?YM^>FgUAorV5x7?iI?Ywef&(b>frw)Ij1*BGyqcQ{&+Qlrs`(
z-wHey)vvKf6X}4eyQ+0f(r)LFJ=y_eWfK#GRzch-d|He7X+&d8y^u+JcO%(iIf5gS5bOMfOf
zaVpp=*ENyosWPr^kOonRqPm3&q1xX&yPuich#zC<3(t@ohF}5``^a|_8%Iqko$bRm
zWVw(eJ#manDgx0>ZErH3k|&&x;bE7*q+dX&QuCAvkc16N(m=kY+|y&v03?3}K^Szl
zG*D$7LADI9P9iu2)-ACK1{<(TD}SU^<{0_0`!qmYxkJNPuu==5{)|-BuW1jGWZ=OQ
z>YU(J2}wK1tVBa%Zl}`#Y28=@`(fePP&Bf_kr&lQ&YC48RB)(hP$QYpOGGlrZM-Ci
zPinq{(S0lZZa@_x4F=c4W!~0z3t>b(ORfS%i2QvLx%XW9^V~k0p&0BSAAf`pBYi$o
z?>*l~z;B!AIHqzu5J;`fO53PO%B6NkAcE(KjP-&=l}JwwC|fvY?B>UYmfMEzTA0Ly
zuf*9ecW5>2Zn~ByPP*z?gZm!mLlAZDAaPZvyK&d!;?0|zcaIbEc)7g(<^ARIc6p6Y
z5AQ=ucM|S+|8Dhg^*%C~_kZsech{@y*N+-7k0dn9`-k`U4~vJT+;x4idb5(3MjnNf
zGLM@+$|bn{BvF>082roq&9y4aa14`Aqtnt{isohqL~t^6bC8KQ%C3X*
z2x9~#xpoG?tBq7GELH42Jy|*SIqGpuloFiy0C;yfO#V(WTHHC8Rw55>YFBdh&d>f#I|iCthQIsA-U3f5EiTU?bK~H
zthJJ;bS4yAm9OiMDxu;j_~5OhsT36#`rPTDZf`%h{@6;RNjjGDqRgPhw;6PULXp$#
zU1ZEm%OLZas{nVk!p){rwG>{@I6M1f?!yh{lUaUbnHDF67k{}v;fCpSYQkT9yKGQ=
z!m;dU?*<4m#iN5yW})EDhWtF#b!jf2>oLLC4hA^Q+t{2Koj7ap>vx=TKh727^kis`
zctcxjvvr;@SzAK!Ribdl@~LMK;TJh9r2{z7D_xQ8Z5&5QQam<_Kbaq;KhSeR6rk9K
zirDSX6BSGEUVjV;hD>@*^eImp)Y^@Uk(GcYS|hDTSazzxQqYp2haDycQF!JnJud_R
zTz4LMrBdtLyE$8lqn=)G15C0=owye#Ag7(V{tc~hS2avGY%(h3jzZ+*&4KDmSQ||;
zXnD#==XwO)4CEcY&6a2qGMQ+4~a
zBTX0lltb68Hnyc%LpctCA`cNRbfRw4Eb)Q5GCJ}Xd9w`1}Z+}ZtY1+RmRJbzlm!?Q5{R;n;V+Qc6`V;36J4KZ5l_c6YRCU3;b(Dw*$jFy%lMMRt-ih&U>q4?7wyn175Iq?x>2wLKt
zZ830?_$hna7^JLgF8oX>Z(q;l)yniz?XVotIZa{5@0AL>ZNeLLt(?3GwG%)B$@(9+
zWhnuq1r63X_$A{F001;1001eM5ElU;m&>vN41cXz{g2zm5&d0%#lkKS+tr8dG-=~&
z3nW*kcI)_zyL=Qdf^tQ!q|H%Wg-hO@45NR0-<#Q`sB@aQaeyE`N!;1_eDh{_*PMpR
z-5A?c=Crnb<>ZUW7is*9KDCz1am%MSZskea9Ppvwx=e%c+U|QtqCbEu_^`gG+a=-TD|krMRxc
z!_fSt!*SOR_qA^AW9QmvHX&R_v)r4?t!!U+s-tgWXX_d#N;t*c>}p^7uHHjr?aI!)
zE<*#+z3=wl-#h%x08H`Y#+8?%cEqoT5Bf87Tp~ns^YjKf&=~4q)@|r_Q9R!_t$#yg
zT}9Xb!27Z##X4IFaQfixUS%!6|zH~wL56LYrX9b
zaqWWq)Y*3JI#Z_$rr87<568H+fqxNVv%liuZiASeBI~HP%Wk5dsqM#$nEb#UkzK;iS}TF}u{q3oG)a^U-Wo37i%CyPbxY}?F{oZWiY
z&4B?6JQx?t-q+PkkKR8yGFR`4#&>aa+0WksD_pYuaEEJ>AMVf1x32XokFtX?j~_n%
zboTJG*~3pzsLhpcLqm~KfPZMnFjr-$P#36QB9N-CM*i@vv2dm2S1g&Zd(-x{Qx|F)
zS3R?h#WR-3?EMmmVNK(%&8u@M9Vv^1mI~2Qdq4!BSoG^g#I9hKtE6gL+zzpF28i4=
ztQA0Rlw!oUjl}UXwF&`Wu@jgZQ$g~)MYX%QF`m~B9?p{HhMH0*Tz|K~g9ySDWo;`}
zwr^XO@2m5V0K3o-VM~oh@N?9sUY#pKo$V+eZWFxdjywauWaKI9(7;kSCPdHToepi!
z-O%(5qkl&+w*feK@5erL*)Xv*LTMN8KbcI5qKKQxd=bmmqwOuyrKXh3pUtwc1y3)!
zu*hG`X4*_fh>!28c7H!>`{p+i_(5WZKK0=eMS#lvbpl$qMZ*5}9{XQ%KU^9UV>0;$
ziB%|w5Eh*>oe?z6&8t1irZFGSKl}YuQjST!wdL8x;syMFv-s}fg>>ZB{n(@5ROof7
zHV`8AMeT#AJv6&IgjV~$Lhr-*qfb7b|KT<}G>_+x=8r#pbbq49z=piQOye9VS|nx=
zTN)L8B}k{ZJvZkL4rx0n7&)!L9(Qy?u@LJEV^GjZ#$j>
z8w_S2dSPsxBY%Qze7OOZ10Dwi*jOT}dNR2`W{%XE2M@aI@Zf=|-Ic2ofwGA#wu*J0
zKr7(lat`A;Z`D`a+8hAH$F)Zl18MPTs2Lxtb?uSw*2r+`HLnm^kJ4#hiLba
z<`HWDF52BeiCg%=zT*+LyUgh(tk*1MeYOzvTfzpb96Eg_P!yT
zD^Ab;_Vi!>es=cN)8YiS7qc=e7w32W%nJGIow=CtZ}HM!?j)P;6vD(>%n#HvlXn#?@ZJreX4``O5mbm+ofC7wL!EU%E`w9c@mzjl@}EAV9kdQbQLG
z_Q18yLVui4YEXLL_#C#RC%HazEL=AOqeND0B!48kd50a8w~?_}TYB@09Bm2TM=E6N
zc*@7^35rd}4BRGlptp4!Nt#qD^P{T8&5S=Y@ygcJC5joEf=JcpV|oEOoPSutu(yMH
zwnYM2_P^0g6E~LLxzM(JA+=3YUZJ+X4xt8yX@71fr-ufUO=_{?c%Uz-32+R)I1zV^
z&Z={By;}3>!&y>#*;nNGC>44Eq8jt)@f2YzEgP~`K<2d(%qTx%2^_wJNvESe@E%4@
z!R1|6iuPP|VK*H{#l%E}Yryd`QVbpNeSL-;0B>8^9#w)Ml)Um(1<%drsLyWGIu1H8
zoPS1Vi6;7+G}Ea@$D)Oo!0Vx*-REpGOgrjy>D(^GMI`nDok%_=UUA%$2!Q+)1uBq@
zGBYxeN-guK7)QiT07Z2%I+dThowJ>$y$-lJ*^s`Sn~kQmCd|U_qHY!Nc5Elq1I_TO~sIzsX-N_nYE6Cr7+3uXkH(&
z|CZGskB)g2du0jZv4v0II5^KG-ZiVElxjwl*o=OgB
zo?tR6a4=wu4j>JLhuf+dSp>O;NEVR2)ln&d9;#%d&xJUogmgEqsiH&{t=;0r&H;VX
z6(XCjX(YzO#=x_E$>M?brtxDaIuBLb^MVFm7_j_On-_a>;P~D7BX@@
z)Ew6&6|~3b1zC?PDTLUg$w`}2C3Fe#mEG;~mNpWjhOPT#@--c#HNUl~Yp;5;0^NA#
z<;zLp|Kdoaiu9@C2yjQ#L?Rpq`XVcr1`QiX)8LW~WdKIFlh0V5l7eyP(oS>oh)r=(
zuZTZWz{OWrK89Aitbe;vx-rK%(_?B%2ub(k4#AIebsaGD7dfF;%MWp__G2?+}^#5%<=mD
z=+WavJXd99>z9t{(t|c4JLymq)sF8O`pQ%H1=_nXBUw~IMSrffYkbGbeHJ8PLl??W
ztAI=$I8qDBk*U-;v2x|UnRjbNX_T0ZHkp(@rtpvt
zbxW0;9u?90c=7)~pFMN5998;y%@wV?ab+)FcO+btk9nsc)RL!Maq*JcgoK&sP}yC2
zF%ou2ba((B{=l<@J$VbMz$i%N^gYn)wC;b#oc+c9zJFx){mf^~>v5ur1Ts+YoQCE5
zOIv&uHaE{JzO>>RMRQ&GOR7pj59e~E_3#*)Be=p)#_=RSENiJH83(=akBhUHNZIb%
zArx$F@i1sIYVs}%Uv8acpW^hRzQ}JQ*gHa<2)3~0ttAWG*_d8KPEqh>-Afc=zl`W`
zw7@q6B!80Q=I}C%$uNv@B5eTSR>ryG&X~9(NHbd7OcW8Vg#$~ZQ3A3d%6q@`!a^U-
zz{gM}jWJ{Z@D!Y-T_Q>*td6T)r|d&}7(h`pR$8kgmW*+NA6%ZWL+DP&9p}`OV};%?
z#qRRVET6eQ&+o`{AD1QRfrt*^N?JR_p8%b~YJY$zq2qkZBQ4?`1QT|YTN|hlXEA*%
z0?r!9+}<34jwWTdpAJc*>GHE}{`m?ODx5`L)05`W*GqO4oy3ha)ViMLVc|dnWxC=l
z9Z7+q+tx}G<`kE=S9vL%Y46Ss3j$t*dl7aC=+Qf=16+}-kQ~akYsvZn<^)^GjzB0>
zet%yqiwg{o>Af~RI@5PswjRISPDv;)(-Q>5l3<;X)<$UsAP!~%B1QY-O00;m803}_Q2LDUp4*&oUAeKD=
zM1QA1wv%*{shO#o@pO%Q(%p8oXOgLMbwwI+0HuXQNk@H2xl$4!kN_dk+>I~@kfFhn
zz!%U3p{o3qoW0M{lm9}#wb#*ww3F_n^J1fO_Fj9h+qb^8&fDTnc-Z(-Sk*;wC+Ld}
z8~VY(z{B@LqrpIQOhm)6h~N11or$2&9DfN%#-l^y!|#eeTnK0WOs&nTjfz~USk<`N
zo{~oiRnNV?Tu}LE?ZPX(vZ^JlX|LwxRQ8YY$$Cvx-lrXZjDJP+vp_H?
zWU?r;`%uTKX4FMP&g}{q;4@rDmU2QLfxp#JK|YyRsWlj&y_s{$S9Y@u`Owt4s9XV=@qmnt#4v(1-|`tyqns+E}y;<#s&n>?g%Te>h|YLa~7P
z)u-?D{wCAo$cO$h!~fYtH~<~-y7z8_U8vbxWxl+1`Pgc0+pC+eFSlg!NS?(zN+noF?1CAsMx&j~(0}@BMrJp(
zd*6Ors1+@vy6Buv!IlF9YHm(eYO=mUR<4%p$J6kgRXrBos2Pd*%~-@39`uKY1EEom
zS0G%h#<@JG$%Bkcoy*iI?xl8TttK5s&d^trGs*VUk-b%gXy>9LucmQ6uY{Jev?23H
zFaXxeWJ*<5oU18pk>whmw0{#Vnans(XY8#tHi;}h##vf}M?%(K$n2?jB-kc){Sg1k
z<|>}x)>ggV|3qzE$;&LODjs3?;NYNm!@qdLLHbB|hurAYQHKBCU={sYlIT8J5k0)sOBB3Gwn9m%YFo*o%anEqrANBlyED#(Xe?WPdN3uhOrN;)rA
z_%UIezs>b6zu5=U{lASyo}4kd9`*b
z?tdb>QH+Qd0O3#w))rAC8V!U)Le9>}gIUHy0w!E9UBg4%M+_U$z-Wk|T^3Gcu}RMe
zOCmnMNg`)5lq74X^gJ*=5j4gTZa$O5cEr1Z?c!nWTrJGX+<%hO+O+ChoT<1ltT+LY
zo`?~RjRQ`=4~M!$rRdNHR>=
z0UG;*;gCTBtj4meFC&SaR?aCbkOI(ZX4B2m$J3;Bp)CF@U<$QcW4FA%Ov&7d{Y_o%
zUSbI&h4VB4EPt1mt1^4>`Z5g{4-9y{-ssrCkSFSo1SXJkE;>shd(#|@fQ0_
za(}oq3Jl;{AIcD%r7lp^gjdT#$;#}hR1QD&D#AkpB!6bIosT2Z#Qm?#F=Wz@hko%R
zBq&8EU{Q?w{P!MsK7?n!^!)n4hg`gnEvRm?oT6whx2$TzPNx70R&^d#7j(+4AvcF^
z{q)B}Khc8vuXcOr*3j+uZc*9R$Ya&#k)iE)!nwL~S{r;Jd;XbyGEW&9Lau*qi1zV<
zQ%MkGX@8Z~N=@b#36OFX@Pw$TlYT$0c8UOfZ4ocT_qYqun#Gh=Pcb2&`dr(=LvRR{
zUIvgkdnYyyT{+Siz|@Cf4+oK+8ulpDy}x?@lLsH%``9bmvkPEx_IBKvJ(d?|v?{wK
zt5a+ZoZ-C|i(Wye%@yU+oGecf|4D;V7Om#4Gk?{zcZ%)Avf9Z3XsHL5q0XjL&CM^KRaN}|?820;u+JXdqwR1~L6j5{7
zh<}hD=A6n)a7cQoYYRd3Y#j!H&(+x^kP>{B6z{-xdvafG7o74bRq9rSi`
z|M~v^{pRkykKTuAt2$N?>!Fdr=#UvEDh&rwkS*bk2f$(+uGb9uJGYGvz4b4YSpW9c
z5Qsw5{7umK+z9^bTl$AF{FYZR{UQ@*RDYx3oWHnngUSl^5e4Yr#24_>K15|ab6yth
z{Jit(LTwk(M^GMU3JW`OY|G3`{4HBed$nlQXIux=7uW%+lBFu6x1exawX|ADBeI~ku^31BAhzDHGADF%f!_R%B_Wy*#!T*gK6fotfZX1WKc78{d_PNYj)x1+|k$1T$
zYiyaK-+dz3w(Y%XySz@Oc<-jL4}ZUg3(2|oed{*;rh~S2t!mx5SRy|^D=@Htog=;3
z^D3J|kEW7)J+1o7#9z}3;Ceq|bZ$gSJ}|=*ZuiEWmrGPM6@f$g&gd1%?=qcA&m$r{
zXTOS6yH=&Vf;XaDLsx{mQJdFsnA-^Wc;R-8n)^Gg
zSxN#h7BeueTMy^e8i9PL+axlsHFBG7ZGC3ld}*1PMI%Z6WOs2xZhv3afq2-giv(!~
z6SJ+cxnqkcl49H^*!0>MMVXy**)32J>v7B661iu6SG`z8OM@~`-3L^}Ei0GK?8~m7
zfN3tY=*Xvf%ZP_klsn-%M0mET8}8%_K8W*Kl@5@!R{a1)kyD1<$>D-RL0HHMmDl5*
z`n-#dn@6Y{RI7F`pntzwO_8rES@hoS+eU^Miw0C#F0?n2RP{7Ia|6<$69^b)1{A%s
zbySJ&neMP4c@9OplLA&wn~g%M8y{|x=}aQ!vf3|5wb;aH#0O@F7!IKE)h&`H9b{-7
zDsDo|Z1&QHst!R~_cS&ZlQ1qMZ&KzB)P@T?D?~V*d&<{TI)5g}DAg5$l1i;#%dQQW
z8F8K0tzO79A^-fyL?;b9AN+~uVF-fycQ-1n0P9pXM!z*&+HX}p7NF&rF23N)Ef69AMP`t4|Z9_gz
zbh-u7K3Hi6g<#14{f|4b(bOmw<#4M^2xmL);E@+RN)}x+M26ou7_!!{23g7qpO&aIk-rUe`$l$N4JKJjg^ds$J!kp
z8c>LqzrSYX8!NzUPZ20HU02qn>!HECBU<@vWv{CilV<`C#R*G^WSL+G)>KgG%Ssc;
z5S1{;IwawEiD2~|c9A46sw)_IbDJ&r!Fu*VC)3tyK%k(#xUOV!_vEtMN#8{F3D5=s
z)im;b9vYs+#dGa6KT@5$J1-^ksVg_?i+tcwl=fVf{j{#QFop3p06%z|DV<%KRVpor
zD?8X>T)V(Lbb5O=W##&$aktR+ZD8W;kL@-{L<MPv{1{qT
zacwh+Zh}sY5I^eV%$_3S{7?Kk5G!@HPag5L{8rL$N6-ochav7z3+kCj{Z*|48fBPP
zS{OIsH={ii^cJ|^t|D#n-^U!J-W*TMClJ_QCv@T#gyg0KW`
zbw;0;?{h2i0l(H}dt%$?c`7_8Hy|0NCYw^S9PaWbOY?Mr_`d%FBk9C9bntv#X1eKV=S=0Yk&C_M
zbPw_S+yW(=xNQws*WBa41afHJ(9N-gugvM}z}aJNtw!uba6sn4^)t
zlt<^M*URSIw_nc;ryqU8G>m7vL{?q-bc^D^#{wy4&}(l!h0VyDRI`Q{W=w&o%2_eBpwk
zsNxs~xw+wTut7GdQKoZA-6E>M`f`7cFMe9fVnT>7KdX45LAoHqe(rlhH8G8%Zp61Q
zG}C
z+-3nEA6XD?OvtG8ZJUR|?-^Is6+2`RIyV2=nBIl`Sjqc&C@rI`P&GaQG){`&`Ig#Q
ziM3SqeD>ln2-`0ShMc*8GK5qIFc8QE4mHVB0al3I-q$QpQ#C+B@6!!Sq!fQGR;oKT
zFFFZClw1SgV1v6D8hTy>xJeu+bAS*4
zf}%M*x4(Q}9
zZ7M>HIsgY}902lu-_(Ix>i{(7Z>5Knl+nJ(&a3azv>_99Nj?a>NinYnG~r&jFL2Sf
zfGU(y4=7{yHQD#Mn8knLN_y^S%->}eDJlFunzH>KO&&6`0}v3sR&t!=Av9t39#9Au
z@PR*|19^3xNXX+XAO{8b0SeF*S8|v9b9?YVAWNPE(NEn&5KuA?u!Lu^z92n30HdfT
Qr6!dwD-pkN07(r02S>tlPyhe`

delta 17884
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
07

Where you step in.

You do not need to approve every commit. You do need to own the decisions that change the agreement.

  1. 01

    Set the goal

    You explain the goal and limits.

  2. 02

    Approve the design

    You approve this PR's boundaries.

  3. 03

    Review the result

    You review evidence before merge.

After design approval, the agent investigates, implements, validates, reviews, records, and commits. If PR and CI work are authorized, it completes those too without waiting for you to prompt each step.

A material scope change or an action outside existing authorization comes back to you with evidence and a proposal.

08

The details, when you need them.

Open the part relevant to your current question. Use the resource links above for the complete specifications.

What documents does the agent maintain?
OverallIt records the overall goal, requirements, and main steps so each PR has a clear purpose.
StepIt explains which PRs complete this step, their dependencies, and how to observe their integration.
PR designIt records audited code and the commit plan, then keeps decisions, progress, and evidence current during implementation.
Execution contractIt records this PR's approved scope, permitted actions, budget, and stopping conditions.
HandoffIt identifies the current PR, branch and HEAD, running jobs, logs, and the exact next action after recovery.

DESIGN FROZEN protects the requirements you approved, not the entire document. The agent still records discoveries and progress. Implementation, validation, and review stay separate; each item is checked only when that work has actually been completed. If one step needs one PR, expand the step document instead of keeping two copies.

What happens at compact or resume?

Compact is the host's process of shortening conversation history to free context; it does not create a new PR. A new PR starts in a fresh implementation session, while compact or resume continues the current PR. The optional continuity preset checks recorded mechanical freshness, attempts snapshots, and supplies recovery instructions. The agent still has to keep the design and handoff accurate and actually reconcile state after recovery.

MANUAL COMPACTCheck handoffStale? Sync firstThen compact
AUTOMATIC COMPACTSave snapshot / warningAllow compactRecover actual state

On resume, reload the current design, filled contract, and full execution rules; check the repo and existing jobs before editing. A snapshot cannot invent decisions or test results. Automatic compact must not get stuck waiting for a perfect handoff.

-
Optional hooks: installation, coverage, and limits

OPTIONAL CONTINUITY + CHECKPOINTS · NO MERGE GUARD

Choose continuity for compact recovery, checkpoints for commit/review reminders, or both. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.

Choose your optional presets

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
+
Optional hooks: installation, coverage, and limits

OPTIONAL CONTINUITY + CHECKPOINTS + STANDARDS · NO MERGE GUARD

Choose continuity for compact recovery, checkpoints for commit/review reminders, standards to run your declared checks after a commit, or any combination. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.

Choose your optional presets

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --hooks continuity checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --check-hooks
diff --git a/docs/index.zh-CN.html b/docs/index.zh-CN.html
index d6395f3..df5c317 100644
--- a/docs/index.zh-CN.html
+++ b/docs/index.zh-CN.html
@@ -34,7 +34,7 @@
 
07

你在哪些地方参与?

不用每次 commit 都点头。但会改变约定的决定,得由你来做。

  1. 01

    定目标

    你说清楚目标和限制。

  2. 02

    批准设计

    你确认这次允许改什么。

  3. 03

    review 结果

    你检查证据,再决定 merge。

设计批准以后,agent 自己调查、实现、验证、review、记录并 commit。PR 和 CI 工作如果已经授权,它也会继续做完,不用你一步一步催。

遇到实质性范围变化,或者现有授权以外的操作,agent 带着证据和方案回来找你。

08

细节,用到时再展开。

按你现在的问题往下看。完整 specification 可以从上面的资源链接打开。

agent 到底维护哪些文档?
Overall它记录整体目标、需求和主要步骤,让后面的 PR 知道在完成哪件事。
Step它说明当前步骤要拆成哪些 PR、谁依赖谁,以及怎样观察到它们配合起来了。
PR design它记录检查过的 code、commit plan,以及实施中持续更新的决定、进度和证据。
Execution contract它记录当前 PR 允许改什么、允许执行哪些操作、预算和停止条件是什么。
Handoff它记录当前 PR、branch 和 HEAD、仍在运行的 job、log 位置,以及恢复后具体接着做什么。

DESIGN FROZEN 固定的是你批准的要求,不是整份文档。Agent 仍要记录新发现和进度。Implementation、validation 和 review 分开记录,只有对应工作真的完成了才能打勾。如果一个 step 只有一个 PR,就展开原 step doc,不必复制成两份。

compact 或 resume 时,怎么接着干?

Compact 是 host 为腾出 context 而压缩聊天历史的过程,不是新建一个 PR。新 PR 要开新的 implementation 会话;compact 或 resume 则继续原来的 PR。可选 continuity preset 检查已记录的机械状态是否仍然匹配、尝试保存 snapshot,并提供恢复指令。Design 和 handoff 写得是否准确、恢复时有没有真正核对清楚,仍由 agent 负责。

手动 COMPACT检查 handoff过时?先同步再 compact
自动 COMPACT保存 snapshot / 警告允许 compact恢复真实状态

恢复时,重新读取当前 design、填好的 contract 和完整 execution rules;改 code 前核对 repo 和已有任务。snapshot 不能编决定或测试结果。自动 compact 不能因为 handoff 不完美就一直卡住。

-
可选 hook:安装、覆盖范围和限制

可选 CONTINUITY + CHECKPOINTS · 尚无 MERGE GUARD

需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,也可同时安装。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。

选择需要的 preset

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
+
可选 hook:安装、覆盖范围和限制

可选 CONTINUITY + CHECKPOINTS + STANDARDS · 无 MERGE GUARD

需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,需要在 commit 后跑你声明的检查可选 standards,也可任意组合。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。

选择需要的 preset

./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --hooks continuity checkpoints
 ./structured-coding/scripts/install codex --project /path/to/project --check-hooks
diff --git a/scripts/build_packages.py b/scripts/build_packages.py
index 406a8ea..3272c44 100644
--- a/scripts/build_packages.py
+++ b/scripts/build_packages.py
@@ -20,6 +20,7 @@
 # Adding a new source file requires an explicit publication decision here.
 PUBLISHED_FILES = {
     "SKILL.md",
+    "VERSION",
     "README.md",
     "README.zh-CN.md",
     "agents/openai.yaml",
diff --git a/scripts/hook_install.py b/scripts/hook_install.py
index faca660..0647992 100644
--- a/scripts/hook_install.py
+++ b/scripts/hook_install.py
@@ -685,6 +685,8 @@ def doctor(host, project):
     record, presets = validate_record(read(receipt), host, project, skill, config)
     validate_owned(current, record["groups"])
     verify_skill({"skill": skill, "presets": presets})
+    declared = read(safe(skill, "VERSION"))
+    installed = declared.decode().strip() if declared else "unknown"
     portability = (
         "Commands are portable across machines."
         if shape_for_schema(record["schema"]) == WRITE_SHAPE
@@ -693,7 +695,7 @@ def doctor(host, project):
         "registration portable."
     )
     return (
-        f"Installed presets: {', '.join(presets)}. Registration and runtime files match "
-        f"({host} {version_string}). {portability} "
+        f"Installed presets: {', '.join(presets)}. Skill version {installed}. "
+        f"Registration and runtime files match ({host} {version_string}). {portability} "
         "Trust/enabled state and real host delivery still require /hooks verification."
     )
diff --git a/scripts/test_hook_presets.py b/scripts/test_hook_presets.py
index b26bd03..1836853 100644
--- a/scripts/test_hook_presets.py
+++ b/scripts/test_hook_presets.py
@@ -95,6 +95,8 @@ def test_every_preset_coexists_and_any_one_can_be_removed(self):
                     expected = set().union(*(self.EVENTS[p] for p in survivors))
                     self.assertEqual(set(json.loads(config.read_bytes())["hooks"]), expected)
                     report = hooks.doctor(host, self.project)
+                    # A user must be able to tell which release they installed.
+                    self.assertIn("Skill version 0.1.0", report)
                     for survivor in survivors:
                         self.assertIn(survivor, report)
                     data = self.state(host) / "retained.json"
diff --git a/scripts/test_standards.py b/scripts/test_standards.py
index f7ef889..27b8272 100644
--- a/scripts/test_standards.py
+++ b/scripts/test_standards.py
@@ -259,6 +259,17 @@ def test_command_is_refused_where_it_makes_no_sense(self):
                 self.assertIn(expected, str(caught.exception))
 
 
+class VersionTests(unittest.TestCase):
+    def test_the_shipped_version_is_a_plain_release_string(self):
+        import build_packages
+        text = (build_packages.SOURCE / "VERSION").read_text()
+        self.assertRegex(text.strip(), r"\A\d+\.\d+\.\d+\Z")
+        self.assertEqual(text, text.strip() + "\n")
+        self.assertIn("VERSION", build_packages.PUBLISHED_FILES)
+        for host in build_packages.HOSTS:
+            self.assertIn("VERSION", build_packages.source_files(host))
+
+
 class PackagingTests(unittest.TestCase):
     def test_a_stray_bytecode_cache_does_not_break_packaging(self):
         """Importing an installed helper must not make the skill unpublishable."""
diff --git a/structured-coding/README.md b/structured-coding/README.md
index b910af7..2666d71 100644
--- a/structured-coding/README.md
+++ b/structured-coding/README.md
@@ -232,7 +232,7 @@ On resume, reload the current design, filled contract, and full execution rules;
 
 ## Optional hooks: installation, coverage, and limits
 
-Choose continuity for compact recovery, checkpoints for commit/review reminders, or both. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
+Choose continuity for compact recovery, checkpoints for commit/review reminders, standards to run your declared checks after a commit, or any combination. Both are off by default. Checkpoints advises; it does not enforce commits or certify readiness. Protocol tests do not establish native event delivery or model compliance. The agent does not dynamically register its own hooks.
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/structured-coding/README.zh-CN.md b/structured-coding/README.zh-CN.md
index bdedf05..82ad56f 100644
--- a/structured-coding/README.zh-CN.md
+++ b/structured-coding/README.zh-CN.md
@@ -232,7 +232,7 @@ Compact 是 host 为腾出 context 而压缩聊天历史的过程,不是新建
 
 ## 可选 hook:安装、覆盖范围和限制
 
-需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,也可同时安装。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
+需要 compact 恢复可选 continuity,需要 commit/review 提醒可选 checkpoints,需要在 commit 后跑你声明的检查可选 standards,也可任意组合。默认都不开。Checkpoints 提供建议,不拦截 commit,也不证明已达到交付条件。Protocol 测试不能证明 native 事件送达或模型遵守了提示。agent 不会动态注册自己的 hook。
 
 ```sh
 ./structured-coding/scripts/install codex --project /path/to/project --hooks checkpoints --dry-run
diff --git a/structured-coding/VERSION b/structured-coding/VERSION
new file mode 100644
index 0000000..6e8bf73
--- /dev/null
+++ b/structured-coding/VERSION
@@ -0,0 +1 @@
+0.1.0
diff --git a/structured-coding/references/hook-contract.md b/structured-coding/references/hook-contract.md
index ca700a4..bd37038 100644
--- a/structured-coding/references/hook-contract.md
+++ b/structured-coding/references/hook-contract.md
@@ -1,6 +1,6 @@
 # Hook behavior contract
 
-Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The requirements below remain the complete target, not a claim of full adapter coverage.
+Status: **BEHAVIOR SPECIFICATION — optional [continuity preset](continuity.md) implements mechanical H4 checks, H5 snapshot attempts, and the H6 recovery-instruction subset.** It is not registered by default. The optional [checkpoints preset](checkpoints.md) adds H2 commit-preparation advice and an H7 review-intent notice, with zero automatic continuations. Full H1/H2/H3/H7 enforcement and H6 mutation enforcement remain unimplemented. The optional [standards preset](standards.md) is **not** an adapter for anything specified here: it reports a project's own declared checks and review conventions after a direct `git commit`, which is a different axis from the freeze, merge and continuity behaviour this contract describes, and it blocks nothing. The requirements below remain the complete target, not a claim of full adapter coverage.
 
 This contract translates the workflow's freeze, merge, and context-continuity requirements into observable behavior. Event names below describe the workflow; actual host adapters are separate work. Supported host events and their sources are listed in [platforms.md](platforms.md).
 
diff --git a/structured-coding/references/platforms.md b/structured-coding/references/platforms.md
index a14f482..3047d1d 100644
--- a/structured-coding/references/platforms.md
+++ b/structured-coding/references/platforms.md
@@ -31,11 +31,11 @@ From the cloned repository, use the exact project Git root (quote paths with spa
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks.
+Use `claude-code` for Claude Code. Python 3.9+, Git and macOS/Linux/WSL are required. Current conservative host floors are Codex 0.153.4 and Claude Code 2.1.261; host delivery needs separate native verification. Restart the host and inspect `/hooks` after changes; the installer does not grant trust or enable disabled hooks. The installed copy carries its release in `VERSION`, and `--check-hooks` reports it, so you can tell which one a project has.
 
 Codex requires trust at **two** levels, and a registration is inert until both are given. First the project: until it is trusted, Codex loads no project-local hooks at all and says so on stderr, naming the file it wants the entry in. That entry must live in the `config.toml` under `CODEX_HOME`; a `-c projects."".trust_level="trusted"` override on the command line does **not** satisfy it, which is the failure that looks like hooks being delivered but ignored. Second, each hook definition is trusted by its own content hash, so changing a command asks again. Both are Codex's own mechanism; neither is granted by this installer. Claude Code has no equivalent second level.
 
-Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. Both use five groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
+Installation is additive. Standards alone registers shared SessionStart and PostToolUse, and is the only preset that runs anything; its PostToolUse hook carries a 60-second budget rather than 12, because a check is slower than a notice. Checkpoints alone registers shared SessionStart, PreToolUse and Stop, without compact handlers. Continuity alone registers shared SessionStart and manual/automatic PreCompact. All three together register six groups, with SessionStart exactly once. Removing one keeps the other usable. Bare `--remove-hooks` removes all owned presets and preserves the skill and session data. Repeating a selection is a byte-preserving no-op; duplicate/unknown names are rejected.
 
 One aggregate receipt owns the original settings backup. Legacy continuity receipts remain readable and migrate only on an explicit state change; check, preview and unchanged reinstall do not rewrite them. Existing customized runtime dependencies are never overwritten: compare/back up the installed skill and explicitly update it first. Missing, changed or duplicate owned groups, unknown receipt schemas, and redirected/unverifiable paths cause refusal. New installations register commands that contain no machine-specific path, so a registration committed to a shared settings file works on a teammate's machine; each machine still reviews and trusts the hooks itself. An installation made by an older release keeps its absolute commands, stays inspectable and removable, and is rewritten only by `--upgrade-registration`, which changes every command and therefore requires trusting the hooks again. `--check-hooks` says whether a registration is portable, and names the recorded interpreter only for an absolute one.
 
diff --git a/structured-coding/references/platforms.zh-CN.md b/structured-coding/references/platforms.zh-CN.md
index 8b66fc9..af19c8d 100644
--- a/structured-coding/references/platforms.zh-CN.md
+++ b/structured-coding/references/platforms.zh-CN.md
@@ -31,11 +31,11 @@ Codex 的目录和调用方式依据 [OpenAI 官方 skills 文档](https://learn
 ./scripts/install codex --project /path/to/project --remove-hooks
 ```
 
-Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。
+Claude Code 用户把 `codex` 换成 `claude-code`。需要 Python 3.9+、Git 和 macOS/Linux/WSL。目前保守的宿主版本下限是 Codex 0.153.4 和 Claude Code 2.1.261;实际事件送达还需要独立的 native 验证。修改后重启 host 并检查 `/hooks`;installer 不授予信任,也不会打开被禁用的 hook。安装后的副本在 `VERSION` 里带着自己的发布版本,`--check-hooks` 会报告它,所以你能知道某个项目装的是哪一版。
 
 Codex 的信任分**两层**,两层都给到之前注册都是空转的。第一层是项目:在项目被信任之前,Codex 根本不加载任何 project-local hook,并会在 stderr 上说明,同时指出它要求写入的文件。那条记录必须写在 `CODEX_HOME` 下的 `config.toml` 里;命令行上的 `-c projects."".trust_level="trusted"` 覆盖**不满足**这一条,而这种失败看起来像是 hook 被送达却被忽略了。第二层是每个 hook 定义按自身内容 hash 单独信任,所以改动命令会重新询问。两层都是 Codex 自己的机制,installer 都不会替你授予。Claude Code 没有对应的第二层。
 
-安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。组合安装共五个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
+安装是追加操作。单装 standards 会注册共享 SessionStart 和 PostToolUse,它是唯一会真正运行东西的 preset;它的 PostToolUse hook 预算是 60 秒而不是 12 秒,因为跑一次检查比发一条提示慢。单装 checkpoints 会注册共享 SessionStart、PreToolUse 和 Stop,不注册 compact handler。单装 continuity 会注册共享 SessionStart 和手动/自动 PreCompact。三个一起安装共六个 group,SessionStart 只出现一次。移除一个后另一个仍可用。裸 `--remove-hooks` 移除全部自有 preset,保留 skill 和 session 数据。重复安装同一选择不会改变文件字节;重复或未知名称会被拒绝。
 
 一份 aggregate receipt 保存原始设置备份。旧 continuity receipt 仍可读取,仅在明确改变安装状态时迁移;检查、预览和未改变选择的重装都不改写它。installer 不覆盖定制过的 runtime 依赖:先比较、备份已有 skill,再明确升级。自有 group 缺失、被修改或重复,receipt schema 未知,以及路径被重定向或无法核验,都会导致拒绝。新安装注册的命令不含任何机器相关路径,因此提交到共享设置文件里的注册在同事的机器上同样有效;每台机器仍需自己审阅并信任这些 hook。旧版本装出来的注册保留其绝对路径命令,仍可检查、仍可移除,只有 `--upgrade-registration` 会重写它;重写会改变每一条命令,因此需要重新信任这些 hook。`--check-hooks` 会说明注册是否可移植,并且只对绝对路径的注册报告记录的 interpreter。
 
diff --git a/translations.json b/translations.json
index 62bd365..67c19bf 100644
--- a/translations.json
+++ b/translations.json
@@ -3,15 +3,15 @@
   "presentation_source_pair": {
     "english": "docs/content.en.json",
     "chinese": "docs/content.zh-CN.json",
-    "english_sha256": "8db93e6522744e63cef3d46f214034f6237002ffc86b2b0cdfd5f45d4500255e",
-    "chinese_sha256": "aca9fcad8ead24426e8d64b08cb1645cc0eb1438afc68c0d721e972c5d9eb56d"
+    "english_sha256": "134e958f2c914435b757584b16169141427c2a9ad1f4091e024c6c19d5927451",
+    "chinese_sha256": "a8eee06738196a2000f7016cd822cb7c172c0ccade49b5a9011d25f99714e526"
   },
   "pairs": [
     {
       "english": "README.md",
       "chinese": "README.zh-CN.md",
-      "english_sha256": "04f659d3634cbdb4c0613aa7e479eab0e495470c7a23f821c5ce839390214674",
-      "chinese_sha256": "b09bc57d9c97cab448023537efe777e186a5540719f7304dc4dd8a956b1822a4"
+      "english_sha256": "7e4fcb667638ec5d3300db5ae269d9f4b2c2eab6544c9c73c2d59cc4eeb1cb39",
+      "chinese_sha256": "d54503afa062fcb488bb55bdbc1af463455a2d44d7baf62424878cb5a55483c4"
     },
     {
       "english": "TUTORIAL.md",
@@ -22,8 +22,8 @@
     {
       "english": "structured-coding/README.md",
       "chinese": "structured-coding/README.zh-CN.md",
-      "english_sha256": "e953396c0b59ac68fd94aa5e70ead11cecf9123f7bcb75d0df5bf7687ee4883a",
-      "chinese_sha256": "34570f05a25eaee49a145da9332424bc7207a76a92506addc4c0ad146c8ed9ed"
+      "english_sha256": "1cd4b7df7a6dfbfe32c0f694d7a07fa9cc2c98e9a2bb210d51838fbdeec09d8e",
+      "chinese_sha256": "7f7ccbeaef3aa966b4a7b7cf6de4590b94554dc906a7b48dbcad618cc5e14dac"
     },
     {
       "english": "structured-coding/references/agent-workflow.md",
@@ -40,8 +40,8 @@
     {
       "english": "structured-coding/references/platforms.md",
       "chinese": "structured-coding/references/platforms.zh-CN.md",
-      "english_sha256": "c38c3a4029f8aa81fceff307fe0bf9d2053a4258104448ee3eb0231ececa1524",
-      "chinese_sha256": "b57aa667541f6d86712158cc2cf1ddfbce8be1bf06d2f7d23ee6a04f33ffd4ac"
+      "english_sha256": "337dcccc731d825606d58955e86f20fc34d5749da2c7f41e6e19f6723a5e3d74",
+      "chinese_sha256": "8391e94bb9fa9d48315288414080392bb6ab00499562368e394eeebb07e51469"
     }
   ],
   "specification_sha256": {
@@ -49,6 +49,6 @@
     "structured-coding/prompts/implementation-working-rules.md": "7caa1d829fcdb0741b3b621918d6058352adcacf6c8bfee5267e37d2850debcf",
     "structured-coding/prompts/pr-design-requirements.md": "dc5d654ee5e4e2d7a7558726823eb3452167f551d7841403ac8a98c862972baa",
     "structured-coding/prompts/test-ci-gate-rules.md": "ace549262e04880577248189f8ae460f18c13a6b2ecf6280d600566c2cd003e1",
-    "structured-coding/references/hook-contract.md": "37ecc2b092669dd3253556564f1cb4086a4309937d573dd7bf5a52342179ad75"
+    "structured-coding/references/hook-contract.md": "bb4aeec01af96ea42d0fb4248e9b9e3ccf54cae8f7266f523eed57031a68d81f"
   }
 }