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
migrate: os migrate packageless-overlays --apply lists a package-less view container row movable, then fails it every run (the container schema refuses overrides) #30261
Filing gate: ① a product defect with a named location and a measured reach. Found by the #30000 dev (PR #30257, "Acceptance notes", class a; os-dev report 6649295537 on #30000), measured over the real ObjectQL engine and SchemaRegistry on main's dist/. ⛔ Not a claim. No grade: triage sets it.
Business reason: an operator who runs the ADR-0146 D11 ceremony to move package-less customizations into <base>.custom is told a view container row (a listViews member the base does not ship) is movable, runs --apply, and gets failed for it on every run. The row stays package-less, and no step in the ceremony's output tells them how to move it.
Reader who acts: domain:server, migratePackagelessOverlays step 2 (packages/metadata-protocol/src/protocol-packageless-overlay-migration.ts), which saves { ...body, overrides: { package, basedOn } } into the pair.
An unbound showcase_task view container row is stored package-less over the read-only base com.example.showcase.
os migrate packageless-overlays (preview) lists it movable.
--apply: step 2's save is refused with view/showcase_task failed spec validation: … Unrecognized key(s) on this view container: `overrides` . Outcome failed; the row stays. Before, after, and after a restart, the registry and the reads are identical. The next run lists and fails it again.
Reading
The view container schema has no overrides key, so the ceremony's declared save cannot carry the declaration for a container. Either the preview should not call such a row movable (and say what to do), or the container should accept the declaration the ceremony writes. Which one is a call for the reader; this is a reading, not confirmed by a fix.
Expected
The preview and --apply agree: a row listed movable moves, or a container row is listed with the reason it cannot move.
Read fresh. os migrate packageless-overlays --apply lists a package-less view container row as movable, then fails it on every run. The ADR-0146 D11 ceremony therefore cannot finish. p2. Fix site: migratePackagelessOverlays step 2.
Claim: PM loop round 2
Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CbC5BpV41NMLrJMt8Q
Account: os-bill
Branch: claude/project-thread-jtt4fs (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-30261
Domain: domain:server
Seat: domain:server#5
File surface: packages/metadata-protocol/src/** (the overlay migration and its tests); packages/cli/src/** only for the os migrate packageless-overlays output and its tests; content/docs/** only for sentences this PR makes false (not releases/**); one changeset. ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
Container & model: S–M, mode:thread, model: default tier (opus) — dispatch-gates --tier at 8b117c0e: no path-derived mandate, effort: high
Clause-②: no — the preview reports a row it cannot move honestly; no accept set or export widens (a new exported member would correct this to yes (widening))
Metadata-protocol: none — an operator ceremony's report, not what an author writes
Responsibility: metadata-protocol's migratePackagelessOverlays lists a package-less view container row movable, and step 2's declared save is refused by the container schema (no overrides key), every run (measured by the #30000 dev, report 6649295537) | none: the row stays package-less with no reason given | every operator running the ADR-0146 D11 ceremony over a container row
Thread-read: 6650072130
Premise: holds per the #30000 dev's measurement over the real ObjectQL engine and SchemaRegistry; the dev re-measures on 8b117c0e first and lists every container-shaped type with the same mismatch
Serial constraints cleared: this seat's #30168 + #29479 (branch claude/project-thread-k9ymj9) edits the same migration file; seat 3's PR #30257 (#30000) edited its step 4. The dev merges main after both land, before the PR. Fork (seat's call): honest preview, no container schema change; if ADR-0146 requires container rows to move, needs_decision.
Order: project file server-seat5/dispatch-30261.md, delivered to the card thread.
{
"issue": 30261,
"status": "done",
"branch": "claude/project-thread-jtt4fs",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30380",
"session": "session_01Utp6CbC5BpV41NMLrJMt8Q",
"premise_still_valid": true,
"summary": "Re-measured on 8b117c0e: a package-less view container row was listed movable and every --apply failed it (the container schema refuses overrides). New predicate overrideDeclarationRefusedByShape(type, body) in protocol-packaged-base-refusal.ts parses the body with an overrides probe through resolveOverlaySchema (the save door's resolver) and answers true only when the key is refused at the root (in a union, by every branch still diagnosing the body). classifyPackagelessRow (now taking the type) returns the new disposition cannot_declare after no_pair, before foreign_declaration/shadowed; migratePackagelessOverlays never attempts it; the CLI prints the way out (each view saved into the pair as a single view, then the container deleted). Measured over the five overlay types: only the view container (list/listViews/form/formViews) cannot carry the key. The red leg also showed both closes (package-less, and the write naming the read-only base) refused a container's write with an unfollowable fix, the way out's DELETE included; overlayPairFixAdmits now asks the same predicate, so both closes leave that write as it was before them. Merged main at 0837fdc0 (#30322), stacking the shape check before overrideWriteVerdict(..., fix.pendingPairScope). Two docs sentences made false amended (cli.mdx, metadata-lifecycle.mdx).",
"tests": "head 3413e7bb after the merge: metadata-protocol test exit 0 (Test Files 313 passed | 4 skipped; Tests 22396 passed | 26 skipped) and typecheck exit 0; objectql test exit 0 (550 files; 10956 tests) and typecheck exit 0; cli unit exit 0 (384 files; 5427 tests), cli integration packageless-overlays.integration.test.ts exit 0 (6/6, touched file), cli typecheck exit 0. Red leg on main's bytes (git restore --source=8b117c0e of the two protocol files, metadata-protocol rebuilt, ablation-dist-preflight cannot_declare --absent: absent from 24 built files): objectql -t 30261 4 failed (census movable not cannot_declare; close NOT_OVERRIDABLE on the package-less save; NOT_OVERRIDABLE on the way out's DELETE); second leg for the named-base case 1 failed (NOT_OVERRIDABLE). Restored with git checkout HEAD --, hash-object equal to HEAD blobs 4a2a3ba3 / b312e979, git status clean. Green leg: preflight present in 4 built files; objectql file 33/33 then 34/34; metadata-protocol shape + named-base + reconcile census 61/61.",
"gates": "dispatch-gates --commands on 3413e7bb: 95 families, each run with its exit recorded before any pipe; 94 exit 0; check-plugin-teardown-shape --self-test exit 3 (shallow) then exit 0 after git fetch origin 621a4876; check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (NOT MEASURED, CI Lint & Repo Gates runs it). dispatch-gates --ran: 95 accounted for, 94 run, 1 NOT-MEASURED. pnpm lint exit 0. PR check-runs: in_progress at report time.",
"line_budget": "329 insertions, 6 deletions across 9 files vs origin/main at the merge (code 101, tests 217, docs 4, changeset 13); under the 3000-line class",
"files_changed": "packages/metadata-protocol/src/protocol-packaged-base-refusal.ts; packages/metadata-protocol/src/protocol-packageless-overlay-migration.ts; packages/metadata-protocol/src/protocol.override-declaration-shape.test.ts (new); packages/objectql/src/protocol-packageless-overlay-migration.test.ts; packages/cli/src/commands/migrate/packageless-overlays.ts; packages/cli/src/commands/migrate/packageless-overlays.integration.test.ts; content/docs/deployment/cli.mdx; content/docs/concepts/metadata-lifecycle.mdx; .changeset/30261-packageless-overlays-view-container.md",
"deviations": "Clause-② is yes (widening), not the Claim's no: a new member cannot_declare of the exported PackagelessOverlayDisposition, and the two closes stop refusing a view container's write (seat accepted the correction on the thread). protocol-packaged-base-refusal.ts touched (inside packages/metadata-protocol/src/**) because overlayPairFixAdmits is the one fix predicate both closes ask. The shared refusal sentence was not touched. Session-context assign/review step skipped per the order (no MCP write).",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "5 — issue_read x3 (#30261 get, get_comments x2), list_pull_requests x2 (head claude/project-thread-k9ymj9); no write tool",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 41995332208 success, read-back 11703/11703 bytes identical, PR #30380 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30261/comments). Plus git push of the designated branch (not REST).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: PR #30380 Acceptance notes · noted, not filed — ADR-0146 D11 reads 'every row ... that overlays an item a code package ships becomes a declared override'; a container is not an item served by name (it expands to OBJECT.VIEW items), and the way out moves each of those as D11 describes, so read as not requiring the container row itself to move (not needs_decision)"
]
}
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:queue· 2026-11-05T04:56Z⛔ Not a claim.
os migrate packageless-overlays --applylists a package-less view container row asmovable, then fails it on every run. The ADR-0146 D11 ceremony therefore cannot finish. p2. Fix site:migratePackagelessOverlaysstep 2.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Claim: PM loop round 2
Session:
session_01Utp6CYVV6fcAQrNTDQRvPb(seat) · dev = project card threadsession_01Utp6CbC5BpV41NMLrJMt8QAccount:
os-billBranch:
claude/project-thread-jtt4fs(harness-pinned thread branch; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30261Domain:
domain:serverSeat:
domain:server#5File surface:
packages/metadata-protocol/src/**(the overlay migration and its tests);packages/cli/src/**only for theos migrate packageless-overlaysoutput and its tests;content/docs/**only for sentences this PR makes false (notreleases/**); one changeset. ⛔packages/spec/**,ui/**,skills/**,docs/adr/**,.claude/**,AGENTS.md(stop on breach; explain in the report)Container & model:
S–M,mode:thread,model: default tier (opus) — dispatch-gates --tier at 8b117c0e: no path-derived mandate,effort: highClause-②: no — the preview reports a row it cannot move honestly; no accept set or export widens (a new exported member would correct this to
yes (widening))Metadata-protocol: none — an operator ceremony's report, not what an author writes
Responsibility:
metadata-protocol's migratePackagelessOverlays lists a package-less view container row movable, and step 2's declared save is refused by the container schema (no overrides key), every run (measured by the #30000 dev, report 6649295537) | none: the row stays package-less with no reason given | every operator running the ADR-0146 D11 ceremony over a container rowThread-read: 6650072130
Premise: holds per the #30000 dev's measurement over the real ObjectQL engine and SchemaRegistry; the dev re-measures on
8b117c0efirst and lists every container-shaped type with the same mismatchSerial constraints cleared:
this seat's #30168 + #29479 (branch claude/project-thread-k9ymj9) edits the same migration file; seat 3's PR #30257 (#30000) edited its step 4. The dev merges main after both land, before the PR. Fork (seat's call): honest preview, no container schema change; if ADR-0146 requires container rows to move, needs_decision.Order: project file
server-seat5/dispatch-30261.md, delivered to the card thread.objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
os-dev-report
Card thread
session_01Utp6CbC5BpV41NMLrJMt8Q· branchclaude/project-thread-jtt4fs· draft PR #30380 · head3413e7bb{ "issue": 30261, "status": "done", "branch": "claude/project-thread-jtt4fs", "pr": "https://github.com/objectstack-ai/objectstack/pull/30380", "session": "session_01Utp6CbC5BpV41NMLrJMt8Q", "premise_still_valid": true, "summary": "Re-measured on 8b117c0e: a package-less view container row was listed movable and every --apply failed it (the container schema refuses overrides). New predicate overrideDeclarationRefusedByShape(type, body) in protocol-packaged-base-refusal.ts parses the body with an overrides probe through resolveOverlaySchema (the save door's resolver) and answers true only when the key is refused at the root (in a union, by every branch still diagnosing the body). classifyPackagelessRow (now taking the type) returns the new disposition cannot_declare after no_pair, before foreign_declaration/shadowed; migratePackagelessOverlays never attempts it; the CLI prints the way out (each view saved into the pair as a single view, then the container deleted). Measured over the five overlay types: only the view container (list/listViews/form/formViews) cannot carry the key. The red leg also showed both closes (package-less, and the write naming the read-only base) refused a container's write with an unfollowable fix, the way out's DELETE included; overlayPairFixAdmits now asks the same predicate, so both closes leave that write as it was before them. Merged main at 0837fdc0 (#30322), stacking the shape check before overrideWriteVerdict(..., fix.pendingPairScope). Two docs sentences made false amended (cli.mdx, metadata-lifecycle.mdx).", "tests": "head 3413e7bb after the merge: metadata-protocol test exit 0 (Test Files 313 passed | 4 skipped; Tests 22396 passed | 26 skipped) and typecheck exit 0; objectql test exit 0 (550 files; 10956 tests) and typecheck exit 0; cli unit exit 0 (384 files; 5427 tests), cli integration packageless-overlays.integration.test.ts exit 0 (6/6, touched file), cli typecheck exit 0. Red leg on main's bytes (git restore --source=8b117c0e of the two protocol files, metadata-protocol rebuilt, ablation-dist-preflight cannot_declare --absent: absent from 24 built files): objectql -t 30261 4 failed (census movable not cannot_declare; close NOT_OVERRIDABLE on the package-less save; NOT_OVERRIDABLE on the way out's DELETE); second leg for the named-base case 1 failed (NOT_OVERRIDABLE). Restored with git checkout HEAD --, hash-object equal to HEAD blobs 4a2a3ba3 / b312e979, git status clean. Green leg: preflight present in 4 built files; objectql file 33/33 then 34/34; metadata-protocol shape + named-base + reconcile census 61/61.", "gates": "dispatch-gates --commands on 3413e7bb: 95 families, each run with its exit recorded before any pipe; 94 exit 0; check-plugin-teardown-shape --self-test exit 3 (shallow) then exit 0 after git fetch origin 621a4876; check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (NOT MEASURED, CI Lint & Repo Gates runs it). dispatch-gates --ran: 95 accounted for, 94 run, 1 NOT-MEASURED. pnpm lint exit 0. PR check-runs: in_progress at report time.", "line_budget": "329 insertions, 6 deletions across 9 files vs origin/main at the merge (code 101, tests 217, docs 4, changeset 13); under the 3000-line class", "files_changed": "packages/metadata-protocol/src/protocol-packaged-base-refusal.ts; packages/metadata-protocol/src/protocol-packageless-overlay-migration.ts; packages/metadata-protocol/src/protocol.override-declaration-shape.test.ts (new); packages/objectql/src/protocol-packageless-overlay-migration.test.ts; packages/cli/src/commands/migrate/packageless-overlays.ts; packages/cli/src/commands/migrate/packageless-overlays.integration.test.ts; content/docs/deployment/cli.mdx; content/docs/concepts/metadata-lifecycle.mdx; .changeset/30261-packageless-overlays-view-container.md", "deviations": "Clause-② is yes (widening), not the Claim's no: a new member cannot_declare of the exported PackagelessOverlayDisposition, and the two closes stop refusing a view container's write (seat accepted the correction on the thread). protocol-packaged-base-refusal.ts touched (inside packages/metadata-protocol/src/**) because overlayPairFixAdmits is the one fix predicate both closes ask. The shared refusal sentence was not touched. Session-context assign/review step skipped per the order (no MCP write).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 — issue_read x3 (#30261 get, get_comments x2), list_pull_requests x2 (head claude/project-thread-k9ymj9); no write tool", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 41995332208 success, read-back 11703/11703 bytes identical, PR #30380 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30261/comments). Plus git push of the designated branch (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: PR #30380 Acceptance notes · noted, not filed — ADR-0146 D11 reads 'every row ... that overlays an item a code package ships becomes a declared override'; a container is not an item served by name (it expands to OBJECT.VIEW items), and the way out moves each of those as D11 describes, so read as not requiring the container row itself to move (not needs_decision)" ] }Report taken 2026-11-05T08:34Z.
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Landing · 2026-11-05T08:43Z: PR #30380 (head
5cbefbb3), seat ACCEPT posted, ready + auto-merge enabled.Fixes #30261.objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Landed · 2026-11-05T09:24Z: PR #30380 merged as
8fad7b193(seat ACCEPT 6653610185). Card closed byFixes #30261.