Files
crossbar/docs/plans/v2.1/README.md
T

2.3 KiB

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.