Research log Small Model Experimentation
GitHub

Close-Weighted Universal Commit Seam

Close weighting missed the local gate

The one idea you need

The previous training recipe nearly learned to finish fresh puzzles, but a few answers ran out of space before the model stopped reasoning. This follow-up teaches the exact transition from reasoning to a final answer while keeping the amount of practice equal across comparisons.

The question

Does putting extra teaching weight on the moment reasoning ends help the model finish reliably, beyond simply adding targeted lessons or more replay practice?

What we found

No. On 26 fresh procedural cases, ordinary and close-weighted target training both produced 23 well-formed answers and three response-limit contacts. Close weighting scored 16 correct versus 15 for ordinary training, but only by gaining one unrelated abstention case; both remained zero for four targeted execution and rule-finding cases. The best arm missed each frozen numeric gate by one case or contact, so the benchmark stayed sealed.

Why it matters

The byte-identical comparison separates the effect of fresh target lessons from the effect of emphasizing the reasoning-to-answer marker. Fresh lessons improved answer emission, but extra marker weight did not. That retires close-weight tuning and redirects the search toward teaching a bounded search procedure itself.

Best fresh accuracy16 of 26tied the immediate parent and missed the gate by one
Well-formed answers23 of 26identical for ordinary and close-weighted training
Response-limit contacts3identical for ordinary and close-weighted training
Targeted cases solved0 of 4execution and rule-finding remained unsolved
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Design result
    2. Model results
    3. Interpretation boundary
  4. Experiment log
  5. Reproduce
  6. Related

Results at a glance 1

Fresh target lessons improve finishing; close weight adds no finishing gain

How to read

Each group shows counts out of the same 26 fresh cases. Higher correct and parsed bars are better; lower response-limit contacts are better.

0102030correctcorrectparsedparsedcap contactscap contacts

Takeaway → Ordinary and close-weighted target arms tie at 23 parsed answers and three limit contacts, while close weight adds only one correct case and still misses promotion.

Data table
fresh local outcomedesigned160 parentreplay repeatordinary targetclose-weighted target
correct16141516
parsed20182323
cap contacts6833

Numbers from experiments/qwen35_4b_universal_close_weight_token_match/runs/local/seed88006.json

Technical framing

Close weighting adds no parse or cap benefit over ordinary target training — Higher correct/parsed counts are better; lower cap contacts are better. Ordinary and close-weighted target arms used identical data bytes and differed only in close-span loss. Neither passed the frozen gate, so benchmark seed 78136 stayed sealed.

In the author’s words from the Overview · “Results”

All three arms completed their registered 40/40 updates over 320 rows and 286,814 forward tokens with zero skips. Replay, standard, and close train losses were 0.4477, 0.6882, and 0.6822; wrapper wall times were 303.44, 302.15, and 287.13 seconds. Their adapter weights hashes are ca5601cd...59d78, 271569fd...3569c, and 16e9dc75...3c179. Fresh paired local seed 88,006 produced: immediate designed160 parent: 16/26 accuracy, 20/26 parsed, 6 cap contacts; replay_repeat: 14/26 accuracy, 18/26 parsed, 8 cap contacts; standard_xi: 15/26 accuracy, 23/26 parsed, 3 cap contacts; close_xi: 16/26 accuracy, 23/26 parsed, 3 cap contacts. Every arm had zero repeated feasible-route abstentions. … Read the full result →

Overview

Research program

Question

Can a short synthetic-curriculum adapter continuation that explicitly trains the model's autonomous </think> transition turn the designed160 local near-miss into a clean install, or is any improvement explained by targeted execute/induct data or replay alone?

Hypothesis

The parent already solves enough local cases but fails to stop and emit: all three of its unparsed designed160 cases hit the 1,024-token cap, and the misses are confined to execute/induct tasks. C50 says successful broad installation depends on where loss is placed near the emission seam, while C51 says answer likelihood after an injected close is non-actionable unless autonomous closing is part of the trained event. Raising the natural close-span weight from the ordinary thought weight 0.2 to the answer weight 1.0 on fresh execute/induct rows should improve closure more than byte-identical ordinary SFT.

