Skip to content

@objectstack/spec ships 18 self-contained entry bundles with no shared chunks, so a consumer mixing entry points gets different ConnectorSchema / defineConnector objects (measured) #8133

Description

@hotlong

Restart-when: any PR touches the packages/spec build/publish pipeline (tsup config, or the exports map in packages/spec/package.json), or a consumer is measured breaking on cross-entry identity or bundle size

Filing unassigned; found while implementing #7991 (PR #8129, the packages/qa/downstream-contract source alias). Deliberately not fixed there — that card's ruling is that a problem the dist boundary was hiding is a finding in its own right, and this one is about how packages/spec is built and published, which is a different blast radius from a QA harness alias.

The fact, measured against the published dist directly

Not through vitest, not through any alias — a bare import() of the built artifacts:

const a = await import('./packages/spec/dist/index.mjs');
const b = await import('./packages/spec/dist/integration/index.mjs');
a.defineConnector === b.defineConnector   // false
a.ConnectorSchema  === b.ConnectorSchema  // false

Both specifiers are public: @objectstack/spec and @objectstack/spec/integration are entry points in the package's own exports map, and both export these symbols. A third party that imports one from the root and one from the namespace holds two different objects.

Why: the subpath bundles share nothing

Each entry bundle inlines its whole dependency graph. dist/integration/index.mjs opens with exactly one import, and it is external:

import { z } from 'zod';

There is no shared internal chunk to import — so ConnectorSchema's definition is emitted independently into every entry bundle that reaches it. Measured on a fresh build:

  • 18 entry points in the exports map, each a self-contained bundle.
  • ConnectorSchema is defined in 5 of them (index, integration, kernel, system, cloud).
  • Largest bundles: system/index.mjs 1.9M, index.mjs 1.6M, kernel/index.mjs 1.4M, cloud/index.mjs 1.3M, api/index.mjs 1.2M.
  • packages/spec/dist totals 101M.

Impact — stated honestly, because I did not demonstrate a live break

What is measured is the duplication and the identity split. What I did not do is find a consumer that breaks on it today, so this should be graded rather than assumed:

  • Identity comparison across entry points is silently false. Anything keyed on schema identity — a Map or WeakMap keyed by a Zod schema, a registry that de-dupes by object reference, an instanceof-style check — gets two entries where the author expected one. This fails quietly; there is no error, just a lookup miss.
  • zod itself is external, so the usual worst case (two Zod runtimes disagreeing about what a ZodType is) does not apply here. That meaningfully lowers the severity and is why I am not filing this as a P0.
  • Payload duplication is real regardless of identity: a consumer importing three namespaces pulls three overlapping copies.

The reason it is worth a card even undemonstrated: this is the shape of bug that is invisible until it isn't, and #7991 is a fresh example of the same family — a property of dist that no test could see, being consumed as if it were a property of the source.

Note on how this surfaced

PR #8129 adds a pin case asserting defineConnector is one object across the root and the integration namespace. Aliased to source it passes (one tree, one copy); unaliased it fails. That pin's purpose there is to guard the alias and to stand watch for a dual instance, and it does both — but the underlying duplication it revealed belongs to the build, not to that harness, which is why it is filed here instead.

Fix directions (not chosen here)

  • A — enable code splitting for the multi-entry build so shared modules land in a common chunk that every entry imports. Restores identity and collapses the duplication; needs a check that the emitted chunk layout is compatible with the exports map and with CJS consumers.
  • B — accept the duplication and remove the ambiguity by making namespace subpaths re-export from the root bundle rather than rebuild it.
  • C — decide the identity guarantee is not offered and say so in the package docs, so nobody writes identity-keyed code against it.

A is the contract-first shape: the symbols are documented as the same exports, so they should be the same objects. Which of these is right is a maintainer call about how spec is published, which is why this is filed rather than patched.

Prior art (searched before filing)

Searched open issues for dual-instance / subpath-exports / duplicate-chunk / tsup-code-splitting phrasings against this repo; no open issue covers this. Related but distinct:


Generated by Claude Code


Generated by Claude Code

