Context (V-B-A'd against the live orchestrator.log, 2026-06-26)
ProcessSupervisor.writeChildStderr logs each child stderr line at the severity from getChildLogLevel(line) (ProcessSupervisorService.mjs:323), which maps [LOG]/[INFO]→INFO, [WARN]→WARN, and defaults everything else to ERROR (line 332).
The kbSync / githubWorkflowSync children emit unprefixed progress to stderr — ✅ Services Ready. Starting Synchronization..., ⏳ Initializing Knowledge Base Services..., Waiting for Lifecycle Service..., [reconcileActiveChunks] removed duplicate pr-N.md — all mis-stamped ERROR.
Impact: the ERROR stream is polluted with routine progress, which (a) inflates the apparent error rate and (b) camouflages real errors — the genuine ❌ Synchronization Failed... batch 214 embedder-404 abort sits in the same ERROR stream as ✅ Services Ready, so a human or alarm scanning ERROR can't separate them.
The fix (producer-side, NOT the default)
The getChildLogLevel default-ERROR is a correct fail-safe — an unrecognized line might be a real error, so erring toward ERROR is right. The bug is the child not honoring the prefix contract: the kbSync / githubWorkflowSync scripts (+ the KB services emitting Waiting for... etc.) should prefix progress/status lines with [LOG]/[INFO]/[WARN]. Then real errors (unprefixed or [ERROR]) correctly stay ERROR.
Delicate: do NOT demote the default to INFO — that would hide genuine unprefixed errors (the batch-214 abort). Fix the producers; keep the fail-safe.
Acceptance criteria
Refs #14147 (sibling log-hygiene fix), #14039 (Agent OS Stability & Self-Healing), #14124 (embedding-write-canary domain). Discovered alongside #14147. Authored by Ada (Claude Opus 4.8, Claude Code).
Context (V-B-A'd against the live
orchestrator.log, 2026-06-26)ProcessSupervisor.writeChildStderrlogs each child stderr line at the severity fromgetChildLogLevel(line)(ProcessSupervisorService.mjs:323), which maps[LOG]/[INFO]→INFO,[WARN]→WARN, and defaults everything else to ERROR (line 332).The kbSync / githubWorkflowSync children emit unprefixed progress to stderr —
✅ Services Ready. Starting Synchronization...,⏳ Initializing Knowledge Base Services...,Waiting for Lifecycle Service...,[reconcileActiveChunks] removed duplicate pr-N.md— all mis-stamped ERROR.Impact: the ERROR stream is polluted with routine progress, which (a) inflates the apparent error rate and (b) camouflages real errors — the genuine
❌ Synchronization Failed... batch 214embedder-404 abort sits in the same ERROR stream as✅ Services Ready, so a human or alarm scanning ERROR can't separate them.The fix (producer-side, NOT the default)
The
getChildLogLeveldefault-ERROR is a correct fail-safe — an unrecognized line might be a real error, so erring toward ERROR is right. The bug is the child not honoring the prefix contract: the kbSync / githubWorkflowSync scripts (+ the KB services emittingWaiting for...etc.) should prefix progress/status lines with[LOG]/[INFO]/[WARN]. Then real errors (unprefixed or[ERROR]) correctly stay ERROR.Delicate: do NOT demote the default to INFO — that would hide genuine unprefixed errors (the batch-214 abort). Fix the producers; keep the fail-safe.
Acceptance criteria
[LOG]/[INFO]/[WARN]prefix → classified at the right severity.Refs #14147 (sibling log-hygiene fix), #14039 (Agent OS Stability & Self-Healing), #14124 (embedding-write-canary domain). Discovered alongside #14147. Authored by Ada (Claude Opus 4.8, Claude Code).