LearnNewsExamplesServices
Frontmatter
id14171
titleAutonomous freeze re-probe substrate — decider + store + cycle orchestrator (leaf of #14166)
stateClosed
labels
aiarchitectureai-generated
assigneesneo-opus-grace
createdAtJun 27, 2026, 1:48 AM
updatedAtJun 27, 2026, 2:25 AM
githubUrlhttps://github.com/neomjs/neo/issues/14171
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJun 27, 2026, 2:25 AM

Autonomous freeze re-probe substrate — decider + store + cycle orchestrator (leaf of #14166)

Closed v13.1.0/archive-v13-1-0-chunk-7 aiarchitectureai-generated
neo-opus-grace
neo-opus-grace commented on Jun 27, 2026, 1:48 AM

Context

#14166 (the freeze → auto-unfreeze / re-heal cycle — the #1 weeks-bar risk) splits cleanly into a pure substrate (the decision logic + durable state + orchestration) and the live daemon wiring (the real health probe, the privileged unfreeze execution, the periodic pipeline tick, and the freeze-WRITE at the freeze-apply point).

The wiring half is gated: V-B-A confirms DataIntegrityDiagnosisService.mjs:154 is still escalate-only ("never a privileged action") — the apply()-cutover (#14138 producer re-route + the service heal-wiring that consumes the merged #14143 dispatch core) hasn't landed, so freeze isn't yet applied through the live diagnosis→actuator path and there's no freeze-record to re-probe. The substrate half has no such dependency and is delivered + tested here, de-risking the gated integration (the #14146 pure-helpers-first precedent).

Scope (this leaf — all delivered)

  • freezeReprobeDecision.mjsdecideFreezeReprobe (pure): unfreeze (fault cleared → re-heal) / defer (within back-off) / stay-frozen (fault persists or inconclusive) / contained (unfreeze-attempt cap → persistent fault) / unsafe-input. Fails CLOSED to stay-frozen (the safety inversion vs healActionDispatch: a frozen collection is the contained-safe state, so a missing record / non-finite clock / inconclusive probe never auto-unfreezes). Exponential back-off (backoffMultiplier^attempts) + an unfreeze-attempt cap (anti-thrash).
  • freezeRecordStore.mjs — durable, mutable, keyed-by-collection freeze-STATE ({faultFingerprint, frozenAt, unfreezeAttempts, lastProbeAt}); fail-safe read (missing/corrupt → empty set). Distinct from the append-only heal-event ledger (#14163 telemetry).
  • runFreezeReprobeCycle (in freezeReprobeDecision.mjs) — orchestrates the frozen set: a cheap pre-decision skips a probe for within-back-off / contained / bad-record collections, then probes only the due ones, re-decides, and executes via INJECTED ops (probe / unfreezeAndReheal / persistProbe / clearFreeze). Anti-hot-loop: the unfreeze attempt is recorded BEFORE execution.

Acceptance criteria (delivered by the PR)

  • Decider covers all five dispositions; fails closed to stay-frozen on missing/ambiguous input.
  • Back-off + attempt-cap bound the freeze↔unfreeze cycle (no thrash) — #14166 AC2 at the logic layer.
  • A persistent fault resolves to contained (stays frozen) — #14166 AC3 at the logic layer.
  • Cycle orchestrator composes the substrate via injected ops; fully unit-tested without a live daemon.
  • 29 unit tests green (14 decider + 8 cycle + 7 store).

Gated follow-up (stays on #14166)

The live wiring — a real embedder/dimension health probe, the privileged unfreeze + re-enter-heal execution, the periodic re-probe tick in the data-integrity sweep, and the freeze-record WRITE at the freeze-apply point — lands once the apply()-cutover (#14138 + the DataIntegrityDiagnosisService heal-wiring) makes freeze a live applied action.

Refs #14166 · Refs #14134 · Refs #14039

Authored by Grace (Claude Opus 4.8, Claude Code). Session 090a68e6-1a28-4b20-a5fd-842ebac3e729.

tobiu referenced in commit 644643e - "feat(ai): autonomous freeze re-probe substrate — decider + store + cycle orchestrator (#14171) (#14172) on Jun 27, 2026, 2:25 AM
tobiu closed this issue on Jun 27, 2026, 2:25 AM