You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
cli: os plugin publish and readOspluginManifest still hand-parse the compiled manifest, a third door outside the one ManifestSchema parse #27686 gives install and boot #27810
Filing gate: ① the same defect class as #27686 at a door that card's ruling did not name, found by the contract review of PR #27791 (#27686), record 6511494551 ("noted, no fix"). Filed by domain:server seat 4 · os-elon-musk · session session_016WV4d1Np3hU7RQnA13YZcL. ⛔ Not a claim. No grade: triage sets the lane and grade.
Business reason. After PR #27791, os plugin install and the boot loader parse an artifact's compiled manifest through ManifestSchema with one helper, so a stale or drifted manifest (for example packaging: 'manifest-deps') is refused with the schema's own message. os plugin publish still reads the same manifest with a bare JSON.parse, so a stale artifact can be published to a registry and only fails later, at its consumer's install, instead of at the publisher's terminal with the prescription.
The publish door parses the compiled manifest through the same helper PR #27791 adds (one parse, no second copy of the rule) and refuses an invalid one before anything leaves the machine. Narrowing: a publish accepted today is refused, so a contract review is owed.
Reach
Any os plugin publish of an artifact built before the manifest-deps retirement, or with any other compiled-manifest drift.
Dedupe
Read the open domain:server titles for plugin publish, osplugin, compiled manifest, ManifestSchema: only #27686 (install and boot, its PR #27791). New.
Claim: PM loop round 2 · 2026-10-30T02:05Z · unlocked from pm:blocked (PR #27791, the one it waited on, merged)
Session: session_016WV4cyHFdayr8QnKE8nszT (card thread; seat session_016WV4d1Np3hU7RQnA13YZcL)
Account: os-elon-musk
Branch: claude/project-thread-m87tmz (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
Worktree: objectstack-issue-27810
Domain: domain:server
Seat: domain:server#4
File surface: packages/cli/src/commands/plugin/publish.ts (the compiled-manifest read, step 2), packages/cli/src/utils/osplugin.ts (readOspluginManifest), their tests and the pins that author a stale manifest to assert the refusal, .changeset/*; the parse goes through readCompiledPluginManifest from @objectstack/runtime (PR #27791), ⛔ no second copy of the rule, no edit to the helper's own module unless the measurement demands it, plus, test-only, one EXCLUDED entry for packages/cli/test/plugin-publish.test.ts in packages/spec/src/kernel/manifest-packaging-retirement.test.ts (the guard's own allowlist; amended 2026-10-30 02:11Z), plus the publish clause/verify text and the publish.ts source row of the plugin-build item in docs/qa/platform-checklist/areas/cli.json (revision + history; amended 2026-10-30 02:13Z), otherwise no packages/spec, no governed path — stop on breach and explain in the report
Container & model: M, mode:thread, model: default (TIER_DEFAULT; dispatch-gates --tier: no path-derived mandate), effort: high; a CONTRACT_REVIEW_TIER review is owed before approval (narrowing)
Clause-②: no (narrowing — os plugin publish refuses an invalid compiled manifest it publishes today)
Metadata-protocol: narrowed
Responsibility: packages/cli's publish door and readOspluginManifest hand-parse the compiled manifest; the platform path that covers it is the one ManifestSchema parse helper PR #27791 gave install and boot; reached by anyone publishing a pre-retirement or drifted .osplugin artifact.
Thread-read: 6512268493
Premise: holds (publish.ts and osplugin.ts on origin/main9ae6384e still JSON.parse the manifest entry)
Serial constraints cleared: PR #27791 (#27686, the helper) merged; no open PR touches plugin/publish.ts or utils/osplugin.ts (open PRs read).
{
"issue": 27810,
"status": "done",
"branch": "claude/project-thread-m87tmz",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27910",
"session": "session_016WV4cyHFdayr8QnKE8nszT",
"premise_still_valid": true,
"summary": "`os plugin publish` reads the compiled manifest through `readCompiledPluginManifest` (@objectstack/runtime, the helper #27791 gave install and boot) and refuses an invalid one, with the schema's issue lines (the manifest-deps prescription included), before the signature read, the cloud-config read and both POSTs. `readOspluginManifest` parses through the same helper (now async, lazy runtime import). The uploaded plugin_manifest stays the artifact's own JSON because ManifestSchema stamps scope/defaultDatasource; the second decode that produces it is the should-fix the contract review filed as #27914.",
"tests": "packages/cli/test/plugin-publish.test.ts: 5 new pins + 2 updated, 12/12 pass. Ablation on disk: publish.ts + osplugin.ts restored from main -> 'Tests 4 failed | 8 passed' (the four refusal pins); plugin_manifest set to the parsed value -> '1 failed | 11 passed' (the verbatim pin); both restored. CLI unit layer under the lock: 'Test Files 351 passed (351) / Tests 5090 passed (5090)', VERDICT command-exit 0. packages/spec manifest-packaging-retirement.test.ts: 15/15. cli typecheck exit 0.",
"gates": "After a whole-tree turbo build (exit 0): dispatch-gates --commands derived 87 families on head bd6d77e2; all 87 run, every exit 0; `dispatch-gates --ran` reconciled '87 derived, 87 run, 0 NOT-MEASURED, 0 UNRUN'. pnpm lint exit 0. CI on bd6d77e2: 40 check-runs success, 10 skipped by their own `if:` on pull_request, 0 failed; mergeable_state clean.",
"dogfood_battery": "bd6d77e2 · VERDICT command-exit 1 (held 20m40s) · Test Files 353 passed / 3 failed / 3 skipped (359) · Tests 2867 passed / 4 failed / 20 skipped (2891). All 4 failures are main's at the base 637cfc67, not this diff: error-sentences-live.dogfood.test.ts x2 and object-hook-lifecycle-scratch.dogfood.test.ts x1 expect no `code` on a hook abort while #27667 (in the base) answers HOOK_ABORTED; the pins were flipped on main by #27878 (816889e2). platform-app-object-entry-views.test.ts x1 reports sys_exchange_rate unresolved; fixed on main by #27873 (e6553619). Neither commit is in bd6d77e2. Confirmation: a local, unpushed merge of origin/main (f2afca70) with the dogfood closure rebuilt ran those 3 files under the lock: 'Test Files 3 passed (3) / Tests 60 passed (60)', VERDICT command-exit 0. The merge was then discarded; the PR head stays bd6d77e2.",
"mcp_calls": "8 — read-only: mcp__github__issue_read x2 (#27810 get, get_comments), mcp__github__pull_request_read x1 (get_check_runs #27910), mcp__claude-code-remote__get_session x1, mcp__claude-code-remote__subscribe_pr_activity x1, ToolSearch x3 (not GitHub). No MCP write tool.",
"api_writes": "2 relay writes + 1 git push — relay (scripts/pm/fleet-write): pr_create #27910; comment on #27810 (this report). The push: claude/project-thread-m87tmz. No other writes.",
"line_budget": "6 files, +152 / -38 (190 changed lines) vs the 3000 human-merge threshold.",
"files_changed": [".changeset/27810-plugin-publish-parses-compiled-manifest.md", "docs/qa/platform-checklist/areas/cli.json", "packages/cli/src/commands/plugin/publish.ts", "packages/cli/src/utils/osplugin.ts", "packages/cli/test/plugin-publish.test.ts", "packages/spec/src/kernel/manifest-packaging-retirement.test.ts"],
"deviations": ["File surface widened twice, both by seat amendment before the edit: one EXCLUDED entry in packages/spec/src/kernel/manifest-packaging-retirement.test.ts (test-only), and docs/qa/platform-checklist/areas/cli.json (the compiled-manifest clause/verify text and the publish.ts source row, revision 6 -> 7; check:platform-checklist exit 0).", "readOspluginManifest became async (internal, sole caller the updated test) so os plugin build/sign do not import @objectstack/runtime's root entry (measured ~1.2 s vs ~0.3 s for @objectstack/core).", "PR body Verification cites this comment, which it preceded; it is posted now."],
"open_questions": [],
"out_of_scope_findings": ["class: a · the second manifest decode in publish.ts keyed by a separately spelled filename constant · filed by the seat as #27914 from contract review 6514352615 · noted, not filed here"]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 错的必须被响亮拒绝并给处方 | none | P②
Triage: p2 ·
domain:server·area:devpath·pm:blockedon PR #27791 · 2026-10-30T00:58Z⛔ Not a claim.
os plugin installreads onlyid/versionof the compiled manifest, so a stale artifact (e.g.packaging: manifest-deps) installs and fails at boot asimport_failedinstead of meeting the prescription #27686 family.os plugin publishandreadOspluginManifestuse the one helper PR fix(cli)!: os plugin install and the boot loader parse the compiled manifest through ManifestSchema #27791 adds, with no second copy, and refuse before anything leaves the machine.bug,pm:blocked.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
Claim: PM loop round 2 · 2026-10-30T02:05Z · unlocked from
pm:blocked(PR #27791, the one it waited on, merged)Session:
session_016WV4cyHFdayr8QnKE8nszT(card thread; seatsession_016WV4d1Np3hU7RQnA13YZcL)Account:
os-elon-muskBranch:
claude/project-thread-m87tmz(the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)Worktree:
objectstack-issue-27810Domain:
domain:serverSeat:
domain:server#4File surface:
packages/cli/src/commands/plugin/publish.ts(the compiled-manifest read, step 2),packages/cli/src/utils/osplugin.ts(readOspluginManifest), their tests and the pins that author a stale manifest to assert the refusal,.changeset/*; the parse goes throughreadCompiledPluginManifestfrom@objectstack/runtime(PR #27791), ⛔ no second copy of the rule, no edit to the helper's own module unless the measurement demands it, plus, test-only, oneEXCLUDEDentry forpackages/cli/test/plugin-publish.test.tsinpackages/spec/src/kernel/manifest-packaging-retirement.test.ts(the guard's own allowlist; amended 2026-10-30 02:11Z), plus the publish clause/verify text and thepublish.tssource row of the plugin-build item indocs/qa/platform-checklist/areas/cli.json(revision + history; amended 2026-10-30 02:13Z), otherwise nopackages/spec, no governed path — stop on breach and explain in the reportContainer & model:
M,mode:thread,model: default (TIER_DEFAULT; dispatch-gates --tier: no path-derived mandate),effort: high; aCONTRACT_REVIEW_TIERreview is owed before approval (narrowing)Clause-②: no (narrowing —
os plugin publishrefuses an invalid compiled manifest it publishes today)Metadata-protocol: narrowed
Responsibility:
packages/cli's publish door andreadOspluginManifesthand-parse the compiled manifest; the platform path that covers it is the oneManifestSchemaparse helper PR #27791 gave install and boot; reached by anyone publishing a pre-retirement or drifted.ospluginartifact.Thread-read: 6512268493
Premise: holds (
publish.tsandosplugin.tsonorigin/main9ae6384estillJSON.parsethe manifest entry)Serial constraints cleared: PR #27791 (#27686, the helper) merged; no open PR touches
plugin/publish.tsorutils/osplugin.ts(open PRs read).objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4cyHFdayr8QnKE8nszT
os-dev-report
{ "issue": 27810, "status": "done", "branch": "claude/project-thread-m87tmz", "pr": "https://github.com/objectstack-ai/objectstack/pull/27910", "session": "session_016WV4cyHFdayr8QnKE8nszT", "premise_still_valid": true, "summary": "`os plugin publish` reads the compiled manifest through `readCompiledPluginManifest` (@objectstack/runtime, the helper #27791 gave install and boot) and refuses an invalid one, with the schema's issue lines (the manifest-deps prescription included), before the signature read, the cloud-config read and both POSTs. `readOspluginManifest` parses through the same helper (now async, lazy runtime import). The uploaded plugin_manifest stays the artifact's own JSON because ManifestSchema stamps scope/defaultDatasource; the second decode that produces it is the should-fix the contract review filed as #27914.", "tests": "packages/cli/test/plugin-publish.test.ts: 5 new pins + 2 updated, 12/12 pass. Ablation on disk: publish.ts + osplugin.ts restored from main -> 'Tests 4 failed | 8 passed' (the four refusal pins); plugin_manifest set to the parsed value -> '1 failed | 11 passed' (the verbatim pin); both restored. CLI unit layer under the lock: 'Test Files 351 passed (351) / Tests 5090 passed (5090)', VERDICT command-exit 0. packages/spec manifest-packaging-retirement.test.ts: 15/15. cli typecheck exit 0.", "gates": "After a whole-tree turbo build (exit 0): dispatch-gates --commands derived 87 families on head bd6d77e2; all 87 run, every exit 0; `dispatch-gates --ran` reconciled '87 derived, 87 run, 0 NOT-MEASURED, 0 UNRUN'. pnpm lint exit 0. CI on bd6d77e2: 40 check-runs success, 10 skipped by their own `if:` on pull_request, 0 failed; mergeable_state clean.", "dogfood_battery": "bd6d77e2 · VERDICT command-exit 1 (held 20m40s) · Test Files 353 passed / 3 failed / 3 skipped (359) · Tests 2867 passed / 4 failed / 20 skipped (2891). All 4 failures are main's at the base 637cfc67, not this diff: error-sentences-live.dogfood.test.ts x2 and object-hook-lifecycle-scratch.dogfood.test.ts x1 expect no `code` on a hook abort while #27667 (in the base) answers HOOK_ABORTED; the pins were flipped on main by #27878 (816889e2). platform-app-object-entry-views.test.ts x1 reports sys_exchange_rate unresolved; fixed on main by #27873 (e6553619). Neither commit is in bd6d77e2. Confirmation: a local, unpushed merge of origin/main (f2afca70) with the dogfood closure rebuilt ran those 3 files under the lock: 'Test Files 3 passed (3) / Tests 60 passed (60)', VERDICT command-exit 0. The merge was then discarded; the PR head stays bd6d77e2.", "mcp_calls": "8 — read-only: mcp__github__issue_read x2 (#27810 get, get_comments), mcp__github__pull_request_read x1 (get_check_runs #27910), mcp__claude-code-remote__get_session x1, mcp__claude-code-remote__subscribe_pr_activity x1, ToolSearch x3 (not GitHub). No MCP write tool.", "api_writes": "2 relay writes + 1 git push — relay (scripts/pm/fleet-write): pr_create #27910; comment on #27810 (this report). The push: claude/project-thread-m87tmz. No other writes.", "line_budget": "6 files, +152 / -38 (190 changed lines) vs the 3000 human-merge threshold.", "files_changed": [".changeset/27810-plugin-publish-parses-compiled-manifest.md", "docs/qa/platform-checklist/areas/cli.json", "packages/cli/src/commands/plugin/publish.ts", "packages/cli/src/utils/osplugin.ts", "packages/cli/test/plugin-publish.test.ts", "packages/spec/src/kernel/manifest-packaging-retirement.test.ts"], "deviations": ["File surface widened twice, both by seat amendment before the edit: one EXCLUDED entry in packages/spec/src/kernel/manifest-packaging-retirement.test.ts (test-only), and docs/qa/platform-checklist/areas/cli.json (the compiled-manifest clause/verify text and the publish.ts source row, revision 6 -> 7; check:platform-checklist exit 0).", "readOspluginManifest became async (internal, sole caller the updated test) so os plugin build/sign do not import @objectstack/runtime's root entry (measured ~1.2 s vs ~0.3 s for @objectstack/core).", "PR body Verification cites this comment, which it preceded; it is posted now."], "open_questions": [], "out_of_scope_findings": ["class: a · the second manifest decode in publish.ts keyed by a separately spelled filename constant · filed by the seat as #27914 from contract review 6514352615 · noted, not filed here"] }Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
ACCEPT → PR #27910 comment 6514571986 · head
bd6d77e2· 2026-10-30T03:55Z · landing sent (contract review PASS 6514352615). Filed from the review: #27914.objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
Landed · 2026-10-30T04:39Z
ed0e71db(merge queue)completedbyFixes #27810State:
pm:dispatchedremoved in this stroke. Filed from the contract review: #27914.