This commit is contained in:
127
docs/plans/OPUS-4-6-ROUTE-AUDIT.md
Normal file
127
docs/plans/OPUS-4-6-ROUTE-AUDIT.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# Opus 4.6 dated-snapshot route audit
|
||||
|
||||
**Opened:** 2026-04-21 (Sprint 10 Day-2, per PM ratification at
|
||||
`PM-Waggle-OS/decisions/2026-04-21-sprint-10-task-1.2-ratified-opus46-deferred.md`).
|
||||
**Policy:** **trigger on first caller trip** — do NOT audit proactively
|
||||
in Sprint 10.
|
||||
**Related:** Sprint 10 Task 1.2 (Sonnet route repair, commit `a09831e`
|
||||
merge), migration note at `ops/litellm/README.md` §Sprint-10-Task-1.2.
|
||||
|
||||
---
|
||||
|
||||
## Why this file exists
|
||||
|
||||
Sprint 10 Task 1.2 repaired the `claude-sonnet-4-6` LiteLLM alias which
|
||||
had been routing to a dated snapshot (`-20250514`) that was never a
|
||||
valid Claude API ID for the Sonnet 4.6 family. Investigation of the
|
||||
config showed the adjacent `claude-opus-4-6` alias uses the same
|
||||
dated-snapshot pattern (`-20250610`) and may have the same latent
|
||||
defect.
|
||||
|
||||
Per Anthropic's live models overview (re-fetched 2026-04-21), the Opus
|
||||
4.6 family Claude API ID is `claude-opus-4-6` (plain alias, no dated
|
||||
suffix). The `-20250610` suffix is not explicitly listed in the docs
|
||||
for the 4.6 family — it could be a valid but unlisted snapshot, or it
|
||||
could be a broken legacy entry that nobody's called in a while.
|
||||
|
||||
PM policy (2026-04-21): **no speculative audit.** The potential defect
|
||||
affects only callers that explicitly call `claude-opus-4-6`, and Sprint
|
||||
10 doesn't exercise that path (judges run `claude-opus-4-7` + Sonnet +
|
||||
tri-vendor). Opening a speculative audit PR in Sprint 10 distracts from
|
||||
the locked operational queue. Instead, this ticket tracks the concern
|
||||
and authorizes a targeted audit if/when a runtime caller trips on it.
|
||||
|
||||
## Caller map (as of 2026-04-21 commit `6cf7554`)
|
||||
|
||||
`claude-opus-4-6` or `claude-opus-4.6` is referenced in 22 files
|
||||
(grep result, waggle-os repo only — zero hits in hive-mind):
|
||||
|
||||
- **Config + docs:** `litellm-config.yaml`, `ops/litellm/README.md`,
|
||||
`benchmarks/harness/config/models.json`, `docs/specs/PROMPT-ASSEMBLER-V4.md`,
|
||||
`EVAL-RESULTS-V5.md`.
|
||||
- **Runtime routes:** `packages/server/src/local/routes/providers.ts`,
|
||||
`packages/server/src/local/routes/anthropic-proxy.ts`,
|
||||
`packages/server/src/local/routes/litellm.ts`.
|
||||
- **Frontend:** `apps/web/src/lib/providers.ts`,
|
||||
`apps/web/src/components/os/apps/ChatWindowInstance.tsx`,
|
||||
`apps/web/src/lib/spawn-agent-helpers.test.ts`.
|
||||
- **Agent + eval:** `packages/agent/src/cost-tracker.ts`,
|
||||
`packages/agent/tests/eval/prompt-assembler-v5-eval.ts`,
|
||||
`packages/agent/tests/eval/prompt-assembler-eval.ts`,
|
||||
`packages/agent/tests/model-tier.test.ts`,
|
||||
`packages/server/tests/local-mode.test.ts`.
|
||||
- **Scripts + historical:**
|
||||
`scripts/evolution-hypothesis{,-resume,-rejudge-gemini}.mjs`,
|
||||
`docs/.evolution-hypothesis-2026-04-14T08-04-57/03-judge-scores.json`.
|
||||
- **Tauri artifacts:** `app/src-tauri/resources/service.js{,.map}`
|
||||
(build outputs — not source).
|
||||
|
||||
Most of these are configuration, UI model-picker strings, or
|
||||
historical eval artifacts. Active runtime paths are:
|
||||
|
||||
- `packages/server/src/local/routes/providers.ts`
|
||||
- `packages/server/src/local/routes/anthropic-proxy.ts`
|
||||
- `packages/server/src/local/routes/litellm.ts`
|
||||
- `packages/agent/src/cost-tracker.ts`
|
||||
- `apps/web/src/lib/providers.ts` + consumer `ChatWindowInstance.tsx`
|
||||
|
||||
If a user in the UI picks "Claude Opus 4.6" in the model selector and
|
||||
runs a chat turn, the call flows UI → providers.ts → Anthropic
|
||||
route → LiteLLM → `anthropic/claude-opus-4-6-20250610`. That's the
|
||||
trip surface.
|
||||
|
||||
## Trigger condition
|
||||
|
||||
Open a PR with title
|
||||
> `fix(litellm): audit claude-opus-4-6 dated-snapshot route`
|
||||
|
||||
when any of the following happen:
|
||||
|
||||
1. A user reports a 404 / model_not_found when picking Opus 4.6 in
|
||||
the Waggle UI model picker, OR
|
||||
2. A test or eval harness run fails with the LiteLLM error signature
|
||||
`litellm.NotFoundError: AnthropicException - ... model:
|
||||
claude-opus-4-6-20250610`, OR
|
||||
3. An operational readiness check (e.g., pre-Stage-2 full-suite
|
||||
vitest) explicitly exercises the Opus 4.6 route and returns the
|
||||
same signature.
|
||||
|
||||
## Fix shape (if triggered)
|
||||
|
||||
Should mirror the Sprint 10 Task 1.2 Sonnet repair:
|
||||
|
||||
1. Re-fetch Anthropic docs. Confirm the current live Claude API ID
|
||||
for Opus 4.6 (expected: plain `claude-opus-4-6`; the `-20250610`
|
||||
dated snapshot is expected to be either valid-but-decommissioned
|
||||
or invented).
|
||||
2. Edit `litellm-config.yaml` — repoint the primary
|
||||
`claude-opus-4-6` alias + the legacy alias
|
||||
`anthropic/claude-opus-4.6` to the plain `anthropic/claude-opus-4-6`.
|
||||
3. Add a section to `ops/litellm/README.md` under the existing
|
||||
Sprint-10 Task-1.2 header documenting the triggering call, the
|
||||
date, and the verification docs URL.
|
||||
4. Extend `scripts/smoke-sonnet-route.mjs` into
|
||||
`scripts/smoke-anthropic-route.mjs` (parameterized by model) OR
|
||||
add an Opus-specific smoke script — pick the cheaper path based
|
||||
on whether other Anthropic routes are expected to need similar
|
||||
audits (Haiku 4.5 is already correctly dated per the current
|
||||
config).
|
||||
5. Commit + PR with commit message referencing this doc as root-cause
|
||||
memo and the Sprint 10 Task 1.2 migration note as the repair
|
||||
template.
|
||||
|
||||
## Non-actions (per PM policy)
|
||||
|
||||
- Do NOT pre-audit. Do NOT open a Sprint 10 PR for this.
|
||||
- Do NOT remove the `claude-opus-4-6` alias from the config — a
|
||||
UI-picker reference still exists. If broken, repair is right; removal
|
||||
is scope-creep.
|
||||
- Do NOT expand the audit to other Anthropic aliases without a specific
|
||||
caller-trip signal. `claude-haiku-4-5-20251001` for example has a
|
||||
valid dated suffix per the public docs.
|
||||
|
||||
---
|
||||
|
||||
*Ticket stays open until either the trigger fires (fix) or until the
|
||||
Opus 4.6 alias is retired from all callers (close as obsolete). No
|
||||
forced Sprint slot.*
|
||||
Reference in New Issue
Block a user