porkicoder-tab-namer-77m / paper /tab-namer-four-beams.html
porkr's picture
Release PorkiCoder tab-namer flat1e4 with campaign papers
a5a2554 verified
Raw
History Blame Contribute Delete
27.6 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Four beams, no new weights: a sealed test confirmed the FLAN win but missed the final gate</title>
<meta name="description" content="A frozen 35M beam-4 tab namer beat our title-tuned FLAN benchmark by 0.75 on the sealed 1,000, but missed its usefulness gate. A later preregistered dev-200 audit estimated absolute usefulness at 40.0% (95% interval 33.5–46.9%)."/>
<style>
:root {
--paper: #f5f0e7;
--ink: #17211f;
--muted: #58625f;
--faint: #d6cec1;
--sniff: #176b87;
--good: #32735f;
--good-bg: #e4f0ea;
--blue-bg: #e8eef5;
--warn-bg: #f4e8df;
--sans: Inter, ui-sans-serif, system-ui, sans-serif;
--serif: Charter, "Iowan Old Style", Georgia, serif;
}
* { box-sizing: border-box; }
html { background: var(--paper); }
body {
margin: 0;
color: var(--ink);
background:
radial-gradient(circle at 12% 0%, rgba(23,107,135,.08), transparent 28rem),
var(--paper);
font-family: var(--serif);
font-size: 18px;
line-height: 1.58;
}
.paper { width: min(calc(100% - 2rem), 920px); margin: 0 auto; padding: 4rem 0 5rem; }
.eyebrow { margin: 0 0 1rem; color: var(--sniff); font: 750 .76rem/1 var(--sans); letter-spacing: .13em; text-transform: uppercase; }
h1 { margin: 0; font-size: clamp(2.4rem, 7vw, 4.4rem); line-height: .95; letter-spacing: -.04em; font-weight: 650; }
.subtitle { color: #34403d; font-size: 1.25rem; line-height: 1.35; margin: 1.2rem 0 1.4rem; }
.meta { color: var(--muted); font: 0.83rem/1.4 var(--sans); }
.abstract, .callout { margin: 2rem 0 2.5rem; padding: 1.3rem 1.4rem; border: 1px solid var(--faint); border-radius: 16px; background: rgba(255,255,255,.55); }
.abstract h2, .callout h3 { margin: 0 0 .4rem; font: 750 .72rem/1 var(--sans); letter-spacing: .1em; text-transform: uppercase; }
.abstract p, .callout p { margin: 0; font-size: 1.02rem; }
.callout.good { background: var(--good-bg); border-color: #b9d2c6; }
.callout.warn { background: var(--warn-bg); border-color: #dec7b6; }
h2 { margin: 2.7rem 0 .7rem; font-size: 1.55rem; }
h3 { margin: 1.6rem 0 .4rem; font-size: 1.15rem; }
p, li { max-width: 70ch; }
table { width: 100%; border-collapse: collapse; font: 14px/1.4 var(--sans); margin: 1rem 0 1.4rem; }
th, td { border-bottom: 1px solid var(--faint); padding: .5rem .4rem; text-align: left; vertical-align: top; }
th { font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
td.n, th.n { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
tr.pick td { background: var(--good-bg); }
tr.context td { background: var(--blue-bg); }
.wide { overflow-x: auto; margin: 1rem 0 1.4rem; }
.wide table { min-width: 760px; margin: 0; }
.flow { display: grid; grid-template-columns: 1fr auto 1fr auto 1fr auto 1fr; gap: .55rem; align-items: stretch; margin: 1.2rem 0 1.5rem; font: 13px/1.35 var(--sans); }
.flow .box { padding: .8rem; border: 1px solid var(--faint); border-radius: 12px; background: #fffdf8; }
.flow .arrow { align-self: center; color: var(--sniff); font-size: 1.35rem; }
.flow strong { display: block; margin-bottom: .2rem; }
.ex { margin: 1rem 0; padding: 1rem 1.1rem; border: 1px solid var(--faint); border-radius: 12px; background: #fffdf8; font-size: .95rem; }
.ex pre { white-space: pre-wrap; margin: .4rem 0 .8rem; font: 13px/1.4 ui-monospace, monospace; color: #333; }
.score { color: var(--muted); font: 12px/1.3 var(--sans); }
.note { color: var(--muted); font: .82rem/1.4 var(--sans); }
code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
code { font-size: .86em; }
li code { overflow-wrap: anywhere; word-break: break-word; }
pre.command { overflow-x: auto; padding: 1rem; border: 1px solid var(--faint); border-radius: 12px; background: #fffdf8; font-size: 12px; line-height: 1.45; }
a { color: var(--sniff); }
@media (max-width: 720px) {
.flow { grid-template-columns: 1fr; }
.flow .arrow { transform: rotate(90deg); justify-self: center; }
}
</style>
</head>
<body>
<main class="paper">
<p class="eyebrow">PorkiCoder Research · Tab titles</p>
<h1>Four beams, no new weights</h1>
<p class="subtitle">The decisive gain came from search, not new weights: compare complete, safe pairs of words already on the page.</p>
<p class="meta">15 August 2026 · Clean development n=1,000 + sealed final n=1,000 · Blind Gemini 3.5 Flash-Lite, two decimals · Sealed Codex audit n=40 · Post-publication dev audit n=200 · Continues <a href="./tab-namer-mid-gsg.html">The 35M that caught Hybrid A</a></p>
<section class="abstract">
<h2>Terminology · 16 August 2026</h2>
<p>In this paper, &ldquo;locked Hybrid A&rdquo; names the pinned stack as a whole: B-9500 + source-word beam-4 + centroid v2 + the Hybrid A glue. Since 2026-08-16, &ldquo;Hybrid A&rdquo; on its own names only the glue rule (&le;2 on-page namer words, fill to 3 with centroid); older papers used it for the entire greedy-era system.</p>
</section>
<section class="callout">
<h3>Board · 16 August 2026</h3>
<p>Every number in this paper is <strong>SO-board</strong>: the 1,000-row SO clean-dev and the consumed sealed SO 1,000. The 19/40 Codex usefulness fail and the later 80/200 reusable audit are SO-board absolute-usefulness, not Terminal-board. The Flash-Lite sealed win (6.20 vs 5.45) is also SO-board. <strong>Terminal-board</strong> (300 terminal-dev; FLAN + centroid v2 = 7.11 / 93.3%) is a different leaderboard; session 4 trained there and left this 19/40 set sealed. Do not write &ldquo;we beat FLAN&rdquo; without naming the board. Later: <a href="../tab_namer_quality_roadmap/session4_results.html">session 4</a>.</p>
</section>
<section class="abstract">
<h2>Abstract</h2>
<p>
Our previous result stopped 0.15 points behind the FLAN-plus-centroid benchmark.
We kept the 35M B-9500 checkpoint and frozen centroid exactly as they were, restricted the namer to complete pairs of visible and representable page words, and let four beams rank those pairs under the model&rsquo;s own logits.
In fresh clean-development packets the resulting stack beat our title-tuned FLAN stack by 0.61&ndash;0.64 points.
The frozen one-shot result then reproduced the relative win on the sealed 1,000: 6.20 versus 5.45, paired +0.752 (95% bootstrap interval 0.611&ndash;0.891).
A strict 32-character variant led by 0.733.
The preregistered final gate nevertheless did not clear: an identity-blind Codex audit rated 19/40 outputs useful (47.5%), short of the required 60%, even though the same audit favored ours over FLAN 18/9/13.
Beam-4 beat the corrected greedy decoder by 0.45&ndash;0.48, while every continuation checkpoint we scored under beam-4&mdash;including 500 CE-only steps at 5e-6&mdash;underperformed unchanged B-9500.
No parameters or learned components were added.
</p>
</section>
<section class="callout warn">
<h3>Final gate: not cleared</h3>
<p>The sealed relative result is strong, but the gate was conjunctive. Four of five criteria passed; the independent absolute-usefulness criterion did not. This paper therefore records a successful sealed replication of the FLAN comparison, not a passed final promotion gate.</p>
</section>
<section class="callout">
<h3>Post-publication dev estimate</h3>
<p>A separately preregistered, identity-blind audit of 200 reusable clean-development rows rated the unchanged pin useful on 80/200 rows: <strong>40.0%</strong>, with a Wilson 95% interval of <strong>33.5&ndash;46.9%</strong>. Ours beat/tied/lost locked FLAN 66/89/45, but the dominant low-usefulness mode was the namer&rsquo;s two-source-word ceiling (76/120). Displayed titles already have up to three words because locked Hybrid A appends one centroid fill; the ceiling concerns which words the model chooses. Five fresh paired packets&mdash;including a direct three-source-word namer fallback&mdash;found no significant improvement, so the pin remains unchanged. Flash-Lite remains the product metric; this Codex result is an auxiliary absolute-usefulness estimate. It does not reopen or combine with the consumed sealed gate, and its Peggy artifacts sit outside this paper&rsquo;s frozen final-gate evidence bundle.</p>
</section>
<h2>The sealed one-shot result</h2>
<p>
We froze the checkpoint, decoder, centroid, glue, four-way judge packet, audit sample, and analysis before generation.
The sealed file matched its preregistered SHA-256, and the complete clean-development pipeline replayed byte-for-byte before the final run.
Flash-Lite saw the locked and bounded versions of our system and FLAN in one identity-blinded packet; no reference titles were shown.
</p>
<div class="wide"><table>
<thead>
<tr><th>Sealed comparison</th><th class="n">35M beam-4 + v2</th><th class="n">FLAN + v2</th><th class="n">Paired delta (95% CI)</th><th class="n">W / T / L</th><th class="n">35M &ge;5 / &ge;6</th><th class="n">FLAN &ge;5 / &ge;6</th></tr>
</thead>
<tbody>
<tr class="pick"><td><strong>Locked Hybrid A</strong></td><td class="n"><strong>6.20</strong></td><td class="n">5.45</td><td class="n"><strong>+0.752</strong> (0.611&ndash;0.891)</td><td class="n">603 / 67 / 330</td><td class="n">74.9% / 63.5%</td><td class="n">60.6% / 44.6%</td></tr>
<tr><td>Bounded 32-character glue</td><td class="n"><strong>6.15</strong></td><td class="n">5.42</td><td class="n"><strong>+0.733</strong> (0.593&ndash;0.873)</td><td class="n">601 / 68 / 331</td><td class="n">74.1% / 62.3%</td><td class="n">60.3% / 44.1%</td></tr>
</tbody>
</table></div>
<p class="note">Intervals are deterministic percentile intervals from 100,000 paired row resamples. The locked mean itself was 6.197 (95% bootstrap interval 6.081&ndash;6.312). Judge transport completed 1,000/1,000 rows with zero failures.</p>
<h3>The independent audit and the preregistered decision</h3>
<p>
A fixed 40-row sample was scored from a reference-free packet whose per-row candidate identities were hidden until all judgments were written.
On locked glue, ours was useful on 19/40 rows versus FLAN on 13/40 and won/tied/lost 18/9/13.
The relative criterion passed, but the preregistered absolute bar was 24/40 useful.
The observed 47.5% usefulness rate has a wide Wilson 95% interval of 32.9&ndash;62.5%; that uncertainty does not change the point-estimate decision rule fixed in advance.
</p>
<table>
<thead><tr><th>Final-gate criterion</th><th>Required</th><th>Observed</th><th>Decision</th></tr></thead>
<tbody>
<tr><td>Blind Flash-Lite mean</td><td>&ge;5.50</td><td>6.20</td><td><strong>Pass</strong></td></tr>
<tr class="context"><td>Codex-audit useful outputs</td><td>&ge;60%</td><td>47.5% (19/40)</td><td><strong>Fail</strong></td></tr>
<tr><td>Codex audit wins + ties vs FLAN</td><td>&ge;30%</td><td>67.5% (27/40)</td><td><strong>Pass</strong></td></tr>
<tr><td>Empty rate</td><td>&le;1%</td><td>0%</td><td><strong>Pass</strong></td></tr>
<tr><td>Top-title mass</td><td>&le;10%</td><td>0.2%</td><td><strong>Pass</strong></td></tr>
<tr class="context"><td><strong>Conjunctive final gate</strong></td><td>All five</td><td>Four of five</td><td><strong>Not cleared</strong></td></tr>
</tbody>
</table>
<p>
The final set is now consumed. It must not become another development set, and there is no tune-and-retest claim after this result.
</p>
<h2>This is a new result, not a revised table</h2>
<p>
The last paper said the 35M was still short of FLAN plus centroid and warned that beam search was too expensive to ship.
The quality conclusion changed; the latency objection narrowed in a controlled Ada diagnostic, but remains open in the application.
The winning change was comparing complete two-word titles instead of committing to the first locally likely token.
That reverses the quality result, changes the research pin, and gives us a mechanism worth testing elsewhere.
</p>
<p>
&ldquo;FLAN&rdquo; here means the exact title-tuned FLAN-T5-small descendant used throughout this campaign, not untouched stock FLAN and not a claim that a weekend run reproduced Google&rsquo;s instruction training.
</p>
<h2>The clean-development result that froze the system</h2>
<p>
Absolute means move when Flash-Lite sees a different set of anonymous candidates.
Compare systems only inside one row below. The first row is a focused three-way packet; the last two comparisons share a separate six-way packet. Both used the reusable 1,000-row clean-development set to freeze the candidate before the sealed run above. Means are on a 0&ndash;10 scale, and W/T/L is always 35M versus FLAN. These rows explain selection; they are not substituted for the final result.
</p>
<div class="wide"><table>
<thead>
<tr><th>Packet</th><th class="n">35M beam-4 + v2</th><th class="n">FLAN + v2</th><th class="n">Paired delta</th><th class="n">W / T / L</th><th class="n">35M &ge;5 / &ge;6</th><th class="n">FLAN &ge;5 / &ge;6</th></tr>
</thead>
<tbody>
<tr class="pick"><td><strong>Focused three-way packet</strong></td><td class="n"><strong>6.16</strong></td><td class="n">5.52</td><td class="n"><strong>+0.644</strong></td><td class="n">601 / 54 / 345</td><td class="n">75.3% / 62.5%</td><td class="n">60.8% / 45.9%</td></tr>
<tr><td>Fresh six-way packet</td><td class="n">6.34</td><td class="n">5.73</td><td class="n"><strong>+0.613</strong></td><td class="n">607 / 63 / 330</td><td class="n">78.4% / 65.2%</td><td class="n">68.5% / 47.9%</td></tr>
<tr class="context"><td>Bounded 32-character glue</td><td class="n">6.30</td><td class="n">5.70</td><td class="n"><strong>+0.601</strong></td><td class="n">605 / 61 / 334</td><td class="n">77.8% / 64.2%</td><td class="n">68.2% / 47.1%</td></tr>
</tbody>
</table></div>
<p class="note">The fresh six-way packet also included the pre-correction beam output, corrected greedy, and bounded variants. The occurrence-level safety correction cost 0.004 points in that same packet; the win was not caused by the bug it removed.</p>
<h2>The one change</h2>
<div class="flow" aria-label="Decode and glue pipeline">
<div class="box"><strong>Visible page</strong>Read the original text inside the model&rsquo;s real 160-token prefix.</div>
<div class="arrow" aria-hidden="true">&rarr;</div>
<div class="box"><strong>Safe pairs</strong>Offer two distinct words backed by fully mapped source occurrences, at most eight title tokens.</div>
<div class="arrow" aria-hidden="true">&rarr;</div>
<div class="box"><strong>Four beams</strong>Keep four partial hypotheses and rank complete pairs with B-9500&rsquo;s logits.</div>
<div class="arrow" aria-hidden="true">&rarr;</div>
<div class="box"><strong>Frozen glue</strong>Keep the namer words and fill the remaining slot(s) from the unchanged centroid_v2.</div>
</div>
<p>
Greedy and beam-4 see the same legal titles.
Greedy chooses the best next token, then lives with that choice.
Beam-4 preserves four partial paths long enough to compare whole pairs.
In two fresh packets, beam-4 beat corrected greedy by 0.481 (447/325/228) and 0.453 (472/321/207).
Beam-2 helped but trailed beam-4 by 0.188; beam-8 was effectively tied at -0.015 and cost more.
The default length penalty of 1.0 won its sweep.
</p>
<div class="ex">
<strong>Outlook HTML email.</strong>
<pre>We are writing an app that sends email invitations. The template looks bad in Outlook 2007 because Microsoft uses Word as the rendering engine.</pre>
Greedy + centroid: <strong>ms not 2007</strong> <span class="score">(2.1)</span><br/>
FLAN + centroid: <strong>Email Invitations 2007</strong> <span class="score">(7.6)</span><br/>
Beam-4 + centroid: <strong>Microsoft Outlook 2007</strong> <span class="score">(8.5)</span>
</div>
<div class="ex">
<strong>Stored procedures.</strong>
<pre>A developer moving from SQL Server to a LAMP hobby project asks how to start using stored procedures with MySQL and PHP5.</pre>
Greedy + centroid: <strong>ASP Into Reasons</strong> <span class="score">(2.0)</span><br/>
FLAN + centroid: <strong>SQL Server Reasons</strong> <span class="score">(4.5)</span><br/>
Beam-4 + centroid: <strong>Stored Procedures Reasons</strong> <span class="score">(8.0)</span>
</div>
<div class="ex">
<strong>PHP uploads.</strong>
<pre>A developer wants a tested PHP library for safer picture uploads rather than designing one from scratch.</pre>
Greedy + centroid: <strong>PHP Into Uploading</strong> <span class="score">(3.0)</span><br/>
FLAN + centroid: <strong>Upload Uploading Myself</strong> <span class="score">(2.0)</span><br/>
Beam-4 + centroid: <strong>PHP File Uploading</strong> <span class="score">(8.5)</span>
</div>
<h2>&ldquo;On the page&rdquo; had to mean what the encoder saw</h2>
<p>
The first constrained decoder extracted words by decoding a truncated token sequence.
Removing punctuation and unknown pieces could merge fragments into words that never appeared, such as a regex becoming <code>dd</code>.
We moved lexical extraction back to the untouched source text and used fast-tokenizer offsets only to enforce the truncation boundary.
</p>
<p>
A second review found a subtler hole.
A word could tokenize cleanly in isolation while its actual source occurrence overlapped a tokenizer piece missing from the reduced vocabulary.
Eligibility now requires at least one complete visible occurrence whose overlapping source token IDs are all mapped and non-UNK; the offered target spelling must also be fully representable.
This changed five of 1,000 raw titles.
</p>
<section class="callout good">
<h3>Independent contract audit</h3>
<p>All 1,000 corrected clean-development raw outputs contained exactly two distinct page words, each backed by a fully mapped occurrence inside the true 160-token prefix. Every target was at most eight tokens; maximum raw length was 31 characters. The sealed 1,000 repeated the full audit with a maximum of 32 characters. Violations in either set: zero.</p>
</section>
<h2>We cleaned the training data. Training still lost.</h2>
<p>
The obvious next move was to continue B-9500 on exactly the two title-derived page words it should own, with the centroid attached only after inference.
The rule was one immutable JSONL miner, one authenticated shared token pack, then cache-only trainers.
That workflow exposed two data bugs before it exposed the larger modeling result.
</p>
<table>
<thead><tr><th>Corpus</th><th class="n">Train rows</th><th>What the audit found</th></tr></thead>
<tbody>
<tr><td>v4: full-body match</td><td class="n">1,277,706</td><td>252,280/1,287,706 train+validation rows (19.6%) selected a word beyond the 160-token prefix.</td></tr>
<tr><td>v5: visible prefix</td><td class="n">1,025,426</td><td>233,723/1,035,426 train+validation rows (22.6%) lacked a fully mapped visible occurrence.</td></tr>
<tr class="pick"><td>v6: visible + mapped</td><td class="n">794,034</td><td>801,703 train+validation rows passed the strict schema-3 audit with zero violations.</td></tr>
</tbody>
</table>
<p>
Cleaner targets improved literal copying and sometimes the greedy result.
They did not preserve the ranking over complete pairs.
The best v5 continuation was 0.647 behind B-9500 under beam-4.
V6 at step 1,000 was 0.534 behind; at step 3,000 it was 0.571 behind even though its greedy decode edged B-9500 by 0.028 in that packet.
</p>
<p>
We then removed the auxiliary losses and made the update tiny.
After only 500 CE-only steps at 5e-6, the beam result was already 0.601 behind the pin.
At 2e-5 it was 0.758 behind.
The pattern suggests that useful ranking was present in B-9500&rsquo;s sequence distribution; optimizing short labels made that distribution easier to copy from greedily and worse to search.
</p>
<h2>The frozen centroid won its own ablation</h2>
<p>
We also tried more conservative centroid_v2 selection: a capped-picker bundle (minimum document frequency, capped IDF, and digit/hash filters), mapped-word-only filtering, and both together.
Each tested cleanup reduced the product score.
The frozen final candidate therefore uses the original centroid_v2 and locked Hybrid A ordering.
No centroid text was attached during training.
</p>
<h2>The 32-character contract is a separate switch</h2>
<p>
Raw beam titles were already safe (maximum 31 characters), but locked Hybrid A can append a long centroid word.
It exceeded 32 characters on 49 of 1,000 beam rows; FLAN&rsquo;s locked glue did so on 73.
A separate bounded combiner skips whole words that would overflow instead of slicing through one.
That strict variant produced zero over-length titles and still beat bounded FLAN by 0.601.
On the sealed set, locked glue exceeded 32 characters on 46 rows for ours and 50 for FLAN; both bounded candidates had zero violations, and ours retained a +0.733 paired lead.
</p>
<h2>Size stayed fixed; search overhead was modest in the Ada diagnostic</h2>
<p>
The namer remains 35,045,888 parameters, versus roughly 77M for FLAN-T5-small.
No second model, reranker, or learned head was added.
On identical RTX 6000 Ada boxes, nine fresh 100-row batch-one processes per decoder averaged 18.72&plusmn;0.11 seconds for greedy and 20.33&plusmn;0.21 for beam-4 (mean &plusmn; sample SD, n=9), an 8.6% increase.
One 1,000-row batch-64 run took 18.19 and 19.82 seconds, a 9.0% increase.
</p>
<p class="note">Those timings include model load and candidate construction. They are controlled throughput diagnostics, not per-request production latency. Apple MPS showed a larger batch overhead. The beam path still needs measurement in the actual worker and on target hardware.</p>
<h2>The frozen candidate and the decision</h2>
<section class="callout warn">
<h3>Relative win, final gate not cleared</h3>
<p>B-9500 step 9500 &rarr; corrected source-word beam-4, max eight tokens &rarr; original frozen centroid_v2 &rarr; bounded Hybrid A wherever 32 characters is a hard contract.</p>
</section>
<p>
The frozen stack beat FLAN relatively on clean development, on sealed Flash-Lite scoring, and in the small independent paired audit.
That is a robust comparative result.
It did not meet the preregistered 60% absolute-usefulness audit bar, so this study does not authorize a final promotion claim.
The checkpoint and decoder remain useful shadow candidates; further product decisions need evidence collected without tuning on the consumed final set.
</p>
<h2>What we are not claiming</h2>
<ul>
<li>We are not claiming the preregistered final gate passed. It completed at four of five criteria; independent-audit usefulness was 47.5% against a 60% requirement.</li>
<li>The n=40 audit is imprecise: its usefulness interval crosses 60%, but the preregistered decision used the observed rate, not a post-hoc reinterpretation.</li>
<li>Packet means are not interchangeable. The paired delta and W/T/L inside each packet are the evidence.</li>
<li>The benchmark is our title-tuned FLAN descendant, not untouched <code>google/flan-t5-small</code>.</li>
<li>The decoder can only choose page words. The frozen centroid still fills the remaining slot(s) and sometimes supplies the mistake.</li>
<li>Ada and MPS process timings are not production request latency, energy, or memory measurements.</li>
<li>The 32-character-safe result uses a separately scored bounded combiner; we did not silently mutate the locked baseline.</li>
</ul>
<h2>Reproduce and inspect the evidence</h2>
<p>
The paper is accompanied by a <a href="./tab-namer-four-beams-reference/README.md">self-contained source and evidence index</a>, including the exact decoder and glue source, frozen tasks and outputs, blinded audit materials, final score rows, environment pins, and <a href="./tab-namer-four-beams-reference/SHA256SUMS">SHA-256 manifest</a>.
Readers do not need an unlinked copy of this project&rsquo;s <code>scripts/</code> directory to inspect the implementation or recompute the reported summaries.
Regenerating model outputs still requires the separately hashed B-9500 checkpoint; the evidence bundle makes that boundary explicit.
</p>
<pre class="command">python scripts/generate_constrained_titles.py \
--model /path/to/B-9500-step-9500 \
--tasks evidence/tasks_final1000.jsonl \
--tokenizer assets/tokenizer \
--vocab-map assets/technical_250m_vocab.json \
--constraint-mode source-words --strip-wrapper \
--max-content-words 2 --max-source-length 160 \
--max-new-tokens 8 --num-beams 4 --length-penalty 1 \
--output reproduced_final_beam4.jsonl</pre>
<p>Generic-title banning stays off; it hurt the product packet. The default source-word cap is 96.</p>
<p>
Final records: <a href="./tab-namer-four-beams-reference/evidence/protocol_frozen.json">frozen protocol</a>,
<a href="./tab-namer-four-beams-reference/evidence/final_gate.summary.json">gate summary with intervals</a>,
<a href="./tab-namer-four-beams-reference/evidence/structural_audit.json">contract audit</a>, and
<a href="./tab-namer-four-beams-reference/evidence/codex_audit/manifest.json">identity-blind audit manifest</a>.
</p>
<h3>Reproducibility hashes</h3>
<ul>
<li>B-9500 <code>model.safetensors</code>: <code>0f45a1fef0b549bac512243df0aadad64aedec2a6ade7c17af730247b0b3d52a</code></li>
<li>B-9500 <code>config.json</code>: <code>bd146261ee5eaab464002123f5680cc17a0547daee9397fc2d54ec8e8870b8d9</code></li>
<li>Frozen centroid_v2 JSONL: <code>a28aa740572bc369150006bb9e3a850e967555289046c480d64216f9390a160c</code></li>
<li>Corrected raw beam JSONL: <code>f736d9c1e232d99fc56d21bc208004c998c576e0aea085d2fd7742619dd90477</code></li>
<li>Locked-glue JSONL: <code>5f95a123491fd1c8f9216ed149db57ac62f9bd8638ec0b564e2aa9b07cd471ca</code></li>
<li>Bounded-32 glue JSONL: <code>9c9b1bff3a5241e5442f0e0b07103d7472c67f6c5fc6f3b5168726ac0f069928</code></li>
<li>Sealed final tasks: <code>4694f1e4b5269b525fd8fb595f45b9ce65d5f831fdd981537da07479831b6874</code></li>
<li>Frozen final protocol: <code>238e1df1ba77e7583d0e9f032580a3bb85705f08cd2656d0c307de32c55c3789</code></li>
<li>Sealed raw beam JSONL: <code>afc3198b622d25c6cc800c0365880c010bd67299bf887d30025a0409c1efc125</code></li>
<li>Sealed locked-glue JSONL: <code>d28b3c41a596e9006b6d49f17ba8f9f1a3cc31e9cde1cc537c478681a1acd2c0</code></li>
<li>Sealed bounded-32 glue JSONL: <code>8afa62396b8fa47a3cd4a8f54ecc4f8acb606ed142c65f4ca1745d0dbfd46118</code></li>
</ul>
<p class="note">Frozen implementation record: commit <code>931e57b</code>. The final protocol was hashed before generation. Full campaign findings, packet paths, cache hashes, final-gate summary, and teardown record are mirrored in the adjacent reference directory.</p>
</main>
</body>
</html>