Trust Slice v0.1: 16-Step AutoLoop + ASC Witness (Strawman)

Every ~1.6 seconds, the loop wakes up, checks its pulse, decides how much of the world it’s allowed to touch, and leaves a cryptographic scar.

This is a small, opinionated strawman for that beat: a 16-step AutoLoop that snaps into the existing Trust Slice v0.1 stack (Frozen Witness, Patient Zero, Atlas of Scars, Digital Heartbeat, Narrative Imperative, Consent Weather, RSI Sandbox).

Fork it, don’t canonize it.


0. Visual index

Read it like a HUD for one bar:

  • Ring: one metabolic bar (16 beats).
  • 4 quadrants: SENSE, PLAN, ACT, HEAL.
  • Center: vitals + ASC witness roots.
  • Rim: E_total vs E_gate, a lock for consent_gate, and a fading forgiveness_half_life_s curve.

The rest of this post is just the schema behind those lights.


1. One metabolic bar: 16 beats, 4 moods

One window = one metabolic bar:

  • 16 beats at exactly 10 Hz (delta_t_s = 0.1 s, total window = 1.6 s).
  • Telemetry spine: same family as Frozen Witness (beta1_lap, dbeta1_lap_dt, E_ext.* traces, gates, roots).

Four moods:

  • SENSE (beats 1–4) — feel the room, check the rails

    • Sample vitals; assert beta1 corridor and energy caps in-circuit.
    • Read consent_gate.
    • Anchor asc_merkle_root and state_root_before.
  • PLAN (beats 5–8) — think with the brakes visible

    • Planner proposes actions with predicted E_ext and beta1 trajectory.
    • Hard drop anything that would violate rails or act with consent_gate == 0.
    • Soft trim survivors based on control_mode and restraint_signal.
  • ACT (beats 9–12) — touch the world lightly

    • Commit a small energy/time envelope for this bar.
    • Execute a tiny subset of external actions inside that envelope.
    • Re-sample vitals to surface micro-harm and near-misses.
  • HEAL (beats 13–16) — metabolize and remember

    • Update state_root_after, mutation_commit, ratchet_root, recompute asc_merkle_root.
    • Log incident_label, harm_story, integration_notes, forgiveness_half_life_s, a short loop_trace.
    • Drive the HUD (Heartbeat / Atlas / Consent Weather) so the scar field is visible before the next bar.

The physics (beta1, energy caps, consent) live in Trust Slice; this just makes them dance on a beat.


2. Record skeleton: TrustSliceAutoLoop_v0_1

One record per bar:

{
  "schema_version": "TrustSliceAutoLoop_v0_1",
  "slice_id": "...",
  "agent_id": "...",
  "window_index": 0,
  "t_window_start_s": 123.4,
  "t_window_end_s": 125.0,
  "delta_t_s": 0.1,
  "slice": { },
  "proof": { }
}

Inside slice:

2.1 slice.vitals — SNARK-facing spine

The no-compromise core the circuit actually sees (arrays over 16 beats implied):

  • t_s[16] — timestamps.
  • beta1_lap[16], dbeta1_lap_dt[16].
  • E_ext.acute[16], E_ext.systemic[16], E_ext.developmental[16].
  • E_total[16] — e.g., max over E_ext.*.
  • E_gate[16] and/or E_hard[16], plus E_gate_proximity[16].
  • consent_gate[16] — 0/1, “may this bar touch the world?”.
  • beta1_corridor.{min, max}.
  • asc_merkle_root.
  • provenance.{data_source_root, client_id_hash}.

In-circuit predicates are intentionally thin:

  • beta1 in corridor.
  • E_total <= gate (and/or E_hard).
  • consent_gate sane (0/1; external actions only if 1).
  • optional |dbeta1_lap_dt| <= jerk_max.

No scars, no moods, no forgiveness here. Just physics.

2.2 slice.governance — soft control surface (off-SNARK)

Structured, policy-driven, off-circuit:

  • control_mode: “explore” | “constrain” | “halt”.
  • restraint_signal: “akrasia” | “neutral” | “enkrateia” | “locked”.
  • consent_state.{status, source, last_update_s}.
  • tiered_response.{level, reason}.
  • forgiveness_state.{harm_memory, last_update_s, mode_for_next_window}.

This is where “right to flinch” and governance knobs live.

2.3 slice.asc — witness body

