organic-os v0.5.4 - the loop is visible again
Two bugs found by diagnosing a live instance that ran unattended for twelve days. Both are the same failure in different clothes: the loop worked, and the operator could not tell.
- The approvals queue could go stale. queue.md is a derived file, and only the CLI refreshed it, so any skill calling set_status directly left it frozen. On the instance in question it had been wrong for six days: it still listed briefs as pending that had already been approved, drafted, and published to WordPress. Reading it, you would conclude nothing was moving. It now refreshes on every status change, best-effort, so a bookkeeping refresh can never block or roll back a real state transition.
- Notifications could be skipped in silence. Sending was described in skill prose as a three-step dance - check whether it was sent, send it, mark it sent - and prose steps get missed. On the same instance every item read as never notified while the channel was reachable the entire time. approval.notify_pending now sends and marks in one call: an item is marked only after the send succeeds, so a failure is retried on the next run instead of vanishing. Sending twice is impossible; losing a send is no longer silent.
A working system that cannot show its work is indistinguishable from a broken one. That is the bug this release fixes.
440 tests, 9 audit checks, 8 gate probes, CI green.