Skip to content

B74 (prototype): Why do TransportRule arms not reproduce, and what replicate discipline does this map need? #653

Description

@NGL321

Part of #532. Opened by B68 (#645) §4a, outside its branch table.

Question

Arms that run TransportRule do not reproduce, and the map's own numbers already disagree because of it. Find the source, and decide what discipline readings on this map must follow.

What is measured

B68 (#645) ran a three-run check — A and B identical invocations, C differing only by the construction-time matched-generic null — inside one process:

@100 @200
A vs B, transport ΔER 2.30e-02 ΔER 2.47e-01
A vs B, frozen (no rule at all) ΔER 2.60e-05 ΔER 2.19e-04
A vs C (construction-time null) 0.00e+00 0.00e+00
both vs replicate, separate process exact exact

So: the construction-time null is exonerated; an identical command in a separate process reproduces exactly; a second arm built inside one process does not; and the divergence is already present with nothing learning, at 2.6e-05, with TransportRule amplifying it roughly three orders in 200 ticks. agent.run resets the world with an explicit seed, so the stimulus stream is pinned per call — this is an execution-order effect on a trajectory sensitive at the last bit, not a loose seed.

Replicate spread at the horizon, |run − replicate|: the both arm is bit-exact through 5,000 and reads ΔER 3.3e-04 at 20,000; the transport arm is bit-exact through 2,000 and reads ΔER 1.78e-01 at 20,000.

Why it is not academic

The map's amended B62 (#635) entry quotes the transport arm at 5,000 as ER 3.1347 / q 0.0636 / 1.96 dimensions / aud-diff 0.5505. B68's run of the same command at the same rung reads 3.0024 / 0.0543 / 2.03 / 0.5313. Both are honest single runs of byte-identical trajectory code. One of B68's own claims — transport raises the rank above the frozen arm at 20,000 — is 0.203 against a 0.178 spread and does not clear it.

What to read

  1. The remaining untested difference. B68's C run took the null at construction only; b62_frozen.py takes it at every checkpoint. Whether a diagnostic that re-assembles three delta/G pairs per reading moves the trajectory it is measuring is the one candidate B68 did not close, and it is cheap to test.
  2. The source, on the frozen arm, where there is no rule to blame and the divergence is still 2.6e-05 by tick 100. Allocation-order effects on floating-point summation are the leading guess and are not verified; torch.set_num_threads(1) is already set, and index_add_ appears in restriction.py and tick.py.
  3. Whether it is fixable at all, and at what cost. A trajectory with a positive Lyapunov exponent under TransportRule may not be worth pinning; if so the decision is a discipline rather than a fix.

What to decide

  • The standing constraint's final form. B68 proposed: a difference between two arms that run TransportRule is quoted against a replicate of one of them at the same rung, or it is not quoted — and where a rung reproduces bit-exactly, say so.
  • Whether existing map entries need re-reading. Several rest on single-run differences between TransportRule-carrying arms.

Named risks

Plan, don't do — a prototype may build and read, but the deliverable is the discipline, not a patched rig.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    wayfinder:prototypeWayfinder ticket: resolved by building something cheap to react to (HITL)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions