Verify every provider lane live on dev

Task 8811 · Done · Coder · created · updated

## Original requirement (epic 8783, verbatim) > Review implementation of model provider interfaces: > > - Claude, Codex, Antigravity, Pi, ACP, > > Identify opportunity to unify, move more code from specific to common, make it more industry standard, more reliable. Do web research to potentially adopt a better architecture. > > Implement top ideas. Settled inputs: PRD (BA task 8784) and architecture (task 8785) — read them with `task_read` 8784 / 8785 and their `prd` / `architecture` artifacts. Decisions there are settled; realize them, do not reopen them. ## Scope — R7 / AC8 + AC4 live (architecture child V) **Requirement (PRD R7, verbatim):** No regression. Every provider lane still works end to end on dev. No code. Runs after every build child of this epic has merged (I1–I5 and the Antigravity ACP child); first confirm each merged (`task_search` children of 8783) — if any has not, stop and say so. 1. Confirm the last merge's **Jaah Deploy** on dev succeeded (GitHub). Sign in to `https://app.dev.jaah.ai` (credential `jaah/debug/main/operator-login`) and inventory accounts per AC8 lane (Settings › Accounts / Runners). 2. **Missing lane:** copy the account from main (`https://app.jaah.ai`, same credential) **through the console UI** (CLAUDE.md: operate Jaah only through the UI). If the UI cannot copy an account between control planes, that is a product gap: file a Task for it and sign the lane in on dev instead, where the operator's credential allows. An Antigravity OAuth lane may need a fresh sign-in against the ACP server's own token store anyway. 3. Run one task per lane on dev and record its task id. Per lane: the task settles; Audit › Sessions shows the row with a transcript and non-zero usage; where the lane supports questions, the task asks one (its body tells the agent to ask a trivial question through `AskUserQuestion`), the question shows once, and the answer is delivered. **"Nothing differs from before" baseline:** run the identical task on the same lane on **main** (`https://app.jaah.ai`, pre-change code; same credential). Compare the task page, the Sessions row and the Settings › Providers row side by side, with screenshots in the report. Antigravity's ACP gains are the only accepted difference. If main has no account for a lane, that lane's baseline is "not available" and the report says so. 4. **AC4 live, for both Antigravity oauth and api_key:** Settings › Providers shows both Antigravity switches ON by default; the Chat view streams normalised events (turns, tool calls); the task reaches its settled outcome; Audit › Sessions shows runtime ACP, a transcript and usage (if usage is unsupported per child A's measurement (c), say so); a steer sent from the chat view reaches the agent, where child A claimed steer; flip one switch OFF, observe a legacy launch, then restore it ON. If child A shipped the oauth pair `legacy_only` (infeasible path), verify the oauth lane runs legacy unchanged and cite A's follow-up task. 5. Any lane still without an account is reported "untested — no dev account" with a follow-up Task to add one. Never skip one silently. 6. A regression found → file a focused follow-up Task under epic 8783 naming the lane, task ids and evidence (do not fix it here). Per project instructions, also file a task with itemized UI suggestions for anything broken/inconvenient noticed while testing. 7. Settle `no_pr` (`no_code_needed`) with the per-lane evidence; the report lists task ids, screenshots and verdict per lane. Credentials & reach: Architecture §8 rows this child needs (verbatim): - AC4 / AC8 dev console (`https://app.dev.jaah.ai`) — `jaah/debug/main/operator-login` (operator, covers dev and main) — verified: `credential_get` succeeded; HTTPS 200 from `h4-2-gmind`. - AC8 copy-from-main (`https://app.jaah.ai`) — `jaah/debug/main/operator-login` — verified: `credential_get` succeeded; HTTPS 200 from `h4-2-gmind`. - AC4/AC8 Antigravity oauth + Gemini api_key accounts on dev — Dev org accounts (Settings › Accounts) — deferred — operator answer A2: "Not sure — child checks; copy from main if they don't exist" (child V). - AC8 other lanes' dev accounts (Claude sub/API/Bedrock, Codex, Gemini, DeepSeek, Pi, registry agent, SDK v2 agent) — Dev org accounts — deferred — same answer A2; child V inventories, copies, else "untested — no dev account" plus a follow-up. Note: `gmind/skynet/dev` resolves to a base URL that did not answer; use the operator credential above. Out of scope: From PRD §6 (verbatim) — do NOT touch: - **Do NOT** move Claude subscription (oauth) runs onto ACP, or change `Capabilities.runtime` for `claude` oauth (ADR-0167). - **Do NOT** delete the legacy terminal launch path (`fleet_launch`/`fleet_dispatch` exec lines, `answer_delivery` tmux paste, `ComposerTui`). It still serves Claude subscriptions and non-Linux nodes. - **Do NOT** redesign console pages (Settings › Providers, Brains roster, task page, Audit › Sessions). The only console delta is Antigravity runs gaining ACP chat/live-control views and their catalogue gap text. - **Do NOT** build ideas ranked below the top 3–5. File them (AC6). - Do NOT edit code or open a PR; do NOT operate Jaah through CLI/API/SQL — console UI only. Done means: **AC8 — Behaviour preserved, live on dev (R7, D6)** (PRD, verbatim). After the last PR merges and Jaah Deploy succeeds on dev, one real task per lane completes end to end. Lanes: - Claude subscription (legacy); - Claude API key (ACP); - Claude Jaah account / Bedrock (ACP); - Codex oauth; - Codex api_key; - Gemini (api_key, and the guided/oauth lane if a dev account exists); - DeepSeek api_key; - Antigravity oauth + api_key (AC4); - Pi api_key; - one ACP-registry agent; - one SDK v2 agent. Pass per lane: - The task reaches its settled outcome. - Audit › Sessions shows the session with a transcript and non-zero usage. - A question raised by the agent (where the lane supports it) shows once and its answer is delivered. - Nothing differs from before the change in the task page, Sessions row or Settings › Providers row, except Antigravity's gains. A lane with no account on dev is listed by name as "untested — no dev account", with a follow-up Task to add one. It is never silently skipped. → verify: in the dev console, for each lane: 1. Create a task bound to an account of that lane and Start it. 2. Watch the task page until it settles. 3. Open Audit › Sessions and confirm the row. 4. Record task ids per lane in the final report. **AC4 live steps 1–4** (PRD, verbatim): 1. Open the dev console (dev.jaah.ai). Create a task in a project, bound to an Antigravity account (oauth; then repeat with api_key), and Start it. 2. Observe the task page's Chat view streaming normalised events (turns, tool calls) and the task reaching its settled outcome. 3. Audit › Sessions shows the session with runtime ACP, a transcript and usage. 4. Send a steer from the chat view and observe the agent receive it. - Report has, per lane: task id on dev, task id on main (or "baseline not available"), side-by-side screenshots, verdict; every untested lane named with its follow-up task id.

Outcome

Lane check live on dev: no regression traced to epic 8783. Claude API key, Gemini key, DeepSeek, Pi and Antigravity oauth (legacy) settled. ACP transcript/usage gaps predate the epic (#8858, #8859). 6 lanes untested (no dev account, #8856). Echo SDK and Gemini oauth fail on dev and main too (#8860, #8857). Memory: proposed 1 recipe.

Artifacts

Activity

  • Draft
  • Ready
  • Runner started
  • Runner ended (done)