Skip to content

The sandbox is deterministic, so a cell can clear disagreement the record says is never fully cleared #641

Description

@NGL321
@failure    A cell here can drive its prediction error to zero, and `CONTEXT.md`'s **disagreement** says that state is unreachable — *never fully cleared*. The sandbox's dynamics are exactly reproducible: perfect uniform-density cylinders, an exact frictionloss constant per puck, no break-in, no speed dependence, and a deterministic solver, so repeated identical pushes from an identical snapshot give bit-identical outcomes. Real pucks give 1.6–12.5% translation std with at least three modes and per-action noise varying by an order of magnitude. So the architecture is motivated by dynamics as the site of epistemic pressure while being proved on a world whose dynamics are fully learnable in principle, and a success here may be the exploitation of reducible structure that no real dynamics offers. Recognisable as a cell whose residual falls to the arithmetic floor and stays there with no irreducible component — the state ADR-0007's *tolerated, not represented* floor is written on the assumption of.
@cutoff     uncut
@discovered docs/research/018-sandbox-citations.md §2.6, minted in #609's grilling session

The statement this problem is drawn from

docs/research/018-sandbox-citations.md §2.6 — "The sandbox is more deterministic than the phenomenon it stands for" states it, quantifies it against the hardware literature, and filed it in the register the citation pass had available:

"The spec makes reproducibility a feature, and for debugging it plainly is one. But it means the sandbox offers a deterministic dynamics-learning problem while being motivated by dynamics as the site of epistemic pressure. A cell here can in principle drive its prediction error to zero; a cell in the real version of this world provably cannot. Given CONTEXT.md's disagreement — 'never fully cleared' — a world in which it can be fully cleared is a weak proving ground for that claim."

It called this "an unstated consequence rather than a defect", which was the right register for a citation pass and is why it sat unminted: only a grilling session mints a problem (ADR-0029). This is that session. §2.6 also notes the gap widens rather than narrows at ballistic speeds, where the real phenomenon's variability is higher.

One of §2.6's two remedies was adopted, and it is the one that does not fix this

§2.6 offered two ways to buy back uncertainty without giving up snapshot/restore:

  • (a) Resample per-puck frictionloss from a narrow distribution at each reset()"a genuinely unmodellable component and a genuinely inferable-from-contact one." Not adopted. This is the one that would supply irreducible error.
  • (b) Make frictionloss a function of position. Adopted, and it is now CONTEXT.md's Friction field: "a property of the world, not a random draw — so the same push at two places gives two outcomes while snapshot and restore stay bit-exact." Its Avoid list carries stochastic friction and domain randomisation deliberately.

So the variety landed and the irreducibility did not. (b) makes the same push at two places differ; it does not stop a cell that has learned the field from predicting either one exactly.

Why this is uncut, and what would cut it

No rig on main offers a metric this failure fires on. The four checked: floor_split.py offers wander_over_named_floors and wander_share_of_floor; driven_settling.py offers draining_effective_rank, draining_effective_rank_opening, draining_edge_share and tau_wander_over_loop. None reports a residual or a prediction error against an irreducible component, which is the quantity this problem is about.

Writing a measurement bar on a metric that does not exist would put a cutoff nothing can fire on into the register — "the register's second loud section wearing a plainer disguise", in docs/agents/registers.md's own words. So this is admitted loud instead. What would cut it is a rig reporting a cell's residual against an irreducible floor; a later grilling session can cut this the day one exists.

The cost of fixing it, which is why it is not simply a task

Bit-exact snapshot and restore is load-bearing for this project's central instrument. ADR-0021's paired counterfactual — a perturbed run minus an unperturbed run forked from a common state — depends on it, and the ADR notes the sandbox supports the fork "with no special mode". B43 (#609) has since built the sensorimotor dependence measure on that same fork, and established that the determinism is already shaping what can be measured: a dependence measure conditioned on the situation reads its ceiling by construction and is vacuous, which is why B43 marginalises the situation instead and makes the configuration sweep the noise model.

So per-reset() resampling is not free even in the form §2.6 proposed: it must be seeded and replayable or the fork dies with it. That is a real design cost, and it is the reason this is a problem carrying a cutoff rather than a chore.

What this is not

Not the architecture-side question. Whether the rule or the parameterisation wants a stochastic element — to break the degeneracy B59 (#631) found an objective cannot rank, or to make B42 (#605)'s collapse cost something — is B65 (#639) on map #532, and is in scope there. This problem is about the world, which #532 rules out of scope by name ("Enriching the sandbox").

Not the noisy-TV failure. 018's §on Burda et al. records that this sandbox's determinism designs out the entropy-seeking pathology — "pucks are deterministic rigid bodies, there is no noise channel" — and points at §2.6 for the overshoot. Any remedy re-opens that exposure and should say so.

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

    register:problemAn open problem: a stateable failure, deliberately unresolved, carrying a cutoff

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions