Repository navigation
Commit 30f8fdd
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DEsWMgMazMEzGNW4yuNJbZb)_
domain:skills#2 · os-elon-musk · session_016WV4d1j1VPnYjVUvuUMHjc
Fixes #27684
Ruling-ref: 6467932167
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么:** 只改 `docs/adr/0025-plugin-package-distribution.md` 一个文件,把
ADR-0025 v2 里被 M1 三片(#27335、#27374、#27679)变成假话的说法改成代码现在的样子。卡上点名的 8
处:§3.5 的 M1 条改成 ✅ 已落地行;§7 按裁决 6467932167(B′)加一条带日期的说明(M1
已有最小形态的可信公钥库);"Steps 4–7 不存在、没有 `os plugin install`" 那句;§3.2 示例注释;§3.3
两句(原生插件拒绝、`manifest-deps` 构建半边已删);§3.5 第 5 步的 pnpm install;§5 风险一条。另有同类
3 处(席位已同意就地修):状态行、§3.4 第 2 步"验签没有生产调用方"、§3.6"没有任何东西按 tier 分派"。Q6
等正确的历史记录行一字未动。
- **为什么改:** ADR 是后续卡片和 AI 都要读的约束文本。现在它还说"没有 `os plugin
install`"、"构建还不拒绝原生插件"、"可选用 manifest-deps 缓解",会把人和 AI 引向已经不存在或已退役的东西。这是
#27123 欠下的 Tier H 文档收尾。
- **风险与回滚:** 纯文档,无代码、无行为变化。风险只在措辞是否与代码一致:每一句替换文字都在 `origin/main`
f5dd057 上实测过,证据见下方 What changes。M1 的验收(cloud 车道 Stripe
样例端到端,#27570)还没做,✅ 行如实写了"仍未完成"。回滚 = revert 本 PR。
- **先看:** §3.5 的 ✅ M1 行和它上面改写的 "Steps 4–7" 句;§7 的日期说明;第 3 行状态行。
- **两分钟验证:** 运行 `grep -n "M1 adds\|nothing dispatches\|Steps 4–7 do
not\|no production caller\|mitigated by the opt-in"
docs/adr/0025-plugin-package-distribution.md`,预期零命中(同一条命令在 main 上命中 5
行,都是被更正的假话);再运行 `grep -n "manifest-deps"
docs/adr/0025-plugin-package-distribution.md`,预期剩下的每一行都在说它已退役。
- **需要你做的:** 现在无需操作。契约审查(fable)尚欠,由席位进行,尚未请求批准;审查通过后席位再请你批准,批准后由席位落地。
## What changes
One file, `docs/adr/0025-plugin-package-distribution.md` (+45 / −33).
Every replacement sentence was measured on `origin/main` `f5dd0575`;
line numbers below are on that commit unless marked.
The eight edits the card lists:
| # | Where | Was | Now | Evidence |
|---|---|---|---|---|
| 1 | §3.5, the M1 bullet | the plan | ✅ landed 2026-10-29 (#27335,
#27374, #27679), what each step does, and the acceptance run on the
cloud Stripe sample still open (#27570) | `install.ts` header steps 1–6;
`installed-plugin-loader.ts` header checks 0–5;
`plugin-installation-store.ts` header (local stand-in for the
`sys_package_installation` row); `disable.ts`, `uninstall.ts` headers;
#27570 open, `status:parked`, `domain:cloud` |
| 2 | §7, key management | deferred to M3 | + a dated note, as ruling
`6467932167` ordered: the trusted-key store landed in M1 in its minimal
form; rotation and the `platform` / `cloud` sources stay M3 |
`packages/platform-objects/src/system/sys-trusted-key.object.ts`
(`source` select `local` / `platform` / `cloud`, `status` `active` /
`revoked`); `packages/cli/src/commands/plugin/keygen.ts`;
`trust/{add,list,revoke}.ts`; install refuses an unknown or revoked key
id (`install.ts` header step 1), the loader too
(`signature_key_untrusted`, `signature_key_revoked`) |
| 3 | §3.5, "Steps 4–7 do not exist … there is no `os plugin install`" |
false | steps 4–7 exist for a local artifact only (step 7's per-plugin
enforcer is M2); in the cloud nothing serves the `.osplugin` back |
`install.ts` exists and takes a file path only (`Args.string`, "Path to
the .osplugin artifact"); §3.4's download-route sentence is unchanged
and still true |
| 4 | §3.2, `// bundled \| manifest-deps` | stale | `// bundled, the one
strategy` | `manifest.zod.ts:258` `enumWithRetiredValues(['bundled'],
PACKAGING_RETIRED)` |
| 5 | §3.3, "the build does not yet refuse them mechanically (M1 adds
the refusal)" | false | `os plugin build` refuses a native addon before
writing anything | `build.ts:303` `findNativeAddons` and the refusal,
before `computeIntegrity`; the only writes are `build.ts:331–332`, after
it; esbuild runs with `write: false` (`build.ts:271`) |
| 6 | §3.3, "the build-side half is removed in M1" | future tense |
done: the schema refuses `manifest-deps` by name with its prescription;
M1 (#27679) removed the build half | `manifest.zod.ts:238–258`
(`PACKAGING_RETIRED`); `build.ts` header step 2 (everything but
`@objectstack/*` inlined) |
| 7 | §3.5 step 5, "For manifest-deps, run `pnpm install …` here" |
stale | *v2:* nothing is installed there; install runs no package
manager | `install.ts` header: verify, read, re-verify integrity,
materialize, record; no package-manager call in `install.ts` |
| 8 | §5 Negative, "mitigated by the opt-in manifest-deps strategy in
Phase 5" | false | the build refuses native addons; with manifest-deps
retired a plugin that needs one waits for M3 (§3.3) | §3.3's own
retirement paragraph; `build.ts:303` |
Three more in the same file, same defect class (made false by slices
1–3), fixed in place under os-dev's bounded in-place rule and agreed by
the seat before the edit (claim 6511498060's file-surface line names
them):
| # | Where | Was | Now | Evidence |
|---|---|---|---|---|
| 9 | §3.6 v2 paragraph | "**nothing dispatches on the tier at load**";
"Until M3, the publish-time refusal is the only tier gate" | the
boot-time loader dispatches (`node` imported in process; `sandbox` /
`worker` and an undeclared tier refused by name); until M3 nothing loads
isolated | `installed-plugin-loader.ts:180–195` `dispatchPluginRuntime`
(`runtime_undeclared`, `runtime_not_dispatched`);
`manifest.zod.ts:214–222` describe; listed as owed in the slice-2
hand-over 6496079064 |
| 10 | §3.4 step 2 | "`verifyPluginArtifact` … has **no production
caller until M1** (the loader checks only that a signature is
well-formed)" | install and every boot verify against the environment's
trusted keys; `plugin-loader.ts` refuses a signature no host verified |
`install.ts:254` `verifyPublisherSignature`;
`installed-plugin-loader.ts:341` `verifyPluginArtifact`;
`plugin-loader.ts:519–552` |
| 11 | Status line | M1 listed under "Not yet built" | M1 listed under
what landed (acceptance run still open); the cloud fetch stays M2, tier
dispatch beyond `node` stays M3; "amended 2026-10-30 to what M1 shipped"
| the three merged PRs above; `docs/adr/README.md` index cell unchanged
(`adr-index --check` OK) |
Kept as written, because they correctly record the retirement: the v2
note (L15), the artifact tree (L141–142), the §3.3 RETIRED bullet head,
the Q6 row, the §4 M1 phasing bullet and the Phase 5 mapping line.
## Tests
None: an ADR text change, no code and no tested behaviour, so no
ablation.
## Acceptance notes
- **Line budget:** net +12 against the order's "≈ 0". Where it went: the
§7 note the ruling ordered (+5, new content), §3.6 (+3, item 9), §3.3
(+2), the §3.5 M1 line (+2); the status line and every other hunk 0.
Nothing was re-wrapped to buy lines.
- **Deviation, declared:** items 9–11 are outside the card's eight. The
order's mechanism assumption ("only fix the eight") was measured false:
those three sentences would contradict the new ✅ line. Reported to the
seat before the edit; the seat amended the claim.
- **The ✅ line is not a full acceptance:** #27123's acceptance e2e on
the cloud `plugins/connector-stripe` sample is #27570 (cloud lane,
parked). The line says so.
- **§7 note wording:** the ruling's order reads "rotation policy and
platform / cloud sources stay M3"; the note uses that phrasing. The
ruling's own body places the `cloud` rows with M2's chain; the note does
not restate that schedule.
- Observation, not edited (original design text, not one of the eleven
and not contradicted by M1): §3.7 "Supply chain. Lockfile + per-file
integrity …" still names a lockfile, which a bundled-only artifact does
not carry.
- Observation, not filed (code comment drift, outside this card's
surface): `sys-trusted-key.object.ts`'s docblock says install verifies
with `verifyPluginArtifact` (it calls `verifyPublisherSignature`, which
`verifyPluginArtifact` wraps) and names the boot-time loader as not yet
built.
- No changeset: `docs/adr/**` publishes nothing; `skip-changeset` is set
with this PR's creation.
## Verification
Head `c49a117f`. Local subset = every family `node
scripts/pm/dispatch-gates.mjs --commands` derives for this diff (21),
re-run on the final head; the lint closure was built first for
`check:doc-formula-expressions`.
<details><summary>dispatch-gates: 21 derived, 21 run, all exit
0</summary>
```
node scripts/check-adr-links.mjs :: exit 0
node scripts/check-adr-links.mjs --self-test :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:adr-anchors :: exit 0
pnpm check:adr-index :: exit 0
pnpm check:adr-symbol-anchors :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-prior-rulings :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:watch-hint-literal :: exit 0
```
`dispatch-gates --ran`: "21 derived famil(ies) accounted for — 21 run, 0
NOT-MEASURED (a DERIVED zero — all 21 recorded an exit code and none of
them is 3)."
</details>
<details><summary>Other readings</summary>
- `node scripts/adr-index.mjs --check`: "OK — docs/adr/README.md is
current and every record parsed." (the index cell is cut before the
status-line text this PR changes).
- `node scripts/check-commit-card-trailers.mjs --range
origin/main..HEAD`: both commits clean.
- `dispatch-gates --tier`: MANDATORY `docs/adr/**` ceiling tier; this
draft was written at the default tier on the seat's recorded downgrade,
and the contract review at the ceiling tier is owed before any approval
is asked.
- Changed lines 78 (+45 / −33), under the 3000 human-merge threshold.
- Card re-check on the head: `grep -n "manifest-deps\|Steps 4–7\|M1
adds" docs/adr/0025-plugin-package-distribution.md` hits L15, L141–142,
L188, L192, L295, L560, L567, L582, L603 — each one either records the
retirement or is a corrected line.
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_016WV4d1j1VPnYjVUvuUMHjc)_
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_016WV4d1j1VPnYjVUvuUMHjc
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent d5151a7 commit 30f8fdd
1 file changed
Lines changed: 61 additions & 38 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
159 | | - | |
| 159 | + | |
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
185 | | - | |
186 | | - | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
187 | 188 | | |
188 | 189 | | |
189 | 190 | | |
190 | | - | |
191 | | - | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
192 | 194 | | |
193 | 195 | | |
194 | 196 | | |
| |||
214 | 216 | | |
215 | 217 | | |
216 | 218 | | |
217 | | - | |
218 | | - | |
219 | | - | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
220 | 222 | | |
221 | 223 | | |
222 | 224 | | |
| |||
264 | 266 | | |
265 | 267 | | |
266 | 268 | | |
267 | | - | |
268 | | - | |
| 269 | + | |
| 270 | + | |
269 | 271 | | |
270 | 272 | | |
271 | 273 | | |
272 | 274 | | |
273 | | - | |
| 275 | + | |
274 | 276 | | |
275 | 277 | | |
276 | 278 | | |
| |||
280 | 282 | | |
281 | 283 | | |
282 | 284 | | |
283 | | - | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
284 | 288 | | |
285 | 289 | | |
286 | 290 | | |
| |||
290 | 294 | | |
291 | 295 | | |
292 | 296 | | |
293 | | - | |
294 | | - | |
295 | | - | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
296 | 300 | | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
308 | 314 | | |
309 | 315 | | |
310 | 316 | | |
| |||
333 | 339 | | |
334 | 340 | | |
335 | 341 | | |
336 | | - | |
337 | | - | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
338 | 346 | | |
339 | 347 | | |
340 | | - | |
341 | | - | |
342 | | - | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
343 | 352 | | |
344 | 353 | | |
345 | 354 | | |
| |||
387 | 396 | | |
388 | 397 | | |
389 | 398 | | |
390 | | - | |
391 | | - | |
392 | | - | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
393 | 405 | | |
394 | 406 | | |
395 | 407 | | |
| |||
592 | 604 | | |
593 | 605 | | |
594 | 606 | | |
595 | | - | |
596 | | - | |
| 607 | + | |
| 608 | + | |
597 | 609 | | |
598 | 610 | | |
599 | 611 | | |
| |||
628 | 640 | | |
629 | 641 | | |
630 | 642 | | |
631 | | - | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
632 | 651 | | |
633 | 652 | | |
634 | 653 | | |
| |||
654 | 673 | | |
655 | 674 | | |
656 | 675 | | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
657 | 680 | | |
658 | 681 | | |
659 | 682 | | |
| |||
0 commit comments