basquetWi + New ticket
agent-ops OPS-108

nudge_pending_since consumed on decide, not on confirmed exec: an aborted escalation can shut all four triggers

Done high mcmonitor-context-cc

Busy path sets nudge_pending_since on abrss_busy; tick() clears it in the idle branch when result['escalate'] is true. But it is cleared on DECIDE, not on a confirmed exec. If the exec aborts (pane not at prompt, tmux failure, execute() timeout) the flag is gone and the escalation tier can never re-fire for that nudge. Combined with the busy-path cooldown this can close all four triggers at once, leaving a nudged agent that saved its durables sitting above the cap with nothing scheduled to compact it - the exact failure the escalation tier exists to prevent. Fix direction: re-arm on abort, or move the clear to keystroke_sent confirmation. Interacts with OPS-107 (commanded compacts not landing) - if the compact silently fails the flag is already consumed. mem:project_monitor_context_venus_actuator.md

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Questions

No questions.

Activity

  • wi-cli-venus created · 2w ago
  • wi-cli-venus commented · 2w ago
    Interacts with the new IDLE_COMPACT_COOLDOWN_S (OPS-111): escalation is deliberately NOT exempt from the cooldown, so an aborted escalation now also has to wait out 20min on top of the consume-on-decide problem. Re-arming on abort matters more after that change, not less.
  • wi-cli-venus commented · 1w ago
    2026-08-09 monitor-context-cc: third and fourth field confirmations, this is not theoretical. pm-llmmsgsrv-cc lost to CC's native auto-compact three times now (2026-08-07 06:17, 2026-08-08 ~08:48, 2026-08-09 04:13:54). The 04:13:54 case is the cleanest trace: idle_compact dispatched 04:08:52, abr:ss delivered, wait_begin, idle_streak_reset at 04:09:38, then wait_timeout + skip_compact_abrss_timeout at 04:13:54 - 'abr:ss never held idle 30s within 300s, refusing to force /compact'. Refusal is correct in isolation (never compact an unpersisted agent) but nothing re-arms, so the agent sat at 86.4%/216k with its own UI reading '0% until auto-compact' and no live escalation outstanding. The uncovered window is worst exactly when ctx is highest. Related new item OPS-116 (the unsubmitted-prompt-text cause that keeps idle-confirm from ever holding 30s).
  • wi-cli-venus commented · 1w ago
    Fixed in tick.py v4.64 (sh.git 72b059d), 2026-08-09. nudge_pending_since is no longer consumed at decision time. Replaced with a retry ladder: escalation_attempts + escalation_last_ts columns on agent_state, ESCALATION_RETRY_S=900s backoff, ESCALATION_MAX_ATTEMPTS=3. An attempt is stamped (not the flag cleared), which keeps the anti-loop property the old design was reaching for - at most one attempt per 15min, not one per 30s tick - while an abort now costs a retry instead of the agent's whole coverage. Flag clears on a CONFIRMED compact (existing >=20pt-drop path, extended to zero the counters) or on exhaustion. Exhaustion calls check_escalation_exhausted(): clears the flag and DMs Elazar, because an agent whose escalation failed 3x is the uncovered case. Alert suppressed when another tier (prefetch/hard cap) is compacting the agent that same tick - the escalation failed but the agent is not uncovered. Verified against a DB copy: fresh nudge escalates; 2min-old attempt blocked by backoff; 20min-old attempt escalates again; 3 attempts -> exhausted, flag cleared, 1 alert in the uncovered case and 0 when prefetch covers it. Live dry-run clean across the roster. Ordered first ahead of OPS-121 deliberately: this is the blast-radius reducer that turns every abort path - OPS-121 included - from permanent uncoverage into a retry.
  • wi-cli-venus completed · 1w ago
    Shipped tick.py v4.64 (sh.git 72b059d). Retry ladder with backoff replaces the decision-time consume; verified across four state cases plus a live dry-run.
bug
2w ago by wi-cli-venus
1w ago
2026-08-09 04:51