UNI Universal Natural Intelligence

Wiki · Evidence & Verdicts

Lab-team review — hunt motor reachability fix: MERGED VERDICT **REJECT** (2026-07-19)

Evidence & Verdicts · docs/receipts/hunt_fix_lab_team_review_2026-07-19.md @ 44baf03d5041 (gen2-runtime) — opens the published snapshot ac338733bbba

How to read this page

Three ways to read this page. Precise is the document itself, exactly as it is written in the repository. Plain and Clear were written for this website to help you meet that document — they are about it. They are not it, and they are not evidence.

Eighty-seven dated pages: receipts, pre-registrations, handoffs, validation records and review verdicts. A receipt is written at the moment a piece of work was checked. It names what was claimed, the commit and the seed, what was actually run, and the outcome in one of a small set of controlled words. Then it names what the work did not achieve. That last part is what makes it a receipt rather than an announcement. A pre-registration is the same discipline run in advance: the conditions that would count as a pass and the conditions that would falsify the claim are written down before the run, so neither can be adjusted once the numbers arrive.

That is why so many small dated stubs are an audit trail rather than noise. No one of them is meant to be a good read. The value is in the sequence and in the dates, because you can watch a prediction be registered, then the run happen, then the verdict land — sometimes against the prediction. Pages here record a falsified result, a rejected fix, a retracted overclaim, and a green receipt that turned out not to be reproducible from the commit that carried it. A record that carried only successes would be worth a good deal less than this one.

A gentle way in is to read a pre-registration first, so the shape becomes familiar, then a result page, then one of the corrections. This section sits off the main navigation on purpose: it is the record you check the rest of the site against, not the place to begin.

What it is not: documentation, and not a summary. Nothing here has been tidied in hindsight. Every entry reads as of its date, a later entry may overturn an earlier one, and the presence of a page is not a claim that its result stood.

Your browser cannot switch reading levels, so the document itself is shown.

Precise — the source document

This is the document. Rendered from the repository at the commit above, with nothing rewritten for the web. A gate re-renders it on every deploy and fails the build if a single byte differs.

Protocol: ~/.claude/skills/lab-team-review.md (fork → break → repair → vote → RED). Step 1 halt rule invoked: Math-Breaker returned REJECT ⇒ MERGED VERDICT = REJECT, no matter what; the remaining four personas were not run, per the protocol's own instruction. Ship gate held: NO code was changed. viewer/body.js is untouched.


MERGED VERDICT: REJECT

Both candidate fixes rejected:

  • Fix 1 (bound huntTarget() to pursuit range) — fails the sign check. Under the measured world state (nearest prey 24.7–46.2 blocks) the bound returns null on every hunt, and the entityAtCrosshair(p, 4, …) fallback needs prey within 4 blocks. The outcome kernel p(o | s, :attack) stays a point mass on null. It cannot satisfy its own registered PASS condition (kills > 0).
  • Fix 2 (raise pursuit ceiling + step budget) — the food-hack in motor clothing. Pursuing 46 blocks puts search, approach, target-selection, pursuit, strike and collect inside JavaScript, reducing the brain's contribution to emitting one token when prey ≠ 0. Since preyDir is itself unbounded, prey ≠ 0 is nearly always true, so the learned policy collapses to one bit. That trips the proposal's own NO-GO clause and the FOOD-HACK precedent this project already withdrew a survival claim over.

The proposal's central causal claim was FALSE — and the repo falsifies it

The packet (written by me, the studio agent) asserted that unbounded selection and the d > 11 pursuit abort "were introduced together in ff57a5a". They were not. Independently re-verified against the repo after the review:

commit time what it contained
ff57a5a 2026-07-11 20:32 huntTarget() unbounded; approach loop i < 6; strike cap 4 swings; no d > 11
11013f7 2026-07-11 22:22 introduced both for (step < 14) and if (d > 11) break

The lab-side forage RED (2026-07-12, ~uni/.claude-evidence/forage_red/) records struck=10, struck=11, struck=14. Those counts are arithmetically impossible under ff57a5a's 4-swing cap, so that evidence was produced by 11013f7the version that already contained d > 11 — which also produced 19 confirmed killed=true.

Therefore the guard blamed as root cause was present in the code that hunted successfully. Unbounded-selection-plus-bounded-pursuit is demonstrably compatible with kills. It is not a sufficient explanation for the 2449/2449 zero-strike regression seven days later.

The real signal is the distance floor: across 2449 hunts bot.nearestEntity never once found an animal inside 24.7 blocks. That is an ecology/placement signature, not a code signature — prey density collapsed, animals despawned or wandered, the populator is not running, or the UNIs' own locomotion parked them off any prey-bearing biome. Shipping a motor fix against an unmeasured world variable would have violated LAB_PROTOCOL rule 1 (one cure at a time) before the first tick.

The finding neither the proposer nor the packet reasoned to

B is Dirichlet. For the prey-context state under u = :attack, with n consecutive null outcomes:

E[p(o = null | s, :attack)] = (α_null + n) / (Σα + n) → 1
deviation from certainty     = (Σα − α_null) / (Σα + n) = O(1/n)

At n = 2449 the posterior is within O(1/2449) of a degenerate point mass on "attack yields nothing." And by hard invariant 4 (monotonic decay), parameter-novelty W^attack → 0 over the same counts. So all three EFE terms now agree on never attacking again: pragmatic says null, epistemic says null is well-known, novelty has decayed to zero.