Setup

  • Only model: Qwen/Qwen3.5-4B, revision 851bf6e....
  • Warm start: authenticated published designed160 adapter, weights f05c13ae...94654, config 0cd3ca7c...91e58.
  • Fresh targeted block: 40 u_execute and 40 u_induct rows selected without outcomes from source rows absent from the parent's designed160 stream.
  • Shared block: 200 replay rows. Targeted arms add the 80 designed rows plus 40 replay fillers; replay repeat uses 120 replay rows with the exact same 87,454 forward-token sum.
ArmVariable 120-row blockClose loss
replay_repeatreplay only0.2 everywhere
standard_xi80 fresh target + 40 replay0.2 everywhere
close_xibyte-identical to standard_xi1.0 only on target closes; 0.2 otherwise

Every arm has 320 rows, 286,814 forward tokens, zero tokenizer skips, batch size 1, gradient accumulation 8, and 40 optimizer steps. standard_xi and close_xi use the same bytes, order, shuffle seed, prompts, thoughts, answers, and optimizer schedule. Their sole assigned-weight contrast is the two-token autonomous close span on the 80 target rows. The treatment changes that span's weight from 0.2 to 1.0; all other assigned token weights remain unchanged.

Training is one epoch at learning rate 1e-5, rank 32 / alpha 64, w_think=0.2, max length 4,096, and seed 44. The active replay arm uses the same parent, rows, tokens, steps, and optimizer settings.

The local screen uses fresh procedural seed 88,006, greedy generation, 1,024 tokens, and the unchanged absolute gate: accuracy ≥0.65, parse ≥0.90, cap contacts ≤2, and no repeated feasible-route abstention. Only standard_xi and close_xi are promotion candidates; replay repeat and the immediate parent are controls.

If either candidate passes, one aggregate-only quick@1,024 event at fresh seed 78,136 compares base, blend, replay refresh, the immediate parent, active replay, and every eligible candidate as explicitly merged checkpoints on qwen_vllm. The benchmark firewall forbids reading or importing benchmark items, sources, transcripts, or private outputs.

Run

.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --smoke
.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage train-control
.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage train-standard
.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage train-close
.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage local

Merge and benchmark stages are conditional on a treatment arm passing locally:

.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage merge
.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage benchmark

Results

All three arms completed their registered 40/40 updates over 320 rows and 286,814 forward tokens with zero skips. Replay, standard, and close train losses were 0.4477, 0.6882, and 0.6822; wrapper wall times were 303.44, 302.15, and 287.13 seconds. Their adapter weights hashes are ca5601cd...59d78, 271569fd...3569c, and 16e9dc75...3c179.

Fresh paired local seed 88,006 produced:

  • immediate designed160 parent: 16/26 accuracy, 20/26 parsed, 6 cap contacts;
  • replay_repeat: 14/26 accuracy, 18/26 parsed, 8 cap contacts;
  • standard_xi: 15/26 accuracy, 23/26 parsed, 3 cap contacts;
  • close_xi: 16/26 accuracy, 23/26 parsed, 3 cap contacts.

Every arm had zero repeated feasible-route abstentions. Neither treatment passed: standard_xi failed all three numeric gates, while close_xi missed accuracy by one correct case, parse by one parsed case, and the cap ceiling by one contact. The promotion receipt is empty. No checkpoint was merged, and conditional aggregate seed 78,136 remains sealed.

Interpretation

The fresh target continuation, not close reweighting, accounts for the emission improvement: standard_xi and close_xi have identical 23/26 parse and three-cap results. Close weighting adds one correct abstention case over ordinary weighting, but both score 0/4 on the targeted execute/induct cases and the close arm only ties the immediate parent's 16/26 accuracy. Relative to that parent it trades three task-kind wins for three losses while shortening output and improving parseability; this is redistribution, not a generalized install.

The isolated 0.2→1.0 natural-close loss change therefore fails its mechanism test. Do not repeat another close-weight dose or spend the sealed aggregate seed. A successor needs a different, prospectively frozen interface mechanism—one that jointly teaches bounded computation and canonical answer commitment—under a fresh local seed and the same active replay discipline.

