Repository navigation
docs: retire manifest-deps from the plugin-distribution note, re-point two stale plugin-build checklist negatives, correct the liveness manifest cell - #27698
Conversation
…strategy; manifest-deps retired Claude-Session: https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW Co-authored-by: Claude <noreply@anthropic.com>
…ust-tier negatives; correct the liveness README manifest cell Claude-Session: https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 167 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW 席位核对 — ACCEPT · domain:devx#2 · head
|
Fixes #27685
Clause-②: no
Metadata-protocol: none
维护者速读
bundledis the one plugin packaging strategy —manifest-depsis retired, andos plugin buildrefuses a native addon (#27123, slice 3 of 3, server half) #27679 之后的代码:插件分发设计文档只剩bundled一种打包策略;cli 检查清单条目的两条过期否定句改指向真正做校验与分发的代码;liveness README 的manifest单元格改正 dead 集合(19 → 与生成分片一致的 13)并补上packaging为何是planned的一句。manifest-deps已被移除并按名拒收,文档却仍把它写成可选策略;检查清单仍说「解包时无人复核 integrity」「无人按 runtime 分发」,而 ADR-0025 M1 — local T0 install loop for first-party, self-signed plugins: os plugin install (signature + integrity, materialize, record), boot-time loader with the tier dispatch point, disable/uninstall, Stripe sample as acceptance #27123 的前两片已经实现了这两件事;README 的手写计数早已过期。packages/spec/liveness/README.md随 npm 包发布,故带一个@objectstack/specpatch changeset。回滚即 revert 本 PR。docs/qa/platform-checklist/areas/cli.json(两条否定句与 revision 5 历史条目)、packages/spec/liveness/README.md(manifest行的 dead 集合句)、docs/design/plugin-distribution.md§4.3。grep -rn "manifest-deps" docs/design/plugin-distribution.md docs/qa/platform-checklist/areas/cli.json packages/spec/liveness/README.md,预期只剩「已退役、按名拒收」的叙述,不再有把它当现行策略的句子。What changes
docs/design/plugin-distribution.md. The artifact tree no longer listspackage.json/pnpm-lock.yaml; the compiled-manifest sentence givespackagingasbundledalone; §4.3 is rewritten as "Packaging strategy: bundled only" with one dated note (in the file's existing note shape, as in §4.2) sayingmanifest-depswas retired and is refused by name (feat(spec, cli)!:bundledis the one plugin packaging strategy —manifest-depsis retired, andos plugin buildrefuses a native addon (#27123, slice 3 of 3, server half) #27679, ADR-0025 v2 §3.3); the publish-time tier gate no longer namesmanifest-deps; §6 step 5 says no dependency install runs at materialize. One same-class line beyond the claim's list: §8's supply-chain bullet named a lockfile and--ignore-scripts, both of which existed only for the retired strategy, so it now says no install-time package manager runs at all. Same file, same defect class, mechanical.docs/qa/platform-checklist/areas/cli.json,cli.plugin-manifest-build-contractonly (revision 4 to 5, history entry added). The integrity and trust-tier ⛔ negatives said nothing re-verifies the map at unpack and nothing dispatches onruntime. Both are false since slices 1 and 2 of ADR-0025 M1 — local T0 install loop for first-party, self-signed plugins: os plugin install (signature + integrity, materialize, record), boot-time loader with the tier dispatch point, disable/uninstall, Stripe sample as acceptance #27123. Each negative now names the code that does it as the check this item does NOT score:packages/cli/src/commands/plugin/install.ts#PluginInstallthroughpackages/core/src/security/plugin-artifact-integrity.ts#verifyIntegrity, andpackages/runtime/src/installed-plugin-loader.ts#dispatchPluginRuntime. The tracker numbers they cited (manifest.integritydeclares per-file artifact digests the spec says the runtime re-verifies at unpack — nothing computes them and nothing checks them #11331, [text correction · ruled B] manifest.runtime tombstone/describe reads truthfully: publish-gate enforced (cloud), load-side NOT enforced #11330) answer 404 in this repository and are gone from the negatives. Three source rows are added for that code. Scored clauses and steps are unchanged.packages/spec/liveness/README.md, themanifestcell only. "Dead 19" was a hand-typed count, and it was stale. It counted the seven per-child rows ofcapabilities/configurationinstead of their two tombstone rows, and aloadingrow that left the ledger with feat(spec)!: retirement kits whose conversion retired at or below 16.x age out; the strict unknown-key refusal names the protocol upgrade guide #26599. The cell now partitions the dead set the ledger holds (tencontributesmembers, plus the three retired containers at one row each) and says it sums to 13, the count in the generatedstate-counts/manifest.mdshard. It also gains the missing sentence forpackaging, the type's onlyplannedrow..changeset/27685-manifest-liveness-cell.md:@objectstack/specpatch.livenessis in the package'sfiles, so the README ships.Tests
No code changed, so no unit tests were added and none were run. Nothing was ablated, because no tested behaviour moved.
Acceptance notes
ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts:171) is untouched, per triage 6504381957. It rides the nextdomain:uiPR there.docs/adr/0025-plugin-package-distribution.mdstill namesmanifest-depsas live at L159 (the manifest example comment), L267 (§3.5 step 5) and L595–596 (the consequences bullet), while its own §3.3 retires it. The ADR is a governed surface and outside this card.plugin-distribution.mdsays the bundle is built withtsup(§4.1 tree, §5 step 1). The build uses esbuild (packages/cli/src/commands/plugin/build.ts; ADR-0025 v2 §3.3 says the same). §4.3 as rewritten names no bundler.Verification
H3: the count is generated, not hand-kept.
pnpm --filter @objectstack/spec gen:liveness-countsexited 0 and rewrote 0 shards, and the committedstate-counts/manifest.mdalready reads dead 13 / planned 1. Only the README prose was stale, so it was corrected fromliveness/manifest.json, and no number was typed into the shard.Gates, derived by
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat8dee70e6bb(59 commands), every exit code captured before any pipe:54 exit 0 · 5 NOT MEASURED (exit 3, PREREQUISITE NOT MET) · --ran reconciliation 59/59 accounted
--ranverdict:✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 54 run, 5 NOT-MEASURED (5 DERIVED from a recorded exit 3).pnpm check:platform-checklistexit 0:check-platform-checklist: OK — 16 areas, 352 items (347 active, 1 planned)(the three newpath#symbolsource anchors resolve).pnpm --filter @objectstack/spec run check:livenessexit 0:✓ packages/spec/liveness/state-counts/ is current — one shard per governed type, the same 43 row(s) as the README, no count column left in the README.pnpm check:doc-authoringexit 0 ·pnpm check:nul-bytesexit 0 ·pnpm check:issue-citationsexit 0 ·pnpm check:published-filesexit 0.node scripts/check-adr-0087-registration.mjs --base origin/mainexit 0:this PR adds no declared-breaking changeset·check-changeset-no-majorexit 0 ·check-empty-changesetexit 0.check:doc-formula-expressions(@objectstack/formulanot built),check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure(@objectstack/objectqldist absent),check:sourcemap-no-sources-content. Reason: each reads the built dist of packages this diff does not change, and building the workspace for a docs-only diff is the declared narrowing. CI'sLint & Repo Gatesruns them on a built tree.check:dev-prereqs/check:skill-frame-freshness: not run, because the diff touches neither thepackages/specbuild nor the four-axis frame files.Generated by Claude Code