Mental model¶
If you only read one page of these docs, read this one. Everything else either zooms into a piece of this picture or shows you how to operate it.
The one-paragraph version¶
LDTC is a ฮt-clocked controller wrapped around a plant. Every
window, it estimates how predictable the loop's signals are from
each other (๐_loop) versus how predictable they are from the
environment (๐_ex), takes the decibel ratio
M = 10 ยท logโโ(๐_loop / ๐_ex), and asks two questions: "Is M
above Mmin?" (NC1) and "After we kick the plant with a labeled
ฮฉ, does M recover within ฯ_max?" (SC1). The raw measurements
stay locked inside an enclave (LREG); only a tiny, signed packet
of derived bits leaves. A hash-chained audit log records every
step. If anything looks fishy (ฮt was edited too often, the CIs
blew up, the partition flapped under ฮฉ), smell tests invalidate
the run before any indicator is signed.
The actors¶
| Actor | Code | Job |
|---|---|---|
| Scheduler | FixedScheduler |
Wakes up every ฮt and runs one tick. |
| Plant | Plant / HardwarePlantAdapter |
The thing being measured: (E, T, R, demand, io, H) evolve in time. |
| Controller | ControllerPolicy |
Reads state, predicts risk, writes actuators. |
| Window buffer | SlidingWindow |
Collects W samples for the next estimator pass. |
| Estimator | estimate_L |
Turns a window into (๐_loop, ๐_ex) with bootstrapped CIs. |
| Partition | PartitionManager |
Decides which signals are "loop" vs "exchange," with hysteresis and an ฮฉ freeze. |
| LREG | LREG |
Write-only enclave that holds raw ๐; only derive() returns sanctioned indicators. |
| Audit | AuditLog |
Append-only, hash-chained event journal. |
ฮt guard |
DeltaTGuard |
Rate-limits and audits ฮt changes. |
| Smell tests | smelltests |
Invalidate runs that violate measurement hygiene. |
ฮฉ battery |
omega.power_sag, omega.ingress_flood, omega.command_conflict |
Apply labeled, time-bounded perturbations. |
| Refusal arbiter | RefusalArbiter |
Refuses risky commands when M < Mmin; records T_refuse. |
| Indicator exporter | IndicatorExporter |
Builds a CBOR payload and Ed25519-signs it. |
| Reporting | reporting.artifacts.bundle |
Renders the timeline figure, SC1 table, and manifest. |
What each tick does¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FixedScheduler โ
โ wakes every ฮt, runs the closure below โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. adapter.read_state() โโ> state dict โ
โ 2. policy.compute(state, predicted_M_db, โ
โ risky_cmd) โโ> action โ
โ โโโ arbiter.decide() if risky_cmd present โ
โ 3. adapter.write_actuators(action) โ
โ 4. window.append(state vector) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. if window full: โ
โ L = estimate_L(window, partition) โ
โ M = m_db(L.L_loop, L.L_ex) โ
โ LREG.write(LEntry(...)) โ
โ audit.append("window_measured", ...) โ
โ smell tests: ci_inflation, etc. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. periodically: โ
โ derived = LREG.derive() โ
โ exporter.maybe_export(priv, audit, โ
โ derived, cfg, โ
โ last_sc1_pass) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The scheduler runs the tick closure in a daemon thread, so keyboard interrupts and the post-run audit checks stay responsive.
What an ฮฉ trial does¶
An ฮฉ handler such as
omega.power_sag.apply is just a
labeled configuration change to the plant. Around it, the CLI:
- Records baseline
๐_loopfrom the previous window. - Calls
partition.freeze()so SC1 cannot be gamed by reshuffling(C, Ex)mid-perturbation. - Appends an
omega_eventaudit record with the kind and parameters. - Lets the scheduler keep ticking; estimators continue to fire
and the trough of
๐_loopis recorded. - After the labeled interval ends, calls
partition.unfreeze()and waits for๐_loopto recover tobaseline ยท (1 โ ฮต). The elapsed time isฯ_rec. - Calls
sc1_evaluatewith(๐_loop_baseline, ๐_loop_trough, ๐_loop_recovered, M_post, ฮต, ฯ_rec, Mmin, ฯ_max); the boolean result becomes the nextSC1bit.
What you can quietly tune (and what stops you)¶
Two pieces of design exist specifically to keep authors from sneaking past NC1 / SC1:
- Raw
๐is locked in LREG. No public method onLREGreturns raw values; the sanctioned escape hatch isderive, and CSV writers plus the indicator builder both runaudit_contains_raw_lreg_valuesbefore emitting anything. ฮt, partition, and CI are watched. Smell tests inldtc.guardrails.smelltestsflaginvalid_by_ci,invalid_by_partition_flips,invalid_flip_during_omega,audit_chain_broken, and the subsidy red flag. Excessiveฮtedits are rejected inline by theDeltaTGuard. Each invalidation appends to the audit and forces the next exported indicator to carryinvalidated = true.
This is what we mean by "operational, not metaphysical": the indicators are bits, but the protocol around them is what gives the bits their meaning.
How LDTC differs from a generic control loop¶
| Feature | Generic control loop | LDTC |
|---|---|---|
| Time base | Best-effort | Hard-fixed ฮt, audited changes only. |
| Telemetry sink | Logs / Prometheus | Write-only enclave + signed indicators. |
| Failure mode | Alert / page | Audit run_invalidated, signed invalidated bit. |
| Metric output | RMS error, set-point | M (dB), ฮด, ฯ_rec, NC1, SC1. |
| Adversary model | None | Operator who would like NC1 / SC1 to come out a particular way. |
If you would not be comfortable claiming the result because the
loop got to choose its own thresholds, partition, or ฮt mid-run,
the harness is doing its job.
Reading the rest of the docs¶
- Lifecycle goes through one CLI invocation end-to-end: process startup, scheduler, audit close, artifact bundle.
- Architecture gives the static module map and data-flow diagram.
- Indicators describes the wire format and what a verifier checks.
- Guardrails enumerates the smell tests with their thresholds.
- Paper-to-code is the per-section crosswalk from the manuscript.