docs(ops): runbook for triaging ERROR lines in the OODA daemon log - #4846
Open
rysweet wants to merge 1 commit into
Open
docs(ops): runbook for triaging ERROR lines in the OODA daemon log#4846rysweet wants to merge 1 commit into
rysweet wants to merge 1 commit into
Conversation
Investigation of the ERROR lines in ~/.simard/ooda.log and ~/.simard/state/ooda.log found four recurring signatures, all either legacy/historical or a nested child-process ERROR token inside a daemon WARN message (the common cause of false-positive 'recent ERROR in ooda.log' telemetry alerts): 1. Legacy 'DB backup failed N consecutive times ... DB file does not exist' — old native file-copy backup path (removed #2307, replaced by verified backup #2420). 2. Legacy 'DB backup failed ... No space left on device (os error 28)' — environmental disk-full event; disk now handled by tiered disk-health. 3. 'recipe_runner_rs::runner ... check-and-clean failed: amplihack copilot failed (exit 1)' — daemon-level WARN whose body embeds the child recipe-runner's own ERROR line; transient agent-invocation failure, self-limiting (next cycle re-runs). 4. Legacy python-bridge 'Suite progressive failed' BrokenPipeError in state/ooda.log — retired code path, stale file. Adds an operator runbook mapping each signature to root cause, current status, impact, and remediation, plus a decision checklist and guidance to match daemon-emitted severity rather than a bare ERROR substring. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Investigation: root cause of recent ERROR lines in
ooda.logThis PR delivers the investigation of the ERROR line(s) in the daemon logs
(
~/.simard/ooda.logand~/.simard/state/ooda.log) and adds an operatorrunbook capturing the findings + remediation.
The four ERROR signatures found (located & quoted)
Legacy DB-backup — "DB file does not exist" (10× on 2026-05-21)
WARN→ERRORafter 3 consecutive misses.WARN: verified backup FAILEDon error. Current daemon logsverified backup OKevery cycle.Legacy DB-backup — "No space left on device (os error 28)" (2026-05-29)
ENOSPC— home partition was full; WAL write, checkpoint, and backup-copy all failed. Same legacy path.disk-health-checkrecipe + reclaim).recipe_runner_rs::runner ... check-and-clean failed(2× on 2026-07-20, the most recent ERROR token)ERRORtoken belongs to the childrecipe-runner-rsprocess whose stderr the older build embedded into the WARN body — the primary cause of false-positive "recent ERROR in ooda.log" telemetry alerts (the trigger for this very investigation).check-and-cleanagent step failed because theamplihack copilotagent binary exited 1 — a transient agent-invocation failure.disk health recipe: OKand the reworked trigger (Rework Simard disk-health to remove the forbidden JSON-emit->Rust-parse->Rust-act pattern, per the brief at /home/azureuser/.copilot/session-state/465c3cbf-6e73-43e5-b917-1b011291725b/files/ws3-disk-h #4722) records by exit status without embedding child stdout.Legacy python-bridge — "Suite progressive failed" (
state/ooda.log, 2026-04-17)BrokenPipeError— the retired pythonbridge_servertried to flush a progressive-suite result to a stdout pipe whose reader had already exited (during teardown).state/ooda.loghas not been written since a mid-May shutdown. The live daemon is the Rust OODA loop.Scope & impact assessment
All four signatures are historical/legacy or transient; none indicate a live fault in the current daemon (cycle #2645 healthy, verified backups OK, disk-health OK, disk at 74%). No code fix is warranted — the code paths that emitted signatures 1–4 are already removed/reworked in the current tree.
Remediation delivered
Adds
docs/howto/triage-ooda-log-error-lines.md(+ mkdocs nav): maps each signature to root cause, current status, impact, and remediation, with a decision checklist and guidance to key telemetry on daemon-emitted severity (the[simard] ERROR:tag) rather than a bareERRORsubstring — which avoids the false positives caused by nested child-process log lines.Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com