Filed from the geode project — a pi/proxy issue, not geode-specific.
Symptom
pi_rpc.py dispatches with read-only analysis/review personas (scout, reviewer) reach agent_end
(verdict=DONE) but write a near-empty <out>.answer.txt — only narration stubs like "Now let me write
the report." The actual report/verdict is never produced. Worker (edit/write) dispatches are unaffected
because their deliverable is the on-disk edit (a side effect), not the final message.
Root cause (traced from the raw event stream)
Under --thinking high, the model (qwen3.6-27b-q4-mtp-128k) routes essentially all substantive output
into the thinking channel and emits an almost-empty visible answer:
| assistantMessageEvent subtype |
count |
chars |
thinking_delta |
2,385 |
10,257 |
text_delta (visible answer) |
14 |
186 |
- The models final assistant message in
agent_end.messages is empty (reviewer) / a 56-char stub
(scout). So it is NOT merely a capture bug in pi_rpc.py (which only accumulates text_delta) — the
content is genuinely never emitted as an answer. The model "thinks" the report and then ends the turn
without "saying" it.
Proposed fix (upstream in pi / at the proxy — where this issue is tracked)
- Empty-output nudge (preferred). At
agent_end, if the final assistant visible text is empty/near-
empty while thinking was substantial, inject a follow-up turn: "You produced no visible output. Emit
your final answer now as a normal message, not reasoning." Re-run one turn, then settle.
- Server/proxy-level guard. Detect the same condition at the proxy and re-prompt before returning.
Client-side mitigations already available (geode side, not a fix here)
- Have analysis/review personas write their report to a file (side-effect deliverable) — mirrors why
workers never fail.
- Drop analysis/review dispatches to
--thinking medium so budget goes to the visible answer.
Evidence artifacts (geode repo): tmp/scout-audit.events.jsonl, tmp/review229c.events.jsonl.
Filed from the geode project — a pi/proxy issue, not geode-specific.
Symptom
pi_rpc.pydispatches with read-only analysis/review personas (scout, reviewer) reachagent_end(verdict=DONE) but write a near-empty
<out>.answer.txt— only narration stubs like "Now let me writethe report." The actual report/verdict is never produced. Worker (edit/write) dispatches are unaffected
because their deliverable is the on-disk edit (a side effect), not the final message.
Root cause (traced from the raw event stream)
Under
--thinking high, the model (qwen3.6-27b-q4-mtp-128k) routes essentially all substantive outputinto the thinking channel and emits an almost-empty visible answer:
thinking_deltatext_delta(visible answer)agent_end.messagesis empty (reviewer) / a 56-char stub(scout). So it is NOT merely a capture bug in
pi_rpc.py(which only accumulatestext_delta) — thecontent is genuinely never emitted as an answer. The model "thinks" the report and then ends the turn
without "saying" it.
Proposed fix (upstream in pi / at the proxy — where this issue is tracked)
agent_end, if the final assistant visible text is empty/near-empty while thinking was substantial, inject a follow-up turn: "You produced no visible output. Emit
your final answer now as a normal message, not reasoning." Re-run one turn, then settle.
Client-side mitigations already available (geode side, not a fix here)
workers never fail.
--thinking mediumso budget goes to the visible answer.Evidence artifacts (geode repo):
tmp/scout-audit.events.jsonl,tmp/review229c.events.jsonl.