Skip to content

spec: the shared entry grew +152 KB gzip from 17.6.0 to 17.7.0 with the same exports, and objectui's console first screen carries it (the payback owed by objectui's 17.7.0 budget raise) #22044

Description

@objectstack-fleet

Filing gate: ③ a maintainer-directed task. The maintainer ruled objectui#11717's eager-closure budget question A in the domain:devx @ objectui seat 2 session. The selection, verbatim: 「A 抬预算+回收卡 (Recommended)」. The record is objectstack-ai/objectui#11717 comment 6027998226, and the decision it answered is 6024630321. Option A raises objectui's console budget now and files a payback card in the same stroke. This is that card. ⛔ Not a claim.

Readers. objectstack triage routes it first. The fix lands in packages/spec. Then the seat that claims it. objectui's domain:devx seat 2 (seat post objectstack-ai/objectui#10917) consumes the result: once objectui resolves a release carrying the reduction, objectui's ceiling and BASELINE come down by the recovered amount.

What was measured

The source is the os-dev report 6024525892 on objectstack-ai/objectui#11717, built from the bump head of PR objectstack-ai/objectui#11742.

  • objectui console build. The vendor-objectstack chunk of the eager closure grew by +182,909 gzip bytes. The control was objectui main 02a38967 (spec 17.6.0); the head was 25251a80 (spec 17.7.0); the instrument was apps/console/dist/eager-closure.json. Every other chunk netted about 0 (aggregate +182,938).
  • Per-entry, in @objectstack/spec itself. The instrument was raw and gzip-9 byte size of each ESM entry file, installed 17.7.0 against the npm 17.6.0 tarball. Gzip deltas for the entries objectui's shipped code imports:
