Skip to content

v0.8 generalization round: broad-distribution measurement + admit-nothing recommendation#94

Merged
madmax983 merged 3 commits into
mainfrom
v08-design
Jul 15, 2026
Merged

v0.8 generalization round: broad-distribution measurement + admit-nothing recommendation#94
madmax983 merged 3 commits into
mainfrom
v08-design

Conversation

@madmax983

Copy link
Copy Markdown
Owner

What this round found

The ≥3× static-compression gate was only ever measured in-sample. It hit 3.87× on the tier-2 dev corpus, but that corpus had co-evolved with primitive admission and the number does not survive out-of-sample: the blind sealed set (#91) came in at 1.67× o200k / 1.72× cl100k.

This round diagnoses why, builds a generalization-hygienic measurement corpus to replace the spent dev corpus, evaluates candidate fixes, and recommends how to restate the thesis.

Before / After

Before. The language thesis claimed ≥3× static token compression. The dev corpus that "proved" it had co-evolved with primitive admission, so the gate was measuring memorization, not generalization.

After. A generator-based TRAIN/DEV-split corpus (1145 deduped shapes) measures the honest out-of-sample compression at ~1.7× on genuinely-uncovered task shapes — TRAIN 1.70× / DEV 1.72×, agreeing to ≤0.02×, and reproducing the sealed 1.67×. The recommendation is to admit no new primitives and restate the thesis at the measured ceiling.

Sink taxonomy

Decomposition of the 141-token shortfall from the 3× budget:

Sink Share Note
Stack-juggling ≈59% scan / state-machine tasks — structural to the concatenative paradigm
Missing-idiom / anti-niche ≈23% popcount 0.68×, digit-product
Accumulator-shape ≈10%
Honest loop tasks ≈8%

The post-mortem's "input-encoding artifact" premise is corrected: it is a text-feedability label with zero solution-token effect. Against fair terse Python, MTL compresses only ~1.03×. Its real out-of-sample value is agent writability (100% pass@5) and marginal per-solution economics (CSPM 2.124×), not static compression.

Candidates evaluated & measured

Recommendation: admit nothing; out-of-sample ceiling ~1.7×. A conditional w fallback applies only if the maintainer re-scopes to a scan/window-heavy niche.

Re-seal protocol (specified, not executed)

The next round runs this:

How (implementation)

  • New oracle-verified datagen families (bitdigit + scan) in bench/dataset/src/families.rs, honoring the decision record (no Value::Vec / Value::Str).
  • Broad-distribution harness (bench/dataset/src/bin/broad.rs + measure.py) with a canonical-SHA-nibble-parity TRAIN/DEV split.
  • Experiment artifacts under bench/design-v0.8/.
  • Writeup at docs/design/v0.8-generalization.md.
  • No proven mtl-core / mtl-syntax / mtl-check module touched.
  • cargo test --workspace green at 311/0 (+1 new oracle-gate test).

Generated by Claude Code

claude added 3 commits July 15, 2026 19:05
…on baseline

Replace the spent, co-evolved dev corpus with a generator-based, train/dev-split
task distribution and measure the CURRENT-language out-of-sample static
compression across it (the v0.8 round's optimization target).

- families.rs: add two oracle-verified families covering the sealed-flagged
  uncovered shapes (BASELINE-SEALED §6):
    * `bitdigit` (tier-0 scalar): popcount, digit-sum base b (2..16),
      digit-product base b (8/10/16) — seeded from seal_count_set_bits /
      seal_digit_product, generalized over the base literal.
    * `scan` (tier-2 list): alternating sum, count local maxima, max adjacent
      diff, dedup adjacent, RLE flatten, min running balance — each seeded
      verbatim from the matching bench/sealed/corpus solution, re-verified
      against a fresh (non-sealed) checked_* reference grid. No Value::Vec /
      Value::Str; lists via existing fold/linrec/cons machinery.
- bin/broad.rs: shape emitter. Sweeps seeds, gates every tier-0/2 instance,
  dedups by canonical program, assigns a reproducible seed-independent
  TRAIN/DEV split (canonical-SHA-256 nibble parity), tags each shape with a
  per-family template key + args. 1145 distinct shapes, 0 unclassified.
- design-v0.8/measure.py: per-family idiomatic-Python templates (v0.2 fairness
  bar; scan templates byte-identical to the sealed idiomatic refs), same o200k
  tokenizer both sides. Method labels: MTL=synth, Py=template.
- Result: new uncovered shapes compress ~1.7x (TRAIN 1.70x / DEV 1.72x),
  reproducing the sealed held-out 1.67x; full-distribution micro 3.25x/3.24x is
  an arithmetic-domination artifact (968/1145 affine one-liners), not
  generalization. Per-shape ratios reproduce the sealed numbers exactly
  (alt_sum 4.33x, dedup 1.85x, min_running_balance 1.86x, popcount 0.68x).
  List-output running max/min recorded as an expressibility edge finding.
- oracle_gate.rs: v08_new_families_all_gate asserts every new-family instance
  passes the real oracle. Workspace: 311 passed / 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_0124dqBiHMYYZMGoRvx3bSjx
…commendation

Simulator-verified windowed-fold rewrites of the two windowed scan tasks
(local_maxima 43->8/10 tok, max_adj_diff 42->17/19 tok; juggle 20->3, 21->7),
projecting new-families out-of-sample 1.70/1.72x -> ~2.0/1.92x. State-machine
(rle) and accumulator (min_running) sinks unaddressed. popcount = benchmark-fit;
doc-fixes = 0 compression. Primary recommendation: admit nothing, ceiling ~1.7x.

No proven crate touched; cargo test --workspace 311/0.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_0124dqBiHMYYZMGoRvx3bSjx
Round writeup for the generalization round: diagnoses the out-of-sample
compression gap (sealed 1.67x o200k / 1.72x cl100k vs in-sample 3.87x),
apportions the 141-token shortfall via the sink taxonomy (stack-juggling
~59%, missing-idiom ~23%, accumulator ~10%, residual ~8%), corrects the
input-encoding premise (label with 0 solution-token effect), and folds in
the generator-based train/dev broad-distribution baseline (new families
1.70x TRAIN / 1.72x DEV, reproducing the sealed number).

Recommendation: admit nothing; restate thesis at the measured out-of-sample
ceiling ~1.7x, with a conditional windowed-fold aperture `w` fallback
(verified, checker-typeable, ~2.0x) reserved for a scan-heavy niche.
Specifies (does not execute) the fresh re-seal protocol for the next round,
encoding the PR #91 lessons (clean barrier, no committed solutions,
taxonomy-balanced authoring, ~1.7x pass/fail band, mkseal salted manifest).

No proven mtl-core/mtl-syntax/mtl-check modules touched; changes confined to
docs/. Workspace: 311 passed / 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_0124dqBiHMYYZMGoRvx3bSjx
@madmax983
madmax983 marked this pull request as ready for review July 15, 2026 20:12
@madmax983
madmax983 merged commit 2e1ab5d into main Jul 15, 2026
3 checks passed
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.

2 participants