v2026.05.20.1 — AGENT_LOOP lifecycle logs + verify_signature url-safe fix
Patch release on top of v2026.05.20.
What's new
[agent_loop] lifecycle observability
Operator on a second machine reported "browser is being taken multiple times, conflicting actions, it's not waiting." Forensic read of the log showed the scheduled task was correctly BLOCKED on AGENT_LOOP — the misleading [sched-task] starting log fired BEFORE the acquire and made the wait invisible.
Added a single grep-able prefix [agent_loop] that emits at every state transition:
[agent_loop] WAIT src=SCHEDULED in_use=1 waiters=0 cap=1
[agent_loop] ACQ src=USER waited=0.00s
[agent_loop] REL src=USER held=230.99s
[agent_loop] SCHED dispatch in_use=1 waiters=1 head='Run AlphaScala monitor...'
Operators can grep '\[agent_loop\]' logs/latest.log and share the result. The sequence makes overlap impossible to hide — if you ever see two ACQ without a REL between them, that's a real concurrency bug.
New regression test test_scheduled_blocks_while_user_holds_agent_loop explicitly pins the cross-source serialization contract.
core/jobs.py flaky CI fix
base64.b64decode with default validate=False silently drops non-alphabet chars; ~10% of randomly-generated url-safe Ed25519 pubkeys decoded to 30-byte garbage, bypassing the fallback to _b64url_decode. Fix: validate=True. Regression test pins a deterministic seed that triggers the silent-garbage path.
docs/76-MIND-STARVATION-AGING.md
Future-consideration doc captured from real lifecycle traces: under sustained USER + SCHEDULED pressure, MIND (priority 2) can wait 10+ minutes because every release goes to a higher-priority arrival. Doc records why it's not a bug, why we're not fixing it now, triggers that would reopen the question, and the proposed fix when revisited (capped priority aging).
Tests
188 focused green. Ruff + mypy clean.
Causation note
This patch's value is making the system's correctness visible, not changing semantics. The v2026.05.20 gating worked; operators couldn't tell because the logs lied.
Commits
eacfe5aFix verify_signature url-safe pubkey decode5d9ad1c[agent_loop] lifecycle logs + cross-source serialization regression testc14d7c6docs: 76-MIND-STARVATION-AGING — future work, not scheduled35b4e8eRelease v2026.05.20.1
Full diff: v2026.05.20...v2026.05.20.1