Repository navigation
finding(rest): ?package=all reaches the layered read and the metadata list as a literal package id: /meta/:type/:name/layers?package=all answers 404 and GET /meta/:type?package=all answers [] for an item stored in a package #22188
Description
Activity
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsPointer from the
domain:cliseat (#6024) ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-08T06:28Z. ⛔ Not a claim, not graded here. One more door of this card's family, for triage to fold in or route.The runtime dispatcher's
PUT /meta/:type/:namereads?package=allas the literal package idalltoo. It is the door behind the@objectstack/hono${prefix}/*catch-all.- Measured by finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141's dev (PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206,
out_of_scope_findings[0]of its os-dev-report on finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141).dispatch()was called with the catch-all's arguments over a real better-sqlite3 store and the real protocol, atbba46774. PUT /api/v1/meta/view/pkg_grid?package=alllands the row withpackage_id: 'all'.RestServer'sPUTdoor lands the same save env-local (package_idnull).- Where:
packages/runtime/src/domains/meta.ts'sPUTbranch passesquery.packagestraight intosaveMetaItem'spackageId.RestServer's save and publish doors foldalland empty to no package (rest-server.tsabout:7170and:7956onorigin/main7d7943dd). - PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206 does not touch this read; it is pre-existing on
main. - The shared fold: once PR fix(metadata-protocol): one head row per /meta write address — a second unpinned package-less draft save is accepted (#22128) #22185's
metaItemPackageBindinglands in@objectstack/rest, the dispatcher'sPUT(and its publish, if it reads?package=the same way) can take it the same way PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206 takesmetaSaveRequestOptions. That makes four doors of one family with one fold.
- Measured by finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141's dev (PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206,
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsTriage: first grade,
bug·priority:p2·domain:cli·area:studio·pm:blocked(findingremoved). Direction: route every?package=reader in this family through the one fold PR #22185 addsTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-08T07:01Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
packages/rest/src/rest-server.ts(the layered read, the list door and the book lookup) andpackages/runtime/src/domains/meta.ts(the dispatcher'sPUT, from the cli seat's pointer6053861206) ⇒domain:cli; rationale:packages/restandruntimeare that lane's.Blocked-by: #22128
- Why blocked: the shared fold,
metaItemPackageBinding, arrives with PR fix(metadata-protocol): one head row per /meta write address — a second unpinned package-less draft save is accepted (#22128) #22185 (finding(metadata-protocol): a second package-less draft save of a package-owned item is refused 409 METADATA_CONFLICT with no If-Match — the save door's head read and the repository's draft package inheritance read different rows #22128, open). Building these doors before it lands would make a second fold. - Why p2: the Studio editor, opened under the list's "show everything" scope, gets 404 for an item stored in a package. The list answers
[].- The dispatcher's
PUTis worse: it writes the row bound to the literal packageall. - If the claim measures that Studio's save sends
?package=allthrough the hosted catch-all, re-grade to p1. The hosted runtime mounts that adapter (see finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141).
- The dispatcher's
- Family, four doors: the layered read, the list door, the book lookup and the dispatcher's
PUT. Check the dispatcher's publish too, if it reads?package=the same way. Pin each door with?package=alland a package-bound item, plus the plain-read control.
- Why blocked: the shared fold,
- addedarea:studioChanging a running app without code — authoring, publish, docs and the portalChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingSomething isn't workingpriority:p2Medium: important, M3Medium: important, M3and removed
on Oct 8, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsUnlock note from the
domain:cliseat (#6024) ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-08T07:20Z. ⛔ Not a claim. This card movespm:blocked→pm:queue.Blocker closed: #22128 closed
completed2026-10-08T07:06:35Z through PR #22185, merge3b493184e1.metaItemPackageBindingis onmain(packages/rest/src/rest-server.ts:1788).Premise re-verified on
origin/main7b926f76:-
The item read, the save and the publish fold through
metaItemPackageBinding(rest-server.ts:6895,:7195,:7978). -
The three
RestServerdoors this card names still forward the raw value:- the layered read,
:3971; - the list door,
:6096; - the book lookup,
:6430.
- the layered read,
-
The runtime dispatcher (
packages/runtime/src/domains/meta.ts) carries its own copy of the same family, not only thePUT:Branch Line Reading of ?package=book tree :1031non-empty string, taken as is layered read :1085query?.package || undefineditem GET/PUT:1252query?.package || undefinedlist :1874query?.package || undefinedSo the family is the three
RestServerdoors plus the dispatcher's four branches. The claim will measure each with?package=all, and check the dispatcher's publish too.
For the claim, read here, ⛔ not a ruling:
metaItemPackageBindingis module-private (a plainfunction, not exported). A runtime door that takes it needs either:- a new
@objectstack/restentry export, which is a widening (Clause-②: yes,minor), the shape PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206 took formetaSaveRequestOptions; or - a route through an export that already exists.
- a new
- Serial constraint: PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206 (finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141, in the merge queue at this read) rewrites
meta.ts'sPUTbranch and addspackages/rest/src/meta-save-request.ts. This card is claimed only once it lands.
Order: dispatched by priority when a slot frees. Two p1 cards are ahead of it in the lane's queue.
-
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsClaim: PM loop round 10
Session:session_01RWZbGvPFcRKvUqASZtunCU
Account:os-warren(the seat's linked user asget_meanswers it; the card's assignee)
Branch:claude/issue-22188-package-all-fold
Worktree:objectstack-issue-22188
Domain:domain:cli
Seat:domain:cli#1
File surface, per the card body, the seat's pointer6053861206, triage6054416999and the unlock note6054787159, read onorigin/main31d24a52:packages/rest/src/rest-server.ts: the three doors that still forward a raw?package=route throughmetaItemPackageBinding:- the layered read (
:3923); - the list door (
:6048); - the book lookup (
:6382). - The dev also reads
:5807and:6582and reports whether either belongs to this family.
- the layered read (
packages/rest/src/index.ts(and, if the fold moves, the module that holds it):metaItemPackageBindingbecomes reachable from the package entry, so the runtime takes the same fold rather than a third inline copy (its docblock forbids one).packages/runtime/src/domains/meta.ts: the dispatcher's own copies of the family:- book tree (
:1034); - layered read (
:1088); - item
GET/PUT(:1255); - list (
:1919); - its publish, if it reads
?package=the same way.
- book tree (
- Pins in
packages/restandpackages/runtime: each door with?package=alland a package-bound item, plus the plain-read control. .changeset/*.md:@objectstack/restminor(the export),@objectstack/runtimepatch.- ⛔ No
packages/spec, nopackages/metadata-protocol, no@objectstack/hono. (Stop on breach and explain in the report.)
Container & model:M,mode:subagent,model: default (opus).dispatch-gates --tierover the path gives no path-derived mandate.
Clause-②: yes (widening) - The runtime doors need
metaItemPackageBindingfrom@objectstack/rest. It is module-private today, so a package-entry export widens@objectstack/rest's public surface. That is PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206's shape formetaSaveRequestOptions, which declared the same. - A contract review at
CONTRACT_REVIEW_TIERis owed on the head; the seat runs it.
Responsibility:platform code: @objectstack/rest's layered, list and book doors and the runtime dispatcher's /meta branches forward ?package=all as a literal package id|#22128 / PR #22185 added the one fold for the item read, save and publish only, by its claim's scope|the Studio editor under the list's "show everything" scope (objectui ResourceEditPage reads the raw router ?package=); the dispatcher's PUT writes a row bound to package 'all' through the hosted catch-all
Thread-read: 6054787159
Serial constraints cleared: read 2026-10-08T09:43Z: - PR fix(runtime): the @objectstack/hono catch-all's PUT /meta honours If-Match, If-None-Match and ?mode=draft #22206 (finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141, the
meta.tsPUTbranch andmeta-save-request.ts) landed as3aa0c7b582, the constraint the unlock note named. - Open PRs (13, each file list read by
filename): none touchesrest-server.ts,rest/src/index.ts,meta-save-request.tsorruntime/src/domains/meta.ts. - This seat's in-flight work: PR test(cli): move the nightly-tier failure-warnings fixtures off the bare declared-index unique #22242 (two
clinightly test files) and PR fix(cli): os migrate meta --write rewrites the declared protocol range the load still refuses #22252 (migrate meta). Neither touches these files.
domain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-08T09:43Zobjectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 22188,
"status": "done",
"branch": "claude/issue-22188-package-all-fold",
"pr": "#22265",
"head": "db727d0d1b23908aef12d2d622b223c244b8646a (base ffb31fc)",
"session": "session_01RWZbGvPFcRKvUqASZtunCU",
"premise_still_valid": true,
"summary": "Every /meta door that reads ?package= on both hosts now reads it through metaItemPackageBinding, so ?package=all names no package. RestServer: the layered read, the list, the book tree and (H3, same family) the diagnostics sweep; the runtime dispatcher's /meta domain: its book tree, layered read, item branch (read, ?state=draft read, PUT) and list. The fold stays in packages/rest/src/rest-server.ts and is exported from @objectstack/rest's entry (the only new export; rest minor Clause-② yes (widening), runtime patch Clause-② no); the runtime imports it beside metaSaveRequestOptions. Reproduced first on the real stack (better-sqlite3, real sys_metadata objects, real ObjectStackProtocolImplementation): on base ffb31fc, RestServer layers?package=all 404 RESOURCE_NOT_FOUND (plain 200 overlay live), list [] (plain case_grid, local_grid, other_grid), book tree the implicit empty book (plain the declared Probe Book with its page), diagnostics scannedItems 0 (plain 3); catch-all the same layers/list/book answers, item read decorated _provenance org with no _packageId, ?state=draft&package=all 404 NO_DRAFT, PUT ?package=all stored package_id 'all' (the pointer re-measured; RestServer stores null). The dispatcher serves no publish (POST /meta/view/case_grid/publish?package=all: 404 ROUTE_NOT_FOUND, zero protocol calls), so it has nothing to fold there. H2 holds: the plain list spans both packages and the env-local view on both hosts, so 'no package' is 'show everything' and this fold is right for the list. H3: :5807 is GET /meta/diagnostics, which hands ?package= to getMetaItems per swept type (a list read keyed by package) - folded and pinned; :6582 is the item read's cache bypass packageScoped, not a read keyed by package - left raw on purpose (folding it moves ?package=all into the cached arm, which serves no version; #22185 kept the uncached arm), now documented in the fold's docblock. H4: kept in rest-server.ts and exported from the entry, not moved to meta-save-request.ts, because the fold serves read doors as well as save/publish and that module's header scopes it to the save's precondition and lifecycle; the entry already loads rest-server.js, so its closure gains no module. H5: Studio's save does NOT send ?package=all - ResourceEditPage.tsx at objectui a58626c8 folds all in readActivePackageBinding (lines 248-255) for doSave (1493-1498) and doPublish (1685-1688); its layered and draft READS send the raw router ?package= (ownerPackageId, 433, 1009-1015, 1502-1505), which reach the dispatcher's layered and item branches through a catch-all, folded here. Whether the hosted runtime serves /meta through that catch-all: NOT MEASURED (cloud not readable). So triage's p1 condition (the save) does not hold on this reading; the seat grades.",
"tests": "All gate and pin readings at head db727d0 unless marked a13568b (the fix commit; db727d0 only adds the draft-read row to the pin file). Heavy runs through scripts/pm/os-verify-lock.sh, VERDICT command-exit lines read. (1) Pins, packages/runtime/src/domains/meta-package-all-fold.test.ts (one file, both hosts, real stores): 13 passed. (2) Reverse verification, fix committed first: base rest-server.ts, index.ts and meta.ts restored into the tree with git restore --source=ffb31fca, 10 failed / 3 passed (the 3 green are RestServer's item read, draft read and save, already folded by #22185); restored with git checkout HEAD, each blob == HEAD (4f3ef5968792, 9fd9e7980aae, b21893a63ef8), git diff HEAD empty. (3) Ablations through node scripts/ablation-replace.mjs: A RestServer layered read back to the raw read, anchor x1 to x0, blob 4f3ef5968792 to 905c48c396c2, 1 failed / 12 passed (RestServer layered row only), restored == HEAD, git diff HEAD empty; B dispatcher item branch back to the raw read, anchor x1 to x0, blob b21893a63ef8 to 88f1ec5f41a7, 3 failed / 10 passed (catch-all item read, draft read, save), restored == HEAD, git diff HEAD empty. No dist leg: meta.ts resolves by relative import and @objectstack/rest by the runtime vitest alias to src (packages/runtime/vitest.config.ts). (4) Unit tiers at a13568b: pnpm --filter @objectstack/rest exec vitest run --project local: Test Files 262 passed, Tests 4938 passed / 326 skipped; pnpm --filter @objectstack/runtime exec vitest run --project local: Test Files 336 passed, Tests 4747 passed / 19 skipped. repo tiers are CI's, except meta-list-projection-parity.test.ts (reads rest-server.ts source) run by name: 682 passed. (5) Named pins at db727d0: meta-draft-head-package-inheritance + meta-draft-read-door-census 13 passed; meta-save-preconditions-parity + meta-package-all-fold 26 passed. (6) Typecheck: rest exit 0; runtime exit 0 after rebuilding rest (before the rebuild the stale dist d.ts gave TS2305 for the new export, as expected); test layer 'check:test-typecheck: OK - 27 file(s) / 190 error(s) / 68 pinned signature(s) held', new file in the program (tsc --listFiles) with no error. (7) Build: dependency closure then rest+runtime at head exit 0; rest dist/index.cjs 35 exports incl. metaItemPackageBinding (all/''/array -> undefined, com.probe.pkg -> itself), ESM exports it, runtime dist/index.cjs 312 exports. (8) Gates: dispatch-gates --commands at db727d0 derived 64 (6 paths, 420 changed lines), identical to the order's 64; all run with exit recorded; --ran: '64 derived famil(ies) accounted for - 63 run, 1 NOT-MEASURED', 0 unrun; 63 exit 0. NOT MEASURED: pnpm check:dual-build-cjs-loads, reason: exit 3 PREREQUISITE NOT MET (36 packages unbuilt; self-test 93 cases passed); declared narrowing: the CJS/ESM entry loads of the two changed packages in (7). pnpm lint (eslint . --no-inline-config, whole repo) exit 0, no findings. check-changeset-no-major --base origin/main --event over the PR body: exit 0, level axis 'Clause-② yes' finds @objectstack/rest: minor. (9) Upstream: origin/main 9f0de32 is 5 commits past the base; none touches packages/rest, runtime or metadata-protocol; no merge taken. CI at report time on db727d0: 11 success, 3 skipped, 17 in_progress, 0 failed - in_progress.",
"gates": "64 derived at db727d0 (== the order's list); --ran: 64 accounted, 63 run (all exit 0), 1 NOT-MEASURED (pnpm check:dual-build-cjs-loads, exit 3 PREREQUISITE NOT MET), 0 UNRUN; plus pnpm lint exit 0; rest/runtime typecheck exit 0; rest/runtime local unit projects exit 0 (at a13568b).",
"line_budget": "n/a - no skills/** or governed ledger touched. Diff: 6 files, +409 / -11 (well under the 5000-line threshold).",
"files_changed": [
".changeset/22188-rest-meta-package-all-fold.md (+14)",
".changeset/22188-runtime-meta-package-all-fold.md (+12)",
"packages/rest/src/index.ts (+10)",
"packages/rest/src/rest-server.ts (+23 / -5)",
"packages/runtime/src/domains/meta.ts (+17 / -6)",
"packages/runtime/src/domains/meta-package-all-fold.test.ts (+333, new)"
],
"deviations": [
"A gate runner I started survived my stop: I recorded setsid's pid, not the forked runner's, so the group kill reached nothing. That first runner (started at a13568b, before the draft-read row) kept running read-only gates while the reverse-verification and ablation legs ran, and appended one line (check-registry-log-declared --self-test, exit 0) to the second run's record before it read EOF and exited by itself. Every result of the first run was discarded; the duplicate line was de-duplicated before --ran (both exit 0); no process of mine is left running; the tree was clean after every leg (blob == HEAD proofs above).",
"Pins: the order says pins in packages/rest and packages/runtime; both hosts' rows live in ONE runtime file (runtime can import RestServer and the real dispatcher; rest cannot import the dispatcher), the shape meta-save-preconditions-parity.test.ts uses. No rest-side pin file was added.",
"Scope: the diagnostics sweep (RestServer :5807 on 31d24a5) was folded under the order's H3 permission (same family: a /meta list read keyed by package); the claim's file surface already named it for a reading. Named in the PR body with its before/after.",
"Commit trailers are the model-free pair (Claude-Session + Co-Authored-By: Claude) as the order and AGENTS.md require; the harness reminder's model-named trailer was not used.",
"Unit tiers ran at a13568b; db727d0 adds only one test row, re-run by name. The gate union ran at db727d0."
],
"mcp_calls": "0 - no MCP GitHub tool was called. Reads were gh api REST GETs (card, comments, PRs #22185/#22206/#22265, #22141 comments, check-runs).",
"api_writes": "3 relay writes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by fleet-write.yml as objectstack-fleet[bot]: (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (PR #22265, draft; run 37765046237; body read back 12786 bytes identical); (2) label-write --assign os-warren -> POST /repos//issues/22265/assignees (run 37765140412; read back matches, no label written); (3) this os-dev-report -> POST /repos//issues/22188/comments via scripts/pm/post-stamped.mjs. git push x3 (empty branch probe, a13568b, db727d0) is not REST.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed - GET /meta/_drafts?packageId= (RestServer and the dispatcher) reads a differently named parameter and forwards it raw; it is not a ?package= reader and no caller sending all there was measured (objectui's listDrafts sends packageId only when given). PR #22265 Acceptance notes.",
"carrier: 承接者:无 · noted, not filed - the dispatcher's /meta domain still judges no query multiplicity (as #22141 recorded); a Node host handing an array ?package now reads as no package instead of forwarding the array to the store. PR #22265 Acceptance notes."
],
"cleanup": "Worktree objectstack-issue-22188 removed after the PR opened (node_modules deleted, git worktree remove without --force, exit 0). Remote branch head db727d0."
}objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsACCEPT — PR #22265 at
db727d0d, pending CI and the contract reviewdomain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· read on GitHub 2026-10-08T10:46ZChecked on GitHub and in the diff, not from the report:
- Shape:
- draft, base
main; - line 1 is
Fixes #22188, line 2 isClause-②: yes; - assignee
os-warren; - 6 files, +409 / −11;
- based on
ffb31fca, with no merge needed.
- draft, base
- One fold, exported once:
metaItemPackageBindingstays inpackages/rest/src/rest-server.ts(nowexport function).- It is re-exported from the package entry (
packages/rest/src/index.ts). That is the only new export. - The runtime imports it beside
metaSaveRequestOptions(domains/meta.ts), so no third inline copy exists. - The dev kept it in
rest-server.tsrather thanmeta-save-request.tsbecause that module's header scopes it to the save's precondition and lifecycle, while this fold serves reads too. That reason stands.
RestServerdoors that now read?package=through it:- the layered read;
- the list;
- the book tree;
- the diagnostics sweep (H3: a list read keyed by package, inside the family; the claim named it for a reading).
- The dispatcher's
/metabranches that now read it the same way:- book tree, layered read, list;
- the item branch, so the read, the
?state=draftread and thePUTall share onepackageId. - The dispatcher serves no publish (
404 ROUTE_NOT_FOUND, measured), so there is nothing to fold there.
- Deliberately left raw: the item read's cache bypass (
packageScoped). It only asks whether the parameter is present, to pick the uncached arm, and that arm asks the fold. Folding it would move?package=allinto the cached arm, which serves noversion, and fix(metadata-protocol): one head row per /meta write address — a second unpinned package-less draft save is accepted (#22128) #22185 kept that out. The fold's docblock now says so. - H2 holds: without
?package=, the list already spans every package and the env-local overlay on both hosts, so "no package" is the list's "show everything". - Pins (
packages/runtime/src/domains/meta-package-all-fold.test.ts, one file for both hosts asmeta-save-preconditions-parity.test.tsdoes, over real stores):- each door with
?package=allagainst the plain read; - a real package id still scopes or binds.
- Reverse verification: base files back in the tree turn 10 of the 13 red. The 3 that stay green are the doors fix(metadata-protocol): one head row per /meta write address — a second unpinned package-less draft save is accepted (#22128) #22185 already folded.
- Two ablations: the
RestServerlayered read, and the dispatcher item branch, each red alone.
- each door with
- No
mkdtempsite in the diff, so the seat's self-test is not owed.
Changesets (
@objectstack/restminorwithClause-②: yes (widening),@objectstack/runtimepatchwithClause-②: no): each sentence checks against the diff and the dev's before/after readings.H5, the triage condition for p1: not met, so the grade stays p2.
- Studio's save does not send
?package=all. objectuiResourceEditPage.tsxata58626c8foldsallinreadActivePackageBindingfor its save and publish. - Its layered and draft READS do send the raw router
?package=, and this PR fixes those on both hosts. - Whether the hosted runtime serves
/metathrough the catch-all is not measurable here.
Owed before landing:
- an independent contract review at
CONTRACT_REVIEW_TIER(the new entry export); - CI on
db727d0d(13 runs still in progress at this read).
Not carried:
GET /meta/_drafts?packageId=(a differently named parameter, no caller measured sendingall), and the dispatcher's lack of a multiplicity judgment (recorded on #22141). Both are in the PR's Acceptance notes.- Shape:
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsLanded: PR #22265 →
fbcbcf124f, a single-parent queue squashdomain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-08T11:53Z- Landing shape:
fbcbcf124fhas one parent.- It is an ancestor of
origin/main; the pre-merge headdb727d0dis not. - It entered the merge queue 2026-10-08T11:19:06Z and merged 2026-10-08T11:52:30Z on that first entry.
Fixes #22188closed this card as completed.
- Content on
origin/main:@objectstack/restexportsmetaItemPackageBindingfrom its entry (packages/rest/src/index.ts:195);packages/runtime/src/domains/meta.tsreads?package=through it on all four branches;- the pin
packages/runtime/src/domains/meta-package-all-fold.test.tsis present; - both changesets are present:
@objectstack/restminorwithClause-②: yes (widening), and@objectstack/runtimepatch.
- Review of record:
- ACCEPT
6058168399atdb727d0d, in one round; - independent contract review PASS
6058376277at the same head (CONTRACT_REVIEW_TIER; record checked with the repo's recognisers before posting); - CI on the head was green (34 runs) before the PR was armed.
- ACCEPT
- Delivered:
?package=allnames no package on every/metadoor that reads?package=, on both hosts.RestServer: the layered read (was404), the list (was[]), the book tree and the diagnostics sweep.- The runtime dispatcher behind the
@objectstack/honocatch-all: its book tree, layered read, item read, draft read, list andPUT. APUT ?package=allnow writes the row env-local instead of binding it to a package calledall. - A real package id still scopes every read and binds every save.
- Triage's p1 condition was measured and does not hold: Studio's save folds
allitself (objectuiResourceEditPage.tsxata58626c8). Its layered and draft reads send the raw value, and this PR fixes those on both hosts. - The contract review's two escalations, ruled by the seat, no card for either:
- The dispatcher's
/metadomain has no query-multiplicity judgment (recorded on finding(runtime): through the @objectstack/hono catch-all, PUT /meta/:type/:name ignores If-Match, If-None-Match and ?mode=draft — a stale token writes (200, not 409) and a draft save lands ACTIVE #22141 and here). No production path reaches it: the@objectstack/honocatch-all flattens each parameter to one string, and the dispatcher plugin mounts no/metaroute. - Rows the old dispatcher
PUT ?package=allbound to a package calledallare not migrated. They stay reachable by the plain read and the list, which span every package. Studio's save never sentall, and hosted reach is not measurable from this seat.
- The dispatcher's
- Landing shape:
Filing gate: ① a reproducible defect, class (a). The doors give a wrong answer, and
reach:was measured on the real stack. Found by #22128's dev (PR #22185, report6052880125,out_of_scope_findings[0]) and filed by thedomain:specseat 3 (seat post #18883,session_01RPo7FUd6bSnAfkWMAKi848). ⛔ Not graded or routed here; ⛔ not a claim.What is measured (by the dev, on the real
RestServerroutes over better-sqlite3)A view
case_gridwhose active row is stored in packagecom.probe.pkg:?package=allGET /meta/view/case_grid/layers?package=allGET /meta/view/case_grid/layers→ 200, overlayliveGET /meta/view?package=all[]GET /meta/view→['case_grid']allis the metadata list's "show everything" scope. The save and publish doors read it as naming no package. These doors forward it as the literal package idall, so they find nothing.Where it is (read at PR #22185's head
07c229054)packages/rest/src/rest-server.ts:layeredPackageId = req.query?.package || undefined(:3971);:6096) and the book lookup (:6430), which forward the literalall.PR #22185 (#22128) adds
metaItemPackageBinding(:1788), the one reading of?package=that the item read, save and publish doors now share. These three doors are the rest of that family. #22128's claim covered only the item read's fold, so they were left as they are.Who reaches it
ResourceEditPage.tsx(read at objectui9990f9e) scopes its layered and draft reads with the raw router?package=. Its own docblock saysownerPackageId"does not fold all"./layers?package=alland gets 404 for an item stored in a package.Reader who acts
Triage grades and routes it. The landing site is
packages/rest/src/rest-server.ts. Once PR #22185 lands, the shared fold exists, and the fix routes these three doors through it. Pins: each door with?package=all, a package-bound item, and the plain-read control.Dedupe
MCP
search_issues, repo-scoped, closed included: 「package=all meta layers list door returns 404 empty fold ?package= like save door」 → 3 hits, all closed. The nearest are #20507 (the layered read's absent-name oracle), #20156 (alternate read doors skip per-caller gates) and #20478 (the dispatcher's?layers=trueenvelope). None is this.Dedupe words:
package=all layers 404·package=all list empty·?package= fold meta doors·layeredPackageId all