hraness

your benchmark is an experiment: measuring behavior without overclaiming

controls, baselines, and what a result does not show

Drafted by an AI agent at Ben Guo's direct request from the Hraness source repositories, and checked against those sources before publication.

“Emergent behavior” is the easiest claim in computing and the least informative: the system did something its designer didn’t type in. Every cellular automaton, every market simulation, every neural network produces it. The question that actually separates a benchmark from a demo is narrower: whether you can show that the observed behavior is caused by the thing you claim causes it, and say what the result does not show. Platonik’s evaluation documents are worth reading as a worked answer, because the project treats every measurement as an experiment with controls, and publishes the accounting.

the benchmark is an experiment

The method statement is in docs/complexity-and-scale.md, and it reads like an experimental protocol because it is one: before confirming anything, “publish the comparator, smallest improvement worth pursuing, case count, uncertainty analysis, and fixed evaluation budget. Preserve failures and unsuccessful searches.” A result is not a number; it is a number produced by a declared procedure that someone else can re-run.

The engine’s design makes this cheap. Because every run is a deterministic receipt (the same input always produces the same trace), a control is not a statistical estimate but a counterfactual rerun: take the passing world, remove one component, and see what breaks. Because the cost model charges for everything including failed attempts, “the intervention was worse” is a measured statement, not a vibe. And because selection happens on a declared training split before transfer cases run, the protocol makes it visible whether the winners were tuned to the test.

the four comparisons

The complexity doc prescribes four kinds of comparison before a claim travels:

  1. Ordinary engineering: hand-written simple policies, random search, a direct implementation of the task, and a flat controller restricted to the same information and delay model. This is the “would a dumb thing work” control; a rich mechanism that can’t beat a simple baseline hasn’t earned its complexity.
  2. Composition: the candidate assembly, uniform constituent colonies, and copies with suspected capabilities removed, under matched total resources with interfaces charged. This is the “does the assembly exceed its parts” control.
  3. Transfer: freeze the candidate, then test new map families and damage schedules, separating further adaptation from unchanged transfer. This is the “did it learn a habit or memorize a map” control.
  4. Practical export: an independent implementation and an external benchmark, with input conversion and real runtime counted. This is the “does it survive outside our cost table” control; the doc is blunt that “an improvement visible only through a favorable simulator cost table is a game result.”

The component-removal control deserves the emphasis because it is the one that catches honest self-deception. You do not ask whether the system works; you ask which part is load-bearing, by removing each in turn under identical resources and watching which removal collapses the outcome. A result that survives every removal is a result about the world, not about your mechanism.

a taxonomy of claims

docs/research.md gives the archive three escalating statuses: Observed (it happened in an identified run, trace preserved), Replicated (a frozen protocol reproduced it on new declared cases with controls and uncertainty reported), and Reviewed contribution (independent review found the evidence sound relative to existing work). It insists that “untested,” “passed these cases,” “refuted within this scope,” and “proved under these assumptions” remain distinct. The same page lists refused claims: no P=NP progress meter, finite benchmark success is not a polynomial-time result, a checked trace is not cognition, and oracle or advice inputs must be declared.

The discipline is visible in how the docs write their own results. The navigation courier that passes all 44 worlds is “a bounded habit repaired,” not a navigator. The ark selector’s arithmetic is checked on all 256 input pairs (a complete claim about the declared input set), while the docs still note that success “does not establish that every submitted selector uses the designated bit internally.” The claim is always stated at the scope the controls actually cover.

the control runs in detail

The ark-evaluation diagnostic is the cleanest worked example. The world wires a physically carried operand through a relay, a shifter, and an eight-row full-adder rule table; a selector applies a supplied plan; Keeper retains one computed bit and routes a second payload through a valve window. The claim being tested: arithmetic plus a supplied plan changes an actual service decision.

