Skip to content

docs(plan): page-free reads wave - goal, predict, scenario, plan - #1241

Merged
ffroliva merged 11 commits into
developfrom
docs/flow-reader-wave
Nov 10, 2026
Merged

ffroliva merged 11 commits into
developfrom
docs/flow-reader-wave

Conversation

@ffroliva

Copy link
Copy Markdown
Owner

Planning record for the page-free reads wave (milestone Wire resilience, #1229), in docs/superpowers/plans/2026-11-10-flow-reader/:

  • GOAL.md: exit criteria G1-G9, amended by predict (credits only, service-level placement), and the close-out.
  • PREDICT.md: CAUTION 4.6/10, mitigations required before execution.
  • SCENARIO.md: 30 scenario rows, including back-pressure (429/503) and in-body error codes.
  • PLAN.md: tickets 0/A/B/C with spike E1-E3 results. The cross-ticket follow-ups are done.

Delivered by #1235, #1236, #1238 and #1237; all are merged.

Docs only. Gates run: repo hygiene, doc links, website PII and website mirror check all pass. No code, Flow surface or MCP change, so no e2e applies.

Refs #1229

@coderabbitai

coderabbitai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 29 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: debf2b5a-20f4-4b31-890a-3f9f1cb2c287
Commits

Reviewing files that changed from the base of the PR and between ef6c458 and af53216.

Files selected for processing: 4

  • docs/superpowers/plans/2026-11-10-flow-reader/GOAL.md
  • docs/superpowers/plans/2026-11-10-flow-reader/PLAN.md
  • docs/superpowers/plans/2026-11-10-flow-reader/PREDICT.md
  • docs/superpowers/plans/2026-11-10-flow-reader/SCENARIO.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@ffroliva

Copy link
Copy Markdown
Owner Author

GOAL.md exit criteria G1–G8: run evidence

Scope per the "Amended by predict" section of GOAL.md: the wire reads credits only this wave; listing (Zzl0ze) and record (as29s) move to #1194/#1195/#1199. Profile denon82 (served flow.google.com), Windows 11. Runs on develop after v0.97.0 (46b2a05b) unless a row says otherwise.

G1 — cold gflow credits user p50 ≤ 3 s, no Chrome open (release tree, docs/LIVE_VERIFICATION_v0.97.0.md, merged in #1245):

wire run 1 rc=0 t=2.68
wire run 2 rc=0 t=2.44
wire run 3 rc=0 t=2.74
wire run 4 rc=0 t=2.72
wire run 5 rc=0 t=2.92
chrome on denon82 after wire runs: 0
browser run (WIRE_READS=0) rc=0 t=10.73

p50 2.72 s (the PR #1236 head measured 1.83 s). Before the wave: 40.4 s (#1233).

G2 + G5: zero Chrome launches, ≤ 1 GET + 1 POST (tests/e2e/test_credits_wire_bdd.py. The then steps assert that FlowApiClient was never constructed and that the methods are exactly ["GET","POST"]):

$ GFLOW_CLI_E2E_PROFILE=denon82 pytest -s -v -m "e2e and e2e_auth" tests/e2e/test_credits_wire_bdd.py -k healthy
tests/e2e/test_credits_wire_bdd.py::test_a_healthy_profile_reads_its_balance_without_launching_chrome
G5 requests: [('GET', 'flow.google.com', '/'), ('POST', 'flow.google.com', '/_/AiSandboxAngularFrontend/data/batchexecute')]
PASSED
1 passed, 2 deselected

MCP twin, same release tree: test_credits_mcp_e2e.py::test_mcp_get_credits_reads_without_a_browser_when_the_session_is_accepted PASSED (10/10 for the credits, wire and auth-status e2e set).

G3: every failure class falls back and the command succeeds (offline, one per class), plus the live cookie-free arm:

test_a_directread_failure_falls_back_to_the_browser_read[signed_out_shell] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[http_401] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[http_400] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[unparseable] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[store_unreadable] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[network] PASSED
test_a_directread_failure_falls_back_to_the_browser_read[redirect] PASSED
test_every_wire_failure_falls_back_to_the_page_and_logs_the_reason[...]  12 reasons PASSED
24 passed, 14 deselected in 6.42s

Live: test_credits_wire_bdd.py::test_cookies_flow_does_not_accept_fall_back_to_the_browser_read PASSED (release tree). Also live: proxy skip reason=proxy_configured → source=page, exit 0; Chrome holding the profile → exit 11 profile-locked (ledger).

G4: browser close no longer waits out the 30 s timeout (#1233, duplicate of #1140, fixed by #1235, Bug Lane): the failing-test-first record is in #1235 and on #1233. test_e2e_cli_t2i_into_a_missing_project_exits_11_fast failed on untouched develop (48.6 s, limit 20 s) and passes on the PR (18.6 s). Bare close: 32.1 s → 4.3 s. Re-timed: credits user 48.6/42.0/43.7 s → 17.6/10.0 s; release tree browser read 10.73 s.

G6: doctor reports wire health, and the CLI and MCP agree:

doctor auth.wire_read pass status=accepted build=boq_labs-ai-sandbox-frontend_20261110.00_p0 (direct credits read, default profile)
tests/e2e/test_wire_health_e2e.py::test_doctor_and_mcp_auth_status_agree_on_an_accepted_wire PASSED

G7: operator kill switch (offline, plus live):

test_the_kill_switch_reads_no_cookie_and_sends_nothing PASSED
GFLOW_CLI_WIRE_READS=0 gflow credits user --profile denon82 --json -> rc=0, read through Chrome (10.73 s)

G8: docs. #1237 (merged): ARCHITECTURE direct-read section, KNOWN_ISSUES account-risk entry and fallback note, the FLOW_WIRE_RPCS nzlxg direct-reader note, .env.template and CONFIGURATION GFLOW_CLI_WIRE_READS. The v0.97.0 doc-review council (3 auditors, YELLOW, nothing blocking) fixes are in the release commit. Doc gates: check_doc_links (269 files), generate_website_docs --check, check_website_docs_pii all clean.

G9: the browser session survives a run of wire reads: test_credits_wire_bdd.py::test_the_browser_session_survives_a_run_of_wire_reads PASSED (release tree).

Not proven live, each with a named blocker (ledger): --refresh recovery (no stale profile on this machine; offline ablation in #1243); HTTP 429/503 (Flow has not sent one, and provoking it would mean traffic the app does not send; offline row 29); Linux and macOS (no machine).

@ffroliva
ffroliva merged commit 78200c2 into develop Nov 10, 2026
22 checks passed
@ffroliva
ffroliva deleted the docs/flow-reader-wave branch November 10, 2026 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant