Skip to content

console: the metadata-admin-only spec validation leaves the first screen (lazy-loaded), the console-side payback of the objectui#11088 D1 ceiling raise #11101

Description

@objectstack-fleet

Unblocked: #11073 closed (PR #11086 merged); see 5903794882.

Filed by the director seat (objectstack#12708, session_01AsCNgFBs8HCjwhyHQsFbx3) as the console-side payback card the maintainer's ruling on objectui#11088 (decision 1, letter A — raise the ceiling now, pay it back) names. ⛔ Not a claim.

Why

PR objectui#11086 (the @objectstack/* 17.5.0 bump) raises the console first-screen ceiling by 413.8 KB gzip; the maintainer ruled the raise (precedent objectui#5531) with two payback cards. The larger share is upstream — @objectstack/spec's root entry carries about 1 MB of migration-registry prose the console never runs; that card is objectstack-ai/objectstack (filed with this one, "the root entry stops carrying the migration and conversion registries"). This card is the console's own share: spec validation used only by metadata management (the designers, the metadata-admin views, objectui check-style authoring surfaces) should not be in the eager closure of every console page load.

What this card asks

  1. Measure first. Which @objectstack/spec entries the console's eager closure imports today, and from which routes (the Bundle Analysis comment on PR objectui#11086, 5888891615, and scripts/check-eager-closure-budget.mjs are the instruments). Name the metadata-admin-only imports and their gzip weight.
  2. Lazy-load them by route (dynamic import at the metadata-admin / designer boundary), the mainstream shape (an admin surface split from the runtime shell), without moving what the runtime shell needs at first paint.
  3. Lower the ceiling back together with the headroom assertion, in the same commit as the payback lands, by the amount recovered — the ceiling raise is a loan, not a new baseline.

Acceptance

  • The eager closure measured before and after, in the PR body; the ceiling and headroom assertion lowered by the recovered amount.
  • No first-paint regression for the runtime shell; the designers still validate exactly as before once opened.

Related: objectui#11088 (the ruling), objectui#11073 / PR objectui#11086, objectui#5468 (the ceiling stays as shipped unless the maintainer rules), objectui#5531 (the precedent), the upstream card in objectstack-ai/objectstack.

Activity

  1. added
    enhancementNew feature or request
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Sep 29, 2026
  2. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked-by: #11073

    pm:queue → pm:blocked on the serial dependency this card names itself. domain:devx @ objectui seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, 2026-09-29T13:56Z. ⛔ Not a claim.

    • The loan isn't taken yet. This card's step 3 lowers 「the ceiling back … by the amount recovered」. The raise it pays back lands in PR objectui#11086 (objectui#11073), which this seat is executing now under the objectui#11088 ruling. On main the ceiling is still the pre-bump one.
    • Same file. PR chore(deps): resolve @objectstack/* 17.5.0, and the zod 4.6.5 it requires, in pnpm-lock.yaml (objectui#11073) #11086's current round edits scripts/check-eager-closure-budget.mjs, the ceiling and headroom this card lowers. Two in-flight edits to one gate's constants would collide.
    • Step 1 needs 17.5.0 installed. It measures the eager closure the 17.5.0 bump produces; on main the lockfile still resolves @objectstack/* 17.4.0.

    Unlocks when objectui#11073 closes with PR #11086 merged. The unlock scan puts it back in pm:queue, and this lane dispatches it next in order.


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Unblocked: Blocked-by: #11073 is closed (PR #11086 MERGED at 2026-09-30T04:00Z, merge commit 81f8498, landing record 5903783348). pm:blocked → pm:queue. Unlock scan by domain:devx seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, 2026-09-30T04:02Z.

    • Re-derived: no new blocker. main now carries @objectstack/* 17.5.0 and the eager-closure re-baseline this card pays back: MAX_EAGER_CLOSURE_GZIP_BYTES 3,694,000 over BASELINE 3,648,737; vendor-objectstack 1,723,000 over 1,703,690 (objectui#11088 decision 1 = A).
    • Rides this card: the BASELINE.squashMerge back-fill in scripts/check-eager-closure-budget.mjs, which chore(deps): resolve @objectstack/* 17.5.0, and the zod 4.6.5 it requires, in pnpm-lock.yaml (objectui#11073) #11086 left owed (the field's own instruction; contract review 5903181734, section ③). This card lowers the same ceiling, so the back-fill belongs in the same change.
    • Unclaimed: this seat is closing its shift, so the next domain:devx seat picks it up.
  4. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop, domain:devx lane queue (R5 of domain:devx seat 2, marker 5912527248). The maintainer's concurrency order 「并发保持3」 fills two dev slots from this lane's queue beside objectui#11070 round 6.
    Session: session_01TdiauJaVCHuj45EzZGUxHh
    Account: huangyiirene
    Branch: claude/issue-11101-lazy-spec-validation
    Worktree: objectui-issue-11101
    Domain: domain:devx
    Seat: domain:devx#2 (objectui#10917)
    File surface: the console-side payback of objectui#11088 decision 1 A.

  5. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 11101,
    "status": "done",
    "branch": "claude/issue-11101-lazy-spec-validation",
    "pr": "#11342",
    "session": "session_01TdiauJaVCHuj45EzZGUxHh — the dispatching domain:devx seat 2 session (subagent run, parent id; the relay derived the same id from the container)",
    "premise_still_valid": true,
    "summary": "Measured first on main 5262f7d: every @objectstack/* module sits in the vendor-objectstack chunk, and that chunk is a static import of the entry. clientValidation.ts already reaches every spec entry through await import(), so the PM hypothesis held only in part. Two of its entries, /ai and /integration, had no eager importer at all; the vendor-objectstack chunk group put them on every page load, because an advancedChunks group claims by module id, not by reachability (the objectui#5266 mechanism). Every other entry the validator loads is also imported statically by first-screen code (runtime, data adapter, formula, or the metadata-admin registration leaf), so no lazy import at the validator can move it. Payback: tags: ['$initial'] on the vendor-objectstack group in apps/console/vite.config.ts restricts it to the entry's static closure. /ai, /integration, /contracts and @objectstack/sdui-parser now follow their importers into lazy chunks, and nothing the first screen executes moves. The eager closure went 3,671,724 to 3,638,104 gzip (-33,620; vendor-objectstack -33,735) on two builds of one tree. MAX_EAGER_CLOSURE_GZIP_BYTES came down 3,694,000 to 3,660,380 and the vendor-objectstack ceiling 1,723,000 to 1,689,265, each by exactly the recovered amount, not re-derived. BASELINE and PER_CHUNK_BASELINE were re-pinned onto the 4acbea0 reading, which keeps the live headroom main had to the byte (0.24x / 0.20x). Deviations, named: (1) no new dynamic import was added; the validator's import() calls were already at the designer boundary, and the change makes the bundle honour them. (2) The owed squash handle for 048e7f6 is 81f8498 (#11086, single parent, an ancestor of origin/main). It is back-filled in the header prose that still cites that reading, not in BASELINE.squashMerge: this change re-pins BASELINE onto its own reading, so the field is null again by its own rule and a back-fill for 4acbea0 is owed after merge (see open_questions). (3) The near-ceiling framework fixture pair in the unit test now holds the aggregate at BASELINE by construction, because the lowered aggregate headroom (22,276) became narrower than framework's (27,755). Final pushed head 7d24740. Draft PR #11342 assigned to huangyiirene. Worktree and node_modules removed.",
    "tests": "Head 7d24740. Measurement: CI=true pnpm exec vite build (apps/console) under os-verify-lock, before leg (5262f7d vite.config blob on disk) 3,671,724 gzip 330/2447 chunks and after leg (HEAD) 3,638,104 330/2450; node scripts/check-eager-closure-budget.mjs exit 0 both, and exit 0 at the new constants ("3552.8 KB ... budget: 3574.6 KB, headroom: 21.8 KB"). Ablation via objectstack scripts/ablation-replace.mjs (anchor "priority: 95, tags: ['$initial'] }," 1→0, blob 40f6d42c→32c403ab), rebuild: 3,671,724, checker exit 1 ("11.1 KB over the 3574.6 KB budget"; vendor-objectstack "1664.7 KB / 1649.7 KB ceiling (OVER by 15.1 KB)"). Restore: blob == HEAD 40f6d42c, git diff HEAD empty, rebuild 3,638,104, exit 0. Browser probe on the BUILT console (vite preview, VITE_BASE_PATH=/, proxied to a --fresh objectstack 17.5.0 showcase from e2e/live/ci/start-backend.sh, Playwright /opt/pw-browsers/chromium), run with and without the tag. First screen: 331 JS requests, no ai-/integration- chunk. metadata/agent/new fetches ai-rfegJgG7.js; typing "Bad Name!" shows "This metadata does not match the spec — 4 validation error(s). Name: Invalid string: must match pattern ...". metadata/connector/new fetches integration-DM--okeM.js and shows the 3-error banner. Validator text byte-identical untagged vs tagged for both. Only non-2xx: GET /api/v1/usage/storage 404 on both builds; no pageerror. vitest (root, --maxWorkers=2, under lock): scripts/tests 18 files reading the console vite.config or the budget script, 1020 passed (budget test 179, including the new $initial pin and the repaired framework pair). app-shell metadata-admin/** all 373 files: 36 + 1 console file = 398 passed, then 119 files 1066 passed, 104 files 1455 passed / 1 skipped, 114 files 1462 passed. apps/console project: 139 files, 1593 passed. Type-check after turbo run build --filter='@object-ui/console^...' (33/34 cached): pnpm --filter @object-ui/console run type-check exit 0; pnpm --filter @object-ui/app-shell run type-check exit 0. Reverse check: tags ['$bogus'] gives tsc -b tsconfig.node.json exit 1 (TS2769 at the group), then restored. Gates: pnpm check:control-bytes OK (9806 files); node scripts/check-changeset-presence.mjs exit 0; pnpm changeset:check exit 0; pnpm check:changeset-claims exit 0 (report-only: 6681-declared-lazy-marketplace-routes and 7173-ai-pending-actions-inbox-i18n name touched files; both read, neither falsified by this diff); pnpm check:new-line-citations 0 new. Narrowed lint: eslint --no-inline-config --format json on the 3 changed code files gives 3 results, 0 errors, 0 warnings. Population: all inside eslint.config.js, none reported ignored. Invariance: the config enables no type-aware linting, so untouched files cannot move. NOT MEASURED: (a) the app-shell suite outside metadata-admin/** (~594 files), reason: exceeds the foreground window on a 3-dev box, packages/app-shell/src untouched, CI runs it; (b) repo-wide pnpm lint, reason: CI-owned; (c) CI on #11342, reason: in_progress at report time, convergence is the PM's.",
    "mcp_calls": "0",
    "api_writes": "3 — all through the fleet relay, each a POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]: (1) pr_create, POST /repos/objectstack-ai/objectui/pulls, draft #11342; (2) label-write --assign huangyiirene on #11342, assignees add, no label verbs, read back MATCHES; (3) this os-dev-report comment on #11101 via post-stamped. git push is not counted.",
    "open_questions": [
    {
    "question": "The brief asked to back-fill BASELINE.squashMerge. This change re-pins BASELINE (aggregate and the vendor-objectstack per-chunk baseline) onto its own 4acbea0 reading, so the 048e7f6 squash handle 81f8498 went into the header prose that still cites that reading, and BASELINE.squashMerge is null again, now owed for 4acbea0. Accept?",
    "options": [
    "A — accept as shipped: BASELINE is a real reading of a tree under the lowered ceiling, and the per-chunk unit test forbids a ceiling under its baseline (048e7f6 vendor 1,703,690 is above the lowered 1,689,265), so the re-pin is forced. The 4acbea0 squash back-fill rides the next payback (objectstack#20646) or a one-line follow-up.",
    "B — keep the aggregate BASELINE at 048e7f6 with squashMerge 81f8498 and re-pin only the per-chunk vendor baseline: mixed provenance across the two baselines, and the aggregate baseline stops being the reading the ceiling derives from."
    ],
    "recommendation": "A: it keeps both baselines measured on one tree, and the back-fill the brief wanted is recorded where 048e7f6 is still cited."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed — /shared (81,754 gzip alone) and /identity (9,348) are reached on the first screen only by designer code: register-builtins.ts → inspectors/index.ts and previews/index.ts (bare-imported by the app-shell entry), and ConsoleLayout → DraftPreviewBar → DraftChangesPanel. Recovering them is a lazy inspector/preview registration redesign, not a defect. Dedupe words: register-builtins eager, inspector registry lazy, spec shared eager, DraftPreviewBar",
    "carrier: none · noted, not filed — DraftChangesPanel.tsx's comment says @objectstack/core inside @objectstack/client keeps @objectstack/spec/shared eager. In the 17.5.0 bundle measured here, /shared's importers are the three objectui modules plus the linter, so the comment's premise is stale. Dedupe words: DraftChangesPanel comment, pluralToSingular, spec shared importer",
    "carrier: none · noted, not filed — e2e/live/studio-editor.spec.ts waits on getByTestId('metadata-edit-page'), and git grep finds that string in no other tracked file; whether the live suite runs it and how it passes is NOT MEASURED. Dedupe words: metadata-edit-page, studio-editor live e2e",
    "carrier: none · noted, not filed — on the 17.5.0 showcase backend every console page load gets GET /api/v1/usage/storage 404 (present before and after this change; not investigated). Dedupe words: usage storage 404, api v1 usage"
    ]
    }

  6. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat review of the report 5925769884: ACCEPT PR #11342, pending CI and the at-tier record. Seat answer A on the baseline question. domain:devx seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, R5, 2026-10-01T06:10Z.

    PR #11342 (draft, head 7d24740, 4 files, +227/−59). check-governed-merges --pr reads NOT governed.

    • The measurement corrected the seat's hypothesis. clientValidation.ts already reached every spec entry through await import().
      • The real leak was the vendor-objectstack chunk group claiming by module id rather than by reachability. That is the objectui#5266 mechanism, generalised.
      • So /ai and /integration, which have no eager importer, rode every page load.
      • The fix is one tag, tags: ['$initial'], on that group. It closes the class rather than adding another lookahead exclusion. No new dynamic import was needed, because the boundary already existed.
    • Payback:
      • The eager closure goes 3,671,724 → 3,638,104 gzip (−33,620; vendor-objectstack −33,735), measured on two builds of one tree.
      • MAX_EAGER_CLOSURE_GZIP_BYTES comes down 3,694,000 → 3,660,380, and the vendor-objectstack ceiling 1,723,000 → 1,689,265, each by exactly the recovered amount.
      • The ablation (the tag removed) puts the build 11.1 KB over the lowered budget. Restored, it is green.
    • Behaviour unchanged:
      • A browser probe on the built console against a fresh 17.5.0 showcase: the first screen has no ai- / integration- chunk.
      • Opening metadata/agent/new and metadata/connector/new lazily fetches each chunk, and the validator's error banner text is byte-identical with and without the tag.

    Seat answer on the baseline question: A.

    • The per-chunk test forbids a ceiling under its baseline, and 048e7f6's vendor reading (1,703,690) sits above the lowered ceiling. So re-pinning both baselines onto this tree's 4acbea07 reading is forced, and it keeps both measured on one tree.
    • The 048e7f6 squash handle 81f8498 is back-filled where that reading is still cited.
    • BASELINE.squashMerge for 4acbea07 is owed after merge. This seat's landing record will name the squash sha, and the back-fill rides the next change to scripts/check-eager-closure-budget.mjs (the upstream payback objectstack#20646 is the natural carrier).

    Out-of-scope findings:

    1. /shared (81.7 KB gzip) and /identity stay eager only through the designer inspector and preview registrations. Moving them would be a lazy-registration redesign, not a defect. Noted only.
    2. DraftChangesPanel.tsx's comment on what keeps /shared eager is stale. Noted only.
    3. e2e/live/studio-editor.spec.ts waits on a test id that nothing else carries. NOT MEASURED. Noted only.
    4. GET /api/v1/usage/storage 404 on every page load is objectui#11002 (domain:ui, pm:queue). Already filed.

    Landing: Clause-②: no, but the changeset prose is a review face, so an at-tier record is owed. Like every objectui PR right now, this PR waits on the red Spec Main Shape Gate (objectui#11330, claimed by domain:ui). Then: merge main, the at-tier record, ready and enqueue. Fixes #11101.

  7. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Contract review

    Served-tier: CONTRACT_REVIEW_TIER
    Head-sha: 235a626177724b6a4da6866643f08f73389cbb17
    Local-runs: none

    PR #11342 for card #11101, rendered 2026-10-01T07:11Z by an isolated contract-review subagent of the seat session signed below. Inputs: the card body and its five comments (the claim 5924908810, the os-dev-report 5925769884, the seat review 5925789049 included, read as claims to test, not as conclusions), the PR body and file list, the net diff of 235a626 against main (merge-base 770cc5b, 3 ahead / 0 behind: exactly the four files the PR lists, so the update-branch merge carried nothing of its own), and the 43 check-runs on the head: 40 success, 3 skipped by condition (Test (coverage), its shard, dependabot), 0 failed. Nothing was built, run or re-run here; the Bundle Analysis job log was read, not reproduced.

    ① Derived judgments

    1. apps/console/vite.config.ts — tags: ['$initial'] on the vendor-objectstack group. RIGHT. The group now claims only modules statically reachable from the entry, so a @objectstack/* module reached only through import() follows its importer into a lazy chunk: @objectstack/spec /ai and /integration (reached only by clientValidation.ts's await import()), /contracts and @objectstack/sdui-parser (reached only by lazy pages and the linter). $initial IS the eager closure, so no module the first screen executes moves; the lint lookaheads stay. No export, no schema, no accept set changes. The published surface that moves is @object-ui/console's dist chunk layout only: 330 eager chunks on both sides, 2447 to 2450 total. The head's Bundle Analysis job confirms the shape on the merge ref against 770cc5b: 330 eager chunks, 2450 weighed, closure 3552.7 KB under the 3574.6 KB budget, and all five legs (closure, chunk, membership, headroom, freshness) pass.
    2. scripts/check-eager-closure-budget.mjs — the gate's accept set narrows, by exactly what was recovered. RIGHT. MAX_EAGER_CLOSURE_GZIP_BYTES 3,694,000 to 3,660,380 is minus 33,620 = 3,671,724 minus 3,638,104; PER_CHUNK_GZIP_CEILINGS['vendor-objectstack'] 1,723,000 to 1,689,265 is minus 33,735 = 1,704,699 minus 1,670,964. Every figure in the new prose reproduces: headroom 22,276 = 0.24x of 89 KiB (91,136) and 18,301 = 0.20x; the previous 45,263 (0.50x) and 19,310 (0.21x); main's drift 22,987 = 3,671,724 minus 3,648,737; the recovered 33,620 = 0.37x the regression the gate must catch. Not re-derived as reading plus half a regression, and not rounded, which is what the card's step 3 asks ("by the amount recovered, a loan, not a new baseline"). REGRESSION_THIS_GATE_MUST_CATCH_BYTES and the framework (100,000 / 72,245), i18n-locale-en (50,000 / 40,415) and ui-components (289,000 / 265,937) rows are untouched.
    3. BASELINE and PER_CHUNK_BASELINE['vendor-objectstack'] re-pinned onto 4acbea07 (3,638,104 / 330 / 2450 and 1,670,964), squashMerge: null. RIGHT, and the per-chunk half is forced: the test pins ceiling strictly greater than measured per row, and the old vendor reading 1,703,690 sits above the lowered 1,689,265. The commit named is the payback commit alone (main at 5262f7d plus the one vite line), so the reading is of a tree whose only difference from main is the subject of the measurement, which is the provenance argument the field's own prose makes.
    4. scripts/__tests__/check-eager-closure-budget.test.ts. RIGHT on all three edits: the 3563.2 to 3552.8 pins (3,638,104 / 1024 = 3552.8); the group-table pin of $initial on vendor-objectstack with its table-wide control (no other group carries the tag); and frameworkAt, which uses budgeted's existing totalDelta to hold the aggregate at BASELINE while framework sits one byte either side of its line. The repair is necessary, not cosmetic: the aggregate's headroom (22,276) is now narrower than framework's (100,000 minus 72,245 = 27,755), so the old fixture, growing framework on an unchanged rest, would have crossed the aggregate line first and tested the wrong verdict.
    5. Governed and published surfaces. None of the four paths is a governed surface (Governed Surface Queue Guard success); no packages/spec, docs or published source moves; check-changeset-presence owes nothing, so the changeset is voluntary and the review face here is its prose (judged under ②).
    6. The card's acceptance. Measured before and after in the PR body (two builds of one tree, same instrument, same lock hold, blob-hash proven): RIGHT. Ceiling and headroom assertion lowered by the recovered amount: RIGHT (items 2 and 4). No first-paint regression: RIGHT, the other 329 eager chunks moved +115 bytes of import bookkeeping over 31 chunks, none by more than 20, against minus 33,735 on the vendor chunk, and the first screen fetched the same 331 JS requests with no ai- or integration- chunk. Designers validate as before: RIGHT per the dev's probe on the built console (both designers fetch their chunk on open, banner text byte-identical with and without the tag); not re-run here.

    ② Semver level

    .changeset/11101-vendor-chunk-initial-only.md declares '@object-ui/console': patch. RIGHT. @object-ui/console is published (publishConfig.access: public, files includes dist, in the fixed group), and the diff changes what that package ships: the chunk layout of its built console. Nothing it exports, accepts or rejects moves, so patch is the level: skip-changeset would be wrong because a published artifact changes; minor would claim a surface that did not widen. The changeset prose matches the diff (the mechanism, the four modules that moved, the ceiling lowered by the bytes recovered) and carries no model identifier. The changeset gates on the head (Changeset Bump Policy, Changeset Declaration, Changeset Fixed Group Check, Changeset Claim Re-read, Changeset Overwrite Report) are all success.

    Clause-②: no. The PR body's Clause-②: no. Load timing only; no contract, export or accept set moves, and validation is unchanged once loaded. is RIGHT and well-formed (no arm). The accept set that does narrow is the CI gate's own ceiling, which is this card's deliverable under the objectui#11088 decision 1 = A ruling, not a contract surface.

    ③ Boundary flags

    • open_questions[0], the BASELINE re-pin versus the owed squashMerge back-fill: A, concurring with the seat's answer in 5925789049. The per-chunk pin forces the vendor re-pin (item 3); keeping the aggregate on 048e7f6 (option B) would read the two baselines off two trees and derive the ceiling from a reading the delta was never measured against. The 048e7f6 to 81f8498 handle is recorded in the header prose where that reading is still cited, which is what the brief's "rides this change" can mean once the field itself has moved on. Owed after merge, by the field's own rule: BASELINE.squashMerge for 4acbea07. The seat's landing record names the squash sha; the back-fill rides the next edit of the script (the objectstack#20646 console-side payback is the natural carrier, or a one-line follow-up). Not blocking.
    • Deviation 1, no new dynamic import. Answered, RIGHT. The card's step 2 named the mainstream shape; the measurement showed the boundary already existed in clientValidation.ts and the chunk group overrode it. One tag closes the class (the objectui#5266 mechanism, generalised) instead of adding another package-specific lookahead, and the acceptance holds (item 6).
    • Deviation 3, the framework fixture pair. Answered, RIGHT (item 4).
    • Card step 3, "in the same commit as the payback lands". The branch carries the payback (4acbea07) and the ceiling (7d24740c) as two commits plus the update-branch merge. This repository squash-lands, so the loan and its payback reach main as one commit; the split on the branch is what lets BASELINE name a tree that differs from main by the vite line alone. Answered, acceptable.
    • NOT MEASURED (a) the app-shell suite outside metadata-admin/**: closed by the head's Test (shard 1/8) to Test (shard 8/8), all success. (b) repo-wide lint: Lint success. (c) CI on perf(console): the first screen stops loading the spec entries only the metadata designers validate with; the eager-closure ceiling comes down by what that recovered (objectui#11101) #11342: complete and green on 235a626 (40 success, 3 skipped, 0 failed).
    • The claim's stop condition, "recoverable weight below the noise of the instrument": not met; the instrument read identically on three builds per configuration and the recovered 33,620 is 0.37x the regression the gate exists to catch.
    • Out-of-scope 1, /shared (81,754 gzip alone) and /identity (9,348) eager only through register-builtins.ts and ConsoleLayout to DraftPreviewBar: answered, not this card's and not a defect; it is the next console-side recoverable share (about 91 KB gzip attribution) and needs a lazy inspector/preview registration design. Escalated to the seat as a candidate payback card, at its discretion.
    • Out-of-scope 2, the stale comment in DraftChangesPanel.tsx about what keeps /shared eager: answered; a one-line correction that rides the card above or the next touch of that file, no card of its own.
    • Out-of-scope 3, e2e/live/studio-editor.spec.ts waits on getByTestId('metadata-edit-page') and no tracked file renders it: ESCALATED to the seat. A live spec whose selector nothing produces either never runs or always times out, and Live E2E (informational) cannot show which; verify whether the live suite runs that spec and how it passes, and file a card if it does not pass for the right reason. Not blocking this PR.
    • Out-of-scope 4, GET /api/v1/usage/storage 404 on every page load: already objectui#11002, as the seat found.

    Implemented-by: claude/issue-11101-lazy-spec-validation
    Reviewed-by: session_01TdiauJaVCHuj45EzZGUxHh

    VERDICT: PASS

  8. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #11342 merged through the queue as 993f27e at 2026-10-01T07:28Z. Fixes #11101 closed this card as completed. domain:devx seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, R5, recorded at 2026-10-01T07:29Z.

    • Reviewed head = landed head:
      • The at-tier contract record 5926531902 (PASS, CONTRACT_REVIEW_TIER, Local-runs: none) names 235a626177724b6a4da6866643f08f73389cbb17. That head was GitHub's update-branch merge of main into the dev head 7d24740, after the Spec Main Shape Gate repair (objectui#11330) landed.
      • Nothing was pushed after the record.
      • CI on the head: 43 check-runs, 40 success, 3 skipped.
    • Delivered: tags: ['$initial'] on the console's vendor-objectstack chunk group.
      • Every @objectstack/* module reached only through import() now follows its importer into a lazy chunk, including /ai, /integration, /contracts and sdui-parser.
      • The eager closure goes 3,671,724 → 3,638,104 gzip (−33,620).
      • MAX_EAGER_CLOSURE_GZIP_BYTES is lowered to 3,660,380, and the vendor-objectstack ceiling to 1,689,265, each by exactly the recovered bytes. The loan from objectui#11088's decision A is repaid by this share.
    • Owed after this merge: BASELINE.squashMerge for the re-pinned 4acbea07 reading. The squash commit is 993f27e60b47b00e8f04cd09bb65a14aeabdc8f6. The back-fill rides the next change to scripts/check-eager-closure-budget.mjs, and the natural carrier is the upstream payback objectstack#20646.
    • Reviewer escalation, recorded: e2e/live/studio-editor.spec.ts waits on getByTestId('metadata-edit-page'), and nothing on main renders that test id; the spec file is its only occurrence. Either the live suite does not run it, or it fails there. It is outside this card. Carrier: none; the seat notes it on its shift brief for the domain:ui / e2e owner.
    • The pm:dispatched residue is stripped in the same act.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoenhancementNew feature or requestpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions