You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Studio's automation canvas header still prints the literal 'flow · <api name>' chip, the residual of objectui#11659 ruling 6 #11665
This is the residual of #11659 ruling 6. That ruling made Studio's automation-pillar copy plain language. objectui#11663 (its PR) cleaned the pillar copy. It left one surface, outside that card's file surface: when a flow is open, the automation canvas header in StudioDesignSurface renders a literal chip flow · <api name> in every locale.
Ruling
The maintainer delegated this decision to the epic PM on 2026-10-05 (「你不用找我确认,你自己确认」). The ruling: the zh header must not show the metadata type word flow. Show the flow's label. Keep the API name available on hover, for authors who need it.
Acceptance
With a flow open in zh-CN, the canvas header shows no flow token, and hovering shows the API name.
{
"issue": 11665,
"status": "done",
"branch": "claude/issue-11665-flow-chip",
"pr": "https://github.com/objectstack-ai/objectui/pull/11917",
"session": "session_64cb68a6-01c7-4dc6-acc6-ccb459c90ef2",
"premise_still_valid": true,
"summary": "The automation canvas header chip `flow · NAME` (the span after the canvasHint chip in StudioDesignSurface, verified present on origin/main at 179f6fe9d and again at 230e4b230) now prints the flow's label, the string its rail row prints, falling back to the API name for an empty label. The API name moved to the chip's tooltip as `API name: NAME` (en) and `API 名称: NAME` (zh), using the designer's existing designer.field.apiName row, so no locale row was added. A new test renders the real AutomationsPillar under an I18nProvider in zh and en and pins both; three existing suites that used the old chip or the bare label text to locate the open flow were adjusted. Draft PR opened; not marked ready, not queued, no labels or assignees touched. NOT VERIFIED IN BROWSER (the epic's final re-walk covers it).",
"gates": [
{
"command": "pnpm exec vitest run packages/app-shell/src/views/studio-design/ + studioAutomationCopy.plainLanguage-11659 + studio-locale.i18n + automationPreviews.i18n-10862 + AiChatPage.builtLandsRunning-11658 (app-shell) + apps/console StudioRoute.test and StudioRoute.landingI18n.test",
"exit": 0,
"result": "99 files, 634 tests passed; tree identical to 8c3686786 (the last test edit was committed after the run, content unchanged)"
},
{
"command": "pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json)",
"exit": 0,
"head": "8c3686786"
},
{
"command": "pnpm --filter @object-ui/app-shell lint (eslint .)",
"exit": 0,
"result": "0 errors, 3546 pre-existing warnings, none at the edited lines"
},
{
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"head": "8c3686786"
},
{
"command": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"head": "8c3686786"
},
{
"command": "node scripts/check-changeset-claims.mjs",
"exit": 0,
"head": "8c3686786"
},
{
"command": "node scripts/check-i18n-call-site-keys.mjs",
"exit": 0,
"head": "8c3686786"
},
{
"command": "node scripts/check-i18n-designer-table-parity.mjs",
"exit": 0,
"head": "8c3686786"
},
{
"command": "node scripts/check-new-cross-file-line-citations.mjs",
"exit": 0,
"head": "8c3686786",
"result": "0 new citations (report-only enforcement)"
},
{
"command": "pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build",
"exit": 0,
"result": "dependency closure built before type-check"
}
],
"files_changed": [
".changeset/11665-automation-canvas-header-label.md (new, patch on @object-ui/app-shell)",
"packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (header chip: label text, API name on the title, data-testid auto-canvas-caption)",
"packages/app-shell/src/views/studio-design/StudioDesignSurface.flowCanvasChip-11665.test.tsx (new, 4 tests: zh, en, empty-label fallback, positive control)",
"packages/app-shell/src/views/studio-design/StudioDesignSurface.automationsReadOnly-11124.test.tsx (marker now read from the tooltip)",
"packages/app-shell/src/views/studio-design/StudioDesignSurface.packageLessFlows-11553.test.tsx (marker now read from the tooltip)",
"packages/app-shell/src/views/studio-design/StudioDesignSurface.designerRegistryMissing.test.tsx (rail row found by role, since the label text now names two elements)"
],
"ablation": {
"method": "fix committed first (c8370f4c7); script mutates the committed file, proves the mutation on disk by anchor and injected-text counts plus a one-line porcelain, runs the new test file, then restores with git checkout HEAD -- PATH and proves the restore by git hash-object equal to the HEAD blob (361ccacb3ab9...) and an empty git diff HEAD; trap restore on EXIT INT TERM",
"leg_A_old_chip_text": "children replaced by `flow · {current.name}`, testid and tooltip kept: vitest exit 1, 3 red (zh, en, empty-label fallback), 1 green (positive control); received text was `flow · nightly_digest`",
"leg_B_tooltip_removed": "title attribute replaced by a marker attribute: vitest exit 1, 2 red (zh, en), 2 green",
"restore_proof": "both legs: blob hash equals HEAD blob, git diff HEAD empty, porcelain 0 lines; control run after restore 4 of 4 green",
"no_op_first_attempt": "the first attempt at leg A used an ambiguous anchor (3 hits); the script refused before writing, nothing was mutated, tree verified clean, anchor made unique and the leg re-run"
},
"tests": "new file 4/4 green on the fix, 3/4 and 2/4 red under the two ablation legs; wider run 99 files / 634 tests green. The first wide run had 1 red (designerRegistryMissing: findByText on the label met two elements) which was my regression, repaired in commit 8c3686786 and re-run green.",
"deviations": [
"The role file is the objectstack one; its os-verify-lock.sh exists but this host has no flock, so it would run in declared unlocked mode. Builds and tests ran directly, with NODE_OPTIONS=--max-old-space-size=4096 and --workspace-concurrency=2, in the background with polling.",
"Commit trailers follow the dispatch and objectui AGENTS.md (Claude-Session plus a Co-authored-by line naming Claude at the noreply anthropic.com address), not the harness's model-named trailer.",
"Beyond the two suites a grep for `flow · ` finds, a third (designerRegistryMissing) located the rail row by the bare label text and went red; fixed in a second commit. All three are inside the claimed 'tests' surface.",
"The claim listed packages/i18n/src/locales/*; it was not touched. The existing designer.field.apiName row in app-shell's metadata-admin/i18n.ts is reused, so no locale row was added.",
"Ablation first attempt was a no-op (ambiguous anchor), disclosed above.",
"One POST to create the PR failed with a TLS handshake timeout; a read-back showed no PR for the branch, then it was retried once and landed as #11917. The PR body was read back after: content identical apart from the trailing newline the jq output adds.",
".rig-logs/ is untracked and not gitignored in this repo; it was never staged (files were added by explicit path).",
"Resumed after the weekly-limit pause with no loss: the worktree, branch and one pushed commit were as the PM described; no worktree add, reset, clean or stash was run."
],
"mcp_calls": "0 - no MCP GitHub calls; all GitHub access was `gh api` REST and git push",
"api_writes": "2 landed REST writes: POST repos/objectstack-ai/objectui/pulls (draft PR 11917) and POST repos/objectstack-ai/objectui/issues/11665/comments (this report); plus 1 failed POST to pulls (TLS handshake timeout, verified not created before the retry). Git pushes: 3 (empty-branch marker, c8370f4c7, 8c3686786).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none - noted, not filed. FlowPreview.tsx hands PreviewShell a `hint` (`flow · N nodes`, and `flow · design` for an empty flow) that PreviewShell no longer renders, by its own doc comment; dead code, not user-visible. Recorded in the PR Acceptance notes. 承接者:无",
"carrier: whoever writes the epic's final re-walk - noted, not filed. The header chip now repeats the rail row's label text on screen, so a walk that locates the open flow by its label text sees two matches; the tooltip (API name: NAME / API 名称: NAME) or the data-testid auto-canvas-caption singles out the chip."
]
}
{
"issue": 11665,
"status": "done",
"round": "rework-1",
"branch": "claude/issue-11665-flow-chip",
"pr": "https://github.com/objectstack-ai/objectui/pull/11917",
"head": "97351b8ff",
"session": "session_64cb68a6-01c7-4dc6-acc6-ccb459c90ef2",
"premise_still_valid": true,
"summary": "Merged origin/main (55 commits) into the branch with a normal merge, resolved two content conflicts, repaired two more suites that arrived with main and still read the old chip, re-ran the gates, pushed without force, and waited for CI. PR 11917 is clean (mergeable, mergeable_state clean) and still a draft; not marked ready, not queued.",
"conflicted_files": [
{
"file": "packages/app-shell/src/views/studio-design/StudioDesignSurface.automationsReadOnly-11124.test.tsx",
"resolution": "Both sides edited the two lines after the second-flow click. This branch had moved the which-flow-is-open marker from the old chip text to its tooltip (getByTitle API name); main had moved the status assertion to the switch's words (STATUS_OFF, objectui#11779). Kept both: my marker line plus main's status line."
},
{
"file": "packages/app-shell/src/views/studio-design/StudioDesignSurface.packageLessFlows-11553.test.tsx",
"resolution": "Same shape in openedFlow: kept my findByTitle marker line plus main's status line (the enabled-switch wording from t())."
}
],
"semantic_repairs_without_textual_conflict": [
"StudioDesignSurface.flowStatusTruth-11779.test.tsx (new on main): its openFlow helper waited on the old chip text; it now waits on the tooltip.",
"StudioDesignSurface.heldPublish-11786.test.tsx (new on main): its openFlow helper waited on the old chip text; it now waits on the tooltip."
],
"unchanged_by_merge": "StudioDesignSurface.tsx merged without conflict; the chip block (label text, API name on the title, data-testid auto-canvas-caption) is intact.",
"rerun": [
{
"command": "pnpm install, then pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build",
"exit": 0
},
{
"command": "pnpm exec vitest run packages/app-shell/src/views/studio-design/ + studioAutomationCopy.plainLanguage-11659 + studio-locale.i18n + automationPreviews.i18n-10862 + AiChatPage.builtLandsRunning-11658 + apps/console StudioRoute.test and StudioRoute.landingI18n.test",
"exit": 0,
"result": "129 files, 870 tests passed (includes the new flowCanvasChip-11665 file, 4 of 4)"
},
{
"command": "pnpm --filter @object-ui/app-shell type-check",
"exit": 0
},
{
"command": "node scripts/check-changeset-presence, check-changeset-no-major, check-changeset-claims, check-i18n-call-site-keys, check-i18n-designer-table-parity, check-new-cross-file-line-citations",
"exit": 0,
"result": "all six exit 0 on the merged tree"
}
],
"ci": {
"head": "97351b8ff",
"check_runs": 43,
"success": 40,
"skipped": 3,
"failed": 0,
"skipped_names": [
"Test (coverage)",
"Test (coverage shard matrix)",
"dependabot"
],
"named": "Test, Test shards 1 to 8, Test (dist pins), Type Check, Lint, Build and E2E, Build Docs, Doc Component Type Check, Doc Snippet Type Check, Line Citation Gate, Changeset Declaration, Changeset Bump Policy, Changeset Fixed Group Check, Changeset Claim Re-read, Changeset Overwrite Report: all success",
"combined_status": "success",
"pr_state": "draft true, mergeable true, mergeable_state clean; labels tests and package: app-shell were applied by the repo labeler, not by me"
},
"deviations": [
"The first git push after the merge failed with a network error (SSL_ERROR_SYSCALL); retried with backoff, a normal push, and confirmed the remote head by ls-remote equal to the local head. No force-push, no rebase.",
"The merge also brought a stale dependency build: pnpm install and the dependency closure were rebuilt before the re-run."
],
"mcp_calls": "0 - no MCP GitHub calls; REST via gh api and git push only",
"api_writes": "1 REST write this round (this comment). Git pushes: 1 landed (merge commit 97351b8ff) after 1 network failure.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: whoever lands the next suite that opens an automation flow - noted, not filed. Two suites that arrived with main after this branch was cut (flowStatusTruth-11779, heldPublish-11786) locate the open flow by the old chip text; merges stay textually clean while going red, so any further suite that waits on `flow · NAME` will need the tooltip (API name: NAME) or the data-testid auto-canvas-caption instead."
]
}
Activity
hotlong commentedon Oct 7, 2026
Claim: epic #2636 PM loop round 4
Session:
session_64cb68a6-01c7-4dc6-acc6-ccb459c90ef2Account:
hotlongBranch:
claude/issue-11665-flow-chipWorktree:
~/Documents/GitHub/objectui-issue-11665Epic: objectstack-ai/cloud#2636
File surface:
packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (automation canvas header chip), packages/i18n/src/locales/*, tests, .changeset(stop on breach; explain in the report)Container & model:
S (one chip, two locales),mode:subagent,model: sonnet (floor tier)Thread-read: none
Serial constraints cleared:
#2663 (.objectui-sha + welcome.page.ts) and #2665 (service-ai-studio) are in the merge queue — no overlap with this surfacehotlong commentedon Oct 8, 2026
os-dev-report
{ "issue": 11665, "status": "done", "branch": "claude/issue-11665-flow-chip", "pr": "https://github.com/objectstack-ai/objectui/pull/11917", "session": "session_64cb68a6-01c7-4dc6-acc6-ccb459c90ef2", "premise_still_valid": true, "summary": "The automation canvas header chip `flow · NAME` (the span after the canvasHint chip in StudioDesignSurface, verified present on origin/main at 179f6fe9d and again at 230e4b230) now prints the flow's label, the string its rail row prints, falling back to the API name for an empty label. The API name moved to the chip's tooltip as `API name: NAME` (en) and `API 名称: NAME` (zh), using the designer's existing designer.field.apiName row, so no locale row was added. A new test renders the real AutomationsPillar under an I18nProvider in zh and en and pins both; three existing suites that used the old chip or the bare label text to locate the open flow were adjusted. Draft PR opened; not marked ready, not queued, no labels or assignees touched. NOT VERIFIED IN BROWSER (the epic's final re-walk covers it).", "gates": [ { "command": "pnpm exec vitest run packages/app-shell/src/views/studio-design/ + studioAutomationCopy.plainLanguage-11659 + studio-locale.i18n + automationPreviews.i18n-10862 + AiChatPage.builtLandsRunning-11658 (app-shell) + apps/console StudioRoute.test and StudioRoute.landingI18n.test", "exit": 0, "result": "99 files, 634 tests passed; tree identical to 8c3686786 (the last test edit was committed after the run, content unchanged)" }, { "command": "pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json)", "exit": 0, "head": "8c3686786" }, { "command": "pnpm --filter @object-ui/app-shell lint (eslint .)", "exit": 0, "result": "0 errors, 3546 pre-existing warnings, none at the edited lines" }, { "command": "node scripts/check-changeset-presence.mjs", "exit": 0, "head": "8c3686786" }, { "command": "node scripts/check-changeset-no-major.mjs", "exit": 0, "head": "8c3686786" }, { "command": "node scripts/check-changeset-claims.mjs", "exit": 0, "head": "8c3686786" }, { "command": "node scripts/check-i18n-call-site-keys.mjs", "exit": 0, "head": "8c3686786" }, { "command": "node scripts/check-i18n-designer-table-parity.mjs", "exit": 0, "head": "8c3686786" }, { "command": "node scripts/check-new-cross-file-line-citations.mjs", "exit": 0, "head": "8c3686786", "result": "0 new citations (report-only enforcement)" }, { "command": "pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build", "exit": 0, "result": "dependency closure built before type-check" } ], "files_changed": [ ".changeset/11665-automation-canvas-header-label.md (new, patch on @object-ui/app-shell)", "packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (header chip: label text, API name on the title, data-testid auto-canvas-caption)", "packages/app-shell/src/views/studio-design/StudioDesignSurface.flowCanvasChip-11665.test.tsx (new, 4 tests: zh, en, empty-label fallback, positive control)", "packages/app-shell/src/views/studio-design/StudioDesignSurface.automationsReadOnly-11124.test.tsx (marker now read from the tooltip)", "packages/app-shell/src/views/studio-design/StudioDesignSurface.packageLessFlows-11553.test.tsx (marker now read from the tooltip)", "packages/app-shell/src/views/studio-design/StudioDesignSurface.designerRegistryMissing.test.tsx (rail row found by role, since the label text now names two elements)" ], "ablation": { "method": "fix committed first (c8370f4c7); script mutates the committed file, proves the mutation on disk by anchor and injected-text counts plus a one-line porcelain, runs the new test file, then restores with git checkout HEAD -- PATH and proves the restore by git hash-object equal to the HEAD blob (361ccacb3ab9...) and an empty git diff HEAD; trap restore on EXIT INT TERM", "leg_A_old_chip_text": "children replaced by `flow · {current.name}`, testid and tooltip kept: vitest exit 1, 3 red (zh, en, empty-label fallback), 1 green (positive control); received text was `flow · nightly_digest`", "leg_B_tooltip_removed": "title attribute replaced by a marker attribute: vitest exit 1, 2 red (zh, en), 2 green", "restore_proof": "both legs: blob hash equals HEAD blob, git diff HEAD empty, porcelain 0 lines; control run after restore 4 of 4 green", "no_op_first_attempt": "the first attempt at leg A used an ambiguous anchor (3 hits); the script refused before writing, nothing was mutated, tree verified clean, anchor made unique and the leg re-run" }, "tests": "new file 4/4 green on the fix, 3/4 and 2/4 red under the two ablation legs; wider run 99 files / 634 tests green. The first wide run had 1 red (designerRegistryMissing: findByText on the label met two elements) which was my regression, repaired in commit 8c3686786 and re-run green.", "deviations": [ "The role file is the objectstack one; its os-verify-lock.sh exists but this host has no flock, so it would run in declared unlocked mode. Builds and tests ran directly, with NODE_OPTIONS=--max-old-space-size=4096 and --workspace-concurrency=2, in the background with polling.", "Commit trailers follow the dispatch and objectui AGENTS.md (Claude-Session plus a Co-authored-by line naming Claude at the noreply anthropic.com address), not the harness's model-named trailer.", "Beyond the two suites a grep for `flow · ` finds, a third (designerRegistryMissing) located the rail row by the bare label text and went red; fixed in a second commit. All three are inside the claimed 'tests' surface.", "The claim listed packages/i18n/src/locales/*; it was not touched. The existing designer.field.apiName row in app-shell's metadata-admin/i18n.ts is reused, so no locale row was added.", "Ablation first attempt was a no-op (ambiguous anchor), disclosed above.", "One POST to create the PR failed with a TLS handshake timeout; a read-back showed no PR for the branch, then it was retried once and landed as #11917. The PR body was read back after: content identical apart from the trailing newline the jq output adds.", ".rig-logs/ is untracked and not gitignored in this repo; it was never staged (files were added by explicit path).", "Resumed after the weekly-limit pause with no loss: the worktree, branch and one pushed commit were as the PM described; no worktree add, reset, clean or stash was run." ], "mcp_calls": "0 - no MCP GitHub calls; all GitHub access was `gh api` REST and git push", "api_writes": "2 landed REST writes: POST repos/objectstack-ai/objectui/pulls (draft PR 11917) and POST repos/objectstack-ai/objectui/issues/11665/comments (this report); plus 1 failed POST to pulls (TLS handshake timeout, verified not created before the retry). Git pushes: 3 (empty-branch marker, c8370f4c7, 8c3686786).", "open_questions": [], "out_of_scope_findings": [ "carrier: none - noted, not filed. FlowPreview.tsx hands PreviewShell a `hint` (`flow · N nodes`, and `flow · design` for an empty flow) that PreviewShell no longer renders, by its own doc comment; dead code, not user-visible. Recorded in the PR Acceptance notes. 承接者:无", "carrier: whoever writes the epic's final re-walk - noted, not filed. The header chip now repeats the rail row's label text on screen, so a walk that locates the open flow by its label text sees two matches; the tooltip (API name: NAME / API 名称: NAME) or the data-testid auto-canvas-caption singles out the chip." ] }hotlong commentedon Oct 8, 2026
os-dev-report
{ "issue": 11665, "status": "done", "round": "rework-1", "branch": "claude/issue-11665-flow-chip", "pr": "https://github.com/objectstack-ai/objectui/pull/11917", "head": "97351b8ff", "session": "session_64cb68a6-01c7-4dc6-acc6-ccb459c90ef2", "premise_still_valid": true, "summary": "Merged origin/main (55 commits) into the branch with a normal merge, resolved two content conflicts, repaired two more suites that arrived with main and still read the old chip, re-ran the gates, pushed without force, and waited for CI. PR 11917 is clean (mergeable, mergeable_state clean) and still a draft; not marked ready, not queued.", "conflicted_files": [ { "file": "packages/app-shell/src/views/studio-design/StudioDesignSurface.automationsReadOnly-11124.test.tsx", "resolution": "Both sides edited the two lines after the second-flow click. This branch had moved the which-flow-is-open marker from the old chip text to its tooltip (getByTitle API name); main had moved the status assertion to the switch's words (STATUS_OFF, objectui#11779). Kept both: my marker line plus main's status line." }, { "file": "packages/app-shell/src/views/studio-design/StudioDesignSurface.packageLessFlows-11553.test.tsx", "resolution": "Same shape in openedFlow: kept my findByTitle marker line plus main's status line (the enabled-switch wording from t())." } ], "semantic_repairs_without_textual_conflict": [ "StudioDesignSurface.flowStatusTruth-11779.test.tsx (new on main): its openFlow helper waited on the old chip text; it now waits on the tooltip.", "StudioDesignSurface.heldPublish-11786.test.tsx (new on main): its openFlow helper waited on the old chip text; it now waits on the tooltip." ], "unchanged_by_merge": "StudioDesignSurface.tsx merged without conflict; the chip block (label text, API name on the title, data-testid auto-canvas-caption) is intact.", "rerun": [ { "command": "pnpm install, then pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build", "exit": 0 }, { "command": "pnpm exec vitest run packages/app-shell/src/views/studio-design/ + studioAutomationCopy.plainLanguage-11659 + studio-locale.i18n + automationPreviews.i18n-10862 + AiChatPage.builtLandsRunning-11658 + apps/console StudioRoute.test and StudioRoute.landingI18n.test", "exit": 0, "result": "129 files, 870 tests passed (includes the new flowCanvasChip-11665 file, 4 of 4)" }, { "command": "pnpm --filter @object-ui/app-shell type-check", "exit": 0 }, { "command": "node scripts/check-changeset-presence, check-changeset-no-major, check-changeset-claims, check-i18n-call-site-keys, check-i18n-designer-table-parity, check-new-cross-file-line-citations", "exit": 0, "result": "all six exit 0 on the merged tree" } ], "ci": { "head": "97351b8ff", "check_runs": 43, "success": 40, "skipped": 3, "failed": 0, "skipped_names": [ "Test (coverage)", "Test (coverage shard matrix)", "dependabot" ], "named": "Test, Test shards 1 to 8, Test (dist pins), Type Check, Lint, Build and E2E, Build Docs, Doc Component Type Check, Doc Snippet Type Check, Line Citation Gate, Changeset Declaration, Changeset Bump Policy, Changeset Fixed Group Check, Changeset Claim Re-read, Changeset Overwrite Report: all success", "combined_status": "success", "pr_state": "draft true, mergeable true, mergeable_state clean; labels tests and package: app-shell were applied by the repo labeler, not by me" }, "deviations": [ "The first git push after the merge failed with a network error (SSL_ERROR_SYSCALL); retried with backoff, a normal push, and confirmed the remote head by ls-remote equal to the local head. No force-push, no rebase.", "The merge also brought a stale dependency build: pnpm install and the dependency closure were rebuilt before the re-run." ], "mcp_calls": "0 - no MCP GitHub calls; REST via gh api and git push only", "api_writes": "1 REST write this round (this comment). Git pushes: 1 landed (merge commit 97351b8ff) after 1 network failure.", "open_questions": [], "out_of_scope_findings": [ "carrier: whoever lands the next suite that opens an automation flow - noted, not filed. Two suites that arrived with main after this branch was cut (flowStatusTruth-11779, heldPublish-11786) locate the open flow by the old chip text; merges stay textually clean while going red, so any further suite that waits on `flow · NAME` will need the tooltip (API name: NAME) or the data-testid auto-canvas-caption instead." ] }fix(app-shell): Studio's automation canvas header names the open flow…