You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 53c52e7
Browse filesBrowse the repository at this point in the historyBrowse files
* feat: sub-agent headline tail-keep + bounded stall detection (T2 intelligence quality)
Headline channel (B1):
- extractSummaryInfo keeps the TAIL of over-cap answers (leading …):
verdicts, recommendations, and next actions live at the end of a
report — the old head cut dropped exactly the conclusions
- truncateTailWithLen helper; original rune count and summary_truncated
semantics unchanged; delegate_tasks description states the new contract
- legacy head-keep pins updated to the tail-keep contract
Stall detection (B2):
- hints escalate instead of resetting: per-fingerprint milestone doubles
(3→6→12→…), later hints marked 'again' — a hint-resistant loop gets
progressively fewer interruptions instead of 27 identical hints
- bg_status/bg_output polling is bounded rather than exempt: 3× threshold
(9 identical polls) fires a poll-specific hint (check bg_list, read
bg_output, move on) — a pinned dead job id can no longer burn the
whole iteration budget silently
Pinned RED-first in internal/loop/stall_escalation_test.go and
cmd/odek/headline_tail_test.go. internal/loop and full cmd/odek green
under -race.
* fix: close review findings — partial-marker detection under tail-keep, milestone lifecycle
- PartialSummaryReason matches budget markers with Contains instead of
HasPrefix: tail-kept over-cap summaries lose their leading bytes, so a
budget-killed run was misclassified as success (HIGH, judge round 2)
- toolStallMilestones reset at run start and dropped alongside
fingerprints on error/eviction — long-lived engines no longer inherit
escalated milestones across runs (MAJOR, judge round 1)
- bg-poll hints use the milestone mechanism with an accurate poll count
instead of doubling the counter (reported 18 polls after 9)
internal/loop and full cmd/odek green under -race.
return`Spawn sub-agent processes for independent sub-tasks. Each child has a fresh context — put everything it needs in goal/context. Children never prompt for approvals (denials are listed). Trust never increases downward. Depth is capped.
208
208
209
209
Result delivery — two channels per sub-agent:
210
-
- Headline: the sub-agent's final answer, capped at ~2000 characters. Treat it as a status summary; a trailing … means it was cut.
210
+
- Headline: the sub-agent's final answer, capped at ~2000 characters keeping the END (verdicts, next actions) — a leading … marks the cut.
211
211
- Artifacts: validated file deliverables (id, type, size, one-line summary). text/* ≤32 KB is inlined; fetch the rest with artifact_read(id). For artifact-heavy work, set guidance to write a flat file in your artifact dir and keep the final answer to a short headline.`
"⚠️ You polled %q with identical arguments %d times with no state change%s. The job may be stuck or the id wrong: check bg_list for valid ids, read bg_output for the job's progress, or move on.",
"⚠️ You called %q with identical arguments %d times (possibly interleaved with other calls) with no new information. Change approach: vary the arguments, switch to a different tool, or move on to the next step — repeating the same call will not produce a different result.",
3558
-
toolName, e.toolRepeatCounts[fp])
3610
+
"⚠️ You called %q with identical arguments %d times (possibly interleaved with other calls) with no new information%s. Change approach: vary the arguments, switch to a different tool, or move on to the next step — repeating the same call will not produce a different result.",
0 commit comments