From 7f58b8c400d1a051eda6b3607241c7a85a164983 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 21 Oct 2026 09:27:51 +0000 Subject: [PATCH 1/2] test(data-objectstack): state the batch-6 DroppedFieldsEvent reason pin with stored_expression subtracted (objectui#13309) objectstack-ai/objectstack#24778 added a fifth arm, `stored_expression`, to `DroppedFieldsEventSchema.reason`. `_ReasonIsTheEnum` stated the union as exactly four members, so the Spec Shape Gate (objectui main against the spec built from objectstack main) reds on TS2344. Apply the objectui#11206 shape: subtract the new arm, a no-op at the pin; drop it at the pin bump that carries the arm. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB --- .../src/spec-symbol-batch6.test.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/data-objectstack/src/spec-symbol-batch6.test.ts b/packages/data-objectstack/src/spec-symbol-batch6.test.ts index 8b34eae160..b54af07349 100644 --- a/packages/data-objectstack/src/spec-symbol-batch6.test.ts +++ b/packages/data-objectstack/src/spec-symbol-batch6.test.ts @@ -249,8 +249,24 @@ describe('DroppedFieldsEvent IS the spec type, not a mirror of it', () => { // this is the exact four-member union again, with no `Exclude`: any new arm // is a remainder `Equal` refuses, and `_ReasonIsNotString` below still // refuses the widening. + // + // IT FIRED A THIRD TIME at objectstack-ai/objectstack#24778, which added + // `stored_expression` (a stored field whose declared `expression` the engine + // computes on every write, so the computed value is kept, not the caller's), + // again in the Spec Shape Gate before any pin moved (objectui#13309). So the + // objectui#11206 shape is back: the member list is stated with + // `stored_expression` subtracted. At the pin the `Exclude` is a no-op; on + // objectstack `main` it subtracts exactly the new arm, so any other new arm + // is a remainder `Equal` refuses, and `_ReasonIsNotString` below still + // refuses a widening to `string`. At the pin bump that carries + // `stored_expression`, drop the `Exclude` and make this the five-member + // union (`writeWarningToast.test.ts`'s objectui#13178 tripwire fails on that + // bump to say so). type _ReasonIsTheEnum = Assert< - Equal + Equal< + Exclude, + 'readonly' | 'readonly_when' | 'primary_key' | 'computed' + > >; type _ReasonIsNotString = Assert, false>>; From 6ee70cebc33dafe75c28da058fdfa8672de1356d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 21 Oct 2026 09:41:38 +0000 Subject: [PATCH 2/2] chore(changeset): declare the batch-6 reason pin change as releasing nothing (objectui#13309) Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB --- .changeset/13309-dropped-fields-reason-pin.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changeset/13309-dropped-fields-reason-pin.md diff --git a/.changeset/13309-dropped-fields-reason-pin.md b/.changeset/13309-dropped-fields-reason-pin.md new file mode 100644 index 0000000000..6b799ef6fc --- /dev/null +++ b/.changeset/13309-dropped-fields-reason-pin.md @@ -0,0 +1,4 @@ +--- +--- + +Test-only change: the batch-6 spec-symbol pin in `@object-ui/data-objectstack` states `DroppedFieldsEvent['reason']` with `stored_expression` subtracted, so it compiles against both the pinned spec and objectstack `main` (objectui#13309). No published behaviour changes.