Knowledgebase update

  • Program evidence: close weighting recorded as a local mechanism negative.
  • Program backlog: retire close-span reweighting and require a different bounded commit mechanism in a new experiment.
  • Shared synthesis: target data improved emission, but close weighting did not.
  • Claim ledger: unchanged; no result or universal-feature claim exists.

Artifacts

  • idea_intake.md: novelty, near-duplicates, and falsifier.
  • data/stream_manifest.json: exact source exclusions, selections, slots, and sums.
  • data/stream_token_receipt.json: zero-skip and exact-exposure proof.
  • scripts/train_think_close.py: separately weighted autonomous close span.
  • reports/design_review.md and reports/preregistration.md: frozen threats and gates.
  • reports/artifact_manifest.yaml: external parent and planned trained artifacts.
  • runs/local/seed88006.json: complete experiment-owned paired local receipt.
  • runs/local/seed88006_promotion.json: empty promotion decision; benchmark sealed.

Report

Rendered from reports/report.md

Status: completed local negative; no merge or benchmark event

Design result

The outcome-free construction is feasible and frozen. All three continuations start from the authenticated designed160 parent and receive 320 rows, 286,814 forward tokens, 40 optimizer steps, and zero skipped rows. standard_xi and close_xi use the same SHA-256 12fc613b...14f00 stream. The treatment changes only assigned autonomous-close weights on 80 fresh execute/induct rows; active replay exactly matches their total forward-token exposure.

Model results

All three arms completed exactly 40 updates with zero skips. Replay, standard, and close train losses were 0.4477, 0.6882, and 0.6822; wrapper wall times were 303.44, 302.15, and 287.13 seconds; weights hashes were ca5601cd...59d78, 271569fd...3569c, and 16e9dc75...3c179.

On fresh paired local seed 88,006, the immediate parent scored 16/26 accuracy, 20/26 parse, and six cap contacts. Replay repeat scored 14/26, 18/26, and eight; ordinary target training scored 15/26, 23/26, and three; close-weighted training scored 16/26, 23/26, and three. All four arms passed the route-abstention check. Both target candidates failed accuracy ≥0.65, parse ≥0.90, and cap contacts ≤2. The best arm missed each numeric requirement by one case/contact. Promotion was empty, so no merge occurred and aggregate seed 78,136 remains sealed.

Interpretation boundary

The byte-identical contrast falsifies the registered close-weight mechanism at this dose. Ordinary and close-weighted target training produced the same parse and cap metrics; the close arm's only accuracy advantage was one non-target abstention case. Both remained 0/4 on execute/induct, the exact families the intervention targeted. Close weighting tied, rather than exceeded, the immediate parent on aggregate accuracy and redistributed task-kind wins and losses.

This is local procedural evidence only. It shows that fresh target rows can improve answer emission while a higher autonomous-close loss does not add the predicted closure benefit. It provides no broad-transfer or universal-feature evidence. Do not lower the gate, reuse seed 88,006, or benchmark this failed arm; test a different bounded-computation/canonical-commit mechanism in a new directory.

Experiment log 5

Show the running log (5 entries, 2026-07-13 → 14)

2026-07-13 — Intake and design freeze

  • Created a result-separated successor to the exact-token mid-density negative.
  • Audited the parent local receipt: all three unparsed designed160 cases were cap-bound and belonged to u_execute/u_induct.
  • Rejected answer-only teacher forcing after an injected close because C51 already showed that counterfactual state is not reliably reached.
  • Split the natural </think> span from thought and answer loss in the trainer.
  • Selected 40 fresh execute and 40 fresh induct rows with zero parent overlap.
  • Constructed a 200-row shared replay core, 40-row replay filler, and 120-row replay control. Target+filler and replay control each total exactly 87,454 forward tokens.
  • Validated 320 rows, 286,814 forward tokens, 40 updates, and zero skips per arm.
  • Added stream-freshness, slot-identity, boundary, treatment-locality, negative-row, runner, and local-gate tests; 27 tests pass.
  • Completed adversarial design review and preregistration. No scientific GPU work, model evaluation, merge, or benchmark event has run.

Next: commit/rebase/push the frozen design to main, verify CI, then run and publish each training arm as its own incremental checkpoint.

