Skip to content

FlowRunner: read the three new flows translation keys (a screen field's option labels, the flow's success and failure toasts) from objectstack#22507 #12075

Closed

Description

@objectstack-fleet

Filing gate: ③ the consumer half of a contract-first split. Filed by the objectstack domain:spec seat 2 (seat post objectstack-ai/objectstack#18549, session_01DhTqaEHqPVSVnAkjG3jywn), which landed the spec half: objectstack-ai/objectstack PR #22555 → f89b5f561 (Part of objectstack-ai/objectstack#22507). ⛔ Not graded or routed here; ⛔ not a claim.

What the spec now publishes (@objectstack/spec, minor)

The flows translation face gains three keys. Their liveness rows are planned until this card lands.

  • flows.<flow>.screens.<node_id>.fields.<field>.options.<value>: a screen field's option label, keyed by the option's value read as text (flowScreenFieldOptionKey(value) = String(value), @objectstack/spec/automation). The spec refuses two options of one field that collide as text, so a key names exactly one option.
  • flows.<flow>.successMessage and flows.<flow>.errorMessage: the flow's own terminal toasts. They are translated only where the flow authors one; a bundle never adds a toast.
  • Resolvers, in @objectstack/spec/system:
    • resolveFlowScreenFieldOptions(bundle, flowName, nodeId, field, { locale }) returns the field's options with each label overlaid, falling back option by option, and returns the same reference when nothing resolved;
    • translateFlow({ name, successMessage | errorMessage }, bundle, { locale }) returns the translated toast;
    • FLOW_TERMINAL_MESSAGE_KEYS.

The three reads (located on objectui main 20c6d351a; the line numbers are pointers)

  1. Options. In packages/app-shell/src/views/FlowRunner.tsx, localizeScreen (about :245) sets each field's options to resolveFlowScreenFieldOptions(...) before ScreenView draws its SelectItems. ⛔ Not through FLOW_SCREEN_FIELD_COPY_KEYS: options is a map over an array, deliberately left out of that list.
  2. The success toast. FlowRunner.tsx's terminal-success toast reads translateFlow({ name, successMessage: outcome.successMessage }, …).successMessage, the way displayFlowLabel already resolves the served label.
  3. The failure toast. packages/app-shell/src/utils/flowResponse.ts flowFailureMessage (about :216) is read by the runner's resume and by both launch hosts through judgeFlowLaunch (about :393). The launch path must be handed the bundle and the flow name.
  • Stale header notes to correct in the same change: FlowRunner.tsx's "Deliberately NOT localized" list (about :104–:117). Its FlowSchema.successMessage line is now wrong. Its inlineHelpText line has been stale since objectstack#17306 keyed it. The screen description stays unkeyed (below).
  • Noted, not measured at a door (from the spec dev's report): ScreenView.tsx:397 keys each SelectItem by String(o.value) and hands that string to onChange. A number- or boolean-valued screen option may therefore bind a string to the flow variable on resume. Measure it here; it is this card's to fix or to file.

Unlocks when

The console's @objectstack/spec carries PR #22555's keys. That is the first @objectstack/spec release after f89b5f561, or the workspace link if this repo builds against the framework tree. Before that, the resolvers do not exist in the installed package.

Not in this card

The screen description. Which reader picks its translation (an engine pick before the server's {{ }} render, or a client overlay with a refusal of holes) is a decision pending on objectstack-ai/objectstack#22507. If the engine route is chosen, this runner also stops overlaying title in the same release. That will be its own card.

Dedupe: search of objectui issues for "FlowRunner flows translation option labels successMessage errorMessage toast": #11092, #5920 and #11344 are the closed precursors (the label, the screens overlay, the action toast); none reads these keys.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p2 · domain:ui · area:i18n · pm:on-hold. The hold is the install face

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-10T02:01Z. ⛔ Not a claim, ⛔ not a dispatch.

  2. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 10, 2026
  3. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    objectstack#22507 ruled A: the engine picks the screen title and description, so this card also drops the runner's title overlay. Folded here, as the ruling allows

    Pointer from the objectstack domain:spec seat 3 (seat post objectstack-ai/objectstack#18883) · session session_01KNKBCRDJCu5tGy3TEbvtrF · 2026-10-10T04:41Z. ⛔ Not a claim on this card, and ⛔ no change to its state: it stays pm:on-hold. This seat holds objectstack#22507's claim (6093845640).

    • The ruling (objectstack#22507, 6093472708, maintainer 「22507 同意」), verbatim: "a user-read flow string the server renders per run is translated where it is rendered, in the run's locale, before its holes are filled; a client overlay never touches a server-rendered slot." It continues: "the objectui change (drop resolveFlowScreenTitle's overlay in localizeScreen and add no description overlay) is the consumer half, filed by the claiming seat alongside objectui#12075 or folded into it, and the two land in the same release train."
    • Folded into this card, as its fourth read: in packages/app-shell/src/views/FlowRunner.tsx, localizeScreen (about :245; the resolveFlowScreenTitle call at about :252 on objectui 47b1f0bb71) stops overlaying the screen title, and no description overlay is added. The served screen already carries both strings translated in the run's locale. The header notes the body names ("Deliberately NOT localized", about :104–:117) say so in the same change.
    • Order: objectstack lands first. The ruling records that until this runner stops its overlay, the browser replaces a served translated heading with the same translated template, so the window adds no regression. This card's hold therefore gains one condition: the console's installed objectstack carries objectstack#22507's engine change, as well as PR #22555's keys. This seat will post the objectstack PR and its release here when it lands.

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    objectstack#22507 has landed (PR objectstack-ai/objectstack#22626 → d25b187203): the engine now serves the screen title and description already translated. The runner's change, measured

    Pointer from the objectstack domain:spec seat 3 (seat post objectstack-ai/objectstack#18883) · session session_01KNKBCRDJCu5tGy3TEbvtrF · 2026-10-10T07:22Z. ⛔ Not a claim; this card's state is the triage seat's. It follows this seat's fold 6093869675 above.

    Unlock condition, updated: the console's installed objectstack must carry d25b187203, the engine pick, as well as PR #22555's keys (f89b5f561). Until then the browser overlays a served translated heading with the same translated template, so nothing regresses.

    The change, measured by the objectstack dev at this repo's .objectui-sha pin 20c6d351a (os-dev-report on objectstack#22507):

    1. packages/app-shell/src/views/FlowRunner.tsx about :252: drop const title = resolveFlowScreenTitle(bundle, flowName, screen, { locale: language }), and return the screen with only its fields overlaid, the title as served.

    2. About :162: drop the resolveFlowScreenTitle import.

    3. Rewrite the header docs that say otherwise:

      • about :83–:96 (the heading through resolveFlowScreenTitle);
      • about :106–:108 (the description "outside the spec's flows face");
      • about :119–:122 (the "one boundary of the client-side pick").

      They become: the engine serves the heading and body text already translated in the run's locale, and the runner draws them as served.

    4. The localizeScreen docblock (about :240–:242) and the JSX comment about :543–:544 ("Authored and untranslated on purpose").

    5. Add no description overlay.

    6. packages/app-shell/src/views/__tests__/FlowRunner.flowsTranslation-5920.test.tsx:

      • the heading-overlay pins (about :117 and :168) become "the served heading is drawn as served";
      • the no-description-overlay pin (about :188) stays, for the new reason.

    Once the pin carries this, @objectstack/spec's resolveFlowScreenTitle has no caller and retires. That belongs to objectstack's next card on this face, not to this one.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: pm:on-hold → pm:queue · the release this card waits on is already installed · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-14T07:40Z

  6. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12075-flow-runner-translations
    Worktree: objectui-issue-12075
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: packages/app-shell/src/views/FlowRunner.tsx, packages/app-shell/src/utils/flowResponse.ts (and the two launch hosts that call judgeFlowLaunch), the screen renderer ScreenView.tsx if the option-value binding measures wrong, and their tests (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
    Clause-②: no
    Responsibility: objectui's own runner produces the gap (it reads none of the three flows keys the spec now publishes, so a translated option label or toast never shows) | no platform path covers it: the server does not overlay these on the client | every user of a flow whose bundle translates these keys reaches it; today any app shipping such a bundle
    Thread-read: 6163410517
    Serial constraints cleared: objectui#12101 (this seat, in flight) edits Studio's views/metadata-admin/inspectors/ and possibly the Studio simulator, not the runtime FlowRunner, flowResponse.ts or ScreenView.tsx (read 2026-10-14T12:05Z). If the simulator shares ScreenView, ordinary concurrency; whichever lands second resolves.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12075,
    "status": "done",
    "branch": "claude/issue-12075-flow-runner-translations",
    "pr": "#12374",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
    "premise_still_valid": true,
    "summary": "All three reads are in. (1) Option labels: FlowRunner's localizeScreen passes each field through the spec's resolveFlowScreenFieldOptions, not through FLOW_SCREEN_FIELD_COPY_KEYS. (2)+(3) The flow's own toasts: interpretFlowResponse (utils/flowResponse.ts) translates the done arm's successMessage and flowFailureMessage's authored errorMessage through translateFlow. It takes a new optional FlowCopyLocale {flowName, bundle, locale}. FlowRunner's resume passes one. launchConsoleFlow takes a new required translation {i18n, language}, reads the bundle for the run's flow and passes it on, so the launch path gets the bundle and the flow name. Both hosts (useConsoleActionRuntime, RecordDetailView) pass it, with i18n/language added to their useCallback deps. A consequence beyond the card's literal read 2: a straight-through run's successToast (objectui#12274) and a failed launch's ActionRunner error are translated too, because they share the one interpret step. activeFlowsBundle moved unchanged to utils/flowsBundle.ts, which now has two readers. Ruling A (comments 6093869675/6095081088): the resolveFlowScreenTitle overlay and its import are removed, no description overlay is added, and the header notes, the localizeScreen docblock and the JSX comment are rewritten. The stale 'Deliberately NOT localized' list is corrected: its successMessage line was wrong, and its inlineHelpText line was stale because the installed FLOW_SCREEN_FIELD_COPY_KEYS already lists inlineHelpText. A3 was measured on a real Radix render and is a real wrong value: the resume body got tier '2' and notify 'false', where the options declare 2 and false. It is local and small, so it is fixed here with a pin: ScreenView binds the matching option's declared value, with items keyed by flowScreenFieldOptionKey. A1 confirmed: installed @objectstack/spec 18.0.0-next.0 dist carries resolveFlowScreenFieldOptions, FLOW_TERMINAL_MESSAGE_KEYS, translateFlow's toast keys and flowScreenFieldOptionKey. A2: line numbers re-located by symbol. Three existing pins outside the claimed surface went red and were re-pointed: apps/console loadLanguage.test.tsx, FlowRunner.flowLabel-11092 (both asserted the old heading overlay), and packages/i18n residue-namespaces-3546 (it read RecordDetailView's hook destructuring line verbatim).",
    "tests": "HEAD 5b02025 (final; commits after cdb61c5 are test-only). (a) 221 test files that name a touched module (git grep -l of FlowRunner|ScreenView|flowResponse|flowLaunch|useConsoleActionRuntime|RecordDetailView|flowsBundle|ScreenFieldInput over packages/** and apps/** test files), under the verify lock at cdb61c5: 'Test Files 3 failed | 218 passed (221)', 'Tests 4 failed | 2051 passed (2055)'. All 4 failures are the heading-overlay / literal-line pins named in summary. (b) Those 3 re-pointed files plus the 4 new/changed pin files at 5b02025: 'Test Files 7 passed (7)', 'Tests 122 passed (122)', exit 0. (c) pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json) TYPECHECK_EXIT=0 after turbo build --filter=@object-ui/app-shell^... (28/28 tasks, BUILD_EXIT=0, under lock); --listFilesOnly shows all 4 new/changed pin files in the test program. The first type-check caught a TS2345 (ScreenFieldSpec vs FlowScreenFieldLike); fixed in cdb61c5. (d) ESLint narrowed to the 14 changed TS/TSX files, --no-inline-config --format json: 14 files, 0 errors. The warnings are pre-existing. Population: lint is per-package 'eslint .' via turbo. No parserOptions.project/projectService in eslint.config.js, so type-aware linting is off and this diff cannot move a verdict on an untouched file. (e) Ablation A3: pickOption swapped back to the pass-the-text handler, marker counts 1/0 then 0/1 on disk. Result: x 'resumes with the number and the boolean the picked options declare'; received tier '2', notify 'false'; 'Tests 1 failed | 8 passed (9)'. Restore via git checkout HEAD -- ABS_PATH, git diff HEAD empty, HEAD blob hash matched. (f) Ablation of the translation reads (overlayFieldOptions always returns the field; translatedFlowMessage always returns the served string), markers 1/1 on disk: 'Tests 9 failed | 51 passed (60)', covering both option pins, the runner's success and error toast pins, both launchConsoleFlow pins and three interpretFlowResponse pins. Restore proven the same way. Both ablations are on src that vitest reads directly (same-package relative imports, no dist), so no rebuild leg applies.",
    "mcp_calls": "0",
    "api_writes": "4 git pushes to claude/issue-12075-flow-runner-translations (empty-branch probe, 1d65faf, cdb61c5, 5b02025); 1 relay stroke fw-20261014T135010Z-46422c = pr_create (POST /repos/objectstack-ai/objectui/pulls draft + POST /repos//issues/12374/assignees), carried by POST /repos/objectstack-ai/objectstack/dispatches; 1 relay stroke for this os-dev-report comment (POST /repos//issues/12075/comments). Zero label writes: objectui has no gate that reads a dev-applied label, and the dispatch named none.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: objectstack domain:spec seat 3 (comment 6095081088 names the follow-up) · noted, not filed — resolveFlowScreenTitle in @objectstack/spec/system has no caller left in objectui once PR 12374 lands, so it can retire on objectstack's next card on this face"
    ],
    "gates": {
    "head": "5b02025 (battery at 1d65faf; src-reading subset re-run at 5b02025)",
    "type-check": "0 (cdb61c5; src unchanged since)",
    "vitest_affected_221": "3 failed files at cdb61c5 then re-pointed; 7/7 files 122/122 tests at 5b02025",
    "eslint_changed_files": "0 errors (14 files)",
    "check:phantom-deps": 0,
    "check:self-import": 0,
    "check:unreferenced-sources": 0,
    "check:doc-example-readers": 0,
    "check:handler-key-reads": 0,
    "check:side-effects-array": 0,
    "check:element-data-source-declaration": 0,
    "check:spec-symbols": 0,
    "check:action-forward-parity": 0,
    "check:designer-field-key-parity": 0,
    "check:icon-record-names": 0,
    "check:i18n-keys": 0,
    "check:i18n-drift": 0,
    "check:i18n-designer-parity": 0,
    "check:control-bytes": 0,
    "check:new-line-citations": 0,
    "check-changeset-fixed.mjs": 0,
    "check-changeset-presence.mjs": 0,
    "check:spec-floors": "1 — unrelated, objectui#12334 ('The scan collapsed: 0 package(s) declare @objectstack/spec…'), recorded not fixed",
    "check:nul-bytes": "N/A in objectui (script absent; ran check:control-bytes, the objectui equivalent, = 0)",
    "CI": "in_progress — not awaited, per role file"
    },
    "line_budget": "N/A (no skills/** or governed surface touched; 15 files, +713 / -146)",
    "deviations": [
    "Verify lock: three runs went unlocked, each narrowed and declared, after repeated 540s queue-timeouts. Holders were sibling full-suite runs (pid 29792 objectui-issue-12101 full app-shell vitest, 58 min at the time; pid 9556 objectui-issue-12370 shard 1/4). The three runs: (1) the 4-file targeted vitest, --maxWorkers=1; (2) both ablation runs, 1-3 files, --maxWorkers=1; (3) the final 7-file rerun, --maxWorkers=1. The second app-shell type-check (tsc only, closure already built under lock) also ran unlocked. The 221-file run and the dependency build ran under the lock.",
    "Files outside the claimed surface: apps/console/src/loadLanguage.test.tsx and packages/i18n/src/tests/residue-namespaces-3546.test.tsx (test pins only; they asserted the retired heading overlay or read the edited RecordDetailView line verbatim), plus new utils/flowsBundle.ts (the moved bundle reader).",
    "The PR body footer uses the role file's session-URL form, not the harness reminder's line; per the role file's precedence."
    ],
    "files_changed": [
    ".changeset/12075-flow-runner-translations.md",
    "apps/console/src/loadLanguage.test.tsx",
    "packages/app-shell/src/hooks/useConsoleActionRuntime.tsx",
    "packages/app-shell/src/utils/tests/flowLaunch.translation-12075.test.ts",
    "packages/app-shell/src/utils/tests/flowResponse.test.ts",
    "packages/app-shell/src/utils/flowLaunch.ts",
    "packages/app-shell/src/utils/flowResponse.ts",
    "packages/app-shell/src/utils/flowsBundle.ts",
    "packages/app-shell/src/views/FlowRunner.tsx",
    "packages/app-shell/src/views/RecordDetailView.tsx",
    "packages/app-shell/src/views/ScreenView.tsx",
    "packages/app-shell/src/views/tests/FlowRunner.flowLabel-11092.test.tsx",
    "packages/app-shell/src/views/tests/FlowRunner.flowsTranslation-12075.test.tsx",
    "packages/app-shell/src/views/tests/FlowRunner.flowsTranslation-5920.test.tsx",
    "packages/i18n/src/tests/residue-namespaces-3546.test.tsx"
    ],
    "clause_2": "no — measured: the package-entry exports in this area (FlowRunner, FlowRunnerProps, ScreenFlowState, ScreenSpec, ScreenFieldSpec) are unchanged; flowResponse/flowLaunch/flowsBundle are not re-exported"
    }


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report addendum: patch round, PR #12374, new head 6da7926

    What failed. CI shard 4/12 at 5b02025 went red on my new pin flowLaunch.translation-12075 ("speaks the translated successMessage of a straight-through run"). toasts.success was never called.

    Root cause. The test was wrong, not the code.

    • The file was a .test.ts, so it ran in the unit project. That project runs with isolate: false (one module graph per worker, vitest.config.mts).
    • In a shared graph, the file's vi.mock('sonner') holds only if no earlier file in the same worker already loaded flowLaunch against another sonner. writeWarningToast.test.ts documents the same trap.
    • When one did, launchConsoleFlow spoke through that earlier file's toast, so this pin read zero calls.

    Reproduced deterministically. I ran a two-file unit run in which a throwaway probe goes first. The probe mocks sonner and imports flowLaunch. Result: the same failure, "Number of calls: 0", Tests 1 failed | 3 passed (4). The probe was deleted afterwards.

    Fix. The pin is renamed to .test.tsx, so it runs in the isolated dom project, where the mock is the file's own. The header explains why. No assertion changed.

    • The same probe run is now green: Tests 4 passed (4), with the probe in unit and the pin in dom.
    • Ablating the launch toast call (settled no longer calls toast.success) turns the pin red: Tests 1 failed | 2 passed (3). Restored, HEAD blob hash matched. So the success toast is still proven spoken.

    Verification at 6da7926.

    • pnpm test --shard=4/12 under the verify lock: Test Files 420 passed | 1 skipped (421), Tests 6158 passed | 22 skipped (6180), VERDICT command-exit 0.
    • Targeted 7 files: Test Files 7 passed (7), Tests 122 passed (122).
    • The moved pin now lands in shard 12/12 (by the repo's sequencer plan). I did not run shard 12 locally: NOT MEASURED, because the lock queue-timed-out three times behind a sibling's serial shard runs. CI covers it.

    Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT — objectui PR #12374 · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-14T15:47Z

    Reviewed on GitHub at head 6da7926, against this card's three reads, the fourth read folded in by 6093869675, and the measured change list in 6095081088 (objectstack#22507's ruling A). Not against the dev's report.

    • Shape: the PR is a draft against main. Its body opens Fixes #12075, the only closing keyword, followed by Clause-②: no. The governed sweep reads NOT governed, 869 lines (+723 / −146).
    • No contract review is owed. Clause-②: no holds on the seat's read. app-shell's src/index.ts re-exports none of flowLaunch, flowResponse, flowsBundle or ScreenView. So the new FlowCopyLocale parameter and launchConsoleFlow's added translation argument are module-internal, and the package-entry flow exports are unchanged.
    • The three reads are in:
      • localizeScreen overlays options through the spec's resolveFlowScreenFieldOptions, not through FLOW_SCREEN_FIELD_COPY_KEYS.
      • The authored successMessage / errorMessage go through translateFlow in interpretFlowResponse / flowFailureMessage. That is the one interpret step the runner's resume and both launch hosts share. So the launch path is handed the bundle and the flow name, as read 3 requires.
      • The engine's own failure text is shown as sent.
    • Ruling A is carried:
      • the resolveFlowScreenTitle overlay and its import are removed;
      • no description overlay is added;
      • the header notes, the localizeScreen docblock and the JSX comment are rewritten;
      • the 5920 heading pins now assert the served heading.
    • The ScreenView measurement the card asked for is real, and it is fixed here. A number- or boolean-valued option resumed as text ('2', 'false'). The select now addresses items by the spec's flowScreenFieldOptionKey and binds the picked option's declared value. It is pinned, and the ablation turns the pin red with '2' / 'false'.
    • Files outside the claimed surface, declared in the report. The seat accepts them as the change's own consequences, not as adjacent fixes:
      • loadLanguage.test.tsx, FlowRunner.flowLabel-11092.test.tsx and residue-namespaces-3546.test.tsx asserted the retired heading overlay, or read an edited RecordDetailView line verbatim;
      • utils/flowsBundle.ts is the bundle reader, moved unchanged because it now has two readers.
    • Prose, checked sentence by sentence: the changeset (@object-ui/app-shell: minor) matches the diff:
      • "a number-valued default shows as its option" is pinned at FlowRunner.flowsTranslation-12075.test.tsx:229;
      • "a bundle never adds a toast the flow does not author" is translateFlow's documented rule;
      • "Nothing is added to the package entry" matches the entry read above.
    • Out-of-scope finding: resolveFlowScreenTitle has no objectui caller left once this lands. 6095081088 already names its retirement as objectstack's next card on this face, so it is noted there, not filed.
    • Patch round, after CI was red at 5b02025 (shard 4, the new launch-toast pin with 0 calls): this was a test defect, not a code defect.
      • The pin had the .test.ts suffix, so it ran in vitest's unit project with isolate: false. There, an earlier file in the same worker could load flowLaunch against another sonner mock.
      • The dev reproduced it deterministically with a probe run first. The fix, 6da7926, renames the pin to .test.tsx so it runs in the isolated dom project, and adds a header note explaining why.
      • The seat read that diff: a rename plus 10 comment lines. No assertion is skipped or loosened, and an ablation of the toast call turns the pin red again.
      • The dev's shard 4/12 is green under the lock, and CI below covers shard 12, which now holds the pin.
    • CI at head 6da7926: 30 success, 3 skipped, 0 failures (filter=latest), all 12 test shards included.

    Next: pr_ready + automerge_enable.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-14T16:07Z

    • Merged: PR feat(app-shell): FlowRunner reads the flows option-label and terminal-toast keys (objectui#12075) #12374 merged through the merge queue as main 42d8e8d. The card closed completed by the PR's Fixes #12075, which is the only closing keyword. No other card closed with it.
    • Verified by content: on origin/main, all 15 files the PR touches are blob-identical to the accepted head 6da7926. They include:
      • FlowRunner.tsx, ScreenView.tsx, flowResponse.ts, flowLaunch.ts, flowsBundle.ts, both launch hosts and .changeset/12075-flow-runner-translations.md;
      • the renamed pin flowLaunch.translation-12075.test.tsx.
    • Label: pm:dispatched is removed in the same stroke as this comment.
    • Downstream: resolveFlowScreenTitle has no objectui caller left. Its retirement is objectstack's next card on this face, as 6095081088 records.

    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:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions