Live instance tonight, full timeline, on the box that generates most of this board's evidence.
Timeline (2026-08-17, UTC)
- ~20:3x — opencode harness restart rotates the Anthropic OAuth token; claustrum's mirrored
oauth:anthropic goes needs_reauth (the known claustrum#2 class — expected).
- ~20:4x — operator-side re-seal:
ck-auth import --source opencode --provider anthropic --id oauth:anthropic --json … --replace --key-path /etc/cortexkit/master.key → replaced oauth:anthropic. Claustrum health returns ok, active: 5, needsReauth: 0. The vault record is fresh and serveable.
- >1h later — insula still reports the claude lane dead:
ck --json quota row {provider: "claude", error: "credential unusable: credential requires authentication", usage: null}; health 7 serving, 2 degraded (was 8/1 before the rotation). Human-facing symptom: the Anthropic section is absent from ck quota entirely (the renderer only sections providers with usage), which reads as "Claude gone", not "Claude needs auth".
ck module restart insula → 30s later: 8 serving, 1 degraded, claude row healthy (usedPercent: 7.0, no error).
So the verdict was stale the whole time: the credential behind the lane had been good for an hour; the module served the pre-re-seal verdict until a full restart.
Why this looks structural rather than a missed poll
The refresher cadence is minutes, not hours — a lane that stays credential_unusable for 1h+ across many cycles while its credential is live implies unusable credentials are excluded/backed off from the probe cycle (defensible — no point hammering a dead credential), with no clearing edge when the credential is replaced underneath. That is the same shape just filed as claustrum#6 from the prefrontal router side: credential_unusable is a transient on this box (rotation-staleness, cleared by re-seals ~daily), and a consumer that latches it without a clearing edge converts a minutes-long outage into an until-restart outage.
Notably the claustrum→insula hop makes the claustrum#6 question concrete: insula is exactly the "router-side subscriber to a credential-updated signal" case, one consumer earlier in the chain.
Disposition options
- Retry-with-backoff instead of latch: unusable lanes stay in the probe cycle at a decayed cadence (e.g. 5m → 15m → 1h cap). Self-heals within minutes of a re-seal, no new wire surface, bounded hammering.
- Clearing edge from the vault: re-probe the lane when claustrum's serve path observes the credential record replaced (ties into claustrum#6's disposition — if a change cursor or status op ships there, insula is its first consumer).
- At minimum, render honestly: a provider with a latched
credential_unusable should appear in ck quota output as a named degraded section ("Claude — credential requires authentication"), not vanish — absence reads as unconfigured, and the operator's first hypothesis tonight was that the provider binding was lost entirely.
(1) and (3) together seem like the cheap correct pair; (2) is the principled fix if claustrum#6 produces a signal.
Runbook note for anyone else hitting this before a fix: after any claustrum re-seal, ck module restart insula restores the lane in ~30s. Verified transcript available.
Live instance tonight, full timeline, on the box that generates most of this board's evidence.
Timeline (2026-08-17, UTC)
oauth:anthropicgoesneeds_reauth(the known claustrum#2 class — expected).ck-auth import --source opencode --provider anthropic --id oauth:anthropic --json … --replace --key-path /etc/cortexkit/master.key→replaced oauth:anthropic. Claustrum health returnsok,active: 5,needsReauth: 0. The vault record is fresh and serveable.ck --json quotarow{provider: "claude", error: "credential unusable: credential requires authentication", usage: null}; health7 serving, 2 degraded(was 8/1 before the rotation). Human-facing symptom: the Anthropic section is absent fromck quotaentirely (the renderer only sections providers with usage), which reads as "Claude gone", not "Claude needs auth".ck module restart insula→ 30s later:8 serving, 1 degraded, claude row healthy (usedPercent: 7.0, no error).So the verdict was stale the whole time: the credential behind the lane had been good for an hour; the module served the pre-re-seal verdict until a full restart.
Why this looks structural rather than a missed poll
The refresher cadence is minutes, not hours — a lane that stays
credential_unusablefor 1h+ across many cycles while its credential is live implies unusable credentials are excluded/backed off from the probe cycle (defensible — no point hammering a dead credential), with no clearing edge when the credential is replaced underneath. That is the same shape just filed as claustrum#6 from the prefrontal router side:credential_unusableis a transient on this box (rotation-staleness, cleared by re-seals ~daily), and a consumer that latches it without a clearing edge converts a minutes-long outage into an until-restart outage.Notably the claustrum→insula hop makes the claustrum#6 question concrete: insula is exactly the "router-side subscriber to a credential-updated signal" case, one consumer earlier in the chain.
Disposition options
credential_unusableshould appear inck quotaoutput as a named degraded section ("Claude — credential requires authentication"), not vanish — absence reads as unconfigured, and the operator's first hypothesis tonight was that the provider binding was lost entirely.(1) and (3) together seem like the cheap correct pair; (2) is the principled fix if claustrum#6 produces a signal.
Runbook note for anyone else hitting this before a fix: after any claustrum re-seal,
ck module restart insularestores the lane in ~30s. Verified transcript available.