2026-07-14 — Replay control training

  • Published design checkpoint 0fe1a931 to main; repository validation and site publication both passed on GitHub before scientific training began.
  • Trained replay_repeat for exactly 40/40 updates over the authenticated 320-row, 286,814-forward-token stream; zero rows skipped.
  • Train loss: 0.4477. Wrapper wall time: 303.4403 seconds.
  • Adapter weights/config: ca5601cd...59d78 / 63575f72...a49b.
  • Training receipt/log: ffac35d1...1067 / b24444b8...ed28.
  • No treatment, local evaluation, merge, or benchmark event has run.

Next: publish this control receipt checkpoint, then train standard_xi.

2026-07-14 — Ordinary-weight target training

  • Published replay-control checkpoint 6d1761e7 to main; repository validation and site publication both passed on GitHub before the next arm began.
  • Trained standard_xi for exactly 40/40 updates on the byte-frozen target stream; 320 rows, 286,814 forward tokens, and zero skips.
  • Train loss: 0.6882. Wrapper wall time: 302.1492 seconds.
  • Adapter weights/config: 271569fd...3569c / 3e035fbb...f91ec.
  • Training receipt/log: 9ed47653...af8b4 / 73c55663...76294.
  • The close-weighted arm, local evaluation, merge, and benchmark remain unrun.

Next: publish this standard receipt checkpoint, then train byte-identical close_xi.

2026-07-14 — Close-weighted target training

  • Published ordinary-weight checkpoint f8f1b13b to main; repository validation and site publication both passed on GitHub before the close arm began.
  • Trained close_xi for exactly 40/40 updates on the byte-identical target stream; 320 rows, 286,814 forward tokens, and zero skips.
  • The receipt authenticates the sole registered contrast: target close kinds u_execute/u_induct at weight 1.0; all ordinary close spans remain 0.2.
  • Train loss: 0.6822. Wrapper wall time: 287.1305 seconds.
  • Adapter weights/config: 16e9dc75...3c179 / de953bd5...c47ff.
  • Training receipt/log: b18df864...3195a / 66c00e2b...42308.
  • All three arms are trained. Local seed 88006, merge, and benchmark remain unrun.

Next: publish this final training checkpoint, then run the preregistered paired local evaluation exactly once.

2026-07-14 — Fresh local gate negative

  • Published the all-arms checkpoint 755cfad4 to main; repository validation and site publication both passed on GitHub before local evaluation began.
  • Ran the single registered paired seed 88,006 event across the immediate parent, replay control, ordinary target arm, and close-weighted target arm at greedy decode and 1,024 generated tokens.
  • Parent scored 16/26 accuracy, 20/26 parse, and 6 cap contacts. Replay scored 14/26, 18/26, and 8. Standard scored 15/26, 23/26, and 3. Close scored 16/26, 23/26, and 3. Every arm had zero repeated feasible-route abstentions.
  • Both treatment arms failed the frozen accuracy ≥0.65, parse ≥0.90, and cap ≤2 gates. Close weighting missed all three numeric bars by one case/contact and left execute/induct at 0/4, so the promotion list is empty.
  • Full local receipt: runs/local/seed88006.json, SHA-256 e51eec228a598b31f6fb54a1b04eb55cb43b2f841023b3c4865fdc78db2c436c. Promotion receipt: runs/local/seed88006_promotion.json, SHA-256 e7b3cd56ba99b505c8b79b2495dbdb3b25e1368a1563de62d3738ce45aa4c060.
  • Gate receipt hashes: replay d0e8aa6e...39279, standard dc51cc96...af83b, and close 505e854c...fe29.
  • No merge or benchmark event ran; conditional aggregate seed 78,136 remains sealed.

Next: publish this negative result, then create a new result-separated successor with a different bounded-computation/canonical-commit mechanism and fresh seeds.

Reproduce

Smoke test

.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --smoke

Full run

.venv/bin/python experiments/qwen35_4b_universal_close_weight_token_match/scripts/run.py --stage all

Run steps are documented inside the experiment folder (README and scripts).

Browse the experiment folder on GitHub ↗