Repository navigation
fix(app-shell,i18n): word the stored_expression strip reason ahead of the spec pin (objectui#13178) - #13233
Merged
objectstack-fleet[bot] merged 1 commit intoOct 20, 2026
Conversation
… the spec pin STRIPPED_LINE's key type is widened by the one literal, as was done for computed, so the table compiles against the published spec pin and against objectstack's spec carrying the fifth arm. A new detail.writeStrippedStoredExpression row in all ten locale packs; the exhaustiveness test also drives stored_expression, a new case pins the en and zh lines, and a tripwire names the widening to delete at the pin bump. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
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
|
objectstack-fleet
Bot
deleted the
claude/issue-13178-stripped-stored-expression
branch
October 20, 2026 11:02
This was referenced Oct 20, 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 #13178
Clause-②: no
What
objectstack-ai/objectstack#24778 (draft) adds a fifth arm,
stored_expression, toDroppedFieldsEvent['reason']: a stored field whose declared expression the engine computes on every write keeps the computed value, not the one the caller sent (the field IS written, unlikecomputed).STRIPPED_LINEinpackages/app-shell/src/providers/writeWarningToast.tsis keyed by that union, so the objectstack Console Pin Gate, which builds the pinned objectui against objectstack's own spec, would fail on a missing key once #24778 lands. This lands the row first, in the objectui#11206 shape.STRIPPED_LINE's key type is aRecordkeyed byDroppedFieldsEvent['reason'] | 'stored_expression'. Against the published pin (which does not declare the arm) the required key set is the pin's four plus the literal; against #24778's spec it is the five it declares. No excess-key error on either side, and the next arm upstream adds is still a missing key here. The docblock records why, and the tripwire: delete the widening at the pin bump that declares the value.stored_expression, through a new keydetail.writeStrippedStoredExpressionwith{{fields}}. English: "Computed from the record, so the computed value was saved instead of the one sent: FIELDS". A real translation in all ten packs underpackages/i18n/src/locales/, never "read-only"..changeset/13178-stripped-stored-expression.md:@object-ui/app-shelland@object-ui/i18npatch.Pins (
writeWarningToast.test.ts)words reason stored_expression as a computed value saved in place of the one sent, in en and zh (objectui#13178). It drivesemitWriteWarningthrough a realcreateI18ninstance inenand inzh(zh catalogue loaded withloadBuiltInLocale), asserts the keydetail.writeStrippedStoredExpressionwas asked for, and asserts both full lines with the field labels.DroppedFieldsEvent.reasonwith a binary ternary, so every future reason is labelled "Read-only" #3935 testgives every reason the pinned spec declares its own wordingstays green against today's pin. It now drives the installed spec's reasons plusstored_expression, because today's pin does not declare it.names the fields and claims no cause for a reason ahead of the spec pin (#3935)is unchanged and green. An undeclared value still takes the skew arm.reminds the pin bump that carries stored_expression to retire the widening (objectui#13178)asserts the installed spec does not declarestored_expression. When it does, the message names both edits: delete| 'stored_expression', and make_ReasonIsTheEnuminspec-symbol-batch6.test.tsthe five-member union.Ablation (one-shot, nothing kept)
The fix was committed first (
fbb8c133e4).node scripts/ablation-replace.mjs(objectstack checkout) renamed the row's keystored_expressiontostored_expression_ablated, keeping the widened type, so the table's lookup misses. Anchor 1 to 0, blob5e4d1f9dd772toc1abca187de5. The run waswriteWarningToast.test.tsunder the lock:Tests 2 failed | 19 passed (21). The two that failed were (a) and (b); (c) stayed green. The restore wasgit checkout HEAD -- PATHunder an EXIT/INT/TERM trap. Proof:git hash-objectafter restore =5e4d1f9dd772f1ccdc6c21c37fcb3f847530a0e3= the HEAD blob, andgit diff HEADis empty.Tests and gates (head
fbb8c133e4, worktree root, exit captured before any pipe)pnpm exec vitest run --maxWorkers=1overwriteWarningToast.test.tsandsaveAdvisoryToast.test.ts(the files naming the module): 2 files, 37 tests passed.all-locales-key-parity,en-zh-key-parity,de-quote-pairing-3876,ar-participle-orthography-6610,ellipsis-glyph-3878,fallback-placeholder-spelling-3512andmachineLocaleCensus-9909. Result: 7 files, 93 tests passed.pnpm --filter '@object-ui/app-shell^...' buildexit 0. Thenpnpm --filter @object-ui/app-shell --filter @object-ui/i18n run type-checkexit 0. Both scripts runtsc --noEmit && tsc -p tsconfig.test.json.tsc -p tsconfig.test.json --listFilesOnlylistswriteWarningToast.test.ts.--no-inline-config --format json, over the 12 changed.tsfiles: exit 0, 0 errors, 0 warnings, 12 files in the JSON.eslint.config.jsenables no type-aware linting, so this diff cannot change the verdict on any file it does not touch. The repo-widepnpm lintruns in CI.check:phantom-deps,check:self-import,check:unreferenced-sources,check:doc-example-readers,check:handler-key-reads,check:side-effects-array,check:element-data-source-declaration,check:spec-symbols,check:action-forward-parity,check:designer-field-key-parity,check:icon-record-names,check:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:control-bytes,check:new-line-citations,scripts/check-hand-rolled-comment-mask.mjs,scripts/check-changeset-fixed.mjsandscripts/check-changeset-presence.mjs.check:spec-floors: NOT MEASURED. It exited 1 withno-artifact, because it needs a whole-workspace build, which was not run here.packages/app-shell/andpackages/i18n/are left to CI. Only the files above ran here.Acceptance notes
scripts/build-console.sh) only runs builds: the console dependency closure, then the console. So the missing key is a type error in the app-shelltscbuild, and that is what this unblocks. The writeWarningToast branches onDroppedFieldsEvent.reasonwith a binary ternary, so every future reason is labelled "Read-only" #3935 test and_ReasonIsTheEnum(packages/data-objectstack/src/spec-symbol-batch6.test.ts, a type-level pin of the exact union) are not reached by that gate. Both go red only on objectui's own spec bump to a release that declares the arm. At that bump, the tripwire above names both edits.spec-symbol-batch6.test.tsis outside this claim's file surface and is not touched.stored_expression, such a report from a newer server is still shown on the skew arm: "Not applied by the server: FIELDS". The changeset says so.Session:
https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gBGenerated by Claude Code