Deferred P3 findings from the #63 connector review rounds (PRs #77, #78). None blocks merge; all are message-quality or test-strength items.
Claude Code connector (#77, src/connectors/claude-code.ts)
- The "keeps answers per run" test does not pin the leak it was added for: run 2 also emits an assistant event. Make run 2 a bare
{"type":"result","subtype":"success"} and expect "Claude Code returned an empty answer."
sawResult/model clear only via finish(); when the runner fails first (non-zero exit, timeout, limits, cancel) they survive into the next run and skew the diagnostic ("returned an empty answer" instead of "exited without a result"). Cleanest: a per-run reset() the runner calls, or a stateless connector — apply the same to the Codex connector.
- "Claude Code rejected model " reads "rejected model unknown" in exactly its own case, because the model name comes from
system/init, which never arrives for an invalid alias. Carry the requested model without mutating in spawnSpec, or drop it from the message.
Product note (not a defect): claude-code:opus is offered with high/xhigh levels. The reviewer-side "Opus ≤ medium" rule is an agent-orchestration policy, not a product constraint; decide whether the tutor should mirror it.
Source: Opus fix-verification on #77 (089ff84) and #78 (574e65a → 820026d).
Deferred P3 findings from the #63 connector review rounds (PRs #77, #78). None blocks merge; all are message-quality or test-strength items.
Claude Code connector (#77,
src/connectors/claude-code.ts){"type":"result","subtype":"success"}and expect "Claude Code returned an empty answer."sawResult/modelclear only viafinish(); when the runner fails first (non-zero exit, timeout, limits, cancel) they survive into the next run and skew the diagnostic ("returned an empty answer" instead of "exited without a result"). Cleanest: a per-runreset()the runner calls, or a stateless connector — apply the same to the Codex connector.system/init, which never arrives for an invalid alias. Carry the requested model without mutating inspawnSpec, or drop it from the message.Product note (not a defect):
claude-code:opusis offered withhigh/xhighlevels. The reviewer-side "Opus ≤ medium" rule is an agent-orchestration policy, not a product constraint; decide whether the tutor should mirror it.Source: Opus fix-verification on #77 (089ff84) and #78 (574e65a → 820026d).