Skip to content

Commit cc87798

Browse files
committed
plugins/ml: record the real-QPU draw (ibm_fez, 31 min, 13/32 bytes after entropy estimation)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014B7KcHL9b1jwug3L7dmsV3
1 parent 1df9fd2 commit cc87798

2 files changed

Lines changed: 351 additions & 2 deletions

File tree

‎docs/ml-projection-landscape.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ Runs 1 and 2 said the loop needed held-out promotion, less critic noise, and adv
281281

282282
Each critic reads the real frames and the text independently, and the three fidelities are averaged (`ctx.critic_models`).
283283

284-
**Quantum-drawn splits** [built, emu]. Two MothQuantum `comet-qrng-v1` draws (job ids and pre-outcome commitment hashes are in `logs/playtest-run3.json`) pick six **held-out** feeds, which steer promotion, and six **test** feeds, which are touched once at the end. The point is that no advisor, seed or person knows in advance which feeds will judge the search. The draws are emu (simulator). A real-QPU draw was attempted: the IBM queue hadn't returned after 13 minutes and the job was still `processing` 25 minutes later (job `37666e50`, still `processing` about 50 minutes after submission when this was written).
284+
**Quantum-drawn splits** [built, emu]. Two MothQuantum `comet-qrng-v1` draws (job ids and pre-outcome commitment hashes are in `logs/playtest-run3.json`) pick six **held-out** feeds, which steer promotion, and six **test** feeds, which are touched once at the end. The point is that no advisor, seed or person knows in advance which feeds will judge the search. The draws are emu (simulator). A real-QPU draw was also made (job `37666e50`, `logs/qpu-draw-37666e50.json`). It ran on IBM's **`ibm_fez`** and was collected 31 minutes after submission, too late for run 3's splits. It returned **13 of the 32 bytes requested**: after estimating the min-entropy the hardware actually carried, the extractor released only 104 bits. That is the certified path working as advertised, and a real cost: hardware randomness is slow and rationed, so it suits seeding a split, not every mutation.
285285

286286
**Promotion by held-out score** [built]. After each generation the top 3 new configs by search-set U are re-scored on the held-out feeds (`row.hold`). Parents and the final winner are ranked by `hold`, and the advisors are told in their prompt that `hold` alone decides promotion.
287287