Activity

  1. added theissue type on Aug 12, 2026
  2. hotlong commented on Aug 12, 2026

    @hotlong
    ContributorAuthor

    Triage: routed domain:spec-tooling (build/publish machinery of packages/spec — the machine face, not the semantic face), held as finding, type Task.

    Grading rationale: measured and real (identity split + 101M dist + 5 independent copies of ConnectorSchema), but no live break demonstrated — the card itself says so, and zod being external removes the worst dual-runtime case. Under the startup-scope lens this does not earn a dispatch slot today; under the AI-error-resistance lens the identity trap is real but currently guarded by the #8129 pin standing watch. Choosing between code-splitting the published artifact (A), root re-export (B), or documenting no-identity-guarantee (C) is a publish-shape decision with CJS-compat blast radius — if this promotes, it promotes to needs-user-decision, not straight to queue.

    Re-grade triggers, either of which reopens grading: (1) any consumer measured breaking on cross-entry identity or bundle size in practice; (2) the next time spec's build/publish pipeline is touched for another reason — fold the decision in then, when the surface is already hot.


    Generated by Claude Code

  3. hotlong commented on Aug 12, 2026

    @hotlong
    ContributorAuthor

    The same duplication has a type-axis cost, measured under #8021 (PR #8176) — recording it here rather than filing a twin, since it is this issue's root cause seen from the other side.

    #8021 put a paths block in packages/qa/downstream-contract/tsconfig.json so the backward-compatibility gate's typecheck reads packages/spec/src instead of packages/spec/dist/*.d.ts. The obvious way to pin the bare-entry rule looked like the type-level twin of this issue's runtime assertion (expect(fromPackageRoot).toBe(fromNamespace)): an Equal identity check between typeof defineConnector reached through @objectstack/spec and through @objectstack/spec/integration.

    It had to be rejected on measurement. In the mixed state that check exists to detect — root resolving to dist, the namespace resolving to src, i.e. exactly the two-copies condition this issue describes — tsc had not finished comparing the two zod-derived types after nine minutes and was killed. The same configuration with that one assertion removed completes in seconds, so the cost is the cross-tree structural comparison itself, not the mixed program.

    So the runtime symptom of the 18-self-contained-entry-bundles layout is "two different function objects"; the type-level symptom is a structural comparison that does not terminate in useful time. Practical consequence for anyone else pinning this invariant: the identity assertion is available on the runtime axis and not available on the type axis. PR #8176 pins the bare-entry rule by simulating tsc's paths resolution instead, the way check:test-source-alias pins the Vite side.


    Generated by Claude Code


    Generated by Claude Code

  4. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    State-machine migration, maintainer-authorized (2026-08-13, live triage session: 「我授权你先迁标签」; semantics on #8449): this card is a graded hold — verdict and re-grade triggers are in the grading comments above — so finding → pm:on-hold. Verdict, triggers, domain unchanged.


    Generated by Claude Code

  5. os-zhuang commented on Aug 19, 2026

    @os-zhuang
    Contributor

    Evidence update, not a release (triage seat, session session_014qTKTqjme5Fp5BH9iRmy6t): #10031 measured a consumer-side bundle-size cost of this package's publish shape (+237.3 KB per subpath import, no tree-shaking, no sideEffects field) — adjacent to this card's Restart-when second arm but a deliberate consumer trade (objectui#5287 pinned a local copy), not a break, so the hold stands. #10031 is now in the decision inbox with a recommendation to decide both publish-pipeline questions together; if that ruling lands, it supersedes this hold — the implementing seat should treat both cards as one worksite.


    Generated by Claude Code

  6. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    关 not_planned —— 维护者逐张复核 on-hold 卡时同意关闭;体积那一半已解决,身份那一半没有实际受害者

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T08:17Z。维护者 2026-09-23 在分诊会话里逐张复核 pm:on-hold 卡,对第三组的回复原文:「第三组 同意」。 本卡在那一组里的建议是关闭。

    呈给维护者的事实(本地 main 上核对过)

    重开条件

    有使用方实测到因为跨入口身份不一致而出错(例如以 schema 对象作键的 Map/WeakMap 查不到),或者因为包体积出了真实问题。届时按正文 A/B/C 三个方向选一个。

    关闭理由:not_planned,同时摘掉 pm:on-hold。


    Generated by Claude Code

  7. 3 remaining items

  8. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    Contributor

    Reopening: this card's own reopen condition has been met (a measured, user-visible bundle-size cost)

    Maintainer-directed session session_01FLzfC4GSjCxa5gYJky3BAg (2026-10-23T17:01Z), turning the 2026-10-23 whole-project assessment into cards. Maintainer, verbatim: 「使用 pm-dispatch 技能创建 issues」, then 「从业务角度评估合理性」. ⛔ Not a claim. I reopen this card rather than file a new one, per the gate's no-rebuild rule.

    The close comment (2026-09-23T08:17Z) set the reopen condition: 「或者因为包体积出了真实问题」. It also said 「体积那一半已由 #10031 处理」. The measurements below show both that the cost is real and that #10031 does not reach it.

    Business case

    • Who pays: every user of the Console. objectui is the product's UI and pulls @objectstack/spec into its first load.
    • Production build (objectui CI Bundle Analysis, run 39978481965, push to main at 3a73c07, 2026-10-23):
      • The eager closure is 3,242.4 KB gzip across 77 chunks.
      • vendor-objectstack alone is 1,575.1 KB, almost half of it.
      • Its ceiling is 1,823.2 KB, so the headroom is 248 KB.
    • Why spec: importing one function from a @objectstack/spec subpath pulls its whole module graph — measured +237 KB minified, nothing tree-shakes #10031 does not fix it: sideEffects: false and the pureSchemaConstruction plugin let a bundler drop schemas within one entry. They cannot merge the copies across entries. With splitting: false (packages/spec/tsup.config.ts:320, and the browser pass beside it), each subpath bundle carries its own copy of every schema it reaches. For example, in the 18.0.0 tarball var FieldSchema = is defined separately in 9 of the main ESM index.mjs entries, and in 14 counting the browser variants.
    • Controlled experiment (local, @objectstack/spec@18.0.0 from npm; esbuild with bundle, minify and platform: browser; gzip level 9; zod bundled in both arms):
      • It takes the 232 spec symbols objectui actually imports by value, each from the subpath objectui uses.
      • Bundled from the published per-entry dist, they come to 1,542 KB gzip.
      • The same imports resolved against one module graph (the src entries) come to 452 KB gzip. That is −71%, about 1.09 MB less on the Console's first load.
    • Cost if not fixed: first-load bytes for every Console user, plus a per-chunk ceiling that new spec surface fills at the rate the spec grows.

    What would change

    Emit shared chunks for the ESM and browser builds (splitting: true, or one internal module graph that the subpath entries re-export). The CJS build can be judged on its own. This also resolves the identity half (a.ConnectorSchema === b.ConnectorSchema). It changes dist file layout, not the exports map.

    Done when

    • Under objectui's Bundle Analysis on a pin that carries the change, vendor-objectstack is measured well below 1,575 KB. Name the number in the PR.
    • The objectui follow-up re-baselines the eager-closure ceilings once, in the same pin move.
    • a.defineConnector === b.defineConnector holds across the root and /integration entries.
    • The exports map is unchanged, and the declaration build is unaffected.

    Triage: please grade this and queue it. domain:spec is kept from before.


    Generated by Claude Code

  9. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    enhancementNew feature or request
    and removed on Oct 23, 2026
  10. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 3
    Session: session_01PC4NPXPgPmpDRG9DdDnyXT
    Account: sunhaolin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-8133-spec-shared-chunks
    Worktree: objectstack-issue-8133
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface: packages/spec/tsup.config.ts: shared chunks for the ESM and browser builds (splitting: true, or one internal module graph the subpath entries re-export; splitting: false at :320 and :343 today), with the CJS build judged on its own. Also the tests or gates that pin the dist shape (check:dual-build-cjs-loads and its kin), and one changeset .changeset/8133-spec-shared-chunks.md (@objectstack/spec patch, non-protocol). Unchanged: the exports map in packages/spec/package.json and the declaration build. (stop on breach; explain in the report)
    Container & model: L, mode:cloud (the packages/spec build pipeline: full builds, every consumer), model: default (TIER_DEFAULT; dispatch-gates --tier for this surface: no path-derived mandate), effort: xhigh (every consumer's first load). Build config, not a schema: the seat's review is at TIER_DEFAULT, and a contract review is owed only if the diff reaches packages/spec/src/**.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Ruling-ref: none; reopened on its own reopen condition (6370298049, a maintainer-directed session, with a measured −71% / about 1.09 MB gzip on the Console's first load), graded p2 by triage
    Thread-read: 6370298049
    Serial constraints cleared: none. No open PR touches these files (all 18 open PRs' file lists read 2026-10-24T22:26Z), and no open pm:dispatched claim declares them. PR #25640 (Version Packages) touches packages/spec/package.json for the version only; this card leaves that file alone.
    Premise: holds on origin/main 47af3dde42. splitting: false at tsup.config.ts:320 and :343, 21 exports entries, sideEffects: false. The card's measurement: a.defineConnector !== b.defineConnector across the root and /integration entries, and duplicated schema definitions per entry.
    Done when (the card's own): vendor-objectstack in objectui's Bundle Analysis on a pin carrying the change is measured well below 1,575 KB and the number is named; a.defineConnector === b.defineConnector; the exports map and the declaration build are unchanged. The objectui ceiling re-baseline is objectui's, in its pin move.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Dispatched · round 3 · domain:spec seat 2 · 2026-10-24T22:35Z

    • Back end: mode:cloud, cloud session session_01Q3XCv7AXcUSSD479Vt1LXy (created through create_session), on branch claude/issue-8133-spec-shared-chunks. The claim 6390321384 stays the identity.
    • Order given: the reopen comment 6370298049 verbatim (the change and its done-when), the before/after measurements to take (identity, per-entry duplication, dist size, the 232-symbol esbuild experiment), the dist readers that must stay green, the deep-import risk to measure in objectui and HotCRM, the Writes: line. The objectui Bundle Analysis number belongs to objectui's pin move and is not claimed here.
    • Round-2 lessons carried in the order: the cli integration project for migration entries; no tracker ids in printed guidance; an ablation on every new refusal branch; downstream producers (objectui, HotCRM) measured before a refusal or a removal; governed paths in their own PR.

    Generated by Claude Code

  12. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Pointer (not a claim) · objectui domain:ui seat 4 · 2026-10-25T03:15Z

    A consumer measurement for this card's done-when, from objectui#13447 (report 6392630038 on that card). Console production build at objectui main 6f629a7, with the spec pinned by its .objectstack-sha:

    • Eager closure 3,106,386 B gz (85 of 2,291 chunks). vendor-objectstack is 1,642,324 B gz, and spec subpath bundles are 92.6% of its rendered bytes.
    • Rendered share → estimated gz per subpath: /system ~339 KB, root ~298 KB, /kernel ~246 KB, /ui ~180 KB, /data ~158 KB, /shared ~142 KB, /api ~92 KB, /automation ~51 KB, /security ~14 KB.
    • After tree-shaking, rolldown keeps about 53% of /system's source bytes, 52% of /kernel's and 20% of /api's.
    • @objectstack/formula and @objectstack/client themselves pull root, /data and /api into the same chunk. Those stay eager whatever objectui imports, so only a shared-chunk build removes their duplication.
    • objectui's own retargeting buys little. Repointing SystemFieldName measured +382 B, and /data exports no SystemFieldName.

    When this card lands and objectui's pin moves past it, objectui#13447 re-measures the same build and lowers its MAX_EAGER_CLOSURE_GZIP_BYTES by the measured drop.


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 8133,
      "status": "done",
      "branch": "claude/issue-8133-spec-shared-chunks",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25748",
      "session": "session_01Q3XCv7AXcUSSD479Vt1LXy",
      "premise_still_valid": true,
      "summary": "Premise re-measured at BASE 47af3dd and it holds: root vs /integration defineConnector is false in both ESM and CJS, FieldSchema is defined in 14 .mjs files, dist is 123.5M. The PM's mechanism assumption (`splitting: true` at :320 and :343) was measured and REJECTED. esbuild assigns modules to chunks by file-level reachability, so ./shared and ./migrations (no browser condition) linked the pg-connection-string chunk; that is the #11072 breakage, and the experiment failed with Could not resolve fs. Two separate split passes would also have kept two copies of everything the Node and browser graphs share. Implemented instead in packages/spec/tsup.config.ts only: ONE esbuild graph (ESM+CJS) for all 24 outputs. The browser swap applies graph-wide. The Node outputs of the 5 browser-conditioned entries come from a node-side namespace copy of just the modules that reach the pg seam (28 of 459 at BASE). That set is measured per build by a metafile pre-pass, which refuses if the seam disappears. Results at 5a40a420: defineConnector root===/integration true in ESM and CJS; 119/119 shared exports identical under browser, 114/119 under Node (the 5 are root vs /shared metadata-collection normalizers on the seam path), against 0/119 at BASE; FieldSchema defined in 1 file; dist 53.5M; the objectui import experiment is 1628.4 KB to 603.6 KB gzip. The exports map is untouched, and the DTS-pass options are identical to BASE.",
      "tests": "HEAD 19a8800a: root `pnpm test` (turbo test + test:repo, 152 tasks = every package reading spec through dist) Tasks 152 successful/152, lock VERDICT command-exit 0. The run was interrupted by a worker restart and resumed from turbo cache (125 cached, 27 executed); no failure in either run. Within it: dogfood Test Files 295 passed/3 skipped (298), Tests 2520 passed/18 skipped; cli unit+integration 500/501 files (1 skipped), 6291 tests passed; downstream-contract 3 files/31 tests passed; spec test 721/721, test:repo 79/79. `pnpm build` 76/76 tasks, examples included. spec typecheck exit 0, including the test layer that compiles tsup.config.ts. HEAD 5a40a420 (after merging origin/main c61f75d1): spec test 720 passed, 1 failed (721). The failing file is scripts/liveness/check-liveness.test.ts (23 tests), the same main-red as check:liveness; not this diff. Ablations through scripts/ablation-replace.mjs, each mutation verified on disk and restored blob-identical to HEAD 9c9b83dc, predicted then observed. A1 browser swap off: predicted red on rule 2, observed red with 14 problems (all 10 dist/browser bundles plus ./shared and ./migrations in both formats); a first A1 attempt was refused by the tool as a no-op, so nothing ran. A2 node-side twinning off: predicted positive-control red, observed POSITIVE CONTROL FAILED. A3 seam regex mismatched: predicted build refusal, observed the one-module-graph refusal in both the ESM and CJS runs. Restore leg rebuilt; gate green; measurements identical.",
      "gates": "Derivation: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, 72 commands. At 19a8800a: 72/72 exit 0; check-plugin-teardown-shape --self-test first exited 3 on a shallow clone and exited 0 after fetching its pinned fixture commit. At 5a40a420: 71 exit 0 and 1 exit 1 (pnpm --filter @objectstack/spec run check:liveness, main-red). --ran reconciliation at 5a40a420: 72 derived, 72 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero from 72 recorded exit codes). Dist-reading gates at 5a40a420, each exit 0: check:browser-reachable-entries (48 bundles; 10 server-only links, all on the Node side), check:dual-build-cjs-loads, check:lean-entry-closure, check:dts-closure, check:sourcemap-no-sources-content, check:published-files, check:dev-prereqs (local-only; after rebuilding plugin-auth and organizations, which the merge moved). check-governed-merges --pr 25748: 0 of 4 paths governed, 268 changed lines. CI check-runs on 25748: in_progress at report time, not awaited per the role file.",
      "dogfood_battery": "19a8800a · inside the root `pnpm test` lock run, VERDICT command-exit 0 · Test Files 295/298 passed (3 skipped) · Tests 2520/2538 passed (18 skipped) · no failures. Run although neither trigger arm applies (no `!` in the title, no narrowing arm), because the dispatch named the battery.",
      "mcp_calls": "0. No MCP GitHub tool was called. Card and PR reads were anonymous REST GETs.",
      "api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches): 1 pr_create (POST /pulls plus the assignees write on issues/25748) and this os-dev-report comment through scripts/pm/post-stamped.mjs. Plus git push (not REST): 3 pushes, 47af3dd to f6933735 to 19a8800a to 5a40a420.",
      "open_questions": [
        { "question": "Three comments under packages/spec/src/** now misdescribe the layout: src/index.ts:73 ('Every subpath entry is a self-contained bundle'); src/conversions/registry.ts:18144 ('Each published entry is one flat file (tsup.config.ts, splitting: false)'; the PURE reasoning it supports still holds per chunk); src/api/package-api-assembled.zod.ts:40 (a historical sentence, rendered into the generated content/docs/references/api/package-api-assembled.mdx). The dispatch puts src/** out of scope, so they are not edited.", "options": ["A: a comment-only follow-up PR touching src (contract-review tier per the claim; gen:docs for the third)", "B: leave them; the PR body records them"], "recommendation": "A. Declared-vs-actual drift in comments is what the next author reasons from (long-term axis); the cost is one small reviewed PR, and no capability is added (startup axis)." },
        { "question": "Under Node, 5 exports still differ between @objectstack/spec and @objectstack/spec/shared: MAP_SUPPORTED_FIELDS, METADATA_ALIASES, normalizeMetadataCollection, normalizePluginMetadata, normalizeStackInput. They live in shared/metadata-collection.zod.ts, which reaches the pg seam, so the root's Node output carries the node-side copy. Making them one object would need /shared to get a browser condition (an exports-map change, out of scope) or the module to stop reaching the driver configs (a src change).", "options": ["A: accept; no consumer compares them by identity (business axis: none measured)", "B: a later card for a src split so metadata-collection no longer reaches the driver configs"], "recommendation": "A. There is no measured consumer of identity on these 5 (business axis), the browser view is already 119/119, and the alternatives widen into the contract (startup axis)." },
        { "question": "Implementation trade-off recorded: CJS also takes shared chunks. tsup with treeshake:true converts each esbuild ESM chunk to CJS through Rollup, so this is not esbuild's experimental cjs-splitting path. Measured: 0 cycles across the chunk graph (1158 CJS edges), check:dual-build-cjs-loads green. No new gate was added for chunk-graph acyclicity (new-gate default: no); a cyclic future would surface as a red check:dual-build-cjs-loads.", "options": ["A: as shipped", "B: CJS stays per-entry (a second graph, so CJS identity is lost again)"], "recommendation": "A. CJS consumers get identity too (contract-first), and the existing gate already fails loudly on the failure mode." }
      ],
      "out_of_scope_findings": [
        "class: a · reach: named producer — main-red: `pnpm --filter @objectstack/spec run check:liveness` and packages/spec/scripts/liveness/check-liveness.test.ts (23 tests) are red on origin/main c61f75d1 and still on f9a1e93f; they were green at this branch's pre-merge head 19a8800a · evidence: ledger row translation/flows.screens cites packages/services/service-automation/src/engine.ts#renderFlowTextSlot, which named `screens` only in a comment ('two screens down') that 0189524a (#25734, resumeInternal moved into run-resume.ts) took away; renderFlowTextSlot now lives in node-text-rendering.ts, which never names `screens` either · proposed patch: drop that clause from the row's evidence (builtin/screen-nodes.ts#registerScreenNodes, already cited, is the reader that spells the key) · dedupe words: liveness, flows.screens, renderFlowTextSlot, run-resume, citation rot",
        "carrier: none — objectui `Bundle Analysis` vendor-objectstack on a pin carrying this change is NOT MEASURED here; it comes with objectui's pin move, which also re-baselines its ceilings. The local stand-in is 603.6 KB gzip for objectui's 256 value imports (BASE 1628.4 KB; one-graph src control 538.5 KB). noted, not filed",
        "carrier: none — deep-path consumers measured: objectui a3c0da9 has 3 `@objectstack/spec/dist/index.{js,mjs}` strings, all regex probe inputs in scripts/__tests__/vite-objectstack-spec-dist.test.ts:481/946/1165 and vite-objectstack-client-dist.test.ts:398, not imports; its objectstack-pin.mjs hard-links the whole package tree, so chunks travel. HotCRM a4b3560: zero dist/src/json-schema deep imports. noted, not filed"
      ]
    }

    Generated by Claude Code

  14. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Landed · domain:spec seat 2 (seat post #18549) · sunhaolin · session session_01PC4NPXPgPmpDRG9DdDnyXT · 2026-10-25T15:04Z

    reading value
    PR #25748 MERGED through the queue at 2026-10-25T15:01:37Z; merge commit 3a2d38c6e2. ACCEPT 6393800730, at TIER_DEFAULT: the build config reaches no packages/spec/src/**, so no contract review was owed. The landing head 5e93810005 carried main with #25796 (liveness) and c1bb4b5b9a (pinyin) merged in; ci-failure read GREEN, 48/48, and check-governed-merges read NOT governed
    queue branch gh-readonly-queue/main/pr-25748-* gone (REST matching-refs: 0 refs)
    origin/main carries 3a2d38c6e2; packages/spec/tsup.config.ts names oneModuleGraph (4 hits) and builds with splitting: true

    State: the card closed completed on the merge (Fixes #8133). pm:dispatched is removed in this stroke, and the dev's cloud session session_01Q3XCv7AXcUSSD479Vt1LXy is archived.


    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

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions