docs(app-shell): correct the eager-graph attribution above the /meta spelling fold - #5925
Merged
Merged
Conversation
…spelling fold The comment block above this file's `@objectstack/spec/shared` import stated that the import puts that subpath on the console's eager graph, at +213.4 KB minified / +60.1 KB gzipped, and attached a prohibition to that claim. Ablation on origin/main (0fce2ef) shows the import is worth +285 bytes gzipped: `/shared` is held eager by a runtime `import { pluralToSingular }` inside `@objectstack/core`, which ships in `@objectstack/client`, a direct `apps/console` dependency. Every other importer of `/shared` in this repo's source is type-only and erased at build. The block now records the mechanism rather than a magnitude that rots, keeps the parts that were true (self-contained subpath bundles, no `sideEffects`, the vendor chunk group's static edge, the do-not-fork prohibition), and points at objectstack#11503 where the only lever lives. Comment-only; the import and the call site are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
August 24, 2026 01:57
This was referenced Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5359
Comment-only. The card's premise is falsified by measurement, and the artifact that carried the false claim into the repo is corrected — which is why the card closes here rather than shipping the cleave it proposed.
What the card claimed, and what is true
packages/app-shell/src/preview/DraftChangesPanel.tsxcarried a 15-line block stating that its@objectstack/spec/sharedimport puts that subpath on the console's EAGER graph, at +213.4 KB minified / +60.1 KB gzipped, with a prohibition attached. The attribution is wrong: that cost was never this import's.Ablation, on
origin/mainat0fce2ef81— delete the import, rebuildapps/console, readeagerGzipBytesfromdist/eager-closure.json:The mutation was confirmed on disk before the build, by grepping the removed and the injected text rather than trusting an editor's exit code:
REMOVED_TEXT_COUNT=0,REMOVED_CALL_COUNT=0,INJECTED_MARKER_COUNT=2. The console resolves@object-ui/app-shellthrough a vite alias tosrc(apps/console/vite.config.ts:414), so this leg has no packagedistthat could go stale under it. Restoration ran from anEXIT INT TERMtrap;git diff HEAD --statcame back empty.Discriminator — the delta alone admits two readings ("
/sharedis still eager" vs "/sharedleft and was cheap"), so the bundle was probed directly.external_catalogsis a string literal indist/shared/index.mjsand in no other published entry the console imports (ui, data, kernel, automation, contracts, security, identity, system, api and the root entry all grep 0). After the ablation it is still present in the eagerly loadedvendor-objectstackchunk. Counter-probes on that same file: a literal known absent greps 0, a literal known present greps 30 — so the instrument is neither blind nor matching everything.The carrier. Every other importer of
/sharedin this repo's source is type-only (import type/export type *) and erased at build. The runtime edge is upstream:@objectstack/core, shipped inside@objectstack/clientand a directapps/consoledependency, hasimport { pluralToSingular } from "@objectstack/spec/shared". Deferring or deleting this panel's import moves ~nothing while that edge stands, so both levers the card proposed would have been motion with a measured zero payoff. The lever lives at the producer and is tracked in objectstack#11503.What this PR changes
Only the comment block. The import and the call site are untouched, and the diff is comment plus an empty-frontmatter changeset.
sideEffects, thevendor-objectstackgroup's static edge to the app entry (objectui#5266), and the prohibition on forking the spelling table into a local copy — whichscripts/check-spec-symbol-derivation.mjsrefuses.The other half of the card's title
"...that no budget weighs" was already stale when this card was dispatched. The eager-closure gauge from #5324 weighs the whole eager closure including
vendor-objectstack(926.2 KB gzip of the 3230.7 KB total) and landed after this card was filed. Calibrated rather than assumed: injecting an eager@objectstack/spec/cloudimport moved the gauge +157,361 bytes (+153.7 KB); removing it returned the measurement to 3,308,221 exactly, same chunk hash. The gauge is not blind to a new eager spec subpath.That calibration did surface a real defect in the gate's sensitivity, recorded separately in #5924 and deliberately not folded here. Per-chunk budget work remains where triage put it, on #5490.
Verification
Comment-only, so no ablation of this change is available — there is no behaviour to remove and re-observe, and staging one would be theatre. The substitute is the evidence above, which is what the comment now asserts.
node scripts/check-changeset-presence.mjs→ exit 0 —✅ 1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)…Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate.node scripts/check-changeset-no-major.mjs→ exit 0 —✅ No changeset declares a major bump.node scripts/check-control-bytes.mjs→ exit 0 —✅ check-control-bytes: OK (scanned 4921 tracked text file(s); skipped 85 binary).Both touched files were also scanned directly withgrep -naPfor control bytes: clean.pnpm --filter @object-ui/app-shell type-check— see the verification note in the report comment on finding(app-shell/console): the DraftChangesPanel/metaspelling fold puts@objectstack/spec/sharedon the console's EAGER graph — +60.1 KB gzipped that no budget weighs #5359 for its status and, if narrowed, the declared reason.Exit codes were captured before any pipe throughout.
Generated by Claude Code