Files
orca/docs
Neil 77c60cc2ce fix(runtime): decide Antigravity readiness by where the caret sits, not what the screen says
The detector has been written five times and each version read the ready screen's text:
a line starting with the model name, an account row carrying an `@`, the banner as an
ordering anchor. The captured transcripts refute all three. Antigravity paints a
block-glyph logo down the left margin, so the identity, model and path rows share their
physical lines with it and none of them starts a line; `Gemini API key` has no `@` and
`AGY_CLI_HIDE_ACCOUNT_INFO=1` deletes the row outright; and the banner is printed once and
never reprinted. On real output the shipped rule was inverted — it refused a genuinely
ready screen and accepted the live `/model` picker, whose own model rows do start lines.

Replaying the captures through the main-process emulator at the grid they were recorded on
shows what actually separates the two. The composer is a framed box — a pane-wide rule,
then a row holding only the caret — and every dialog is drawn underneath it. On a ready
screen nothing follows the caret row; on the picker nine dialog rows do, and on the palette
seven. So the rule is positional and reads no product text at all: the last line with
content trims to exactly `>`, and the line above it is the composer's rule.

A bare `>` alone is not enough, which an earlier reading of the evidence got wrong: `/model`
is drawn in place below the composer, so the idle composer's own bare `>` is still on screen
while the picker owns it. The rule above the caret is what excludes that.

Unknowns fail closed. The four uncaptured dialogs, and accept-edits and plan mode (where the
composer carries a mode banner rather than a bare caret), all report not ready — a stalled
wait rather than a prompt typed into a live dialog.

Also fixes two replay faults that made the fixtures answer the wrong question: the pane now
replays at the capture's recorded geometry, since Antigravity positions rows with absolute
cursor moves and an 80-column emulator rebuilds a screen nobody saw; and the replay stops at
the CLI's own teardown, which every capture contains because the recorder had to stop `agy`
to end it. The full bytes still get one case, pinning that a pane whose `agy` has exited is
refused.

The hand-written five-line ready screen the first five attempts were tuned on is replaced by
the real capture's shape, and the fixture asserting a caret above the model row is deleted:
no real screen prints one.

The emulator route was evaluated first and is documented in the evidence file. It is the
right long-term layer but is not on the readiness path today — the only call site wired to it
runs solely when the tail is empty — and moving it there changes readiness for every agent.
2026-09-11 01:26:13 -07:00
..
2026-09-10 18:29:07 +00:00
2026-08-28 00:59:21 -07:00