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
metadata: resetting a published overlay on a packaged view answers reset:true, but the view LIST reads and the end-user list keep serving the overlay's expanded view items until restart #23149
Filing-gate category ① (product defect, named landing point) and ③ — the maintainer's order in the dispatching session, verbatim: 「测试遇到的问题,可以提交issue」.
QA-source: #23104 · studio-authoring.packaged-display-class-direct-edit · A3 (and its negative N1, the same defect)
Reader who acts: the seat owning packages/metadata-protocol (triage routes). Dedupe: semantic issue search on this repo, closed included, "view overlay reset delete stale expanded view items list endpoint still serves overlay until restart registry heal" — 5 hits, all closed and none this shape; the nearest family members are #5079 (a deleted overlay lingering in the /meta listing) and #6853 (the heal not re-registering a packaged contributor definition).
Environment
objectstack 36b2889c with the console built from objectui 1fb1ced36243 (the pin hop of #23104, since landed as f451a5964), stock examples/app-showcase, admin persona. Reproduced twice — once driven through the Studio designer, once by API on a fresh DB; held for more than 3 minutes, for two personas, in a fresh browser context; a server restart clears it. The dashboard leg of the same item resets cleanly. No console code is involved.
Reproduction (admin bearer, fresh boot)
GET /api/v1/meta/view/showcase_task → take the item (strip the _-prefixed keys), set list.label to All Tasks (X) and drop the progress column; PUT /api/v1/meta/view/showcase_task?mode=draft with that body → 200; POST /api/v1/meta/view/showcase_task/publish{} → 200.
GET /api/v1/meta/view → showcase_task.default reads All Tasks (X), 6 columns — expected.
GET /api/v1/meta/view/showcase_task.default → All Tasks, 7 columns (correct), butGET /api/v1/meta/view and GET /api/v1/meta/view?object=showcase_task still serve showcase_task.default as All Tasks (X) with 6 columns (stamped _provenance: package), unchanged after 30 s; the end-user task list's first tab still reads All Tasks (X) without the Progress column.
Expected: after a 200 reset: true, every read — the item reads, the list reads and the rendered list — serves the packaged base again.
Likely mechanism (objectstack main, to be confirmed by the fixing seat)
On publish, hydrateExpandedViewItems (packages/metadata-protocol/src/protocol.ts) registers the container's expanded view items (OBJECT.VIEWKEY, here showcase_task.default) in the process registry. The delete path's registry heal is (type, name)-addressed by its own docblock — "Every tier above is (type, name)-addressed: removeRuntimeShadow drops the PLAIN key, the layer-2 re-register writes the PLAIN key, and removeOverlayEntry retires the PLAIN key" — so it restores the bare showcase_task entry and leaves the overlay's expansion entries in place for the list doors to read until the process restarts.
Triage: first grade, bug · priority:p2 · domain:engine · area:studio, into pm:queue. A reset retires what the publish registered
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T04:02Z. ⛔ Not a claim, ⛔ not a dispatch.
Why p2: a reset answers reset: true while end users keep seeing the overlay until a restart. It is a reported success that is false, on a packaged view. No data is lost, and a restart clears it.
Direction: symmetry. The delete path's registry heal retires every expanded item the publish's hydrateExpandedViewItems registered for that container (OBJECT.VIEWKEY), not only the plain (type, name) key.
The claimant confirms the mechanism first. The card marks it "likely".
Pins:
after a reset, GET /meta/view, ?object=, the item read and the end-user list agree on the packaged base;
the dashboard leg (which already resets cleanly) is the control;
a publish → reset → publish cycle serves the second overlay.
Claim: PM loop round 1 · 2026-10-13T05:47Z
Session: session_01P88ehrZ6hM19hBzdpsQTTo
Account: os-support-ai
Branch: claude/issue-23149-reset-retires-view-expansions
Worktree: objectstack-issue-23149
Domain: domain:engine
Seat: domain:engine#1 (seat post #6367)
File surface: packages/metadata-protocol/src/protocol.ts, region level: the delete path's registry heal (restoreArtifactRegistryView and the walk over removeRuntimeShadow / registerItem / removeOverlayEntry), read against its counterpart hydrateExpandedViewItems. Plus packages/objectql/src/registry.ts, only if the heal needs a registry entry point it lacks. Tests go beside them in packages/metadata-protocol/src/, with a changeset .changeset/23149-*.md. The dev stops on a breach and explains it in the report.
Container & model: M, mode:subagent, model: default (dispatch-gates --tier at e540e7ffb: no path-derived mandate)
Clause-②: no
Responsibility: the delete heal of ObjectStackProtocolImplementation in packages/metadata-protocol/src/protocol.ts (this lane) | none: only a process restart clears the stale entries | any admin who resets a published overlay on a packaged view, from Studio or with DELETE /api/v1/meta/view/NAME. Measured twice on examples/app-showcase by the QA run behind #23104.
Thread-read: 6137957465
Serial constraints cleared: PR #23167 (#23119, engine seat 2) edits the imports, the helpers beside withoutProtectionBlock and saveMetaItem's author arm, so it is disjoint from the heal. #23015 (domain:spec seat 1, branch tip 1a6e24c99) adds a helper before saveMetaItem, one check inside it, and page registration in objectql/src/registry.ts. Those regions are disjoint, and the later lander merges main. #23056 S8 (engine seat 2, branch tip 34f4f777c) touches packaged-base-regime.ts and three tests, also disjoint. PR #22962 (S8-T) touches test files only. #23165 (queued, saveMetaItem's direct-save arm) is not this card's region. No path here is a SINGLE_CLAIM_PATHS entry. Read against origin/maine540e7ffb, from each neighbour's diff.
On Clause-②: no: it is read from the card. The fix makes a reset do what its reset: true answer already says, and it accepts no new key. If the fix adds a member to a published declaration (for example a new public SchemaRegistry method), the dev measures the built .d.ts closure and reports it. That measurement decides.
Activity
objectstack-fleet commentedon Oct 13, 2026
Triage: first grade,
bug·priority:p2·domain:engine·area:studio, intopm:queue. A reset retires what the publish registeredTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-13T04:02Z. ⛔ Not a claim, ⛔ not a dispatch.reset: truewhile end users keep seeing the overlay until a restart. It is a reported success that is false, on a packaged view. No data is lost, and a restart clears it.hydrateExpandedViewItemsregistered for that container (OBJECT.VIEWKEY), not only the plain(type, name)key.GET /meta/view,?object=, the item read and the end-user list agree on the packaged base;packages/metadata-protocol/src/protocol.ts(domain:engine); rationale: undo what was done.objectstack-fleet commentedon Oct 13, 2026
Claim: PM loop round 1 · 2026-10-13T05:47Z
Session:
session_01P88ehrZ6hM19hBzdpsQTToAccount:
os-support-aiBranch:
claude/issue-23149-reset-retires-view-expansionsWorktree:
objectstack-issue-23149Domain:
domain:engineSeat:
domain:engine#1(seat post #6367)File surface:
packages/metadata-protocol/src/protocol.ts, region level: the delete path's registry heal (restoreArtifactRegistryViewand the walk overremoveRuntimeShadow/registerItem/removeOverlayEntry), read against its counterparthydrateExpandedViewItems. Pluspackages/objectql/src/registry.ts, only if the heal needs a registry entry point it lacks. Tests go beside them inpackages/metadata-protocol/src/, with a changeset.changeset/23149-*.md. The dev stops on a breach and explains it in the report.Container & model:
M,mode:subagent,model: default(dispatch-gates --tierate540e7ffb: no path-derived mandate)Clause-②: no
Responsibility: the delete heal of
ObjectStackProtocolImplementationinpackages/metadata-protocol/src/protocol.ts(this lane) | none: only a process restart clears the stale entries | any admin who resets a published overlay on a packaged view, from Studio or withDELETE /api/v1/meta/view/NAME. Measured twice onexamples/app-showcaseby the QA run behind #23104.Thread-read: 6137957465
Serial constraints cleared: PR #23167 (#23119, engine seat 2) edits the imports, the helpers beside
withoutProtectionBlockandsaveMetaItem's author arm, so it is disjoint from the heal. #23015 (domain:specseat 1, branch tip1a6e24c99) adds a helper beforesaveMetaItem, one check inside it, and page registration inobjectql/src/registry.ts. Those regions are disjoint, and the later lander mergesmain. #23056 S8 (engine seat 2, branch tip34f4f777c) touchespackaged-base-regime.tsand three tests, also disjoint. PR #22962 (S8-T) touches test files only. #23165 (queued,saveMetaItem's direct-save arm) is not this card's region. No path here is aSINGLE_CLAIM_PATHSentry. Read againstorigin/maine540e7ffb, from each neighbour's diff.On
Clause-②: no: it is read from the card. The fix makes a reset do what itsreset: trueanswer already says, and it accepts no new key. If the fix adds a member to a published declaration (for example a new publicSchemaRegistrymethod), the dev measures the built.d.tsclosure and reports it. That measurement decides.Generated by Claude Code
fix(metadata-protocol): a view container's reset heals the expansions…
test(metadata-protocol): pin the view container reset's expansion heal (
chore(changeset): metadata-protocol patch for the view container rese…
test(metadata-protocol): record the new suite's pinned engine doubles…