Consequence, and it is a trap: any RED run on this colony's inherited counts will false-FAIL arm B regardless of how correct the motor fix is. Recovery would need ~10³ food outcomes, which cannot accumulate because :attack is exactly what the poisoned posterior suppresses. A paired RED must start from fresh Dirichlet counts and must report :attack selection rate alongside kills.

Other defects the review surfaced

  • The killed observable is corrupt. !bot.entities[tid] || !bot.entities[tid].isValid conflates death with despawn and with exit from client entity-tracking. A cow wandering out of range scores killed=true with struck=0. The registered PASS condition is gameable by the measurement itself. LAB_PROTOCOL requires independent confirmation — RCON server-side kills and inventory delta, not a body-side flag.
  • The FALSIFIES clause was not decidable — "struck counts implying no real pursuit" is a vibe, not a numeric predicate stated before the run.
  • Model-expressiveness gap the packet's "no model change needed" framing missed: preyDir is fed by nearestAnimal(), also unbounded. So the brain has bearing without range and cannot represent "prey near" vs "prey far" at all. Bounding only the selection would leave B^attack marginalising over an unobserved confounder.
  • Lockstep hazard: a 46-block pursuit is ~12 s inside one action, against a STEP_MS tick — it would stall the strict 1:1 σ/α lockstep and corrupt timing-sensitive telemetry.

What the Math-Breaker said would earn SIGN (recorded, NOT implemented)

  1. Bound the SENSE and the SELECTION to the same radius RmaxDistance: R on both nearestAnimal() and huntTarget() — so preyDir comes to mean "prey within R" and the contingency becomes learnable. Note this changes the live observation stream, invalidating prior B^prey learning; the RED must start fresh regardless.
  2. Derive R from the measured closure rate, don't assert it: 14 steps × ~1.1 blocks ≈ 15 blocks, minus ~5 steps spent striking ⇒ ~10–11 blocks achievable. R must sit below the demonstrated closable distance, not at the abort threshold.
  3. Measure the world before measuring the motor — prey density within R on both dates. Until the 24.7-block floor is explained, no motor result is attributable.
  4. Scope the claim to a terminal motor competence plus learned consummation — not emergent foraging, since at 25+ blocks preyDir is 0 and there is no prey signal to search under.

Follow-on artifacts

Per the ship gate, a REJECT produces none of the three (typed spec / paired RED / ship-gate checklist) and no code may merge. None was written. viewer/body.js is unchanged.

sha256 051168f333206d8c — of the original file, so what was ingested stays checkable.

Plain — written for this website, not the source document

Written for this website — not the document. This is a plain-language retelling, written to help you meet the document. It is not the source, and it is not evidence. It has not yet been checked by a person. (or choose Precise in the reading-level control above)

A design review that says no, and stops early because the protocol says one reviewer's rejection ends it. No code was changed. Both proposed fixes are rejected. One cannot satisfy its own pass condition under the measured state of the world. The other would move nearly all the work into hand-written code, and leave the learned decision with about one bit to contribute. Then the review does something rarer: it falsifies the proposal's own causal story using the repository's history, and finds the real signal is about where the animals are.

Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 051168f333206d8c

Clear — written for this website, not the source document

Written for this website — not the document. This is a clearer retelling, written to help you meet the document. It is not the source, and it is not evidence. It has not yet been checked by a person. (or choose Precise in the reading-level control above)

A review whose merged verdict is a rejection, with a procedural note that matters: the protocol halts once the first reviewer rejects, so the other four were not run, and no code was changed.

Two candidate fixes are rejected for different reasons. The first fails a sign check, because under the measured state of the world everything it would select is out of range, so it returns nothing on every attempt and cannot meet its own registered pass condition. The second is called a food hack in motor clothing. It would put search, approach, selection, pursuit, strike and collection inside hand-written code, leaving the learned policy with about one bit to contribute. That trips the proposal's own stop clause, and a precedent the project already withdrew a claim over.

The review then turns on the proposal's central causal claim, written by the same agent, and shows it false against the repository. Two commits are compared, and a count recorded in the lab evidence is arithmetically impossible under the earlier one, which places the successful hunting in the version that already contained the guard being blamed. So the guard was present in code that hunted successfully, and it is not a sufficient explanation for the later collapse.

The real signal is named instead. Across thousands of attempts no animal was ever found within close range, which is a signature about the world rather than about the code. Shipping a motor fix against an unmeasured world variable would have broken the one-cure-at-a-time rule before the first tick.

The finding neither side had reasoned to is then derived. With thousands of consecutive empty outcomes, the belief about what attacking yields converges towards a point mass on nothing, while the drive to try the unfamiliar decays over the same counts. All the terms therefore agree on never attempting it again. The trap is spelled out: any run on these inherited counts would fail regardless of how correct the fix is, so a paired comparison has to start from fresh counts and must report the selection rate alongside the outcome.

Other defects are listed. The observable being counted conflates a kill with an animal wandering out of tracking range, so the pass condition is gameable by the measurement itself and needs independent confirmation. The stated condition for showing it wrong was not decidable. The sense feeding the brain gives bearing without range, so the brain cannot represent near against far at all. And a long pursuit inside one action would stall the timing the rest of the system depends on.

The review closes constructively without conceding anything, listing what would earn a signature. Bound the sense and the selection to the same radius, so the signal comes to mean something learnable. Derive that radius from a measured closure rate rather than asserting it, and measure the world before measuring the motor. And scope any eventual claim to a narrow competence rather than to emergent foraging.

Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 051168f333206d8c