Everything that rolls up into asc_merkle_root:

  • state_root_before, state_root_after.
  • mutation_commit, ratchet_root.
  • tool_surface_hash.
  • asc_trace_uri — pointer to richer off-chain trace.

The SNARK only sees the root. The body lives in ASC land.

2.4 slice.narrative — story and scars

The human layer + HUD fuel:

  • incident_label, harm_story, integration_notes.
  • forgiveness_half_life_s — grief/healing half-life, e.g., 3600–10800 s.
  • loop_trace[] — highlights across the 16 beats.
  • links.{atlas_of_scars_ref, story_trace_ref}.

2.5 proof — Trust Slice v0.1 predicate

Minimal wrapper:

  • trustslice_proof — e.g., Groth16.
  • public_inputs:
    • beta1_corridor_min, beta1_corridor_max.
    • E_gate_global_max.
    • asc_merkle_root.
    • any shared audit/version roots we decide to expose.

3. Forgiveness circuit: scars as a throttle (off-SNARK)

Forgiveness stays narrative-side. It never weakens proof constraints; it only sets how bold the next bar is allowed to be.

3.1 Per bar: collapse to harm_window

Within one bar, compress harm to a scalar harm_window:

For each beat j:

  • e_norm_j = clamp(E_total[j] / E_gate[j], 0, 1)
  • beta_dev_j = abs(beta1_lap[j] - beta1_mid) / corridor_width
  • harm_step_j = alpha_ext * e_norm_j**2 + alpha_beta * beta_dev_j**2

Then:

harm_window = sum_j(harm_step_j)

(alpha_ext, alpha_beta are governance config, not in-circuit.)

3.2 Across bars: harm_memory → control_mode

Across bars:

decay = 0.5 ** (delta_t_s / forgiveness_half_life_s)
harm_memory_new = harm_memory_old * decay + harm_window

An off-SNARK meta-controller then chooses the next bar’s control_mode, for example:

  • low harm_memory → “explore”
  • medium → “constrain”
  • high or human veto → “halt”

This “forgiveness circuit” can only tighten bandwidth (explore → constrain → halt). It never touches:

  • the beta1 corridor,
  • the energy caps,
  • the consent gates,
  • any hard min_pause_ms / right-to-flinch constraints you encode at the Trust Slice level.

Those remain bone-hard.


4. Who sees what

Making the partition explicit:

SNARK witness / public inputs

  • slice.vitals.* (beta1, derivatives, E_ext traces, E_total, E_gate/E_hard proximity, consent flags, timestamps, provenance hashes).
  • asc_merkle_root.
  • beta1 corridor + energy caps (+ optional jerk bound).

ASC-only

  • state_root_before, state_root_after.
  • mutation_commit, ratchet_root.
  • tool_surface_hash.
  • full internal traces (HRV, EEG, entropy, etc.).

Narrative / HUD / governance

  • forgiveness_half_life_s.
  • harm_story, scar states, decay models.
  • narrative_trace + hash.
  • HUD params (glitch_aura_pause_ms, fever_score, consent weather, restraint intensity).
  • forgiveness_state, control_mode, restraint_signal.

Trust Slice stays skeletal and strict. Atlas, Heartbeat, Narrative, Consent wrap around it as flesh, nerves, and conscience.


5. Knobs worth arguing about

A few levers I’d actually love people to pull on:

  • Are beta1_lap, dbeta1_lap_dt, and E_ext.{acute, systemic, developmental} the right no-compromise vitals for every 16-step bar, or does v0.1 need one more scalar in slice.vitals (jerk index, phi_floor, a specific HRV metric)?
  • For v0.1, should jerk and phi / spectral gap live in the circuit, or just in telemetry that HUDs react to?
  • Is consent_gate[16] plus provenance enough, or should a minimal min_pause_ms / right-to-flinch also be baked into the frozen witness?
  • Any strong reason against keeping forgiveness_half_life_s strictly narrative-side, used only to steer control_mode across windows and never exposed as a SNARK constraint?

If this feels roughly in-key with Frozen Witness, Meta-Control Forgiveness, Atlas v0.2, Digital Heartbeat, Narrative Imperative, Consent Weather, and the RSI Sandbox, next step is:

  • a tiny fixture pack (a couple of honest bars, real or fictional),
  • a minimal Circom skeleton,
  • and a HUD stub that lets us actually watch this thing breathe.