@@ -433,7 +433,7 @@ plugins/ml selftest: 43 checks, 0 failures
433433
| TypeSafe Jev as a cheap critic | **[built, weak]** `scorers/jev.mjs`, `jevcheck.mjs` | Spearman 0.21 with the VLM (§4.7); worth it only when the paid critic is expensive |
434434
| multi-critic ensemble | **[built]** `ctx.critic_models` | 3 VLMs on DeepInfra; cut the search/held-out gap from ~0.2 to ~0.05 |
435435
| JEPA-style next-frame predictor | **[built, thin]** linear probe, 16×8 \|Δ\| target | next: frozen image encoder target (CLIP via DeepInfra `clip-ViT-B-32`), a small MLP |
436-
| quantum draws for exploration | **[built, emu]** `apis.quantumBytes` | mutation cell and the held-out/test split draws; a `qpu` draw was submitted and was still queued ~50 min later |
436+
| quantum draws for exploration | **[built, emu]** `apis.quantumBytes` | mutation cell and the held-out/test split draws (emu); one real `qpu` draw on ibm_fez: 31 min, 13 of 32 bytes after entropy estimation. Next: seed a split from it |
437437
| evolving advisor cells, backtest, promote | **[built]** | runs 1–3; run 3 promotes on held-out and checks the result on a quantum-drawn test set. Next: credit assignment (more proposals to cells whose winners hold out), more feeds per split |
438438
| chiaroscuro shape-match election (4×6 Hamming) | **[proposed]** | a projector plugin; the contract needs nothing new |
439439
| half-block colour projection | **[proposed]** | colour is out of the ASCII brief; `▀` with ANSI colour doubles vertical resolution |
Lines changed: 349 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
{
2+
"job_id": "37666e50-1466-4902-b838-add0efe2b118",
3+
"mode": "qpu",
4+
"random": {
5+
"bits": 104,
6+
"bytes": 13,
7+
"derived": {},
8+
"hex": "941bd57fbb6dae7d15820de11b",
9+
"requested_bytes": 32
10+
},
11+
"commitment": {
12+
"binds": [
13+
"circuit_hash",
14+
"backend",
15+
"provider_job_id",
16+
"salt"
17+
],
18+
"commit": "2a6c793a4c540e20ea8bfeb623e87eeaa0176ff7145860a13547f1cdb682e329",
19+
"committed_at": "2026-09-30T14:50:28+00:00",
20+
"note": "Formed at submit, after the provider accepted the job and before any outcome existed. Publish `commit` before collect completes for it to mean anything to a third party.",
21+
"salt": "8c41b6983fea0f0884bcb0a80c0d60c0be8e688660fec808888c21e4cb961ed1"
22+
},
23+
"provenance": {
24+
"backend": "ibm_fez",
25+
"built_at": "2026-09-30T14:50:21+00:00",
26+
"circuit": {
27+
"bell_witness": false,
28+
"n_rand": 12,
29+
"n_total": 12,
30+
"witness_pairs": []
31+
},
32+
"circuit_hash": "5b38c30bb6aa1d96a4ccadaece82f4a659838467b676e298a124afdbdf7da0a8",
33+
"collected_at": "2026-09-30T15:21:39+00:00",
34+
"committed_at": "2026-09-30T14:50:28+00:00",
35+
"engine": "comet-qrng-v1",
36+
"engine_version": "1.0.0",
37+
"formatted_at": "2026-09-30T15:21:41+00:00",
38+
"initial_layout": [
39+
0,
40+
1,
41+
2,
42+
3,
43+
4,
44+
5,
45+
6,
46+
7,
47+
8,
48+
9,
49+
10,
50+
11
51+
],
52+
"mode": "qpu",
53+
"provider_job_id": "daui3crg95ks73eiehjg",
54+
"qpu_seconds": 2,
55+
"readout": "counts",
56+
"shots": 256
57+
},
58+
"entropy": {
59+
"assumptions": [
60+
"shots are independent repetitions (untestable without per-shot memory)",
61+
"per-bit min-entropy = min(per-qubit MCV, pairwise joint MCV/2) at 99% confidence",
62+
"qubits within a shot carry no dependence beyond pairwise correlations: this is ASSUMED, not proven \u2014 it is falsified (health failure) only when collision counts on the full register or on 512 random 8/16-qubit sub-registers exceed the pairwise tree model's prediction, which catches any structure collapsing a tested alphabet below ~2\u00b7log2(shots) bits and nothing subtler",
63+
"ordering entropy log2(shots!) subtracted because the backend returned counts only",
64+
"the assumption-free tier (whole-shot MCV) is capped near log2(shots) bits per shot by sample size and is \u22480 in counts mode"
65+
],
66+
"budget_bits": 236.45235157179695,
67+
"budget_bits_assumption_free": 0,
68+
"budget_bits_modelled": 236.45235157179695,
69+
"h_bit": 0.6251460412747434,
70+
"h_bit_components": {
71+
"pair_joint_mcv_min_per_bit": 0.6251460412747434,
72+
"per_qubit_mcv_min": 0.6381872560868151,
73+
"whole_shot_mcv_per_bit": 0.45878540737299806,
74+
"whole_shot_mcv_per_shot": 5.505424888475977
75+
},
76+
"h_shot_assumption_free": 5.505424888475977,
77+
"health": {
78+
"distinct_ratio": 1.7920413335122014,
79+
"expected_distinct_bitstrings": 137.2736194191835,
80+
"independence_collision": {
81+
"full_register": {
82+
"expected": 10.380242877342312,
83+
"observed": 10,
84+
"qubits": [
85+
0,
86+
1,
87+
2,
88+
3,
89+
4,
90+
5,
91+
6,
92+
7,
93+
8,
94+
9,
95+
10,
96+
11
97+
],
98+
"sigma": 3.2898451362399106,
99+
"z": -0.1155807831662574
100+
},
101+
"model": "pairwise-tree",
102+
"n_failed": 0,
103+
"n_subsets": 256,
104+
"note": "falsifies the pairwise model when a sub-register's alphabet is collapsed; cannot see structure that keeps every tested alphabet above ~2\u00b7log2(shots) bits",
105+
"passed": true,
106+
"worst_subset": {
107+
"expected": 146.94958206781683,
108+
"observed": 172,
109+
"qubits": [
110+
1,
111+
2,
112+
4,
113+
5,
114+
6,
115+
7,
116+
8,
117+
9
118+
],
119+
"sigma": 13.928119994906986,
120+
"z": 1.798549835968042
121+
},
122+
"z_threshold": 6
123+
},
124+
"min_bias_pvalue": 0.052471673332143046,
125+
"mode": "order-free",
126+
"n_biased_qubits_p<1e-6": 0,
127+
"n_significant_pairs": 0,
128+
"n_unique_bitstrings": 246,
129+
"passed": true,
130+
"phi_max_abs": 0.1972421118046462,
131+
"stuck_qubits": []
132+
},
133+
"marginals": {
134+
"bias_pvalues": [
135+
0.052471673332143046,
136+
0.0913120869322853,
137+
0.4165571874932289,
138+
0.7547307480889927,
139+
0.052471673332143046,
140+
0.06970049492909308,
141+
0.8513150594929157,
142+
0.11799770488405265,
143+
0.23496858381467964,
144+
0.6618328607844562,
145+
0.1892478329210554,
146+
0.348521255466871
147+
],
148+
"h_pair_min_per_bit": 0.6251460412747434,
149+
"h_qubit_mcv": [
150+
0.6381872560868151,
151+
0.6554987594338589,
152+
0.7181524608108428,
153+
0.7554808102209735,
154+
0.6381872560868151,
155+
0.6468113655891884,
156+
0.7649960049770511,
157+
0.6642502425164175,
158+
0.6908975540766723,
159+
0.7460398823540695,
160+
0.6819487881433874,
161+
0.7089984784763004
162+
],
163+
"n": 12,
164+
"n_significant_pairs": 0,
165+
"ones": [
166+
144,
167+
142,
168+
121,
169+
131,
170+
112,
171+
113,
172+
130,
173+
141,
174+
118,
175+
124,
176+
139,
177+
120
178+
],
179+
"p1": [
180+
0.5625,
181+
0.5546875,
182+
0.47265625,
183+
0.51171875,
184+
0.4375,
185+
0.44140625,
186+
0.5078125,
187+
0.55078125,
188+
0.4609375,
189+
0.484375,
190+
0.54296875,
191+
0.46875
192+
],
193+
"phi_max_abs": 0.1972421118046462,
194+
"shots": 256,
195+
"stuck_qubits": [],
196+
"top_correlated_pairs": [
197+
{
198+
"h_pair": 1.3686005524465616,
199+
"p_max_joint": 0.3125,
200+
"phi": 0.1972421118046462,
201+
"qubits": [
202+
0,
203+
11
204+
],
205+
"z": 3.1558737888743393
206+
},
207+
{
208+
"h_pair": 1.3229289355516478,
209+
"p_max_joint": 0.32421875,
210+
"phi": -0.15461089514248405,
211+
"qubits": [
212+
3,
213+
5
214+
],
215+
"z": -2.473774322279745
216+
},
217+
{
218+
"h_pair": 1.3686005524465616,
219+
"p_max_joint": 0.3125,
220+
"phi": 0.14372278769860664,
221+
"qubits": [
222+
4,
223+
6
224+
],
225+
"z": 2.299564603177706
226+
},
227+
{
228+
"h_pair": 1.3999890915252569,
229+
"p_max_joint": 0.3046875,
230+
"phi": -0.12748931938580343,
231+
"qubits": [
232+
1,
233+
6
234+
],
235+
"z": -2.039829110172855
236+
},
237+
{
238+
"h_pair": 1.2502920825494868,
239+
"p_max_joint": 0.34375,
240+
"phi": -0.11992448306546419,
241+
"qubits": [
242+
0,
243+
5
244+
],
245+
"z": -1.918791729047427
246+
},
247+
{
248+
"h_pair": 1.3686005524465616,
249+
"p_max_joint": 0.3125,
250+
"phi": 0.11534753971235881,
251+
"qubits": [
252+
1,
253+
3
254+
],
255+
"z": 1.845560635397741
256+
},
257+
{
258+
"h_pair": 1.4990997753840207,
259+
"p_max_joint": 0.28125,
260+
"phi": -0.11483260588525605,
261+
"qubits": [
262+
8,
263+
11
264+
],
265+
"z": -1.8373216941640969
266+
},
267+
{
268+
"h_pair": 1.4485778088759438,
269+
"p_max_joint": 0.29296875,
270+
"phi": -0.11183349135832346,
271+
"qubits": [
272+
3,
273+
10
274+
],
275+
"z": -1.7893358617331754
276+
},
277+
{
278+
"h_pair": 1.2933715843486633,
279+
"p_max_joint": 0.33203125,
280+
"phi": -0.10768516856535651,
281+
"qubits": [
282+
4,
283+
10
284+
],
285+
"z": -1.7229626970457042
286+
},
287+
{
288+
"h_pair": 1.4321740437617512,
289+
"p_max_joint": 0.296875,
290+
"phi": -0.10600643095133228,
291+
"qubits": [
292+
5,
293+
9
294+
],
295+
"z": -1.6961028952213164
296+
},
297+
{
298+
"h_pair": 1.3229289355516478,
299+
"p_max_joint": 0.32421875,
300+
"phi": -0.10174964397035653,
301+
"qubits": [
302+
1,
303+
8
304+
],
305+
"z": -1.6279943035257045
306+
},
307+
{
308+
"h_pair": 1.4990997753840207,
309+
"p_max_joint": 0.28125,
310+
"phi": 0.09896336796707823,
311+
"qubits": [
312+
2,
313+
10
314+
],
315+
"z": 1.5834138874732517
316+
}
317+
],
318+
"z_expectations": [
319+
-0.125,
320+
-0.109375,
321+
0.0546875,
322+
-0.0234375,
323+
0.125,
324+
0.1171875,
325+
-0.015625,
326+
-0.1015625,
327+
0.078125,
328+
0.03125,
329+
-0.0859375,
330+
0.0625
331+
]
332+
},
333+
"n_rand": 12,
334+
"ordering_penalty_bits": 1683.9962872242147,
335+
"raw_bits": 3072,
336+
"readout": "counts",
337+
"shots": 256
338+
},
339+
"extractor": {
340+
"epsilon_log2": 64,
341+
"input_bits": 3072,
342+
"input_serialisation": "sorted bitstrings repeated by count (canonical multiset)",
343+
"kind": "toeplitz",
344+
"output_bits": 104,
345+
"public_seed": "toeplitz-v1",
346+
"seed_id": "toeplitz-v1",
347+
"seed_mode": "shipped"
348+
}
349+
}

0 commit comments

Comments
 (0)