Adds A6 (fn-oracle.sh) and A7 (reconcile.sh) of the wake/heartbeat canon
(EPIC #892, W5), building on merged W2/W3/W4 via their public APIs only
(store.sh/ack.sh/detector.sh untouched).
A6 fn-oracle.sh — synthetic-canary FN-oracle (§4 vector: FN-rate=0; §7 res5).
Injects a KNOWN delta at the SOURCE boundary, drives the pipeline through the
detector's public poll-once (a black box), and renders its verdict SOLELY from
the terminal store cursor (did a CONSUMED ack cover the canary's observed_seq
within the per-class SLO?). Off-domain / detector-independent: it never reads a
detector hash-file or self-report, so a detector that silently DROPS changes —
including a fully-disabled one at a perfect 0-wake rate — FAILS the oracle
(the §4/A8 false-negative-blindspot killer). Runs in its own isolated XDG
namespace, never the operator's live queue. No invented SLO (design law):
--slo-seconds is required.
A7 reconcile.sh — source-parity reconciler (§4/G3).
(i) source-coverage PARITY INVENTORY first: a declared source not covered by
any watch, a dangling reference, an empty lane, or a required_sources
omission FLAGS — an omitted source cannot make the §4 vector pass
vacuously (not silently green).
(ii) periodic full reconcile: enumerate each covered source's current state vs
observed_seq/inbox => 0 unaccounted; any gap FLAGS. Handles the W4-ratified
division (detector first-seen-baseline does NOT wake) by ENUMERATING
pre-existing/startup state into the durable store; inbox-reflected state is
accounted (no double-enumeration). Fail-loud (G2a) on adapter error.
RED-FIRST tests (wired into test:framework-shell), shellcheck clean:
test-wake-fn-oracle.sh O1 healthy FN-rate=0; O2 disabled detector -> FN-DETECTED
at perfect no-op; O3 CONSUMED-but-late -> FN; O4 off-domain verdict; O5 SLO required.
test-wake-reconcile.sh R1 complete inventory; R2 omitted-source vacuous-pass
prevented; R3 required_sources omission; R4 dangling; R5/R6 pre-existing ->
flagged + enumerated -> re-run 0; R7 inbox-accounted no-double; R8 G2a fail-loud.
manifest.txt version 0.3.0 -> 0.4.0 + inventory (schema range untouched).
Operator-agnostic (XDG/env only; no operator paths/names/hosts/secrets).
Part of #892
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0158NZqN2n2ymKFeJAZ4GUCb