44 lines
2.8 KiB
Markdown
44 lines
2.8 KiB
Markdown
# v2.1 implementation plan: fixes found while running v2
|
|
|
|
> **For the implementing model:** do not work from this file. The owner gives you one task file at
|
|
> a time. This file is the index for the owner and the reviewer.
|
|
|
|
**Goal:** close the two defects and one gap found while v2 ran, without new features.
|
|
|
|
- **01-cancel-record** — a delivered response is never recorded as a 499; cancellation is what
|
|
the reverse proxy observed. Found 2026-09-25 by the intermittent `Errors:2` in
|
|
`TestQueueFullIs503`; verified with a diagnostic build; the given
|
|
`internal/proxy/served_test.go` reproduces it on every run.
|
|
- **02-props-loaded-only** — on a router only `status.value == "loaded"` counts as loaded; the
|
|
poller asks `/props?model=X` only for those (the router autoloads a model named in that query)
|
|
and keeps the answers per model (`Status.Models`, `PerSlotCtxFor`); the guard and the hosts view
|
|
use them. Facts verified against straylight's router on 2026-09-25. Given tests:
|
|
`health/props_router_test.go`, `proxy/ctxguard_router_test.go`, `admin/admin_models_test.go`.
|
|
- ~~03-timing-margins~~ — done by the owner directly (test-only work, no implementer task): the
|
|
remaining ordering sleeps in `limiter_test.go`, `proxy_test.go` and `cancel_test.go` now wait on
|
|
limiter state (`Queued`/`InFlight`); the one sleep left is a deliberate lower bound. Five clean
|
|
`-race` runs of both packages except the 499 defect task 01 fixes.
|
|
|
|
**How this plan was made:** acceptance tests first; no reference implementation. The given test
|
|
for task 01 was run against the v2 tree (fails six of six) and against a throwaway fix that
|
|
follows the task's rule (passes four full package runs with the v1 cancel tests); the throwaway
|
|
was discarded.
|
|
|
|
## Global constraints
|
|
|
|
- Everything in `AGENTS.md`. Branch `v2.1` from `master` after v2 merges. One task, one fresh
|
|
OpenCode session, one commit. Given files are copied and never edited.
|
|
|
|
## Changes during the run
|
|
|
|
- 2026-09-25, task 01, first session: 8 minutes of reading, then it tried to read Go's
|
|
`httputil/reverseproxy.go` from the nix store, the sandbox refused, and it ended the turn
|
|
without a commit — the eighth refusal-ending of the day. Model fault, but the want was
|
|
legitimate: the task now states the `ReverseProxy` facts it was after and says the standard
|
|
library cannot be read from the sandbox. Restarted.
|
|
- 2026-09-25, task 02: the given `ctxguard_router_test.go` asserts `X-Crossbar-Ctx: moved:small>big`;
|
|
v2's code emitted `moved:small><big`. Owner fault twice over: the v2 task 02 text wrote the
|
|
separator as `<from>>><to>` (ambiguous), and no v2 given test asserted the header, so the
|
|
misreading passed. The example in that task (`moved:small>big`) is the intended format; Ornith
|
|
changed `movedHeader` to match and said so. Accepted as part of task 02.
|