entry gzip delta note
shared +152,445 raw +522,843; the same 79 exports; the bundle inlines 71 more strictObject( and 58 more lazySchema( call sites
root (browser) +66,383
browser/system +61,940
ui +42,688
browser/kernel +23,229
api +17,065
browser/data +11,196

migrations grew +203,315, but no shipped objectui import names it. Of the other packages, lint +9,125 and types +6,089 are the largest.

  • Prose proxy. 211 string literals of 80 characters or more are new in 17.7.0 and found in the vendor chunk: about 19.8 KB gzip, roughly 11% of the growth.

NOT MEASURED. Which modules the console's vendor chunk keeps after tree-shaking: the build emits no module-level sizes. So how much of the growth is recoverable, and from which source, is open. The strongest lead is the shared entry growing by 152 KB behind an unchanged export list.

The ask

  • Find what grew in shared, and in the root entry, between the 17.6.0 and 17.7.0 tags.
  • Find whether it can ship smaller, for example by emitting the strict object schemas once rather than inlined at every call site, or whether it can leave the entries a browser first screen imports.
  • Measure the recovered bytes on objectui's console build, using the same instrument as above.

Acceptance: an @objectstack/spec release that carries the reduction, with the recovered bytes measured. The objectui side, lowering its ceiling by that amount, follows on objectui once it resolves that release.

Precedent: #20646, the payback for the 17.5.0 raise (closed completed 2026-09-30). It moved the migration and conversion registries off the root entry.

Dedupe


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Path: ② the capabilities an end user meets in the app — the console's first screen | 缺项 | P2

    Triage: first grade, enhancement · priority:p2 · domain:spec · area:devpath · pm:queue. The payback the maintainer's ruling owes, in #20646's shape

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T00:52Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: lands in packages/spec (its build and its entry graph, the shared and root entries first) ⇒ domain:spec; rationale: the bytes are @objectstack/spec's, as they were for #20646.

  2. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 6 (this card, as triage graded and scoped it in 6028457956: measurement first, then the reduction) · 2026-10-07T01:45Z
    Session: session_01GV6oYwgc1kWiUCb1YaprQ7
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee from this act)
    Branch: claude/issue-22044-spec-shared-entry-payback
    Worktree: objectstack-issue-22044
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface (at origin/main 9a0401fd; stop on breach and explain in the report). This is a measurement-first card: ⛔ no fix is written before the measurement exists.

    • Measurement (no commit needed): the module-level make-up of the shared and root (browser) entries at the @objectstack/spec@17.6.0 and @objectstack/spec@17.7.0 tags, and objectui's console apps/console/dist/eager-closure.json built against the candidate. On objectui this is measurement only: ⛔ no objectui commit, branch or PR. Lowering objectui's ceiling is objectui's follow-up once it resolves the release.
    • The reduction, where the measurement points: packages/spec/tsup.config.ts and the build scripts under packages/spec/scripts/** it uses, and any packages/spec/src/** module the measurement names as the source. A source edit may change only how a schema is built or emitted, never its shape, its accept set or its .describe() text.
    • Whatever packages/spec generators move for that (os-regen-managed aggregates), and .changeset/22044-*.md.
    • ⛔ No entry's export list changes, and packages/spec/package.json exports stays as it is. The PR proves parity with api-surface or an equivalent, per triage's guard.
      Container & model: M, mode:subagent, model: opus (--tier: no path-derived mandate. An at-tier contract review is owed before it enqueues, because the PR changes published @objectstack/spec bytes; it comes from an isolated subagent, not this build.)
      Clause-②: no (the accept set and every entry's export list stay unchanged. This seat does not build, so the dev measures parity on the built declaration closure, and the measurement decides.)
      Responsibility: n/a — not a defect card
      Thread-read: 6028457956
      Serial constraints cleared: none of the 7 open PRs touches packages/spec/tsup.config.ts, packages/spec/scripts/** build files, packages/spec/src/shared/** or packages/spec/src/index.ts (scan at this stamp). The Version Packages PR chore: version packages #21988 touches packages/spec/package.json (version) and CHANGELOG.md only, and this claim does not edit either. No live Claim: on any pm:dispatched card names these files. Seat 1 is vacant.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 22044,
    "status": "done",
    "branch": "claude/issue-22044-spec-shared-entry-payback",
    "pr": "#22048",
    "session": "session_01GV6oYwgc1kWiUCb1YaprQ7 (subagent run; the PM's id, as the dispatch states)",
    "premise_still_valid": true,
    "summary": "Measured first: in the 17.7.0 tarball, ./shared carries the ADR-0087 conversion table (reached only via shared/metadata-collection.zod.ts normalizeStackInput, then conversions/apply.ts, then conversions/registry.ts), and the table now reaches more schemas (view +113,588, field +110,842, component +118,152, dashboard/chart/report/bulk-action new). Two unmarked load-time calls (18: inApplicationOrder(MAJOR_18_CONVERSIONS) and the Object.keys(...).flatMap(...) into ALL_CONVERSIONS) made every bundle of every entry reaching the table keep all of it; the console kept two copies (root and ./shared) without ever reading it. Fix: an @PURE annotation on each of the two calls in packages/spec/src/conversions/registry.ts (plus docblock), a pin case in scripts/pure-schema-construction.test.ts, the WIRING string in scripts/conversions-major18-merge.test.ts, and a patch changeset. Console at objectui c0862c1c: eager closure 226,238 gzip smaller (vendor-objectstack 1,604,719 to 1,378,418), more than the +182,909 the 17.7.0 bump added; no export list, declaration, runtime value or published file changes.",
    "tests": "At eb2152b unless named. pnpm --filter @objectstack/spec test (local project, full): 619 files, 18486 passed, 1 todo, VERDICT command-exit 0. scripts/pure-schema-construction.test.ts at 08392e5: 7 passed (new case included). scripts/conversions-major18-merge.test.ts (repo project) at 08392e5: 12 passed; rest of the repo project declared to CI. pnpm --filter @objectstack/spec typecheck: exit 0 (tsc, scripts, test layer 52 files / 246 errors held by ledger). Spec build JS+DTS exit 0 at d017de4 and eb2152b. Reverse verification at 08392e5 via scripts/ablation-replace.mjs (pin builds from src through tsup, so no dist sits between mutation and assertion): removing the ALL_CONVERSIONS mark, mutation landed (anchor 1 to 0, blob d707d83fdbad to df80d62038eb), pin red: expected [ ...(129) ] to deeply equal [], 1 failed / 6 passed; restore blob == HEAD (d707d83fdbad), git diff HEAD empty. Removing the inApplicationOrder mark: red with 62 ids kept; restored the same way. Predicted direction (red) observed both times. Lint narrowed at eb2152b: eslint --no-inline-config --format json over the 3 changed .ts files (all changed files in the **/.{ts,tsx,mts,cts,js,jsx,mjs,cjs} population; the changeset .md is outside it): 3 files, 0 errors, 0 warnings; eslint.config.mjs enables no type-aware linting (no parserOptions.project, no typed rules), so no untouched file verdict can move; full pnpm lint is CI's.",
    "mcp_calls": "0",
    "api_writes": "3 REST writes, all through scripts/pm via the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create, PR #22048 draft, body read back identical 13926 bytes; (2) label-write --assign os-warren on #22048, read back matches; (3) this os-dev-report comment on #22044 via post-stamped. git push x4 (not REST).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none (承接者:无) · noted, not filed (also in PR Acceptance notes): after this change ./shared still keeps 144,609 raw / 47,491 gzip for the console's 5 names in the consumer probe, mostly argument expressions of calls the build marks pure (a strictObject call is dropped when unused, but its side-effectful arguments such as bare z.
    chains, .optional().describe() on imported schemas and componentSlot(...) still run and are kept); largest: ui/component.zod.ts 34,556, ui/view.zod.ts 18,973, data/filter.zod.ts 18,019. Observation about how construction is marked, not a reproducible defect.",
    "carrier: none (承接者:无) · noted, not filed: per-entry probe keeps ui/component.zod.ts at about 157-159 KB raw in each of ./ui, root and ./system (one copy per flat entry, splitting: false). Whether the console keeps more than one copy is NOT MEASURED (its build emits no module-level map). Shared chunks would be the route; they redraw the published file set, which the tsup.config.ts docblock asks to review first."
    ],
    "hypotheses": {
    "H1": "Confirmed on the same tarballs: ./shared ESM raw 980,505 to 1,503,348 (+522,843 exactly), 79 exports.",
    "H2": "Confirmed: shared/ own modules account for under 10 KB of the delta; the growth is modules reached transitively through the conversion table (and data/field.zod.ts also via shared/field-type-suggestion.ts).",
    "H3": "Partly: splitting: false is the precondition (a flat file keeps every unproven top-level call), but what grew is new reach through the conversion table plus genuine schema growth (component.zod.ts, #21464 typing), copied per entry. The fix does not split; chunk layout unchanged.",
    "H4": "What defeated it: the conversion table's two load-time calls were never marked, so the table and everything it references stayed. Separately, a PURE-marked strictObject still keeps side-effectful arguments (see out_of_scope_findings).",
    "H5": "Confirmed: tarball deltas are not retained bytes. Console recovery 226,238 gzip against a ./shared tarball growth of +152,445 gzip, because the console kept two copies of the table (root and ./shared) and both go."
    },
    "measurement_module_table": {
    "instrument": "source-map attribution of each published ESM entry (the tarball .mjs.map; each generated byte assigned to the source module of its mapping), npm @objectstack/spec@17.6.0 vs @17.7.0, raw bytes; import paths from an esbuild metafile of the 17.7.0 source",
    "shared_dist_shared_index_mjs": {
    "total": "980,505 to 1,503,348 (+522,843)",
    "src/ui/component.zod.ts": "277,752 to 395,904 (+118,152)",
    "src/ui/view.zod.ts": "42,538 to 156,126 (+113,588)",
    "src/data/field.zod.ts": "11,426 to 122,268 (+110,842)",
    "src/ui/dashboard.zod.ts": "0 to 38,152",
    "src/conversions/registry.ts": "357,075 to 391,897 (+34,822)",
    "src/ui/chart.zod.ts": "0 to 31,088",
    "src/ui/report.zod.ts": "0 to 21,701",
    "src/ui/bulk-action.zod.ts": "131 to 17,034 (+16,903)",
    "other_32_modules_net": "+37,595"
    },
    "root_dist_browser_index_mjs": {
    "total": "2,348,750 to 2,593,955 (+245,205)",
    "src/ui/component.zod.ts": "+118,152",
    "src/conversions/registry.ts": "+34,822",
    "src/automation/approval.zod.ts": "+23,623",
    "src/ai/agent.zod.ts": "+10,024",
    "src/system/job.zod.ts": "+10,022",
    "src/ui/chart.zod.ts": "+9,605",
    "src/ui/page.zod.ts": "+4,549",
    "other_net": "+34,408"
    },
    "path": "shared/index.ts, then shared/metadata-collection.zod.ts, then conversions/apply.ts, then conversions/registry.ts, then ui/view.zod.ts (chart, bulk-action) and via conversions/walk.ts ui/component.zod.ts (dashboard, report)",
    "consumer_probe_gzip": {
    "instrument": "rolldown 1.0.3, platform browser, minified, gzip -9; per spec entry, importing exactly the names objectui c0862c1c non-test src value-imports from it; spec source maps chained",
    "shared": "120,147 (17.6.0) / 191,561 (17.7.0) / 47,491 (head)",
    "ui": "132,642 / 165,099 / 165,156",
    "root_browser": "312,154 / 342,786 / 342,842",
    "system_browser": "283,598 / 310,749 / 310,794",
    "all_13_entries": "1,140,385 / 1,315,136 / 1,171,318",
    "shared_registry_raw": "201,720 at 17.7.0 to 0 at head"
    }
    },
    "console_eager_closure": {
    "objectui_commit": "c0862c1c (origin/main, resolves 17.7.0), detached worktree, removed after",
    "build": "pnpm install --frozen-lockfile; pnpm turbo run build --filter=./packages/* --concurrency=2; pnpm --filter @object-ui/console build; read apps/console/dist/eager-closure.json",
    "a_control_installed_17_7_0": "eager 3,591,131 gzip / 12,259,304 raw; vendor-objectstack 1,604,474 gzip / 5,399,508 raw; conversion table copies in chunk: 2 (all 129 ids x2); built twice, identical",
    "b_OBJECTSTACK_SPEC_DIST_main_9a0401fd": "eager 3,591,379 gzip; vendor-objectstack 1,604,719 gzip / 5,400,408 raw",
    "c_OBJECTSTACK_SPEC_DIST_head_eb2152b86b": "eager 3,365,141 gzip / 11,381,985 raw; vendor-objectstack 1,378,418 gzip / 4,522,189 raw; table copies: 0 (all 129 ids x0); built twice (d017de4 dist, then eb2152b dist), identical",
    "recovered_b_minus_c": "eager -226,238 gzip; vendor-objectstack -226,301 gzip / -878,219 raw; other 330 eager chunks +63 gzip net (hash churn); 331 eager chunks in all builds",
    "a_minus_c": "-225,990 gzip"
    },
    "export_parity": {
    "api_surface": "pnpm --filter @objectstack/spec check:api-surface exit 0 at eb2152b: public API surface + factory signatures unchanged",
    "runtime_export_lists": "main 9a0401f build vs head build: 48 entry files (every .mjs/.js the exports map names, browser arms included), 7,864 names, 0 differing (exit 0); control leg npm 17.6.0 vs head: 16 differing (exit 1)",
    "declaration_tree": "order-insensitive per the tsup.config.ts DTS docblock (sorted unions, property-only type literals, statements, specifiers; hashes stripped; chunks paired by content): 130 files / 38 entries / 62 chunk contents each side, IDENTICAL (exit 0); control leg npm 17.6.0 vs 17.7.0: 52 differences (exit 1)",
    "published_file_set": "dist 228 files each side (hashes stripped), identical; chunk layout unchanged, so publish-smoke not owed and needs:pack-smoke not needed",
    "bytes": "each entry file carrying the table grows 32 raw bytes (the two annotations), e.g. dist/shared/index.mjs 1,510,391 to 1,510,423"
    },
    "gates": "At eb2152b. node scripts/pm/dispatch-gates.mjs --commands derived 86 families (stderr: tree objectstack-ai/objectstack at eb2152b); --ran: 86 run, 0 NOT-MEASURED, 0 UNRUN, all exit 0. Three first exited 3 (PREREQUISITE NOT MET) and went 0 after pnpm turbo run build: check:dual-build-cjs-loads, check:lean-entry-closure, @objectstack/lint check:doc-formula-expressions. Also exit 0: pnpm --filter @objectstack/spec check:generated (15 artifacts up to date), check:api-surface, check:browser-reachable-entries, check:published-files, check:entry-nameability, check:nul-bytes, check:type-check-coverage (re-measure 642s), check:type-check-debt, check:sourcemap-no-sources-content, check:spec-docblock-symbol-anchors, check:issue-citations, check:doc-authoring. Lead list (gates-22044.txt, 83 commands at 9a0401f): 8 of mine were not in it (all ran); 5 of it were not in mine and also ran exit 0: check:authorable-surface, check:yaml-examples, check-governed-queue-guard --self-test, check:console-injection and check:console-sha, the last two skipped for want of packages/console/dist, so NOT MEASURED. CI at report time on eb2152b: 32 check runs, 12 success, 3 skipped, 17 in_progress, 0 failure (in_progress is the honest value).",
    "deviations": [
    "Candidate injected through objectui's own OBJECTSTACK_SPEC_DIST (the Console Pin Gate's mechanism) instead of a packed-tarball override; control (a) is the installed npm 17.7.0 as dispatched, and reading (b) (main injected) isolates the fix from main's drift (+248 gzip vs a).",
    "Route is a source annotation in conversions/registry.ts, not tsup.config.ts: the published file set and chunk layout do not move. Whether CI's Console Pin Gate runs depends on its own filter.",
    "pnpm --filter @objectstack/spec test was invoked with a trailing bare -- --maxWorkers=2, which vitest dropped: the whole package ran (intended scope) at default workers.",
    "Long builds ran under os-verify-lock.sh via nohup with a foreground tail --pid wait, because of the ~10-minute foreground cap.",
    "The harness attribution reminder asked for a Co-Authored-By trailer naming a model and a different PR footer; per AGENTS.md the commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) and the PR body the session-URL footer."
    ],
    "files_changed": [
    ".changeset/22044-shared-entry-drops-conversion-table.md",
    "packages/spec/scripts/conversions-major18-merge.test.ts",
    "packages/spec/scripts/pure-schema-construction.test.ts",
    "packages/spec/src/conversions/registry.ts"
    ],
    "commits": [
    "d017de4582 perf(spec): mark the conversion table's two load-time calls pure",
    "08392e53a4 test(spec): pin the ./shared consumer retention",
    "eb2152b86b chore(changeset): spec patch"
    ],
    "dedupe_words": [
    "conversion table",
    "ALL_CONVERSIONS",
    "eager closure",
    "vendor-objectstack",
    "shared entry"
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 22044,
    "round": "patch 1 (contract review 6030317799 follow-up)",
    "status": "done",
    "branch": "claude/issue-22044-spec-shared-entry-payback",
    "pr": "#22048",
    "head": "cf854f71dc (was eb2152b)",
    "session": "session_01GV6oYwgc1kWiUCb1YaprQ7 (subagent run; the PM's id)",
    "premise_still_valid": true,
    "summary": "The pin's ./shared console consumer now names exactly the five names objectui c0862c1c value-imports from @objectstack/spec/shared, so its comment reads true. This round's read matches the reviewer's five. One file, one hunk: the consumer string in packages/spec/scripts/pure-schema-construction.test.ts. registry.ts, the changeset and the PR body are untouched.",
    "shared_value_imports_at_objectui_c0862c1c": {
    "method": "git -C /home/user/objectui git grep at c0862c1c (object present locally) over packages/*/src and apps/console/src, excluding test, spec, stories, tests, mocks and test/ paths; import type and export type lines excluded; no dynamic import or require of the entry found",
    "canonicalMetaUrlType": "packages/app-shell/src/preview/DraftChangesPanel.tsx:71, packages/app-shell/src/views/studio-design/studioScope.ts:35",
    "ValueDomainSchema": "packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx:43",
    "EVALUATED_EXPRESSION_SOURCE_REQUIRED": "packages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-validate.ts:29",
    "EvaluatedExpressionSchema": "packages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-validate.ts:29, packages/types/src/zod/base.zod.ts:22-25 (aliased SpecEvaluatedExpressionSchema)",
    "EvaluatedExpressionInputSchema": "packages/types/src/zod/form.zod.ts:29 and packages/types/src/zod/base.zod.ts:22-25 (aliased SpecEvaluatedExpressionInputSchema)",
    "type_only_not_counted": "ExpressionInput, EvaluatedExpressionInput, SchemaDiffEntry, SchemaDiffEntryKind, SortDirection, and the export type * as Shared in packages/types/src/index.ts:1217"
    },
    "tests": "At cf854f7. scripts/pure-schema-construction.test.ts (local project, verbose): 7 passed, 1 file passed, VERDICT command-exit 0. Its retention case reads: a consumer of the built ./shared entry keeps the conversion table only when it reads it, drops every conversion for the console names, keeps them all for normalizeStackInput. Both legs are in that one case and both hold: the five-name consumer keeps [] and the normalizeStackInput control keeps all 129 ids. pnpm --filter @objectstack/spec typecheck: VERDICT command-exit 0 (tsc --noEmit, check:scripts-typecheck, check:test-typecheck: 52 files / 246 errors / 135 pinned signatures held). eslint --no-inline-config --format json on the one changed file: exit 0, 1 file, 0 errors, 0 warnings. pnpm check:nul-bytes: exit 0.",
    "exit_codes": {
    "pin_test": 0,
    "typecheck": 0,
    "eslint": 0,
    "nul_bytes": 0
    },
    "files_changed": [
    "packages/spec/scripts/pure-schema-construction.test.ts"
    ],
    "mcp_calls": "0",
    "api_writes": "1 REST write: this os-dev-report comment on #22044, via scripts/pm/post-stamped.mjs through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches). Also git push x1 (eb2152b to cf854f7), not REST.",
    "open_questions": [],
    "out_of_scope_findings": [],
    "deviations": [
    "The consumer string is wrapped over several lines so the call stays readable. The names are in code-unit order, which puts EVALUATED_EXPRESSION_SOURCE_REQUIRED first.",
    "Not re-run this round: the full spec suite, the gate battery and the console measurement. src/ and the built output are unchanged: the edit touches one test string under scripts/, so this is a declared narrowing. CI runs the full set on cf854f7."
    ],
    "cleanup": "Fresh worktree ../objectstack-issue-22044 on the branch, clean and pushed, removed after this comment without --force."
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT: PR #22048 at cf854f71dc (the payback the maintainer's ruling A owes: the conversion table leaves every bundle that does not read it). It lands through the queue now; Fixes #22044 closes the card at the merge

    domain:spec seat 2 · os-warren · session session_01GV6oYwgc1kWiUCb1YaprQ7 · 2026-10-07T04:12Z · holder of claim 6029104290; the review of record for the reports 6030118362 and 6030360584 (patch round 1).

    Checklist (read on GitHub, on origin/main and on the published 17.7.0 tarball, not from the reports):

    • Form: draft, base main, first line Fixes #22044, and no other closing keyword in the body. Clause-②: no starts a line of the body and of the changeset. PR assignee os-warren.
    • Scope: 4 files, all inside the claim. packages/spec/src/conversions/registry.ts is the src/** module the measurement named: two /* @__PURE__ */ markers and two docblocks, no value, order, id or shape change. Two packages/spec/scripts/*.test.ts changes: the new pin, and the WIRING string that reads the marked line. One patch changeset. No tsup.config.ts change, so the chunk layout and the published file set stay as they are.
    • Triage's guard holds: every entry keeps its export list. check:api-surface reads unchanged; 48 entry files and 7,864 runtime names show 0 differences, against a 17.6.0 control leg that reads 16.
    • The card's acceptance, measured with its instrument: on objectui c0862c1c, apps/console/dist/eager-closure.json reads 226,238 bytes gzip smaller (vendor-objectstack 1,604,719 → 1,378,418). The conversion table's 129 ids go from two copies to none. That is more than the +182,909 the 17.7.0 bump added. objectui lowers its ceiling and BASELINE by this reading once it resolves the release that carries it.
    • Contract review: PASS at CONTRACT_REVIEW_TIER, record 6030317799, on eb2152b86b (Local-runs: none, identity pair present). It confirmed where each bundler applies the markers, that both annotated calls are free of side effects (nothing changes in Node), the pin's positive control, patch and Clause-②: no.
    • The record's follow-up is done in this PR: the pin's console consumer named three of the five names objectui value-imports from ./shared. Patch round 1 (cf854f71dc) names all five, so the pin's comment and the PR body read true. It is the only delta from the reviewed head: one test file, +6/−1. src/, the changeset and the other test file are blob-equal to eb2152b86b.
    • Changeset, read sentence by sentence against the diff: each sentence holds, and the readers it names (defineStack, normalizeStackInput, applyConversions) do read the table. One precision note, not blocking: the two docblocks ship in dist/index.d.ts (the 17.7.0 tarball carries the ALL_CONVERSIONS one), so "every declaration is unchanged" holds for the declared types, not for their doc text.

    Out-of-scope findings, both noted, not filed, recorded here as Acceptance notes:

    • Kept and not filed: ./shared still keeps about 47 KB gzip for the console's names. It comes from arguments with side effects inside PURE-marked schema calls. That is a lead for a later payback, not a defect, and this payback already recovers more than the raise.
    • Kept and not filed: one component.zod.ts copy per flat entry is the splitting: false design. Changing it redraws the published file set, and the tsup.config.ts docblock asks for that review first.

    Checks on cf854f71dc: 32 success and 3 skipped. check-expected-skips reads all 3 as on the roster (Build Docs, Console Pin Gate, Packed-tarball smoke (opt-in)). Lint & Repo Gates and TypeScript Type Check are success on this head. check-governed-merges --pr 22048: not governed, 71 changed lines. git merge-tree onto origin/main a7a48b784d: clean.

    Landing: the relay's pr_ready + automerge_enable follows this comment. At the merge, the seat checks the squash on main, confirms Fixes closed the card, and removes pm:dispatched.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #22048 → 93125aeeb8. Fixes #22044 closed the card; pm:dispatched is removed

    domain:spec seat 2 · os-warren · session session_01GV6oYwgc1kWiUCb1YaprQ7 · 2026-10-07T04:53Z · holder of claim 6029104290, which this act releases.

    • Landed: PR perf(spec): a bundle that never reads the ADR-0087 conversion table stops keeping it, 226 KB gzip off the console first screen (#22044) #22048 merged through the merge queue at 2026-10-07T04:52Z as 93125aeeb8. It has one parent (a7a48b784d) and is an ancestor of origin/main. The queued head cf854f71dc is not an ancestor, as a squash leaves it.
    • Content check: all 4 files on origin/main are blob-equal to the accepted head cf854f71dc (ACCEPT 6030769579; contract review PASS 6030317799).
    • What now holds: the conversion table's two load-time calls carry @__PURE__. A bundle keeps the table only when something it keeps reads it, and the pin in scripts/pure-schema-construction.test.ts holds this on the built ./shared entry. It ships as a patch for @objectstack/spec in the next release.
    • The card closed completed at 2026-10-07T04:52Z, by Fixes #22044.
    • objectui's half (the ruling's second step): once objectui resolves the @objectstack/spec release that carries this change, its eager-closure ceiling, BASELINE and the vendor-objectstack row come down by the amount recovered. Measured with the card's instrument on objectui c0862c1c: −226,238 gzip on the eager closure, −226,301 on vendor-objectstack. That is objectui's change; a note goes to its domain:devx seat post.

    Release: session_01GV6oYwgc1kWiUCb1YaprQ7 · why: the card's change landed and closed it · to: closed, pm:dispatched removed.


    Generated by Claude Code

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:specenhancementNew feature or requestpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions