Repository navigation
Description
Summary
Spun off from #24 (which is being closed as the umbrella-task scope is otherwise complete). svasakorn flagged this in PR #60's body as scope-keeping:
FRAME_SLOT_BY_LABEL(I2V Start/End slots,div[aria-haspopup='dialog']:has-text('{label}')) is still text-based and will hit the same locale issue on a non-English profile. It's the I2V frame-slot path, separate from this upload fix, and belongs with #24.
Current code
src/gflow_cli/api/transports/ui_automation_video.py:138:
FRAME_SLOT_BY_LABEL = "div[aria-haspopup='dialog']:has-text('{label}')"Used at line 633 in the I2V Start/End frame-slot binding path. Same root cause as #56: localized text matching (Flow's editor renders labels in the Chrome profile language, not the --lang=en-US Chromium launch arg).
Impact
gflow video i2v on a non-English Chrome profile would hit a silent hang ~38s in (the click-then-no-event signature) when trying to bind a Start or End frame. Same failure mode as PR #60 resolved for _attach_references in i2i.
Suggested fix shape (mirror PR #60)
- Investigate the DOM on the affected profile via
scripts/dev/capture_image_add_media_dom.py(or a sibling script for the video editor). Need to see whether the Start/End frame slot has a Material Symbols icon ligature (e.g.play_arrowfor Start,stopfor End, or similar). If yes → usebutton:has(i.google-symbols:text-is('<ligature>')). If no → structural disambiguation by panel position. - Replace
FRAME_SLOT_BY_LABELwith a locale-stable selector or a cascade (icon-first, English-text fallback with short per-tier timeouts so two misses can't recreate a long silent hang — same pattern as PR fix(image): re-introduce i2i ref-attach (#50) with locale-agnostic media-dialog selectors (#56) #60). - Fail-loud if both tiers miss: screenshot +
RuntimeErrorwith the explicit "Chrome profile language vs Google account language" hint (PR fix(image): re-introduce i2i ref-attach (#50) with locale-agnostic media-dialog selectors (#56) #60's error message is the model).
Test plan (mirror PR #61)
- New e2e variant
test_e2e_i2v_start_end_frame_attachintests/e2e/test_transports_e2e.py,GFLOW_CLI_E2E_PROFILE-gated, ui_automation transport ONLY (REST transports drop UI-only fields silently — see rest-transports-drop-ui-fields memory). - Assert on a structlog event that ONLY fires when the UI path executed (e.g.
start_frame_attached/end_frame_attachedif those exist; or add new ones). - Verify on a non-EN profile (
ffroliva) and an EN profile (svasakorn's setup).
References
- Make UiAutomationTransport selectors language-agnostic (structural-first) #24 — umbrella issue (closed; this is the last remaining selector)
- i2i ref attach (#50) fails with TimeoutError on ffroliva account; image-mode add-media flow likely differs from video R2V #56 — sibling i2i locale leak (resolved via fix(image): re-introduce i2i ref-attach (#50) with locale-agnostic media-dialog selectors (#56) #60 + fix(test): i2i e2e routed through REST (follow-up to #60) #61)
- fix(image): re-introduce i2i ref-attach (#50) with locale-agnostic media-dialog selectors (#56) #60 — production fix for i2i media dialog (
_attach_references) - fix(test): i2i e2e routed through REST (follow-up to #60) #61 — test fix +
reference_attachedassertion strengthen - feat: locale-overridable Playwright launch (issue #24 prep) #51 — locale-agnostic phase 1 (env override
GFLOW_CLI_LOCALE) - Memory:
flow-locale-leak-icon-ligatures— durable selector pattern across the codebase
Activity
ffroliva commentedon May 26, 2026
Fixed by PR #90.
PR #70's structural-first cascade was supposed to close this, but the selector
SWAP_CONTAINERmatched zero elements on real Flow DOMs (theswap_horizicon uses classmaterial-iconsnotgoogle-symbols, and the slots are<div type="button">not children of anydiv > button > iwrapper). Production I2V silently relied on the EN text fallback and broke on every non-English Chrome profile.PR #90 replaces
FRAME_SLOTS_STRUCTwith the locale-free patterndiv[type='button'][aria-haspopup='dialog'](verified via DOM probe — matches exactly 2 slots), plus fixes a second OOB bug for the End-frame call after Start is attached.Live e2e proof:
tests/e2e/test_transports_e2e.py::test_e2e_i2v_start_end_frame_attachonffroliva+GFLOW_CLI_LOCALE=de-DEpassed in 124 s — terminal SUCCESSFUL VideoStatus, mp4 downloaded withftypmagic bytes, bothui_automation_video.frame_attachedevents fired (Start + End).Merge pull request #90 from ffroliva/bugfix/issue-63-i2v-frame-slot-s…
Merge pull request #91 from ffroliva/chore/plan-refresh-post-pr-90
fix(transports): correct I2V frame-slot selectors for non-EN profiles (…
docs: record ffroliva#63 closure in KNOWN_ISSUES + CHANGELOG
chore(plan): record PR ffroliva#90 / ffroliva#63 closure in PLAN.md
fix(transports): correct I2V frame-slot selectors for non-EN profiles (…
docs: record ffroliva#63 closure in KNOWN_ISSUES + CHANGELOG
Merge pull request ffroliva#90 from ffroliva/bugfix/issue-63-i2v-fram…
chore(plan): record PR ffroliva#90 / ffroliva#63 closure in PLAN.md
Merge pull request ffroliva#91 from ffroliva/chore/plan-refresh-post-…