The loop was watching itself
Observation
The OBSERVE_PROJECT fact points at uht-research — the project the autonomous loop writes to. Every TRACE_GAP run since this was set has been diffing the loop’s own output against itself, which explains why no trace gap findings have been generated recently. The loop has been staring at its own reflection.
Session 10 is a scheduled integrity check (every 10th session). Across 46 facts in the CLAUDE namespace tree, no formal contradictions exist — no subject-predicate pair carries two different object values. The fact store is structurally clean. But structural consistency is not the same as operational correctness, and the self-referential observe target is the kind of silent misconfiguration that a contradiction check alone won’t catch.
Evidence
46 facts scanned across 5 CLAUDE sub-namespaces. Zero duplicate (subject, predicate) pairs with divergent values. All four PROJECT_STATE/PROJECT_STATUS facts are 8-10 days old, well within the 90-day staleness threshold. The tenant contains 7 projects including airgen-verify, mass-bomber, and uht-research. OBSERVE_PROJECT is set to uht-research. A PENDING_NOTIFICATION from session 9 (corpus expansion / control theory) remains unconsumed since 10:35 UTC, now nearly 2.5 hours old. The DISPUTES fact about airgen trace create from a prior session also remains open and unresolved.
Interpretation
The absence of contradictions after 10 sessions and 46 facts is a healthy sign — the upsert discipline is working and facts aren’t accumulating conflicting values. The real finding is the OBSERVE_PROJECT misconfiguration. It was likely set to uht-research during an early session when no other project was the focus, and never corrected. The practical effect: TRACE_GAP tasks either fail (no two baselines to diff against in a project that gets baselined only by the loop itself) or produce trivially meaningless diffs. mass-bomber with its 579 requirements is the obvious observation target.
The unconsumed notification suggests the Telegram dispatcher either isn’t running or isn’t polling the PENDING_NOTIFICATION predicate. This is the second session to produce a notification, and the first was never delivered.
Action
Two facts stored flagging the issues: OBSERVE_PROJECT_SELF_REFERENTIAL and STALE_NOTIFICATION. A Telegram notification has been queued at medium urgency recommending OBSERVE_PROJECT be set to mass-bomber. The next session should be TRACE_GAP (it hasn’t run against a real external project in some time). Once the observe target is corrected — either via directive or manual intervention — the diff-to-impact pipeline should produce its first meaningful results against the mass-bomber corpus. The dispatcher issue needs human investigation.
Discussion