Measured 2026-09-08 on ci-probe while instrumenting #719. $0.
What happens
MigratedComposer.ensure_editor navigates to flow.google.com/project/<id>, the app redirects to flow.google.com/about, the settings trigger is of course never there, and 30 s later:
UiSelectorDriftError (exit 23): migrated host: the settings trigger (.settings-trigger-button)
did not become visible within 30s on https://flow.google.com/about (host=migrated)
The URL is in the message, and that is the only reason this was diagnosable at all — credit where due to whoever put it there.
Why it is wrong
/about is Flow's public landing page. Ending up there is not selector drift; it is the app telling us this session cannot open that project on this host. Reporting it as drift sends the user to "check for a newer gflow-cli release, then file a bug" over an account/session state no release will change — the same manufactured-drift-report problem #721 fixed for credit shortfalls, and #749 for agent mode. That is now three instances of one pattern, which is what makes it worth a general guard rather than a third special case.
What makes this confusing
gflow auth status --profile ci-probe reports the Flow session verified (compiledgrownth.official@gmail.com), and gflow project list --profile ci-probe works and lists the project. So every check a user would run says "you are signed in", and only the migrated editor disagrees.
Suggested shape
The check is cheap and needs no new anchor — after page.goto, the URL either is the project or it is not:
if not page.url.startswith(MIGRATED_PROJECT_URL.format(project_id=project_id)):
# landed somewhere else entirely (/about, a sign-in page, a different project)
The existing flow_host_kind / goto-redirect plumbing from #639/#644 is next door, and goto returning before the client-side redirect is a trap already recorded on this path — so the check belongs where the run already blocks (the readiness wait), not in a new bounded wait after goto.
Not measured
- Why
ci-probe is redirected. Signed out on flow.google.com specifically, a cohort gate, or a project-access problem are all consistent with one observation. This issue is only about the reporting, not the cause — do not let a fix assert a cause it has not measured.
- Whether the same redirect can happen mid-session on an account that worked a minute earlier.
Refs #719, #721, #749, #639
Measured 2026-09-08 on
ci-probewhile instrumenting #719. $0.What happens
MigratedComposer.ensure_editornavigates toflow.google.com/project/<id>, the app redirects toflow.google.com/about, the settings trigger is of course never there, and 30 s later:The URL is in the message, and that is the only reason this was diagnosable at all — credit where due to whoever put it there.
Why it is wrong
/aboutis Flow's public landing page. Ending up there is not selector drift; it is the app telling us this session cannot open that project on this host. Reporting it as drift sends the user to "check for a newer gflow-cli release, then file a bug" over an account/session state no release will change — the same manufactured-drift-report problem #721 fixed for credit shortfalls, and #749 for agent mode. That is now three instances of one pattern, which is what makes it worth a general guard rather than a third special case.What makes this confusing
gflow auth status --profile ci-probereports the Flow session verified (compiledgrownth.official@gmail.com), andgflow project list --profile ci-probeworks and lists the project. So every check a user would run says "you are signed in", and only the migrated editor disagrees.Suggested shape
The check is cheap and needs no new anchor — after
page.goto, the URL either is the project or it is not:The existing
flow_host_kind/goto-redirect plumbing from #639/#644 is next door, andgotoreturning before the client-side redirect is a trap already recorded on this path — so the check belongs where the run already blocks (the readiness wait), not in a new bounded wait aftergoto.Not measured
ci-probeis redirected. Signed out onflow.google.comspecifically, a cohort gate, or a project-access problem are all consistent with one observation. This issue is only about the reporting, not the cause — do not let a fix assert a cause it has not measured.Refs #719, #721, #749, #639