Tier-1/2 runs (dev + confirmatory, amendments A1-A2), frozen Tier-1 analysis, paper v1.0 draft (Tier-2 confirmatory paragraph pending)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
14 changed files +19,967 −3
modified
docs/DECISION_LOG.md
+4 −0
@@ -44,3 +44,7 @@ All entries are dated; "before freeze" refers to the confirmatory freeze (PREREG | ||
| 44 | 44 | PREREGISTRATION before the development results were read (eligibility = own-vector sufficiency ≥ 0.5; |
| 45 | 45 | selected condition = best dev condition; contrast = selected minus best control on confirmatory queries). |
| 46 | 46 | PREREGISTRATION.md sha256 at Tier-1 freeze: 85c5db69657144e6d6afecfb4fc346c2345d09455fb6134bee615567e5c705ad |
| 47 | +- **D12 (2026-11-09, amendment A1 before the Tier-1 confirmatory run).** Shuffled-query donor state reclassified | |
| 48 | + from null control to mechanism diagnostic (it carries the task identity); both analyses reported. | |
| 49 | +- **D13 (2026-11-09, amendment A2).** Tier-1/2 confirmatory runs load the development localization (layers, | |
| 50 | + vectors) instead of re-localizing on confirmatory queries; first confirmatory run invalidated and re-run. | |
modified
docs/EXPERIMENT_LOG.md
+4 −0
@@ -83,3 +83,7 @@ mechanism unchanged (ablation 0.086 → rescue 1.000, sham 0.115; reverse 0.965) | ||
| 83 | 83 | |
| 84 | 84 | | 2026-11-09 | `graft_tier0_confirmatory_0c2257f6803e` (MPS, PREREGISTRATION v1.0, seed base 90 000) | **completed** | `experiments/summaries/graft_tier0_confirmatory_0c2257f6803e/{results.json,CONFIRMATORY.md,confirmatory.json}` | primary: 9/9 pairs lower bound > SESOI, mean Δ_T^adj 0.875 (sd 0.042, min 0.776) → H2 SUPPORTED; H4 NOT SUPPORTED (one pair control 0.946 < 0.95; others ≥ 0.985); Holm: subspace k8 vs random +0.850, adapter vs base +0.472, weight L0 block vs shuffled +0.556 (retention 0.720), all rejected at Holm; H5 seen 0.941 / unseen 0.768 (ratio 0.816 ≥ 0.8) SUPPORTED; adapter cache 0.702 / 0.000 | |
| 85 | 85 | | 2026-11-09 | `eval_persistent` on the confirmatory run (fresh process, seed base 95 000) | completed | `.../persistent/fresh_process_eval.json` | saved adapter: target 0.344 [0.317, 0.372] vs base 0.115; control 0.979 | |
| 86 | +| 2026-11-09 | `tier1_taskvector_e105e3d91386` (MLX laptop, dev split, 4 pairs, k = 8, 10 vector sets) | completed (1 649 s) | `experiments/summaries/tier1_taskvector_e105e3d91386/results.json` | within-model sufficiency: antonym 0.84–0.88 (L14–L25), capital 0.82–1.00 (L14–L25), addthree only in Llama (0.80, L14), morph none; cross-model best (dev): antonym 0.66–0.81 in all 4 pairs vs best null control 0.38–0.56; capital 0.73 (1.5B→3B, Procrustes L28), 0.50 (Llama→Qwen3B, CCA L18), 0.18 (3B→1.5B), 0.05 (3B→Llama); shuffled-query donor state transfers antonym as well as the matched query (→ amendment A1, D12) | | |
| 87 | +| 2026-11-09 | `tier1_taskvector_eb5d091bf5ed` (MLX on M3U96b, Tier 2: Qwen2.5-7B ↔ Qwen2.5-3B, Qwen2.5-7B → Llama-3.2-3B, dev split) | completed (2 528 s) | `experiments/summaries/tier1_taskvector_eb5d091bf5ed/results.json` (pulled from the node) | Qwen-7B within-model: antonym 0.91 (L16), capital 1.00 (L11), morph 0.03, add-three 0.00; dev transfer: antonym 0.84 both Qwen directions (controls 0.53/0.59), capital 0.91 (3B→7B; unrelated-task control 0.77) / 0.14 (7B→3B); 7B→Llama antonym 0.38 vs control 0.34 (no transfer) | | |
| 88 | +| 2026-11-09 | `tier1_taskvector_confirmatory_82a78041c0ce` | **invalidated** | manifest | re-localized on confirmatory queries (A2/D13); no number used | | |
| 89 | +| 2026-11-09 | `tier1_taskvector_confirmatory_625c54bd186f` (laptop, confirmatory split, dev-frozen localization) | completed | `experiments/summaries/tier1_taskvector_confirmatory_625c54bd186f/{results.json,TIER1_CONFIRMATORY.md}` | H6 per pair (frozen rule, amended controls): Qwen3B→1.5B not supported (antonym +0.16 [0.00, 0.34], capital +0.09); 1.5B→3B partial (capital +0.36 [0.14, 0.59] ✔, antonym +0.28 [0.09, 0.47]); Llama→Qwen3B partial (antonym +0.50 [0.31, 0.69] ✔, capital +0.18 [0.05, 0.36]); Qwen3B→Llama not supported (antonym +0.25 [0.09, 0.41], capital −0.05); add-three/morph not eligible or 0 | | |
modified
docs/PREREGISTRATION.md
+16 −0
@@ -130,3 +130,19 @@ script's conditions. | ||
| 130 | 130 | "partial" if for one; "not supported" otherwise. Also reported: gain vs recipient zero-shot, recipient few-shot |
| 131 | 131 | (prompting ceiling), recipient own vector (within-model ceiling), held-out NLL change and cross-task accuracy. |
| 132 | 132 | - Tier 2 (Qwen2.5-7B pairs, run on M3U96b) follows the same rule. |
| 133 | + | |
| 134 | +### Amendment A1 to the Tier-1 rule (2026-11-09, recorded BEFORE the Tier-1 confirmatory run; D12) | |
| 135 | +The first development pair showed that the "mapped donor few-shot state of a *shuffled* query" condition is not a | |
| 136 | +null control: the recipient keeps its own query in context, and the donor state carries the task identity, so it | |
| 137 | +transfers the task exactly like the matched-query state (antonym, qwen3b→qwen1.5b: 0.72 vs 0.72 on dev). It is | |
| 138 | +reclassified as a **mechanism diagnostic** (task identity vs query content). The null-control set for the H6 | |
| 139 | +contrast is therefore: norm-matched random vector, unrelated-task vector, sham-map vector (random orthogonal map), | |
| 140 | +and mapped donor **zero-shot** state (same map, no task information). The analysis reports both the pre-amendment | |
| 141 | +(shuffled query included) and the amended contrast. | |
| 142 | + | |
| 143 | +### Amendment A2 (2026-11-09, procedural; D13) | |
| 144 | +The first confirmatory Tier-1 run (`tier1_taskvector_confirmatory_82a78041c0ce`) re-localized the recipient's | |
| 145 | +best layer on the confirmatory queries, so some development-selected conditions did not exist in it. As the rule | |
| 146 | +intended, localization (layers, vectors) is frozen from the development split; the run is marked *invalidated* | |
| 147 | +in the registry and re-executed with `--split confirmatory` loading the development localization caches. No | |
| 148 | +numbers from the invalidated run are used. | |
added
docs/review_enrolment/_constraints_WP-AI-0001.md
+8 −0
@@ -0,0 +1,8 @@ | ||
| 1 | +## Paper-specific constraints (binding for every stage of this review) | |
| 2 | +- **Enrolment.** WP-AI-0001 was built autonomously on 2026-11-09 (sprints 0–7 in one session) and enrolled the same day for the full pipeline (Stages A–G) under the standing instructions of the earlier waves: Stages C–G run autonomously; every authorization request is treated as authorised EXCEPT paid API spend (0 USD); the review branch is pushed after every commit; `main` is never touched; one paper at a time; ≤ 7 concurrent subagents. | |
| 3 | +- **Genre.** Mechanistic-interpretability / machine-learning methods paper with a preregistered confirmatory test: can a causally localized subsystem ("organ", a metaphor) be transplanted from a donor language model into a recipient that lacks the capability, without training? Tier 0 = toy decoder transformers (0.80 M params, 4 layers) trained from scratch on an invented operator micro-world (OPSEQ, scratchpad trace, modulus 11), donor = all 8 operators, recipient = operator Ω excluded; localization by interchange interventions; six transplant families (activation, subspace, steering, adapter, weight, persistent) against a control battery (sham map, norm-matched random, shuffled item/layer, unrelated-skill donor) and conventional-learning references (supervised adapter, distillation); PREREGISTRATION v1.0 frozen before the confirmatory run (`graft_tier0_confirmatory_0c2257f6803e`, seed base 90 000); Tier 1 = Qwen2.5-1.5B/3B-Instruct and Llama-3.2-3B-Instruct in bf16 under MLX, task vectors (few-shot − zero-shot last-token state) localized within model and transferred through maps fitted on format-matched task-free prompts; Tier 2 = Qwen2.5-7B pairs on M3U96b. Judge in particular: whether the Tier-0 capability (per-step operator map once the trace is visible) supports the paper's claims; whether "causally identified" is earned (interchange + ablation + rescue + sham); the annihilation proposition (regression-fitted maps remove recipient-unpredictable directions) — its hypotheses, proof and the approximate case; the preregistration (what was frozen, the one failed criterion H4 retention ≥ 0.95, Holm family); the control-adjusted estimand against a sham map that itself destroys the control stratum; same- vs different-initialization pairs (seed = init seed); the donor-in-the-loop nature of the primary graft vs the weaker donor-free variants; rule-vs-cache; the strength of the conventional-learning references; Tier-1 selection on the dev split and the confirmatory split; the MLX backend (no per-head hooks; no Transformers equivalence test); verbs vs descriptive/causal evidence. Referee E: full REFORMS checklist. | |
| 4 | +- **Data and compute.** All Tier-0 data are synthetic and regenerated from seeds (split hashes in `experiments/manifests/*.json`); `experiments/registry/runs.jsonl` lists every run; `experiments/summaries/<run>/results.json` + `CONFIRMATORY.md`; per-item outputs and trained models under `artifacts/` are git-ignored (regenerable: `scripts/train_models.py` ≈ 13 min MPS; `scripts/run_transplant.py` ≈ 3 min). Tier-1/2 need Apple Silicon + mlx_lm + the bf16 checkpoints (HF cache on the laptop and M3U96a/b; Qwen2.5-7B on M3U96b). Stage B referees do not run inference: lightweight checks on `experiments/summaries/` only. Stages D–F may re-run Tier-0 experiments on any node with torch (M4M64a) or the laptop, and MLX inference on M3U96a/b replicas (`~/wpai0001_review/`), one GPU job per node. | |
| 5 | +- **No paid API call (0 USD).** None is needed. Crossref/OpenAlex/arXiv lookups are free and allowed. | |
| 6 | +- **Blinding (addition to COMMON.md).** No prior external review exists. `docs/MANDATE.md` and `CLAUDE.md` are blinded by COMMON.md (they are the author's instructions); `docs/{RESEARCH_GAP,PREREGISTRATION,EXPERIMENT_PLAN,COMPUTE_BUDGET,RISK_REGISTER,REPRODUCIBILITY,EXPERIMENT_LOG,DECISION_LOG,TASKS}.md`, `literature/`, `experiments/` are the author's design/audit records: readable. | |
| 7 | +- **Numbers.** `paper/tables/*.tex` are generated by `scripts/build_tables.py` and `paper/figures/*.pdf` by `scripts/build_figures.py` from `experiments/summaries/<run>/results.json` (`paper/figures/FIGURE_PROVENANCE.md` names the run per figure); confirmatory decisions by `scripts/confirmatory_analysis.py` → `CONFIRMATORY.md` — spot-check the paper against these. | |
| 8 | +- Single-author paper (Boucher). Never touch the author's checkout `ia/wp-ai-0001` nor `M3U96b:~/wpai0001`. | |
added
docs/review_enrolment/_ctx.json
+7 −0
@@ -0,0 +1,7 @@ | ||
| 1 | +{ | |
| 2 | + "num": "AI-0001", | |
| 3 | + "thesis": "in a controlled micro-world (toy decoder transformers trained from scratch on an invented operator language, donor = all 8 operators, recipient = operator Ω excluded), a causally localized subsystem (the post-layer-0 residual row at the read position, identified by interchange interventions, ablation and rescue) can be transplanted at inference time by a donor-in-the-loop activation graft through an orthogonal Procrustes map fitted on task-free rows, lifting the recipient from chance to 0.966 on held-out Ω programs (preregistered confirmatory run, control-adjusted +0.875, 9/9 pairs above the SESOI, control stratum 0.992, one pair below the 0.95 retention criterion), carrying the rule to unseen operands, needing 8 of 128 dimensions and surviving width/depth/stride-2 mismatches; regression-fitted maps (ridge, CCA) annihilate the capability (Proposition 1), donor-free adapters cache, weight grafts cost retention, steering vectors transfer nothing, and conventional learning on the same items is perfect; on open-weight models (Qwen2.5-1.5B/3B, Llama-3.2-3B; Qwen2.5-7B on a node) task vectors are causally sufficient within a model for some tasks and cross-model transfer is reported as measured under a frozen selection rule", | |
| 4 | + "node": "Tier-0 experiments (PyTorch MPS, ≈ 3 min per transplant run, ≈ 13 min for the 17-model matrix) run on the laptop or on M4M64a (torch 2.12 available; `~/wpai0001_review/` replica via rsync of the worktree, never the author's checkout); Tier-1/2 MLX inference on M3U96a/M3U96b replicas (`~/wpai0001_review/`; checkpoints in the HF cache: Qwen2.5-1.5B/3B, Llama-3.2-3B on both, Qwen2.5-7B on M3U96b; mlx_lm 0.31.3), ONE GPU job per node; detached nohup + log + done-marker, pull back only `experiments/summaries/*` and `experiments/manifests/*` (≤ 20 MB) and commit per package", | |
| 5 | + "rules": "BINDING (peer_reviews/WP-AI-0001/_constraints.md): 0 USD — no paid LLM/API call (none needed); the frozen PREREGISTRATION text (v1.0 + Tier-1 rule) is never rewritten (dated amendments only in DECISION_LOG); trained models and runs are never deleted (new runs get new ids); never touch the author's checkout ia/wp-ai-0001 nor M3U96b:~/wpai0001", | |
| 6 | + "ar": "AR-AI0001-1" | |
| 7 | +} | |
| \ No newline at end of file | ||
added
docs/review_enrolment/_stage_params.json
+13 −0
@@ -0,0 +1,13 @@ | ||
| 1 | +{ | |
| 2 | + "node": "laptop or M4M64a for Tier 0 (torch); M3U96a/M3U96b for MLX Tier 1/2", | |
| 3 | + "nodedir": "~/wpai0001_review", | |
| 4 | + "cache": "HF hub cache on the nodes (bf16 checkpoints); artifacts/models/matrix_v1 regenerable in ≈ 13 min", | |
| 5 | + "noderules": "Compute: Tier-0 re-runs (`scripts/train_models.py`, `scripts/run_transplant.py`, `scripts/eval_persistent.py`, `scripts/confirmatory_analysis.py`) take minutes on MPS: run them on the laptop (`nice -n 10`) or on M4M64a (`rsync -a --exclude artifacts --exclude .git <worktree>/ M4M64a:~/wpai0001_review/`; torch 2.12.1 present); Tier-1/2 MLX runs (`scripts/run_tier1.py`) on M3U96a or M3U96b replicas with the checkpoints in their HF cache, ONE GPU job per node (`mld scan` first; never M1M32; never the author's `~/wpai0001`); detached via nohup + log + done-marker, poll every 60–120 s, pull back only `experiments/summaries/<run>/` and `experiments/manifests/<run>.json` and commit per package; every new run gets a new run id (never overwrite); the frozen preregistration is never rewritten. 0 USD.", | |
| 6 | + "lrules": "Batch L (text, bibliography, tables/figures regeneration from committed results, sub-minute checks): laptop allowed (`python3 -I`, `nice -n 10`); anything > 10 min goes to a node replica as for batch N. 0 USD.", | |
| 7 | + "gen": "paper tables are generated by `scripts/build_tables.py` and figures by `scripts/build_figures.py --run <run id>` from `experiments/summaries/<run>/results.json` (provenance in `paper/figures/FIGURE_PROVENANCE.md`); confirmatory decisions by `scripts/confirmatory_analysis.py` (Tier 0) and `scripts/tier1_analysis.py` (Tier 1/2); claims mapped in `docs/CLAIM_EVIDENCE.md`", | |
| 8 | + "exhibit_paths": "scripts/*.py (generators and fixes), src/wp_ai_0001/** (fixes with tests), tests/**, experiments/{registry,manifests,summaries}/** (new runs only; never rewriting existing runs), paper/tables/*.tex, paper/figures/*, paper/main.tex ONLY for \\input lines and the exhibit preamble, docs/CLAIM_EVIDENCE.md, README.md exhibit map — PLUS the author's figure mandate of 2026-11-09 (improvements/_FIGURE_MANDATE_2026-11-09.md, binding): one 'cartography' system-map figure (donor → localization → map → graft → evaluation, with the models/nodes/backends used) placed early, every figure legendary-grade (vector, validated palette, uncertainty, units, grayscale-safe, self-contained captions), audited in colour and grayscale", | |
| 9 | + "writing_paths": "paper/sections/*.tex, paper/appendix/*.tex prose and proofs, the title/subtitle/abstract/version macros of paper/main.tex (\\WPversion → 1.1), paper/references.bib (Stage D additions per improvements/WP-AI-0001/literature_additions.md; verified entries only), README.md prose, docs/{EXPERIMENT_LOG,DECISION_LOG}.md (dated entries only; PREREGISTRATION never rewritten), improvements/WP-AI-0001/response_to_referees.md", | |
| 10 | + "thesis": "TO FILL after Stage D from improvements/WP-AI-0001/implemented_changes.md", | |
| 11 | + "verify_numbers": "TO FILL after Stage D", | |
| 12 | + "repo": "wpai0001_uqo.git" | |
| 13 | +} | |
| \ No newline at end of file | ||
added
docs/review_enrolment/enroll_wpai0001.py
+34 −0
@@ -0,0 +1,34 @@ | ||
| 1 | +#!/usr/bin/env python3 | |
| 2 | +"""Enrol WP-AI-0001 in the UQO-WP-REVIEW pipeline: registry entry, blinded record, status file, constraints. | |
| 3 | +Computes pages / n_refs / git head at run time. Idempotent (replaces an existing WP-AI-0001 entry).""" | |
| 4 | +import json, os, re, subprocess, datetime | |
| 5 | +ROOT=os.path.expanduser('~/Desktop/UQO/Recherche/Recherche-UQO'); REV=f'{ROOT}/UQO-WP-REVIEW' | |
| 6 | +PID='WP-AI-0001'; PATH='ia/wp-ai-0001'; SRC=f'{ROOT}/{PATH}' | |
| 7 | +def sh(c): return subprocess.check_output(c,shell=True,text=True).strip() | |
| 8 | +head=sh(f'git -C {SRC} rev-parse --short HEAD'); dirty=int(sh(f'git -C {SRC} status --porcelain | wc -l')) | |
| 9 | +pages=int(sh(f'pdfinfo {SRC}/paper/main.pdf | awk \'/^Pages/{{print $2}}\'')) | |
| 10 | +nrefs=len(re.findall(r'^@\w+\{', open(f'{SRC}/paper/references.bib').read(), re.M)) | |
| 11 | +tex=open(f'{SRC}/paper/main.tex').read() | |
| 12 | +ver=re.search(r'\\newcommand\{\\WPversion\}\{(.*?)\}',tex).group(1); date=re.search(r'\\newcommand\{\\WPdate\}\{(.*?)\}',tex).group(1); jel=re.search(r'\\newcommand\{\\WPjel\}\{(.*?)\}',tex).group(1) | |
| 13 | +title=re.search(r'\\newcommand\{\\WPtitle\}\{(.*?)\}',tex).group(1); sub=re.search(r'\\newcommand\{\\WPsubtitle\}\{(.*?)\}',tex).group(1) | |
| 14 | +now=datetime.datetime.now().astimezone().isoformat(timespec='seconds') | |
| 15 | +readme=open(f'{SRC}/README.md').read(); m=re.search(r'\*\*TL;DR\*\*\s*—\s*(.*?)\n\n',readme,re.S); tldr=re.sub(r'\s*\n>\s*',' ',m.group(1)).strip() if m else '' | |
| 16 | +entry={"id":PID,"number":None,"series":"UQO","alt_ids":["wp-ai-0001","AI-0001"],"title":title,"short_title":"Neural Organ Transplant","subtitle":sub, | |
| 17 | + "authors":["Simon-Pierre Boucher"],"discipline":"ai","paper_type":"computational","path":PATH,"git_remote":"gitsrv:srv/git/wpai0001_uqo.git","git_head":head,"git_dirty_files":dirty,"git_tags":[], | |
| 18 | + "baseline_tag":"review-baseline-20261103","review_branch":"review-20261103","worktree":f"UQO-WP-REVIEW/worktrees/{PID}", | |
| 19 | + "manuscript":{"main_tex":"paper/main.tex","pdf":"paper/main.pdf","pages":pages,"pdf_mtime":datetime.date.today().isoformat(),"engine":"pdflatex (paper/.latexmkrc)","bib":["paper/references.bib"],"n_refs":nrefs,"bib_system":"natbib","version_macro":ver,"date_macro":date,"jel":jel}, | |
| 20 | + "code":{"languages":["python","shell"],"entrypoints":sorted(os.listdir(f'{SRC}/scripts')),"env_files":["pyproject.toml"],"has_makefile":False}, | |
| 21 | + "data":{"summary":"synthetic micro-world splits regenerated from seeds (hashes in manifests); Tier-1 task lists in src; open-weight checkpoints from the HF hub (not committed)","data_dir_mb":0.0,"data_n_files":1,"data_gitignored":True,"raw_preserved":"n/a (synthetic)","sources":"to be completed by Referee D (Stage B)"}, | |
| 22 | + "compute_home":"laptop (M5 Max, MPS + MLX); Tier-2 pairs on M3U96b (~/wpai0001)","status":"complete", | |
| 23 | + "dissemination":{"ssrn_id":None,"ssrn_status":"not on SSRN","target_journals":[],"submitted":False}, | |
| 24 | + "known_limitations":["Tier-0 capability is a per-step map once the trace is visible; donor-in-the-loop graft; conventional learning perfect on the same items; Tier-1 three models, four tasks"], | |
| 25 | + "readme_tldr":tldr,"prior_reviews":[],"review_status":{"stage":"0","gate_passed":None,"last_update":now},"checksums_file":f"UQO-WP-REVIEW/manuscripts/{PID}/original/SHA256SUMS","in_scope":True} | |
| 26 | +reg=json.load(open(f'{REV}/registry/working_papers.json')) | |
| 27 | +reg['papers']=[p for p in reg['papers'] if p['id']!=PID]+[entry]; reg['n_in_scope']=sum(1 for p in reg['papers'] if p.get('in_scope')); reg['generated_update']=now | |
| 28 | +json.dump(reg,open(f'{REV}/registry/working_papers.json','w'),indent=1,ensure_ascii=False) | |
| 29 | +# blinded record = entry without review/status/known_limitations/prior_reviews | |
| 30 | +rec={k:v for k,v in entry.items() if k not in ('review_status','status','known_limitations','prior_reviews','in_scope','git_remote','git_dirty_files','git_tags','baseline_tag','review_branch','checksums_file','alt_ids','short_title','readme_tldr')} | |
| 31 | +os.makedirs(f'{REV}/peer_reviews/_briefs/records',exist_ok=True); json.dump(rec,open(f'{REV}/peer_reviews/_briefs/records/{PID}.json','w'),indent=1,ensure_ascii=False) | |
| 32 | +st={"id":PID,"path":PATH,"stage":"0","gate_passed":[],"timestamp":now,"blocking_items":[],"engine_unavailable":[],"api_budget_usd":{"ceiling":0,"spent":0},"notes":[f"{now}: enrolled by the author for the full pipeline (Stages A–G), standing instructions: C–G autonomous, 0 USD, review branch pushed, main untouched, one paper at a time, ≤ 7 concurrent subagents."],"authorization_pending":[],"authorizations":{}} | |
| 33 | +json.dump(st,open(f'{REV}/status/{PID}.json','w'),indent=1) | |
| 34 | +print('enrolled',PID,'head',head,'pages',pages,'refs',nrefs,'version',ver) | |
added
experiments/manifests/tier1_taskvector_confirmatory_625c54bd186f.json
+81 −0
@@ -0,0 +1,81 @@ | ||
| 1 | +{ | |
| 2 | + "config": { | |
| 3 | + "k": 8, | |
| 4 | + "localization": "dev-frozen (A2)", | |
| 5 | + "pairs": [ | |
| 6 | + "qwen3b:qwen1.5b", | |
| 7 | + "qwen1.5b:qwen3b", | |
| 8 | + "llama3b:qwen3b", | |
| 9 | + "qwen3b:llama3b" | |
| 10 | + ], | |
| 11 | + "quick": false, | |
| 12 | + "split": "confirmatory", | |
| 13 | + "task_seed": 0 | |
| 14 | + }, | |
| 15 | + "created_utc": "2026-11-09T08:44:05+00:00", | |
| 16 | + "data_hashes": { | |
| 17 | + "addthree": { | |
| 18 | + "hash": "cd3d9a8ce6bdbdd9", | |
| 19 | + "n_queries": 35 | |
| 20 | + }, | |
| 21 | + "antonym": { | |
| 22 | + "hash": "fd3396e4fae62697", | |
| 23 | + "n_queries": 32 | |
| 24 | + }, | |
| 25 | + "capital": { | |
| 26 | + "hash": "e19a1f86c4dae78e", | |
| 27 | + "n_queries": 22 | |
| 28 | + }, | |
| 29 | + "morph": { | |
| 30 | + "hash": "09bcd55b41ce2ba7", | |
| 31 | + "n_queries": 40 | |
| 32 | + } | |
| 33 | + }, | |
| 34 | + "experiment_id": "tier1_taskvector_confirmatory", | |
| 35 | + "git": { | |
| 36 | + "branch": "main", | |
| 37 | + "commit": "043b146ef4ae8b081c2c6f0246c4c609b04db4c7", | |
| 38 | + "dirty": true | |
| 39 | + }, | |
| 40 | + "hardware": { | |
| 41 | + "chip": "Apple M5 Max", | |
| 42 | + "cpu_count": 18, | |
| 43 | + "hostname_hash": "9ad7358c662e", | |
| 44 | + "machine": "arm64", | |
| 45 | + "memory_gb": 48.0, | |
| 46 | + "platform": "macOS-27.0-arm64-arm-64bit-Mach-O", | |
| 47 | + "torch_cuda": false, | |
| 48 | + "torch_mps": true | |
| 49 | + }, | |
| 50 | + "history": [ | |
| 51 | + { | |
| 52 | + "note": "", | |
| 53 | + "status": "running", | |
| 54 | + "utc": "2026-11-09T08:44:08+00:00" | |
| 55 | + }, | |
| 56 | + { | |
| 57 | + "note": "", | |
| 58 | + "status": "completed", | |
| 59 | + "utc": "2026-11-09T09:06:53+00:00" | |
| 60 | + } | |
| 61 | + ], | |
| 62 | + "interpretation": "", | |
| 63 | + "libraries": { | |
| 64 | + "mlx": "?", | |
| 65 | + "mlx_lm": "0.31.3", | |
| 66 | + "numpy": "2.4.4", | |
| 67 | + "pydantic": "2.13.4", | |
| 68 | + "python": "3.14.4", | |
| 69 | + "safetensors": "0.7.0", | |
| 70 | + "scipy": "1.17.1", | |
| 71 | + "torch": "2.12.0", | |
| 72 | + "transformers": "5.8.1" | |
| 73 | + }, | |
| 74 | + "outputs": { | |
| 75 | + "results": "experiments/summaries/tier1_taskvector_confirmatory_625c54bd186f/results.json" | |
| 76 | + }, | |
| 77 | + "run_id": "tier1_taskvector_confirmatory_625c54bd186f", | |
| 78 | + "seeds": {}, | |
| 79 | + "status": "completed", | |
| 80 | + "warnings": [] | |
| 81 | +} | |
| \ No newline at end of file | ||
added
experiments/manifests/tier1_taskvector_confirmatory_82a78041c0ce.json
+61 −0
@@ -0,0 +1,61 @@ | ||
| 1 | +{ | |
| 2 | + "config": { | |
| 3 | + "k": 8, | |
| 4 | + "pairs": [ | |
| 5 | + "qwen3b:qwen1.5b", | |
| 6 | + "qwen1.5b:qwen3b", | |
| 7 | + "llama3b:qwen3b", | |
| 8 | + "qwen3b:llama3b" | |
| 9 | + ], | |
| 10 | + "quick": false, | |
| 11 | + "split": "confirmatory", | |
| 12 | + "task_seed": 0 | |
| 13 | + }, | |
| 14 | + "created_utc": "2026-11-09T08:42:55+00:00", | |
| 15 | + "data_hashes": {}, | |
| 16 | + "experiment_id": "tier1_taskvector_confirmatory", | |
| 17 | + "git": { | |
| 18 | + "branch": "main", | |
| 19 | + "commit": "043b146ef4ae8b081c2c6f0246c4c609b04db4c7", | |
| 20 | + "dirty": true | |
| 21 | + }, | |
| 22 | + "hardware": { | |
| 23 | + "chip": "Apple M5 Max", | |
| 24 | + "cpu_count": 18, | |
| 25 | + "hostname_hash": "9ad7358c662e", | |
| 26 | + "machine": "arm64", | |
| 27 | + "memory_gb": 48.0, | |
| 28 | + "platform": "macOS-27.0-arm64-arm-64bit-Mach-O", | |
| 29 | + "torch_cuda": false, | |
| 30 | + "torch_mps": true | |
| 31 | + }, | |
| 32 | + "history": [ | |
| 33 | + { | |
| 34 | + "note": "", | |
| 35 | + "status": "running", | |
| 36 | + "utc": "2026-11-09T08:42:58+00:00" | |
| 37 | + }, | |
| 38 | + { | |
| 39 | + "note": "first confirmatory attempt re-localized on confirmatory queries (A2/D13); a relaunch under the same id was killed; superseded by the A2 run id", | |
| 40 | + "status": "invalidated", | |
| 41 | + "utc": "2026-11-09T08:55:00+00:00" | |
| 42 | + } | |
| 43 | + ], | |
| 44 | + "interpretation": "", | |
| 45 | + "libraries": { | |
| 46 | + "mlx": "?", | |
| 47 | + "mlx_lm": "0.31.3", | |
| 48 | + "numpy": "2.4.4", | |
| 49 | + "pydantic": "2.13.4", | |
| 50 | + "python": "3.14.4", | |
| 51 | + "safetensors": "0.7.0", | |
| 52 | + "scipy": "1.17.1", | |
| 53 | + "torch": "2.12.0", | |
| 54 | + "transformers": "5.8.1" | |
| 55 | + }, | |
| 56 | + "outputs": {}, | |
| 57 | + "run_id": "tier1_taskvector_confirmatory_82a78041c0ce", | |
| 58 | + "seeds": {}, | |
| 59 | + "status": "invalidated", | |
| 60 | + "warnings": [] | |
| 61 | +} | |
| \ No newline at end of file | ||
modified
experiments/manifests/tier1_taskvector_e105e3d91386.json
+27 −3
@@ -12,7 +12,24 @@ | ||
| 12 | 12 | "task_seed": 0 |
| 13 | 13 | }, |
| 14 | 14 | "created_utc": "2026-11-09T07:46:30+00:00", |
| 15 | − "data_hashes": {}, | |
| 15 | + "data_hashes": { | |
| 16 | + "addthree": { | |
| 17 | + "hash": "e2d74cd2fbf01431", | |
| 18 | + "n_queries": 35 | |
| 19 | + }, | |
| 20 | + "antonym": { | |
| 21 | + "hash": "6f74ac11f9505135", | |
| 22 | + "n_queries": 32 | |
| 23 | + }, | |
| 24 | + "capital": { | |
| 25 | + "hash": "78ba5b39d43d42d5", | |
| 26 | + "n_queries": 22 | |
| 27 | + }, | |
| 28 | + "morph": { | |
| 29 | + "hash": "df15df1dd69d1028", | |
| 30 | + "n_queries": 40 | |
| 31 | + } | |
| 32 | + }, | |
| 16 | 33 | "experiment_id": "tier1_taskvector", |
| 17 | 34 | "git": { |
| 18 | 35 | "branch": "main", |
@@ -34,6 +51,11 @@ | ||
| 34 | 51 | "note": "", |
| 35 | 52 | "status": "running", |
| 36 | 53 | "utc": "2026-11-09T07:46:33+00:00" |
| 54 | + }, | |
| 55 | + { | |
| 56 | + "note": "", | |
| 57 | + "status": "completed", | |
| 58 | + "utc": "2026-11-09T08:14:02+00:00" | |
| 37 | 59 | } |
| 38 | 60 | ], |
| 39 | 61 | "interpretation": "", |
@@ -48,9 +70,11 @@ | ||
| 48 | 70 | "torch": "2.12.0", |
| 49 | 71 | "transformers": "5.8.1" |
| 50 | 72 | }, |
| 51 | − "outputs": {}, | |
| 73 | + "outputs": { | |
| 74 | + "results": "experiments/summaries/tier1_taskvector_e105e3d91386/results.json" | |
| 75 | + }, | |
| 52 | 76 | "run_id": "tier1_taskvector_e105e3d91386", |
| 53 | 77 | "seeds": {}, |
| 54 | − "status": "running", | |
| 78 | + "status": "completed", | |
| 55 | 79 | "warnings": [] |
| 56 | 80 | } |
| \ No newline at end of file | ||
added
experiments/manifests/tier1_taskvector_eb5d091bf5ed.json
+77 −0
@@ -0,0 +1,77 @@ | ||
| 1 | +{ | |
| 2 | + "config": { | |
| 3 | + "k": 8, | |
| 4 | + "pairs": [ | |
| 5 | + "qwen7b:qwen3b", | |
| 6 | + "qwen3b:qwen7b", | |
| 7 | + "qwen7b:llama3b" | |
| 8 | + ], | |
| 9 | + "quick": false, | |
| 10 | + "split": "dev", | |
| 11 | + "task_seed": 0 | |
| 12 | + }, | |
| 13 | + "created_utc": "2026-11-09T07:54:32+00:00", | |
| 14 | + "data_hashes": { | |
| 15 | + "addthree": { | |
| 16 | + "hash": "e2d74cd2fbf01431", | |
| 17 | + "n_queries": 35 | |
| 18 | + }, | |
| 19 | + "antonym": { | |
| 20 | + "hash": "6f74ac11f9505135", | |
| 21 | + "n_queries": 32 | |
| 22 | + }, | |
| 23 | + "capital": { | |
| 24 | + "hash": "78ba5b39d43d42d5", | |
| 25 | + "n_queries": 22 | |
| 26 | + }, | |
| 27 | + "morph": { | |
| 28 | + "hash": "df15df1dd69d1028", | |
| 29 | + "n_queries": 40 | |
| 30 | + } | |
| 31 | + }, | |
| 32 | + "experiment_id": "tier1_taskvector", | |
| 33 | + "git": { | |
| 34 | + "branch": null, | |
| 35 | + "commit": null, | |
| 36 | + "dirty": null | |
| 37 | + }, | |
| 38 | + "hardware": { | |
| 39 | + "chip": "Apple M3 Ultra", | |
| 40 | + "cpu_count": 28, | |
| 41 | + "hostname_hash": "1f59c4ad75ba", | |
| 42 | + "machine": "arm64", | |
| 43 | + "memory_gb": 96.0, | |
| 44 | + "platform": "macOS-26.4-arm64-arm-64bit-Mach-O" | |
| 45 | + }, | |
| 46 | + "history": [ | |
| 47 | + { | |
| 48 | + "note": "", | |
| 49 | + "status": "running", | |
| 50 | + "utc": "2026-11-09T07:54:32+00:00" | |
| 51 | + }, | |
| 52 | + { | |
| 53 | + "note": "", | |
| 54 | + "status": "completed", | |
| 55 | + "utc": "2026-11-09T08:36:41+00:00" | |
| 56 | + } | |
| 57 | + ], | |
| 58 | + "interpretation": "", | |
| 59 | + "libraries": { | |
| 60 | + "mlx": "?", | |
| 61 | + "mlx_lm": "0.31.3", | |
| 62 | + "numpy": "2.4.4", | |
| 63 | + "pydantic": "2.13.4", | |
| 64 | + "python": "3.14.4", | |
| 65 | + "safetensors": "0.7.0", | |
| 66 | + "scipy": "1.17.1", | |
| 67 | + "torch": null, | |
| 68 | + "transformers": "5.10.2" | |
| 69 | + }, | |
| 70 | + "outputs": { | |
| 71 | + "results": "experiments/summaries/tier1_taskvector_eb5d091bf5ed/results.json" | |
| 72 | + }, | |
| 73 | + "run_id": "tier1_taskvector_eb5d091bf5ed", | |
| 74 | + "seeds": {}, | |
| 75 | + "status": "completed", | |
| 76 | + "warnings": [] | |
| 77 | +} | |
| \ No newline at end of file | ||
modified
experiments/registry/runs.jsonl
+12 −0
@@ -23,3 +23,15 @@ | ||
| 23 | 23 | {"experiment_id": "graft_tier0_confirmatory", "results": "experiments/summaries/graft_tier0_confirmatory_0c2257f6803e/results.json", "run_id": "graft_tier0_confirmatory_0c2257f6803e", "status": "completed", "utc": "2026-11-09T07:44:03+00:00"} |
| 24 | 24 | {"error": "ValueError(\"invalid literal for int() with base 10: 'rocrustes'\")", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_e105e3d91386", "status": "failed", "utc": "2026-11-09T07:45:09+00:00"} |
| 25 | 25 | {"config_hash": "e105e3d91386", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_e105e3d91386", "status": "planned", "utc": "2026-11-09T07:46:33+00:00"} |
| 26 | +{"experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_e105e3d91386", "status": "completed", "utc": "2026-11-09T08:14:02+00:00"} | |
| 27 | +{"config_hash": "82a78041c0ce", "experiment_id": "tier1_taskvector_confirmatory", "run_id": "tier1_taskvector_confirmatory_82a78041c0ce", "status": "planned", "utc": "2026-11-09T08:15:06+00:00"} | |
| 28 | +{"config_hash": "eb5d091bf5ed", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_eb5d091bf5ed", "status": "planned", "utc": "2026-11-09T07:50:22+00:00"} | |
| 29 | +{"error": "ModuleNotFoundError(\"No module named 'torch'\")", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_eb5d091bf5ed", "status": "failed", "utc": "2026-11-09T07:50:22+00:00"} | |
| 30 | +{"config_hash": "eb5d091bf5ed", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_eb5d091bf5ed", "status": "planned", "utc": "2026-11-09T07:51:06+00:00"} | |
| 31 | +{"config_hash": "eb5d091bf5ed", "experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_eb5d091bf5ed", "status": "planned", "utc": "2026-11-09T07:54:32+00:00"} | |
| 32 | +{"experiment_id": "tier1_taskvector", "run_id": "tier1_taskvector_eb5d091bf5ed", "status": "completed", "utc": "2026-11-09T08:36:41+00:00"} | |
| 33 | +{"experiment_id": "tier1_taskvector_confirmatory", "run_id": "tier1_taskvector_confirmatory_82a78041c0ce", "status": "completed", "utc": "2026-11-09T08:41:48+00:00"} | |
| 34 | +{"utc": "2026-11-09T08:50:00+00:00", "run_id": "tier1_taskvector_confirmatory_82a78041c0ce", "experiment_id": "tier1_taskvector_confirmatory", "status": "invalidated", "note": "layers not frozen from dev (A2/D13)"} | |
| 35 | +{"config_hash": "82a78041c0ce", "experiment_id": "tier1_taskvector_confirmatory", "run_id": "tier1_taskvector_confirmatory_82a78041c0ce", "status": "planned", "utc": "2026-11-09T08:42:58+00:00"} | |
| 36 | +{"config_hash": "625c54bd186f", "experiment_id": "tier1_taskvector_confirmatory", "run_id": "tier1_taskvector_confirmatory_625c54bd186f", "status": "planned", "utc": "2026-11-09T08:44:08+00:00"} | |
| 37 | +{"experiment_id": "tier1_taskvector_confirmatory", "run_id": "tier1_taskvector_confirmatory_625c54bd186f", "status": "completed", "utc": "2026-11-09T09:06:53+00:00"} | |
added
experiments/summaries/tier1_taskvector_confirmatory_625c54bd186f/TIER1_CONFIRMATORY.md
+26 −0
@@ -0,0 +1,26 @@ | ||
| 1 | +# Tier-1/2 confirmatory analysis — dev `tier1_taskvector_e105e3d91386`, confirmatory `tier1_taskvector_confirmatory_625c54bd186f` | |
| 2 | + | |
| 3 | +| pair | task | eligible (own vector dev) | selected condition (dev acc) | conf: zero / few / own / selected / best control | selected − best control [95% CI] | | |
| 4 | +|---|---|---|---|---|---| | |
| 5 | +| qwen3b->qwen1.5b | antonym | yes (0.88) | replace_donor_fewshot|procrustes|L16 (0.72) | 0.19 / 0.94 / 0.91 / **0.59** / 0.44 (random_orth|L19|a1.0) | +0.16 [+0.00, +0.34]; pre-A1 control 0.69; shuffled-query diag. 0.69 | | |
| 6 | +| qwen3b->qwen1.5b | capital | yes (0.86) | ridge|L22|a1.0 (0.18) | 0.00 / 1.00 / 0.82 / **0.09** / 0.00 (random_orth|L19|a1.0) | +0.09 [+0.00, +0.23]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 7 | +| qwen3b->qwen1.5b | morph | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 0.30 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 8 | +| qwen3b->qwen1.5b | addthree | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 0.86 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 9 | +| **qwen3b->qwen1.5b** | | | | | **H6 not supported (0 task(s))** | | |
| 10 | +| qwen1.5b->qwen3b | antonym | yes (0.88) | procrustes_rescaled|L21|a1.0 (0.75) | 0.09 / 0.94 / 0.91 / **0.69** / 0.41 (ctl_unrelated_task_vector(capital)|L25) | +0.28 [+0.09, +0.47]; pre-A1 control 0.81; shuffled-query diag. 0.81 | | |
| 11 | +| qwen1.5b->qwen3b | capital | yes (0.82) | procrustes|L28|a1.0 (0.73) | 0.14 / 1.00 / 0.82 / **0.55** / 0.18 (ctl_unrelated_task_vector(antonym)|L28) | +0.36 [+0.14, +0.59] ✔; pre-A1 control 0.27; shuffled-query diag. 0.27 | | |
| 12 | +| qwen1.5b->qwen3b | morph | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 0.40 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 13 | +| qwen1.5b->qwen3b | addthree | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 1.00 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 14 | +| **qwen1.5b->qwen3b** | | | | | **H6 partial (1 task(s))** | | |
| 15 | +| llama3b->qwen3b | antonym | yes (0.88) | cca|L25|a1.0 (0.81) | 0.09 / 0.94 / 0.91 / **0.81** / 0.31 (ctl_unrelated_task_vector(capital)|L25) | +0.50 [+0.31, +0.69] ✔; pre-A1 control 0.81; shuffled-query diag. 0.81 | | |
| 16 | +| llama3b->qwen3b | capital | yes (0.82) | cca|L18|a1.0 (0.50) | 0.14 / 1.00 / 0.82 / **0.64** / 0.45 (ctl_replace_donor_zeroshot|sham_map|L18) | +0.18 [+0.05, +0.36]; pre-A1 control 0.45; shuffled-query diag. 0.41 | | |
| 17 | +| llama3b->qwen3b | morph | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 0.40 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 18 | +| llama3b->qwen3b | addthree | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 1.00 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 19 | +| **llama3b->qwen3b** | | | | | **H6 partial (1 task(s))** | | |
| 20 | +| qwen3b->llama3b | antonym | yes (0.84) | procrustes|L14|a1.0 (0.66) | 0.06 / 0.91 / 0.84 / **0.59** / 0.34 (ctl_unrelated_task_vector(capital)|L19) | +0.25 [+0.09, +0.41]; pre-A1 control 0.38; shuffled-query diag. 0.38 | | |
| 21 | +| qwen3b->llama3b | capital | yes (1.00) | procrustes|L14|a1.0 (0.05) | 0.09 / 1.00 / 1.00 / **0.09** / 0.14 (ctl_unrelated_task_vector(antonym)|L14) | -0.05 [-0.18, +0.09]; pre-A1 control 0.14; shuffled-query diag. 0.09 | | |
| 22 | +| qwen3b->llama3b | morph | no (0.00) | procrustes|L2|a1.0 (0.00) | 0.00 / 0.28 / 0.00 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 23 | +| qwen3b->llama3b | addthree | yes (0.80) | procrustes|L2|a1.0 (0.00) | 0.00 / 1.00 / 0.69 / **0.00** / 0.00 (random_orth|L2|a1.0) | +0.00 [+0.00, +0.00]; pre-A1 control 0.00; shuffled-query diag. 0.00 | | |
| 24 | +| **qwen3b->llama3b** | | | | | **H6 not supported (0 task(s))** | | |
| 25 | + | |
| 26 | +Note: CIs are exact paired item bootstraps (2 000 draws) on per-item correctness stored in the confirmatory results. | |
added
experiments/summaries/tier1_taskvector_confirmatory_625c54bd186f/results.json
+19597 −0
Large diff (19,597 lines) is not loaded by default to keep the page fast.Load diff
Diff truncated — file too large.