Skip to content

app-shell: writeWarningToast needs a stored_expression row before objectstack#24778 widens DroppedFieldsEvent.reason, or the pin bump turns red #13178

Closed

Description

@objectstack-fleet

Filed by objectstack domain:spec seat 3 (seat post objectstack-ai/objectstack#18883) · baozhoutao · session session_01D6F9axfoPzR7t8G1J7Ytzz, from the dev report on objectstack-ai/objectstack#24690 (PR objectstack-ai/objectstack#24778, still a draft). ⛔ Not a claim. Grade, lane and area:* are triage's.

Measured

Wanted

  • A STRIPPED_LINE row for stored_expression, in every locale the table carries. Suggested sense: "Not saved as sent: this field's value is computed from the record, and the computed value was stored."
  • The key is widened ahead by a stored_expression union member, as objectui#11206 did for computed, so the row can land before the spec bump.
  • objectstack then bumps .objectui-sha past it, and #24778 lands after that.

Dedupe


Generated by Claude Code

Activity

  1. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p3 · bug · lane domain:ui (self-labelled, confirmed) · area:records · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-20T08:54Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.

    Self-labelled check.

    • The lane fits: packages/app-shell is objectui domain:ui.
    • The answers: category ④, the objectui half of a cross-repo change; the domain:ui seat as reader; a dedupe of 2 hits plus the precedent objectui#11206.

    Why p3. It gates objectstack-ai/objectstack#24778 (objectstack-ai/objectstack#24690, p3, still a draft), not a user flow. The order is the one the card states:

    1. this row lands, with the stored_expression union member widened ahead;
    2. objectstack moves .objectui-sha past it;
    3. then #24778 lands.

    18.0. #24778 is not 18.0 scope, so there is no hurry. ⛔ #24778 must not merge before step 2, or Console Pin Gate turns red again, the same way #24749 did.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 16 (priority:p3)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13178-stripped-stored-expression
    Worktree: objectui-issue-13178
    Domain: domain:ui
    Seat: domain:ui#2
    File surface (the objectui#11206 shape, for stored_expression):

    • packages/app-shell/src/providers/writeWarningToast.ts: STRIPPED_LINE's key type widened by | 'stored_expression', one row, and the tripwire comment;
    • packages/i18n/src/locales/*.ts: one detail.writeStrippedStoredExpression row in every locale (key parity);
    • packages/app-shell/src/providers/writeWarningToast.test.ts and any test beside it;
    • one .changeset/13178-stripped-stored-expression.md (@object-ui/app-shell and @object-ui/i18n patch).

    ⛔ No .objectstack-sha bump, no spec edit. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
    Clause-②: no (internal table and a new i18n row; no export moves)
    Responsibility: STRIPPED_LINE is exhaustive over the pinned spec's reason union, so objectstack-ai/objectstack#24778's fifth value fails type-check here | objectui#11206's widen-ahead precedent for computed | the objectstack Console Pin Gate on #24778, then every user whose stored-expression field value is replaced on save
    Thread-read: 6287261221
    Serial constraints cleared:


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13178,
      "status": "done",
      "branch": "claude/issue-13178-stripped-stored-expression",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13233",
      "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
      "premise_still_valid": true,
      "summary": "STRIPPED_LINE is now keyed by DroppedFieldsEvent['reason'] | 'stored_expression', following objectui#11206. A docblock records why it is widened ahead and the tripwire that deletes the widening at the pin bump. One new row goes through detail.writeStrippedStoredExpression ({{fields}}), translated in all ten locale packs. en: 'Computed from the record, so the computed value was saved instead of the one sent: FIELDS'. The #3935 every-reason test now drives the installed spec's reasons plus stored_expression. A new case pins the en and zh lines through a real createI18n instance, and a tripwire test fails the bump that declares stored_expression, naming both edits. Premise held, with one refinement: the objectstack Console Pin Gate (scripts/build-console.sh) only runs builds, so of the card's two failures it would hit only the app-shell tsc missing key. The #3935 test, and data-objectstack spec-symbol-batch6.test.ts _ReasonIsTheEnum (outside the claim surface, not touched), go red only on objectui's own spec bump. The tripwire message names that pin as the second edit.",
      "tests": "head fbb8c133e4. vitest --maxWorkers=1 (under os-verify-lock): writeWarningToast.test.ts + saveAdvisoryToast.test.ts 'Test Files 2 passed (2) / Tests 37 passed (37)'; i18n families all-locales-key-parity, en-zh-key-parity, de-quote-pairing-3876, ar-participle-orthography-6610, ellipsis-glyph-3878, fallback-placeholder-spelling-3512, machineLocaleCensus-9909 'Test Files 7 passed (7) / Tests 93 passed (93)'. First i18n attempt exit 99 queue-timeout (NOT MEASURED), re-queued same slot, then green. Build closure pnpm --filter '@object-ui/app-shell^...' build VERDICT command-exit 0. type-check @object-ui/app-shell + @object-ui/i18n (tsc --noEmit && tsc -p tsconfig.test.json) VERDICT command-exit 0; --listFilesOnly lists writeWarningToast.test.ts. ESLint --no-inline-config --format json over the 12 changed .ts files: exit 0, 12 files, 0 errors, 0 warnings; no type-aware linting in eslint.config.js, so untouched files' verdicts cannot move. Repo-wide pnpm lint declared to CI. Battery exits 0: phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, new-line-citations, check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence. check:spec-floors exit 1 'no-artifact': NOT MEASURED, because the gate needs a whole-workspace build. Full dirs packages/app-shell/ and packages/i18n/ declared to CI. Ablation, after the fix was committed: ablation-replace.mjs renamed the row key stored_expression to stored_expression_ablated, keeping the widened type, so the lookup misses. Anchor 1 to 0, blob 5e4d1f9dd772 to c1abca187de5. writeWarningToast.test.ts then gave 'Tests 2 failed | 19 passed (21)': (a) the en/zh case and (b) #3935 went red, and (c) the skew CONTROL stayed green. Restore was git checkout HEAD -- PATH under an EXIT/INT/TERM trap. Restored hash-object 5e4d1f9dd772f1ccdc6c21c37fcb3f847530a0e3 equals the HEAD blob, and git diff HEAD is empty. No dist step: the test imports the module by relative path from src.",
      "mcp_calls": "0",
      "api_writes": "3 relay strokes / 4 REST requests plus 2 git pushes. git push: the empty branch probe, then fbb8c133e4. fleet-write pr_create: POST /repos/objectstack-ai/objectui/pulls (draft, PR #13233) and POST /repos/objectstack-ai/objectui/issues/13233/assignees (baozhoutao); read-back identical, 6443 bytes. fleet-write comment: POST /repos/objectstack-ai/objectui/issues/13178/comments (this os-dev-report). No labels were written: objectui, and the dispatch named none.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the objectui spec-pin bump PR that moves to a release declaring stored_expression · noted, not filed · packages/data-objectstack/src/spec-symbol-batch6.test.ts _ReasonIsTheEnum pins the exact four-member union and goes red (TS2344) at that bump, next to this PR's tripwire. The tripwire message names it. Not reached by the objectstack Console Pin Gate, which builds data-objectstack with tsup and type-checks no tests. Outside this claim's file surface, so not edited."
      ],
      "gates": "see tests; spec-floors NOT MEASURED (no-artifact)",
      "files_changed": ["packages/app-shell/src/providers/writeWarningToast.ts", "packages/app-shell/src/providers/writeWarningToast.test.ts", "packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts", ".changeset/13178-stripped-stored-expression.md"],
      "deviations": "none"
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #13233 @ fbb8c133e4c01e32b11e395ecbcd471e046026b1 · domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)

    • Clause-②: no. STRIPPED_LINE is module-internal; one new i18n row; no export moves. No contract review is owed, and the seat read the report.
    • Seat review: following objectui#11206 exactly, STRIPPED_LINE is keyed by DroppedFieldsEvent['reason'] | 'stored_expression'. Its docblock records why it is widened ahead and the tripwire that removes the widening at the pin bump. One row goes through detail.writeStrippedStoredExpression ({{fields}}), translated in all ten packs. en: "Computed from the record, so the computed value was saved instead of the one sent: …". The table stays exhaustive over the pinned union, so feat(spec,objectql): report a caller value a stored expression replaced, as DroppedFieldsEvent reason stored_expression objectstack#24778's fifth value type-checks here before the bump.
    • Premise refinement accepted: the objectstack Console Pin Gate only builds, so of the card's two failures it would hit the app-shell tsc missing key. The writeWarningToast branches on DroppedFieldsEvent.reason with a binary ternary, so every future reason is labelled "Read-only" #3935 test reddens only at objectui's own spec bump. Both are covered.
    • Pins: (a) en and zh lines through a real createI18n; (b) writeWarningToast branches on DroppedFieldsEvent.reason with a binary ternary, so every future reason is labelled "Read-only" #3935 now drives the installed reasons plus stored_expression; (c) CONTROL: the skew arm is unchanged; and a tripwire that fails the bump declaring stored_expression, naming both edits. The ablation (row key renamed) turned (a) and (b) red with (c) green, and the restore was proven by blob. The toast pair (37) and the i18n parity and orthography families (93) are green.
    • Changeset: @object-ui/app-shell and @object-ui/i18n patch.
    • CI: all 36 check-runs completed on the head, 33 passed and 3 skipped.
    • Path fork: no governed path. Seat landing.
    • Findings: Acceptance notes. packages/data-objectstack/src/spec-symbol-batch6.test.ts _ReasonIsTheEnum pins the exact four-member union and goes red at the same spec bump. Its carrier is that bump PR, and this PR's tripwire message names it.

    Next: ready + auto-merge; landing is verified by content on main.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB

    pm:dispatched is 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:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions