Attribute in-session review lanes

Task 12299 · Done · Coder · created · updated

Epic 12251, child C7. Needs C3a (final decisions) and C3c (RoutingPanel). ## Original requirement (verbatim, epic ask 5 part) "Minor/Standard keep in-session lanes whose model/agent the dispatch prompt names from the routing decision and telemetry attributes." ## Settled decisions R9: the coder's dispatch prompt names the model/agent each in-session review lane must use, from the routing decision's review configuration; run telemetry records the lane, model and agent actually used. PRD risk: in-session lanes can only use models their runner's harness supports — filter to the author's harness. ## Approach (Architect §4.7) - `dispatch_compose/task_prompt._start_here_block` (`:49`) gains a "Review lanes:" line from the final decision's `router_pick.review.lanes`, filtered to the author's harness: Claude author → Claude tiers; another built-in → its own provider's tiers; SDK agent → no line. Lanes follow `docs/policies/code-review-policy.md:47-54`, Standard until a tier is declared. - `telemetry_publish` payload gains `review_lanes: [{lane, provider, model, agent_id|null}]`, validated as a sub-model at `routes/agent/fleet_observe.py:359`, other keys preserved. `portfolio/fleet/runner-charter.md` Finishing section names the field (one line). - RoutingPanel gains a "Review lanes used" section reading the task's `run_telemetry` rows, display names only. Credentials & reach: - Dev UI (lanes on the panel): `me/jaah/debug/main/operator-login` and `org/console/dev-login` — verified. - API tests: the worktree only — verified. Out of scope: changing account quota semantics or spillover; training a model from scratch; routing analysis personas before coder tasks have data; public marketplace billing; any ledger metric definition (owned by the outcome ledger epic). MUST NOT change the code-review policy's tier definitions. No blind children (C6a). Done means: - AC13 In-session lanes attributable. → Verify: an API test asserts a Minor/Standard coder dispatch prompt names the review lane model/agent from the decision. On dev, the run telemetry for a finished coder task shows the lane and model used. - Tests: harness filtering (Claude / other built-in / SDK agent → no line); telemetry with `review_lanes` validates, malformed sub-model → 422, unknown other keys preserved; panel renders display names, wraps at 390px. - Gates (AC16): `./dc check quick` green; changed-area suites green; merge lane `./dc check full` green.

Outcome

Coder dispatch now names in-session review lanes (model/subagent on author's harness, Standard default); telemetry validates review_lanes; Routing tab shows lanes used. Quick gate green, merged #7642 (b5837f4) via lane; 390px check clean. Deploy superseded; dev AC13 oracle unverified. Memory: used mem-31277; proposed 0.

Pull request

Artifacts

Activity

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