Skip to content

docs: sweep "empty wallet" out of the credit-shortfall wording - #726

Merged
ffroliva merged 1 commit into
developfrom
docs/credit-shortfall-not-empty-wallet
Sep 7, 2026
Merged

ffroliva merged 1 commit into
developfrom
docs/credit-shortfall-not-empty-wallet

Conversation

@ffroliva

@ffroliva ffroliva commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Summary

When ci-probe turned out to hold 50 credits rather than zero, the correction went into the places I remembered — errors.py's remediation, the class docstring, the test docstrings, the skip message. Eleven other occurrences shipped in #725 still said "empty wallet", "drained account", "out of Veo credits".

One of them was user-facing and gave the exact dead-end advice the remediation had just stopped giving — docs/USAGE.md, exit-code table, row 37:

The account has no Flow credits left for this model

Someone holding 50 credits reads that and concludes gflow is broken.

What changed

  • Row 37 now names the shortfall with the arithmetic (50 held, --model veo-quality asked, 100 needed) and points at the remedy: pick a cheaper tier, veo-lite costs 10.
  • Row 23's cross-reference, four comments in migrated_composer.py, one in errors.py, four test docstrings.
  • Website mirror regenerated.

No behaviour change — comments, docstrings and documentation only.

CHANGELOG.md is deliberately untouched: its bullet is being corrected on the #717 rebase, and editing it here would manufacture a second conflict for no gain.

Test plan

  • Repo-wide sweep confirms zero residual occurrences outside CHANGELOG.md
  • ruff check / ruff format clean · pyright src 0 errors
  • doc links resolved · website mirror in sync
  • tests/api/transports/test_migrated_composer.py + tests/cli — 650 passed
  • E2E: not applicable — no Flow surface is touched

Note

The lesson is the sweep, not the wording. A disproved claim survives wherever nobody thought to look, so the fix for "we measured 50, not 0" is grep, not recall. Caught by the session working #717, who read the merged bullet rather than taking my correction on trust.

The correction was applied to the places I remembered, not the places that had
it. `errors.py`'s remediation, the class docstring, the test docstrings and the
skip message were fixed when ci-probe turned out to hold 50 credits rather than
zero -- but eleven other occurrences shipped in #725 still said "empty wallet",
"drained account", "out of Veo credits".

One of them was user-facing and gave the same dead-end advice the remediation
had just stopped giving: `docs/USAGE.md`'s exit-code table, row 37, "The account
has no Flow credits left for this model". Someone holding 50 credits reads that
and concludes gflow is broken.

Row 37 now names the shortfall with the arithmetic (50 held, veo-quality asked,
100 needed) and points at the remedy -- pick a cheaper `--model`, veo-lite costs
10. Row 23's cross-reference, four comments in `migrated_composer.py`, one in
`errors.py`, and four test docstrings follow. Website mirror regenerated.

Also cites the finding doc. The council's D6 dimension noted that "measured
2026-09-07" rested on narrative alone, with no citable artifact, against this
repo's own rule that findings live in `docs/superpowers/spikes/`. That doc now
exists on develop, so `migrated_composer.py` and `errors.py` both point at it --
including the part that matters most, that it names four things as NOT measured,
among them that the positive match on `prompt-warning-button` was seen exactly
once. A comment citing a finding that documents its own limits is worth more
than one asserting a measurement.

No behaviour change: comments, docstrings and documentation only.

CHANGELOG.md is deliberately untouched -- its bullet was corrected on the #717
rebase, and editing it here would only manufacture a conflict.

The lesson is the sweep, not the wording. A disproved claim survives wherever
nobody thought to look, so the fix for "we measured 50, not 0" is `grep`, not
recall. Caught by the session working #717, who read the merged bullet rather
than taking the correction on trust.
@ffroliva
ffroliva force-pushed the docs/credit-shortfall-not-empty-wallet branch from 39ec1d0 to 8a44925 Compare September 7, 2026 13:22
@ffroliva
ffroliva merged commit 6ca0c3d into develop Sep 7, 2026
15 checks passed
tranzmatt pushed a commit to tranzmatt/gflow-cli-unofficial that referenced this pull request Sep 9, 2026
…no New project CTA

"Fix the add_2 name drift" turned out to have no selector to fix. Tracing
reachability before editing corrected two claims I had already made publicly on
ffroliva#730 and to the user:

  - _CHARACTER_SLOT_ADD_SELECTOR is NOT broken on migrated. _click_character_slot_add
    tries _CHARACTER_BODY_MODE_SELECTOR first, which already covers the migrated
    flow-slot-chip-button; the add_2 path is the LEGACY fallback.
  - ADD_MEDIA_BUTTON is unreachable there: ui_automation_video returns
    FlowHostMigratedError before any of its ligature selectors run.
  - NEW_PROJECT_SELECTORS is reached only without --project, and migrated_can_serve
    refuses without one.

So all three are labs-only in practice and the name drift has no live production
impact today. That is the third time today my count was too high, each time the
same mistake: generalising from a grep without checking reachability.

THE REAL DEFECT, which my own spike hit:

  RuntimeError: Could not find 'New project' CTA on Flow gallery.
  URL: https://flow.google.com/?hl=en

On the migrated host that blames the SELECTOR for a control the host does not
render, and its remediation - "check for a newer gflow-cli release, then file a
frontend bug" - is unfixable by the reader and points at the wrong culprit. Same
misdiagnosis shape as a credit shortfall reported as frontend drift (ffroliva#726).

Now raises FlowHostMigratedError naming the host AND the way forward (--project,
which every migrated path already requires). On labs a missing CTA still reports as
drift, because there it genuinely is - pinned by a test so the migrated branch
cannot swallow the failure mode it was carved out of. A third test pins that the
cascade still anchors on add_2, so if anyone re-anchors it on `add` the branch is
revisited rather than silently kept.

The safety here is GUARDS, not selectors, and guards are what a port relaxes. The
measured fact now sits beside the constant: `add`, never `add_2`, with the surface
counts and why a mat-icon twin would not help.

Watched red first:
  RuntimeError: Could not find 'New project' CTA on Flow gallery. URL: https://flow.google.com/?hl=en
then 3 passed.

Verified: 4046 passed, 92% coverage, pyright 0 errors, ruff clean, doc links,
hygiene 1031 files, website mirror.

Refs ffroliva#730
@ffroliva
ffroliva deleted the docs/credit-shortfall-not-empty-wallet branch October 22, 2026 19:14
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