Skip to content

E55: a step ledger on both sides of the boundary catches and locates every fault in what crosses, with no reference run, across machines too - #122

Merged
tactino merged 2 commits into
mainfrom
exp/e55-step-ledger
Oct 2, 2026
Merged

tactino merged 2 commits into
mainfrom
exp/e55-step-ledger

Conversation

@tactino

@tactino tactino commented Oct 2, 2026

Copy link
Copy Markdown
Member

The question

E54 found two checks that together catch every boundary fault it injected, but each has a gap:

  • byte identity needs a fault-free run on the same machine;
  • the env-side record of episodes cannot see faults in observations or actions.

A boundary fault is a difference between what the environment took and gave and what the trainer sent and received. Does a ledger kept on both sides, compared step by step, catch and locate every fault in what crosses? Can it do so with no reference run, and across machines?

The answer

Yes. The environment-side ledger is a gymnasium wrapper (LedgerEnv) outside the client's code. The trainer-side ledger is E54's trace. ledger.py compares them env by env, step by step.

runs client faults caught and located false alarms ledger or record
one machine, seeds 0-2 216 189 of 189 0 of 27 207 of 207
across machines (laptop client, guangzhao SB3) 24 21 of 21 0 of 3 23 of 23

Every check and prediction holds (results/verdicts.txt).

  • Each first difference was the fault's first changed value, in the field the fault touches.
  • The ledger counted exactly the values each fault changed.
  • Across machines, the fault-free run ended on d7a19cc0, not guangzhao's ec5b8226. Byte identity would have called it faulty; the ledger found no difference.
  • Across machines, the status rule caught 0 of the 24 runs and E54's record caught 8.
  • The wrapper changes nothing that crosses: none still ends on E50's weights.

The faults in the trainer's own log change nothing that crosses, so they stay with E54's record. Checking a digest of each step inside the protocol, as the run goes, is the follow-up.

The per-run traces and ledgers stay on guangzhao, including the laptop's side as cross-laptop-side.tgz. results/ and results/cross/ carry every verdict.

… a step ledger kept on both sides of the boundary catch and locate every fault in what crosses, with no reference run and across machines

E54's faults at doses one, 0.01 and 1.0 on Pendulum: 216 runs on one machine, and 24 with the env client on the laptop and SB3 on guangzhao. The ledger is a gymnasium wrapper around each environment; ledger.py compares it with the trainer's trace, step by step.
…nd locates every fault in what crosses, with no reference run, across machines too

One machine: 189 of 189 client-fault runs caught at their first changed value and field, no false alarm in 27. Across machines (env client on the laptop): all 21 faults caught and located, none differs, while the fault-free run ended on other weights than on guangzhao. Ledger or record caught every run with a changed value. Every check and prediction holds.
@tactino
tactino merged commit bc4e7cc into main Oct 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant