Search-Scaffold Universal Curriculum
The one idea you need
Earlier lessons showed a complete worked search trace, but the model still wandered among candidates and ran out of room. This design turns the missing intermediate moves—apply, fit, reject, and execute—into separately graded practice before recombining them.
The question
Can teaching each step of a bounded two-operation search help the model solve and finish fresh abstract tasks better than another equal replay update?
What we found
No. On 26 fresh paired cases, the staged-search model tied replay at 16 correct and trailed its parent at 18. All three parsed 23 answers and hit the limit three times; the candidate solved none of four execute/induct cases and neither probe-selection case.
Why it matters
Separately grading search substates was not enough to make them reusable. The candidate often reached a correct execution state but failed to commit, while its hypothesis simulation regressed. The next mechanism must match the natural-language variable-depth deployment interface rather than add more canonical two-operation lessons.
On this page
Results at a glance 1
How to read
The parent solves 18 of 26 fresh cases; replay and scaffold solve 16. All three parse 23 answers and finish within the cap on 23 cases, so the scaffold does not improve the registered emission seam.
Takeaway → The candidate fails five gates and loses all execute, induction, and probe-selection cases; broad evaluation remains sealed.
Data table
| fresh local outcome | close_xi parent | replay after close | search scaffold after close |
|---|---|---|---|
| exact answers | 18 | 16 | 16 |
| parsed answers | 23 | 23 | 23 |
| within token cap | 23 | 23 | 23 |
Numbers from experiments/qwen35_4b_universal_search_scaffold_token_match/runs/local/seed88007.json
Technical framing
Staged search ties replay and trails its parent locally — Greedy seed 88007 at a 1,024-token cap. Scaffold is also 0/2 execute, 0/2 induct, and 0/2 probe; it fails five gates and aggregate seed 78137 remains sealed.
In the author’s words from the Overview · “Results”
Its final loss is 0.4215; adapter weights/config SHA-256 are 10155232...fc538 / 373c1426...ac9b. The scaffold candidate then trained independently on all 320 rows with zero skips and 40/40 updates. Its final loss is 1.492; adapter weights/config SHA-256 are e7957d90...84618 / 22859c76...2c4ce. Losses are not compared across the different target distributions and carry no capability interpretation. Fresh paired local seed 88,007 produced: close_xi_parent: 18/26 correct, 23/26 parsed, 3 cap contacts; replay_after_close: 16/26 correct, 23/26 parsed, 3 cap contacts; scaffold_after_close: 16/26 correct, 23/26 parsed, 3 cap contacts. The candidate scored 0/2 on execute, 0/2 on induct, and 0/2 on probe, versus parent 1/2, 1/2, and 2/2. … Read the full result →
Overview
This experiment tests whether independently supervised, executable search substates compose into a bounded general reasoning procedure better than an exact-token replay continuation from the same parent.
Research Program
- Program:
agentic_breadth_installation - Program question: can engineered synthetic curricula install substrate-general procedures that improve every held-out benchmark family without displacing the incumbent broad policy?
- Parent result:
qwen35_4b_universal_close_weight_token_match. - Prior anchors: C44/C59 (serial reasoning content is load-bearing), C56 (oracle trace narration is not a reusable induction circuit), and the exact-token mid-density/close-weight local negatives.
Question
Can a staged executable curriculum that teaches the component operations of two-step search—apply a proposed first operation, fit or reject a second operation, execute a verified pair, then solve—cross the unchanged fresh local gate where full narrated induction traces and heavier close loss did not?
Hypothesis
The current curriculum jumps from primitive lessons to a full decomposition trace. At deployment the model repeatedly explores candidates without a bounded decision procedure. Training the intervening states as independently scored, truth-audited subproblems should make candidate evaluation and rejection addressable features. A fixed compact ledger in the final lessons should then compose those features and commit within 1,024 tokens. This is a curriculum-structure intervention, not another close-weight or generic-dose sweep.
Setup
- Only model:
Qwen/Qwen3.5-4B, pinned revision851bf6e.... - Parent: authenticated
close_xiadapter from the completed predecessor (weights16e9dc75...c179, configde953bd5...7ff). - Synthetic source: new executable abstract-index tasks over disjoint randomized surfaces; no benchmark content, outputs, or family implementation is read.
- Candidate block: 80 rows, 16 each of apply-first, fit-second, reject-first, execute-pair, and bounded full-search lessons.
- Frozen exposure: 200 common replay rows plus the 80 staged rows and 40 matched replay fillers. The replay arm uses the same 200 rows plus 120 replay rows. Both arms have 320 rows, exactly 286,814 forward tokens, zero skips, and 40 updates; exactly 200 shuffled positions are byte-identical.
- Training seed: 45. Fresh local seed: 88,007. Conditional aggregate seed: 78,137.
- Local gate: accuracy ≥0.65, parse ≥0.90, cap contacts ≤2, no repeated feasible-route abstention, plus accuracy ≥0.50 (at least one of two) in both
u_executeandu_induct. - Hidden-label boundary: local cases are fresh procedural experiment data. Benchmark access is conditional and aggregate-only through the trusted gateway; benchmark sources, items, transcripts, and private outputs remain unread.
Run
Smoke:
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B \
experiments/qwen35_4b_universal_search_scaffold_token_match/scripts/run.py --smokeFull:
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B \
experiments/qwen35_4b_universal_search_scaffold_token_match/scripts/run.py \
--stage train-control
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B \
experiments/qwen35_4b_universal_search_scaffold_token_match/scripts/run.py \
--stage train-candidate
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B \
experiments/qwen35_4b_universal_search_scaffold_token_match/scripts/run.py \
--stage localThe local stage writes a promotion receipt even on failure. Merge and benchmark remain sealed unless the sole candidate passes; then run --stage merge and --stage benchmark. Each natural stage is committed, rebased, fully checked, pushed to main, and verified in both GitHub workflows before the next starts.
Results
CPU feasibility passed. The deterministic source has 80 truth-audited rows over six surface families. The two frozen streams each contain 320 trainable rows and exactly 286,814 forward tokens at max length 4,096, with zero skips. All 43 experiment tests and the staged smoke harness pass. The replay control has now trained from the authenticated parent on all 320 rows with zero skips and 40/40 updates. Its final loss is 0.4215; adapter weights/config SHA-256 are 10155232...fc538 / 373c1426...ac9b. The scaffold candidate then trained independently on all 320 rows with zero skips and 40/40 updates. Its final loss is 1.492; adapter weights/config SHA-256 are e7957d90...84618 / 22859c76...2c4ce. Losses are not compared across the different target distributions and carry no capability interpretation.
Fresh paired local seed 88,007 produced:
close_xi_parent: 18/26 correct, 23/26 parsed, 3 cap contacts;replay_after_close: 16/26 correct, 23/26 parsed, 3 cap contacts;scaffold_after_close: 16/26 correct, 23/26 parsed, 3 cap contacts.
The candidate scored 0/2 on execute, 0/2 on induct, and 0/2 on probe, versus parent 1/2, 1/2, and 2/2. It failed accuracy ≥0.65, parse ≥0.90, caps ≤2, execute ≥0.50, and induct ≥0.50; only the route-abstention check passed. Promotion is empty. No merge occurred and conditional aggregate seed 78,137 remains sealed.
Interpretation
The registered scaffold does not install its target behavior. Relative to the parent it gains one trace and one repair case but loses one execute, one induct, and both probe cases; relative to replay it is a 3-win/3-loss redistribution. Mean output grows to 520.5 tokens (parent 434.2; replay 471.6), and both execute failures visibly reach the correct final state before over-explaining to the cap. Canonical two-operation scaffolds did not transfer to variable-depth natural-language execution or hypothesis discrimination. Do not repeat this interface or consume the sealed benchmark seed.
Knowledgebase Update
- Program evidence: staged search recorded as a local mechanism negative.
- Program backlog: require a fresh natural-language state-table/compiler successor.
- Claim ledger: unchanged.
Artifacts
src/scripts/configs/data/runs/analysis/reports/reports/artifact_manifest.yamlanalysis/local_forensics.mdruns/local/seed88007.jsonruns/local/seed88007_promotion.jsonidea_intake.md
Report
Rendered from reports/report.md
Summary
The design is frozen after successful CPU feasibility. The same-parent exact-token replay control and staged-search candidate both trained successfully. The scaffold then failed the single fresh local mechanism gate; no merge or benchmark event ran.
Research Program Fit
This is the result-separated successor to the close-weight negative. It preserves the strong emission near-miss but changes mechanism: independently supervised search substates rather than more close loss or another representative dose.
Method
The five stages are apply-first, fit-second, reject-first, execute-pair, and bounded two-branch search. Every target is recomputed by an experiment-local executable specification over abstract surfaces. The candidate contains 200 inherited replay rows, 80 scaffold rows (16/stage), and 40 replay fillers. The control contains the same 200 rows plus 120 replay rows. Both streams have 320 rows, 286,814 forward tokens, zero skips, and 40 frozen updates from the same authenticated parent.
Results
CPU construction passed: source SHA-256 5854c218...a093; candidate stream 79a8d7c9...0b90; replay stream c157fb13...355d; exact token receipt eeb12b95...e4a0f. Forty-three experiment tests and the full smoke harness pass. The replay control completed 40/40 updates over 320/320 rows with zero skips in 281.2 seconds. Final train loss was 0.4215. Its adapter weights/config SHA-256 are 10155232...fc538 / 373c1426...ac9b; receipt/log SHA-256 are 5b293eb6...5a66 / 7d3bc262...d5f7.
The scaffold candidate then completed 40/40 updates over 320/320 rows with zero skips in 291.4 seconds. Final train loss was 1.492. Its adapter weights/config SHA-256 are e7957d90...84618 / 22859c76...2c4ce; receipt/log SHA-256 are 13ba8897...6dd0 / ccaffa7b...99c1. The losses are not a capability comparison because the targets differ.
Fresh paired local seed 88,007 gave parent 18/26 correct, 23/26 parsed, and three cap contacts; replay 16/26, 23/26, and three; scaffold 16/26, 23/26, and three. The candidate was 0/2 on execute, 0/2 on induction, and 0/2 on probe. It failed five of six registered checks—accuracy, parse, cap, execute, and induction—and passed only route abstention. Promotion is empty, so no checkpoint was merged and aggregate seed 78,137 remains sealed.
Controls
- Authenticated
close_xiparent. - Authenticated newly trained replay-only continuation from that parent.
- Exact row, forward-token, update, seed, optimizer, close-weight, and parent matching.
- Two hundred byte-identical replay positions; batch size one avoids padding-compute differences.
- Fresh local procedural seed 88,007 before conditional aggregate seed 78,137.
Oracle Versus Deployable Evidence
Executable generators may use hidden construction state only to truth-audit rows. Promotion uses autonomous greedy model behavior. Benchmark access remains behind the aggregate-only firewall.
Interpretation
The intervention is executable but fails its intended mechanism. Against parent, candidate has two paired wins and four losses; against replay, three wins and three losses. Mean generation length is 520.5 tokens versus 434.2 parent and 471.6 replay. Both candidate execute failures compute the correct final state in visible thought but continue to the cap without an answer. Both probe cases regress from correct in both controls to wrong in candidate, and both induction cases are wrong. The package therefore neither commits after verified execution nor improves branch simulation.
The post-result diagnosis is an interface mismatch: training uses exactly two canonical-coded operations and a two-branch demonstration, while the local executor uses natural-language procedures of variable depth and probe selection requires independent simulation/scoring. This does not justify tuning the observed arm. It justifies a new result-separated natural-language state-table/compiler mechanism.
Next Experiments
Preserve and publish this negative. Start a new experiment with fresh seeds if the next natural-language state-table/compiler mechanism survives idea intake and design review. Do not lower the gate, reuse seed 88,007, merge this adapter, or consume aggregate seed 78,137.
Artifact Manifest
The parent, frozen data identities, commands, and future external-artifact locations are recorded in artifact_manifest.yaml. Both adapters exist externally; the full local receipt and empty promotion receipt are committed. No merge or benchmark artifact exists.
Experiment log 5
Show the running log (5 entries, 2026-07-14)
2026-07-14 — Intake and scaffold
- Ran repository related-work discovery before creation.
- Named the closest near-duplicates: the completed universal curriculum, mid-density exact-token ladder, and close-weight successor.
- Chose a different mechanism: independently scored decomposition-search substates followed by a bounded compact ledger.
- Reserved construction seed 77,111, training seed 45, fresh local seed 88,007, and conditional aggregate seed 78,137.
- No data materialization, model access, training, evaluation, merge, or benchmark event has run.
Next: publish the intake checkpoint, then implement and truth-audit the smallest runnable staged-search stream before adversarial review.
2026-07-14 — Feasibility and design freeze
- Implemented an experiment-local executable operation universe and 80 deterministic lessons: 16 each of apply, fit, reject, execute, and search across colors, digits, letters, nonce strings, Romans, and syllables.
- Independently recomputed every operation, fitting second, unique fitting pair, dead branch, intermediate state, and final answer in tests. The reject stage is balanced 8
FIT/ 8NO_FIT. - Reused the predecessor's authenticated 200-row replay core and 120-row control partition. Selected a disjoint 40-row candidate filler with an exact token sum.
- Froze replay SHA-256
c157fb13...355dand candidate SHA-25679a8d7c9...0b90: 320 rows and 286,814 forward tokens each, zero skips, max sequence 2,991, 40 updates, and exactly 200 byte-identical shuffled positions. - Preserved the non-equivalent target allocation: replay has 116,036 prompt, 167,411 thought, 640 close, and 2,727 answer tokens; candidate has 124,245 prompt, 158,311 thought, 640 close, and 3,618 answer tokens.
- Removed the predecessor's target-specific close-weight interface. Both arms use ordinary thought/close weight 0.2; unit tests lock span behavior.
- Froze wrappers for authenticated same-parent training, local seed 88,007, a sole candidate promotion, explicit merges, and one aggregate-only quick@1,024 paired event at seed 78,137.
- Completed adversarial review with a narrowed claim boundary: the full target shows one dead and one true branch, not exhaustive search. All 43 experiment tests and the staged smoke harness pass.
- No GPU model load, training, local generation, merge, or benchmark event ran.
Next: commit, rebase, run the full repository check, push this design freeze to main, verify both workflows, and only then train the replay control.
2026-07-14 — Replay control training
- Began only after design-freeze commit
603b8107was pushed tomainand both Validate Repository and Publish Research Site completed successfully. - Authenticated the
close_xiwarm start and exact replay stream/token receipt. - Trained
replay_after_closefor the frozen 320 rows, one epoch, 40 optimizer steps, seed 45, and ordinary thought/close weights 0.2. All 320 rows encoded and zero skipped. - Completed in 281.2 wall seconds with final train loss 0.4215.
- Preserved receipt/log hashes
5b293eb6...5a66/7d3bc262...d5f7. External adapter weights/config hashes are10155232...fc538/373c1426...ac9b; weight size is 169,903,320 bytes. - No candidate training, local generation, merge, or benchmark event ran.
Next: publish and CI-verify this control checkpoint, then train the frozen candidate.
2026-07-14 — Scaffold candidate training
- Began only after control commit
b8f11db6was pushed tomainand both GitHub workflows completed successfully. - Independently restarted from the authenticated
close_xiparent; did not continue from or inspect capability behavior of the replay control. - Trained
scaffold_after_closefor the frozen 320 rows, one epoch, 40 optimizer steps, seed 45, and ordinary thought/close weights 0.2. All 320 rows encoded and zero skipped. - Completed in 291.4 wall seconds with final train loss 1.492. This loss is not compared causally with replay loss because target composition differs.
- Preserved receipt/log hashes
13ba8897...6dd0/ccaffa7b...99c1. External adapter weights/config hashes aree7957d90...84618/22859c76...2c4ce; weight size is 169,903,320 bytes. - No local generation, merge, or benchmark event ran.
Next: publish and CI-verify this candidate checkpoint, then consume the single frozen local seed 88,007 over parent, replay control, and candidate together.
2026-07-14 — Fresh local negative
- Began only after candidate commit
9e34c675was pushed tomainand both GitHub workflows completed successfully. - Consumed the single registered experiment-owned seed 88,007 over parent, active replay, and scaffold in one greedy Transformers process at a 1,024-token cap.
- Parent scored 18/26 correct, 23/26 parsed, and three caps; replay scored 16/26, 23/26, and three; scaffold scored 16/26, 23/26, and three.
- Scaffold was 0/2 execute, 0/2 induct, and 0/2 probe. It failed accuracy, parse, cap, execute, and induction checks; route abstention alone passed. Promotion is empty and the harness stopped nonzero as registered.
- Preserved local/gate/promotion receipts. Full local receipt SHA-256 is
156acd37...acdb; promotion SHA-256 is7e1fd417...f1c1. - Post-decision paired forensics show 2 wins/4 losses versus parent and 3/3 versus replay. Candidate mean output grew to 520.5 tokens, and both execute failures computed the correct state before running to cap without a parsed answer.
- No merge ran. Aggregate seed 78,137 remains sealed and no benchmark data was read.
Next: publish this completed negative, then create a fresh result-separated successor for natural-language variable-depth state execution and hypothesis scoring.
Reproduce
Smoke test
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B experiments/qwen35_4b_universal_search_scaffold_token_match/scripts/run.py --smokeFull run
run.py --stage train-control; commit/push/verify; --stage train-candidate; commit/push/verify; --stage local; conditionally --stage merge; conditionally --stage benchmarkRun steps are documented inside the experiment folder (README and scripts).