The controls are where the claim gets its meaning. All twelve component-removal worlds fail the whole control contract. Eleven also fail physical service. The one exception is the interesting kind: removing the carry writes under the low-bit plan for 9 + 7 leaves service succeeding but computes 14 instead of 16: the control preserves the arithmetic failure in the grade rather than hiding it, which is how the study demonstrates that carry writes are causally necessary for correct output, not merely present. Clearing Keeper’s memory in a case that requires a one leaves the sum correct and loses the required delivery, separating “the arithmetic is right” from “the memory did its job,” a distinction a single pass/fail would erase. Constant-zero and constant-one selectors each pass four of eight cases: a constant answer wins particular voyages and cannot finish the family, which is precisely the evidence that the task measures conditional behavior rather than luck.

The qualification arithmetic is equally deliberate: the adder is checked on all 256 input pairs (the complete admitted input set) with an independent oracle using ordinary widened addition, and qualification consumed 558 of 1,536 allowed engine executions, counted and published.

counting the real cost

The most honest instrument in the repository is the EXECUTIONS counter in sim.rs: process-local telemetry, kept outside the deterministic receipts, that counts every actual engine run including verification replays. It exists because the headline number in a study is never the whole bill.

The first agent diagnostic is the canonical accounting: 68 logical evaluations versus 2,572 actual engine executions, against a predeclared ceiling of 4,096. The 68 covers the narrative: 40 agent trials, 16 reference evaluations, 12 probes. The 2,572 covers what the science actually cost: the two agent sessions at 834 and 810 executions, baselines and verification at 32, the twelve adversarial probes at 296, and thirty saved-journal verifications at 600. A paper reporting “68 trials” would be reporting the tip; the ledger reports the iceberg.

The same pattern appears in every diagnostic (the ark study’s 1,375 of 2,048, the ports study’s 881 of 1,024, construction’s 1,317 of 2,048), each printing its actual count including on failure, because “the total cost of the permitted candidate search” is itself part of the result. Self-reported agent.tokens fields are printed on the board labeled as self-reported, never authoritative, since a local tool cannot meter an entrant’s real compute, so the ranking falls back to replayed work, the only quantity the engine can actually verify.

publishing the misses

The capacity work shows the discipline when the answer is embarrassing. The first release-build measurement on an Apple M5 Max recorded peak RSS of 339,574,784 bytes, about 324 MiB, against a proposed 256 MiB target. The miss was published as a miss, in docs/rust-bridge.md, with complete inputs and distributions committed as fixtures/evidence/capacity-baseline.json. A diagnostic then separated the causes (about 25 MiB after one dense sample, 324 across thirty, RSS staying high after values dropped, pointing at retained allocator memory rather than stored results) before the repair streamed canonical JSON straight into SHA-256. The matched repeat measured 163,823,616 bytes, about 156 MiB, with dense p95 at 49.74 ms.

The construction benchmark repeated the pattern with a subtler failure: repeated receipt serialization peaked at about 298 MiB with resident memory still rising after buffers were freed. The investigation ran allocation-only probes with no Platonik code (growing and dropping buffers alone reproduced 80–85 MB of growth) before the fix introduced a bounded reusable 8 MiB buffer that cut the peak to 17.75 MiB. The follow-up honestly reports that latency increased (p95 103.84 ms and 97.86 ms on the two workloads, against the original 74.63 and 68.03): the fix was a memory repair, not a speedup, and it is not described as one.

Twelve adversarial probes per study round out the discipline: tampered receipts, rehashed forgeries, stale revisions, fake instruction names in creature fields, all rejected, all counted. The board’s lexicographic ordering (cases passed, then charged work, then canonical bytes) even ranks failures honestly: among entries passing zero cases, the cheaper failure ranks higher, “a deliberate ledger reading, not a reward for idleness.”

The takeaway is a working definition: a benchmark is an experiment when it can tell you something you didn’t build in: when controls can fail, when misses are published, when the accounting includes its own cost. Platonik’s version is imperfect in the ways it names itself (single-host numbers, developer-agent context, a checker in the same repo), and that self-naming is not modesty. It is the measurement.

sources

keep reading: free for subscribers

the rest of this lesson is free. add your email once and every subscriber lesson on this site stays unlocked.

already subscribed? enter the same email to unlock.