Skip to content

RFC 0002 wave 0: freeze (RFC draft, bench/body fixtures, seeds and bars) - #37

Merged
BitmapAsset merged 7 commits into
mainfrom
rfc2-wave0-freeze
Oct 17, 2026
Merged

BitmapAsset merged 7 commits into
mainfrom
rfc2-wave0-freeze

Conversation

@BitmapAsset

Copy link
Copy Markdown
Owner

RFC 0002 wave 0: the freeze. The RFC draft and the benchmark that defines "done" for it, committed before any engine has
the blocks.

The two rules (bench/body/README.md):

  1. Freeze before measuring. Fixtures, generators, seeds and every bar's pass value are committed with their sha256 in
    fixtures/MANIFEST in one commit before any measurement on the engine. A bar is never edited after a number is seen. A
    bar that fails is a finding: the design is fixed or the part is reverted, and the failed result stays in the history.
  2. No opposing mechanisms. No fixture makes two mechanisms push against each other on the same probes unless the bar is
    about that opposition.

What is frozen

  • docs/rfcs/0002-neuromodulators-and-body.md: the draft in RFC 0001's shape (Status: draft for review), references by
    author and year.
  • bench/body/: 9 fixture personas and 13 derived twins (fixtures/variants/), 11 seeded streams (fixtures/streams/,
    regenerated byte for byte by python3 bench/body/fixtures/gen.py --verify), 40 bars (the README's tables, frozen as
    fixtures/bars.md sha256 0b2e95f8…; their pass values in fixtures/bars.json), run.py and the per-part scripts, and
    fixtures/MANIFEST (50 entries; python3 bench/body/manifest_check.py).
  • CHANGELOG.md (0.10.0 - unreleased) and BENCHMARKS.md §12 (frozen, not yet run).

No engine change; every bar unmeasured by design. No engine has the blocks yet: on today's binaries persona lint
refuses each fixture's block as an unknown field, every part prints setup error: this engine does not support <block>,
and run.py exits 2 (checked with probbit 0.8.2: 10 parts reported, exit 2).

Checks

  • python3 bench/body/arith_0002.py: 40 checks, 0 mismatches (the closed forms behind the bars).
  • MANIFEST: 50 entries, 0 differ; gen.py --verify: 24 files regenerated, 0 differ; py_compile on every script.
  • Wording and privacy sweep over every added file and line: 0 hits.

Where the spec left a choice before the engine exists (scripted hosts that read the stance, a second unpaid goal in the
one-goal fixtures, field names), the README's last section records it. One finding while freezing: the persona reader
refuses a bare YAML key n, so the fixtures write drive: {"n": 4, "m": 3}; the RFC's schema example needs the same
quoting, or the build renames the key.

…asurement

docs/rfcs/0002-neuromodulators-and-body.md: the RFC 0002 draft (needs and the omission let-down, surprise, pace,
dispositions, valence; part 2 rest and load) in RFC 0001's shape, references by author and year.

bench/body/: the benchmark that defines "done" for it, frozen: 9 fixture personas and 13 derived twins, 11 seeded streams
and their generator (fixtures/gen.py --verify regenerates them byte for byte), the bars (README tables, bars.md, bars.json),
run.py and the per-part scripts, and fixtures/MANIFEST (50 sha256 entries, manifest_check.py). arith_0002.py: 40 checks,
0 mismatches. No engine has the blocks yet: every part reports "setup error: this engine does not support <block>" and
run.py exits 2. No engine change; every bar unmeasured by design.
An independent review graded the 40 bench/body bars (12 sound, 10 weak, 18 vacuous) by naming a degenerate
policy or null that passes each. No engine with an RFC 0002 block has produced a number for any of them, so
they are repaired under the freeze rule (a bar is never edited after a number is seen). No pass value relaxed.

- Two-sided correctness and coverage: exact wins on a 15-cell needs1 grid (n1, n2); success-weighted order,
  odds magnitudes and released goals on a second probe (n3); contact ceiling also while the principal is away
  and every answered report paying (n8); non-positive wins, coverage and a deficit bound (n9); a positive
  baseline and recomputed deficits (n10); contact before the absence and after the return (n11); learning
  that must happen (s2) and an exact opening step (s3); E trajectories exact at every event (o1, o2); residual
  at lags 1-5 (v3); exact contraction plus a below-threshold control (r0); the lesson kept after the gap
  (r1); a non-saturated lineage probe with a 20 % reduction (r2); conflicts that bind (r4); each load
  channel's amplitude and time course (l1-l3).
- Nulls that fail inside their own fixture: the env control through the refused sources' transports (n7),
  an admissible burst above the pace cap (p6), constant-gain engine twins at the gate's movement budget (s1),
  planted corruptions for the replay bars, habit-free twins gated.
- Effects on decisions: released odds for v1/v2, changed pursue goals for o3, P(careful) for l1.
- nulls.py: a competent plain-Python null for every bar, judged by the parts' own gate functions; run.py
  stops with exit 2 when one passes. 51 null rows over 40 bars, 0 pass. The RFC's own rules run as
  non-gating references: they pass every bar they cover except n10 and n11 (kept as frozen; flagged).
- New streams return, bursts, burst, two-point-gaps; variants needs2-s02, gate-g1.25..3.0, load-effects;
  every v1 stream and variant regenerates byte for byte. bars.json/bars.md at version 2; v1 kept verbatim as
  bars-v1.json/bars-v1.md; MANIFEST regenerated (64 entries). arith_0002.py: 66 checks, 0 mismatches.
- run.py on an engine without the blocks still exits 2, one setup line per part.
At 1 h the deficit is 0.1 and the amount 0.2 overshoots it back to 0.1, so a correct engine shows no change and would
fail n7. Found by a dry run of needs.py against a Python model of RFC 0002 A.3-A.4 (not the engine), before any engine
measurement; pass value and bar text unchanged; logged under 'Changes after the freeze'.
…, v2's null within rounding

Found by dry runs of every part against Python models of RFC 0002 (not the engine), before any engine measurement:
- r1 is measured on the reversal draws without the lock turns: with them the stand-in learner re-learns in 6 turns
  after rest instead of 5 (6/11 = 0.545 against 0.5) because r4's lock habit shares the stream (rule 2); without them
  5/11 = 0.4545, the number the bar's reachability check cites. The locked ratio is reported.
- s3 checks the cap where the RFC puts it, on the step before recentring: the recentred changes come from a step
  within +-g_max x step_cap exactly when their range is <= 2 x g_max x step_cap (v1's script compared each recentred
  change with the cap, which a correct step exceeds in 968 of 1,800 lives of the dry run).
- v2's no-block twin moves by rounding residue (1e-6), so its move is gated at <= 2e-6, not == 0.
Pass values and bar text unchanged; logged under 'Changes after the freeze'.
…d events, v1's and v2's mood odds)

Verdicts unchanged (51 null rows, 0 pass a v2 bar); the rows printed illustrative numbers where the null's outcome follows
from its definition, and now print the computed ones.
@BitmapAsset
BitmapAsset marked this pull request as ready for review October 17, 2026 06:44
@BitmapAsset
BitmapAsset merged commit e8f3fe0 into main Oct 17, 2026
15 checks passed
@BitmapAsset
BitmapAsset deleted the rfc2-wave0-freeze branch October 17, 2026 06:58
@BitmapAsset BitmapAsset mentioned this pull request Oct 17, 2026
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