@uuidna/qpu 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,11 +3,61 @@
3
3
  * mintOf proves 2^k by doubling. Cube, handle, faces, fused are the unit.
4
4
  * Lean decides those identities by Nat algebra. Digits and integer fractions. Never Math. Never by decide.
5
5
  */
6
+ /** COMPUTATIONAL RECEIPTS. Every gate primitive and measurement appends the fold of the amplitude vector it produced, so a
7
+ * test that computed quantum state carries a receipt and a test that computed none carries none. FNV-1a 64 over the
8
+ * decimal amplitudes; BigInt only. Never Math. The reporter reads this ledger per test (isolation none). */
9
+ import { leanSource, leanToolchain } from './lean.js';
10
+ import { packageVersion } from './version.js';
11
+ /** The exact state worth carrying in the receipt: what was measured — eight amplitudes, the Born weights themselves.
12
+ * Every other state folds only; it is recomputable from the gate list, and a proof that carried every 512-amplitude
13
+ * modexp state weighed megabytes per run. */
14
+ const RECEIPT_STATES = ['measure'];
15
+ const RECEIPTS = [];
16
+ const FNV_OFFSET = 0xcbf29ce484222325n;
17
+ const FNV_PRIME = 0x100000001b3n;
18
+ const FNV_MASK = 0xffffffffffffffffn;
19
+ export const qpuFoldOf = (text) => {
20
+ let h = FNV_OFFSET;
21
+ for (let i = text.length - text.length; i < text.length; i++) {
22
+ h ^= BigInt(text.charCodeAt(i));
23
+ h = (h * FNV_PRIME) & FNV_MASK;
24
+ }
25
+ return h.toString(16).padStart(16, '0');
26
+ };
27
+ const receiptOf = (name, amps) => {
28
+ const decimal = amps.map((a) => a.toString());
29
+ const row = { name, dim: amps.length, fold: qpuFoldOf(decimal.join(',')) };
30
+ if (RECEIPT_STATES.includes(name))
31
+ row.amplitudes = decimal;
32
+ RECEIPTS.push(row);
33
+ };
34
+ /** A sparse state's receipt: the fold of its nonzero amplitudes as index:weight pairs in index order, and their count.
35
+ * `dim` is the full dimension, a float past 2^53; the fold is exact because the pairs are decimal text of bigints. */
36
+ const receiptSparseOf = (name, dim, pairs) => {
37
+ RECEIPTS.push({ name, dim: Number(dim), fold: qpuFoldOf(pairs.map(([i, w]) => `${i}:${w}`).join(',')), nonzero: pairs.length, qubits: dim.toString(2).length - 1 });
38
+ };
39
+ /** mint receipts: every amplitude-count doubling this process computed — a counter and a running chain, never a list. */
40
+ const MINT = { calls: 0, chain: FNV_OFFSET };
41
+ export const qpuMintReceiptOf = () => ({ calls: MINT.calls, chain: MINT.chain.toString(16).padStart(16, '0') });
42
+ const mintReceiptOf = (k, x) => {
43
+ MINT.calls = MINT.calls + 1;
44
+ const text = `${k}:${x}`;
45
+ let h = MINT.chain;
46
+ for (let i = text.length - text.length; i < text.length; i++) {
47
+ h ^= BigInt(text.charCodeAt(i));
48
+ h = (h * FNV_PRIME) & FNV_MASK;
49
+ }
50
+ MINT.chain = h;
51
+ };
52
+ /** The ledger of every quantum computation this process ran, in order. */
53
+ export const qpuReceiptLedgerOf = () => RECEIPTS;
54
+ export const qpuReceiptFoldOf = (rows = RECEIPTS) => qpuFoldOf(rows.map((r) => `${r.name}:${r.dim}:${r.fold}`).join('|'));
6
55
  const mintOf = (k) => {
7
56
  let x = k - k;
8
57
  x = x + 1;
9
58
  for (let i = k - k; i < k; i++)
10
59
  x += x;
60
+ mintReceiptOf(k, x);
11
61
  return x;
12
62
  };
13
63
  const chooseOf = (nn, k) => {
@@ -78,30 +128,39 @@ const skills = ['payload', 'pwa', 'plugin', 'hologram', 'network'];
78
128
  const ten = n * n + seed;
79
129
  const found = coins * ten * ten;
80
130
  const lost = mintOf(coins) * (ten * ten + seed);
131
+ const unauthorized = mintOf(coins) * ten * ten + seed;
132
+ const badRequest = unauthorized - seed;
133
+ /** JSON-RPC 2.0 reserved error codes, as the specification numbers them. */
134
+ const rpcCodes = { parse: -32700, invalid: -32600, method: -32601, params: -32602 };
135
+ /** A JSON-RPC 2.0 error, as the protocol spells it: `jsonrpc`, the request's `id` (null when none was understood), and an
136
+ * `error` with code and message. A parse error or an invalid request travels on HTTP 400, because no request was understood;
137
+ * an unknown method or unknown tool travels on HTTP 200, because the request was understood and declined. Never
138
+ * `{"holds":false}` on a 404: that is the shape of a missing page, not of a declined call. */
139
+ export const rpcErrorOf = (id, code, message, data) => ({
140
+ jsonrpc: '2.0',
141
+ id: id === undefined ? null : id,
142
+ error: data === undefined ? { code, message } : { code, message, data },
143
+ });
144
+ /** The methods this server answers on /mcp. */
145
+ const rpcMethods = ['initialize', 'server/discover', 'ping', 'notifications/initialized', 'tools/list', 'tools/call'];
81
146
  const tenOf = (k) => {
82
147
  let x = mintOf(n - n);
83
148
  for (let i = n - n; i < k; i++)
84
149
  x *= ten;
85
150
  return x;
86
151
  };
87
- const nsPerSecond = tenOf(n * n);
88
- const timeNsOf = (fn) => ({
89
- ns: n - n,
90
- value: fn()
91
- });
92
- const hzOf = (ns) => (ns > seed ? Number(BigInt(nsPerSecond) / BigInt(ns)) : nsPerSecond);
93
152
  const byDecideOf = (theorem) => theorem.includes('by decide') || theorem.includes('native_decide');
94
153
  const formulaOf = (formula) => formula.includes('\\') && !formula.includes('operatorname');
95
154
  const manSchema = {
96
155
  type: 'object',
97
156
  properties: {
98
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' }
157
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' }
99
158
  }
100
159
  };
101
160
  const liveSchema = {
102
161
  type: 'object',
103
162
  properties: {
104
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' },
163
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' },
105
164
  live: { type: 'boolean', description: '{ live: true } learn CERN occupancy. fetch Request Response. Memory.' },
106
165
  sequence: { type: 'boolean', description: '{ sequence: true } qpu_train then qpu_improve then qpu_compete then qpu_prove. Live. Memory.' }
107
166
  }
@@ -466,32 +525,33 @@ export const qpuFollowOf = () => {
466
525
  const app = i % points;
467
526
  const hop = (app + coins) % points;
468
527
  const via = (app + coil.theory + coil.practice) % points;
469
- const novel = hop === via;
528
+ // hop ≡ via restates theory + practice = coins on this application; it is a balance, never a novelty claim
529
+ const balanced = hop === via;
470
530
  return {
471
531
  name,
472
532
  app,
473
533
  hop,
474
534
  via,
475
- novel,
535
+ balanced,
476
536
  occupancy: occupancies[hop],
477
537
  skill: skills[hop],
478
- holds: novel && hop === (app + coil.balance) % points,
538
+ holds: balanced && hop === (app + coil.balance) % points,
479
539
  };
480
540
  });
481
541
  const seen = [];
482
542
  for (const row of solutions)
483
543
  if (!seen.includes(row.hop))
484
544
  seen.push(row.hop);
485
- const creative = solutions.every((row) => row.novel && row.holds);
486
- const novel = seen.length === points;
545
+ const balanced = solutions.every((row) => row.balanced && row.holds);
546
+ const covered = seen.length === points;
487
547
  const emerge = {
488
548
  kind: 'emerge',
489
549
  theorem: 'emerge',
490
- creative,
491
- novel,
550
+ balanced,
551
+ covered,
492
552
  coil: coil.coil,
493
553
  faces: coil.faces,
494
- holds: creative && novel && coil.coil === coil.faces && coil.theory === coil.practice,
554
+ holds: balanced && covered && coil.coil === coil.faces && coil.theory === coil.practice,
495
555
  };
496
556
  const holds = qpuCoilHolds(coil) &&
497
557
  qpuElectronicsHolds(electronics) &&
@@ -521,10 +581,10 @@ export const qpuFollowHolds = (f = qpuFollowOf()) => f.holds === true &&
521
581
  f.theory === f.practice &&
522
582
  f.theory + f.practice === coins &&
523
583
  f.emerge.kind === 'emerge' &&
524
- f.emerge.creative === true &&
525
- f.emerge.novel === true &&
584
+ f.emerge.balanced === true &&
585
+ f.emerge.covered === true &&
526
586
  f.emerge.coil === f.emerge.faces &&
527
- f.solutions.every((row) => row.novel && row.hop === (row.app + coins) % (n + coins));
587
+ f.solutions.every((row) => row.balanced && row.hop === (row.app + coins) % (n + coins));
528
588
  /** Coordinated dry-clean: two teams, occupancy pentagram, genesis coins. No extra sealed tool. */
529
589
  export const qpuDryOf = (genesis = qpuGenesisOf()) => {
530
590
  const pentagram = qpuPentagramOf();
@@ -825,9 +885,6 @@ export const qpuHybridOf = () => {
825
885
  };
826
886
  const speed = kv.speed + r2.speed;
827
887
  const cost = kv.cost + r2.cost;
828
- const kvTimed = timeNsOf(() => kv.speed);
829
- const r2Timed = timeNsOf(() => r2.speed);
830
- const timed = timeNsOf(() => kv.speed + r2.speed);
831
888
  const holds = storageBindings.STORAGE === 'kv' &&
832
889
  storageBindings.BLOBS === 'r2' &&
833
890
  kv.cost === coins &&
@@ -839,22 +896,17 @@ export const qpuHybridOf = () => {
839
896
  coins === seed + seed &&
840
897
  raid.cluster.cost === 'minimum' &&
841
898
  raid.cluster.speed === 'coordinated' &&
842
- kvTimed.value === kv.speed &&
843
- r2Timed.value === r2.speed &&
844
- timed.value === speed &&
845
899
  kv.speed > r2.speed &&
846
900
  kv.cost > r2.cost;
847
901
  return {
848
902
  kind: 'hybrid',
849
903
  theorem: 'hybrid',
850
904
  layers: coins,
851
- kv: { ...kv, ns: kvTimed.ns, hz: hzOf(kvTimed.ns) },
852
- r2: { ...r2, ns: r2Timed.ns, hz: hzOf(r2Timed.ns) },
905
+ kv,
906
+ r2,
853
907
  speed,
854
908
  cost,
855
909
  measure: { speed, cost },
856
- ns: timed.ns,
857
- hz: hzOf(timed.ns),
858
910
  bindings: storageBindings,
859
911
  holds,
860
912
  };
@@ -879,10 +931,7 @@ export const qpuHybridHolds = (h = qpuHybridOf()) => h.holds === true &&
879
931
  h.measure.cost === h.cost &&
880
932
  h.kv.speed > h.r2.speed &&
881
933
  h.kv.cost > h.r2.cost &&
882
- h.ns === n - n &&
883
- h.kv.ns === n - n &&
884
- h.r2.ns === n - n &&
885
- h.hz === hzOf(h.ns);
934
+ h.kv.speed > h.r2.speed;
886
935
  /** QPU hybrid storage hosts the Payload database. Four collections. Secrets never. */
887
936
  const payloadDbCollections = ['pages', 'users', 'media', 'tenants'];
888
937
  const payloadDbKey = 'databases/payload';
@@ -1094,22 +1143,6 @@ export const qpuDesignOf = () => {
1094
1143
  holds,
1095
1144
  };
1096
1145
  };
1097
- export const qpuHandledOf = (denied) => {
1098
- const design = qpuDesignOf();
1099
- const hit = design.nodes.find((node) => node.name === denied);
1100
- const face = hit ? hit.face : Number(BigInt(denied.length) % BigInt(design.nodes.length));
1101
- const node = hit ?? design.nodes[face];
1102
- return {
1103
- kind: 'design',
1104
- denied,
1105
- face: node.face,
1106
- name: node.name,
1107
- hop: node.hop,
1108
- wave: node.wave,
1109
- fold: node.fold,
1110
- holds: false,
1111
- };
1112
- };
1113
1146
  export const qpuDesignHolds = (d = qpuDesignOf()) => d.holds === true &&
1114
1147
  d.kind === 'design' &&
1115
1148
  d.vacant === n - n &&
@@ -1213,6 +1246,7 @@ const xGateOf = (amps, q) => {
1213
1246
  const out = amps.map(() => 0n);
1214
1247
  for (let i = n - n; i < amps.length; i++)
1215
1248
  out[xorOf(i, bit)] = amps[i];
1249
+ receiptOf('x', out);
1216
1250
  return out;
1217
1251
  };
1218
1252
  const cnotGateOf = (amps, c, t) => {
@@ -1223,6 +1257,7 @@ const cnotGateOf = (amps, c, t) => {
1223
1257
  const on = (BigInt(i) / cb) % 2n === 1n;
1224
1258
  out[on ? xorOf(i, Number(tb)) : i] = amps[i];
1225
1259
  }
1260
+ receiptOf('cnot', out);
1226
1261
  return out;
1227
1262
  };
1228
1263
  const hGateOf = (amps, q) => {
@@ -1241,6 +1276,7 @@ const hGateOf = (amps, q) => {
1241
1276
  out[flipped] += a;
1242
1277
  }
1243
1278
  }
1279
+ receiptOf('h', out);
1244
1280
  return out;
1245
1281
  };
1246
1282
  const czGateOf = (amps, c, t) => hGateOf(cnotGateOf(hGateOf(amps, t), c, t), t);
@@ -1255,6 +1291,7 @@ const toffoliGateOf = (amps, c, k, t) => {
1255
1291
  const on = (BigInt(i) / cb) % 2n === 1n && (BigInt(i) / kb) % 2n === 1n;
1256
1292
  out[on ? xorOf(i, Number(tb)) : i] = amps[i];
1257
1293
  }
1294
+ receiptOf('toffoli', out);
1258
1295
  return out;
1259
1296
  };
1260
1297
  const qubitOf = (value, fallback) => {
@@ -1285,6 +1322,7 @@ const runGatesOf = (ops) => {
1285
1322
  return amps;
1286
1323
  };
1287
1324
  const measureOf = (amps) => {
1325
+ receiptOf('measure', amps);
1288
1326
  const support = amps.map((a, i) => ({ i, a })).filter((r) => r.a !== 0n);
1289
1327
  const index = support.length === seed ? support[n - n].i : support.length === coins ? support[seed].i : mintOf(n);
1290
1328
  const counts = support.map((r) => ({ i: r.i, w: Number(r.a * r.a) }));
@@ -1561,18 +1599,6 @@ const gcdOf = (left, right) => {
1561
1599
  }
1562
1600
  return x;
1563
1601
  };
1564
- const powModOf = (base, exp, modulus) => {
1565
- let x = seed;
1566
- let b = base % modulus;
1567
- let e = exp;
1568
- while (e > n - n) {
1569
- if (e % coins === seed)
1570
- x = (x * b) % modulus;
1571
- b = (b * b) % modulus;
1572
- e = (e - (e % coins)) / coins;
1573
- }
1574
- return x;
1575
- };
1576
1602
  const convergentsOf = (num, den) => {
1577
1603
  const out = [];
1578
1604
  let n0 = num;
@@ -1596,177 +1622,324 @@ const convergentsOf = (num, den) => {
1596
1622
  }
1597
1623
  return out;
1598
1624
  };
1625
+ /** Device label READ from the run: a vector of exact integer amplitudes is a simulator; anything else is unmeasured. Never typed. */
1626
+ const bigintDeviceOf = (amps) => amps.length > n - n && amps.every((a) => typeof a === 'bigint') ? 'simulator' : 'unmeasured';
1599
1627
  const cAmpOf = (re, im) => ({ re, im });
1600
1628
  const cWOf = (a) => a.re * a.re + a.im * a.im;
1601
1629
  const cAddOf = (a, b) => cAmpOf(a.re + b.re, a.im + b.im);
1602
1630
  const cSubOf = (a, b) => cAmpOf(a.re - b.re, a.im - b.im);
1603
1631
  const cMulNegIOf = (a) => cAmpOf(a.im, -a.re);
1604
- const cPrepareOf = (dim) => {
1605
- const amps = Array.from({ length: dim }, () => cAmpOf(0n, 0n));
1606
- amps[n - n] = cAmpOf(1n, 0n);
1607
- return amps;
1608
- };
1609
- const cHOf = (amps, q) => {
1610
- const bit = mintOf(q);
1611
- const out = amps.map(() => cAmpOf(0n, 0n));
1612
- for (let i = n - n; i < amps.length; i++) {
1613
- const a = amps[i];
1614
- const flipped = xorOf(i, bit);
1615
- const on = quotOf(i, bit) % coins === seed;
1616
- if (on) {
1617
- out[flipped] = cAddOf(out[flipped], a);
1618
- out[i] = cSubOf(out[i], a);
1632
+ const b0 = BigInt(n - n);
1633
+ const b1 = BigInt(seed);
1634
+ const b2 = BigInt(coins);
1635
+ const sBitOf = (q) => b1 << BigInt(q);
1636
+ const onOf = (i, bit) => (i & bit) !== b0;
1637
+ const sPut = (out, i, a) => {
1638
+ const prior = out.get(i);
1639
+ const next = prior ? cAddOf(prior, a) : a;
1640
+ if (next.re === b0 && next.im === b0)
1641
+ out.delete(i);
1642
+ else
1643
+ out.set(i, next);
1644
+ };
1645
+ const sPrepareOf = () => new Map([[b0, cAmpOf(b1, b0)]]);
1646
+ const sHOf = (state, q) => {
1647
+ const bit = sBitOf(q);
1648
+ const out = new Map();
1649
+ for (const [i, a] of state) {
1650
+ const flipped = i ^ bit;
1651
+ if (onOf(i, bit)) {
1652
+ sPut(out, flipped, a);
1653
+ sPut(out, i, cSubOf(cAmpOf(b0, b0), a));
1619
1654
  }
1620
1655
  else {
1621
- out[i] = cAddOf(out[i], a);
1622
- out[flipped] = cAddOf(out[flipped], a);
1656
+ sPut(out, i, a);
1657
+ sPut(out, flipped, a);
1623
1658
  }
1624
1659
  }
1625
1660
  return out;
1626
1661
  };
1627
- const cXOf = (amps, q) => {
1628
- const bit = mintOf(q);
1629
- const out = amps.map(() => cAmpOf(0n, 0n));
1630
- for (let i = n - n; i < amps.length; i++)
1631
- out[xorOf(i, bit)] = amps[i];
1662
+ const sXOf = (state, q) => {
1663
+ const bit = sBitOf(q);
1664
+ const out = new Map();
1665
+ for (const [i, a] of state)
1666
+ sPut(out, i ^ bit, a);
1632
1667
  return out;
1633
1668
  };
1634
- const cSwapOf = (amps, a, b) => {
1635
- const out = amps.map(() => cAmpOf(0n, 0n));
1636
- const ba = mintOf(a);
1637
- const bb = mintOf(b);
1638
- for (let i = n - n; i < amps.length; i++) {
1639
- const ia = quotOf(i, ba) % coins;
1640
- const ib = quotOf(i, bb) % coins;
1641
- let j = i;
1642
- if (ia !== ib)
1643
- j = xorOf(xorOf(i, ba), bb);
1644
- out[j] = amps[i];
1645
- }
1669
+ const sSwapOf = (state, a, b) => {
1670
+ const ba = sBitOf(a);
1671
+ const bb = sBitOf(b);
1672
+ const out = new Map();
1673
+ for (const [i, amp] of state)
1674
+ sPut(out, onOf(i, ba) !== onOf(i, bb) ? i ^ ba ^ bb : i, amp);
1646
1675
  return out;
1647
1676
  };
1648
- const cSdgOf = (amps, c, t) => {
1649
- const cb = mintOf(c);
1650
- const tb = mintOf(t);
1651
- const out = amps.map(() => cAmpOf(0n, 0n));
1652
- for (let i = n - n; i < amps.length; i++) {
1653
- const on = quotOf(i, cb) % coins === seed && quotOf(i, tb) % coins === seed;
1654
- out[i] = on ? cMulNegIOf(amps[i]) : amps[i];
1655
- }
1677
+ const sSdgOf = (state, c, t) => {
1678
+ const cb = sBitOf(c);
1679
+ const tb = sBitOf(t);
1680
+ const out = new Map();
1681
+ for (const [i, a] of state)
1682
+ sPut(out, i, onOf(i, cb) && onOf(i, tb) ? cMulNegIOf(a) : a);
1656
1683
  return out;
1657
1684
  };
1658
- const cModMulOf = (amps, a, modulus, control, workOff, workBits) => {
1659
- const cb = mintOf(control);
1660
- const workSpan = mintOf(workBits);
1661
- const out = amps.map(() => cAmpOf(0n, 0n));
1662
- for (let i = n - n; i < amps.length; i++) {
1663
- if (quotOf(i, cb) % coins !== seed) {
1664
- out[i] = cAddOf(out[i], amps[i]);
1685
+ /** x mod m in [0, m) for m > 0, whatever the sign of x. */
1686
+ const modOf = (x, m) => ((x % m) + m) % m;
1687
+ const sModMulOf = (state, a, modulus, control, workOff, workBits) => {
1688
+ const cb = sBitOf(control);
1689
+ const shift = BigInt(workOff);
1690
+ const span = b1 << BigInt(workBits);
1691
+ const out = new Map();
1692
+ for (const [i, amp] of state) {
1693
+ if (!onOf(i, cb)) {
1694
+ sPut(out, i, amp);
1665
1695
  continue;
1666
1696
  }
1667
- const work = quotOf(i, mintOf(workOff)) % workSpan;
1668
- const next = work < modulus ? (work * a) % modulus : work;
1669
- const j = i - work * mintOf(workOff) + next * mintOf(workOff);
1670
- out[j] = cAddOf(out[j], amps[i]);
1697
+ const work = (i >> shift) % span;
1698
+ const next = modulus > b1 && work < modulus ? modOf(work * a, modulus) : work;
1699
+ sPut(out, i - (work << shift) + (next << shift), amp);
1671
1700
  }
1672
1701
  return out;
1673
1702
  };
1674
- const cXxOf = (amps, q) => cXOf(cXOf(amps, q), q);
1675
- /** Shor on the superconducting device. N and coprime a. Modular-exponentiation circuitry. Inverse QFT. Noisy shots. Factors. */
1676
- export const qpuShorOf = () => {
1677
- const cube = qpuCubeOf();
1703
+ const sXxOf = (state, q) => sXOf(sXOf(state, q), q);
1704
+ const sEqualOf = (left, right) => left.size === right.size && [...left].every(([i, a]) => right.get(i)?.re === a.re && right.get(i)?.im === a.im);
1705
+ const sPairsOf = (state) => [...state].map(([i, a]) => [i, cWOf(a)]).filter(([, w]) => w > b0).sort(([x], [y]) => (x < y ? -1 : x > y ? 1 : n - n));
1706
+ const sDeviceOf = (state) => state.size > n - n && [...state.values()].every((a) => typeof a.re === 'bigint' && typeof a.im === 'bigint') ? 'simulator' : 'unmeasured';
1707
+ const bigGcdOf = (left, right) => {
1708
+ let x = left < b0 ? -left : left;
1709
+ let y = right < b0 ? -right : right;
1710
+ while (y > b0) {
1711
+ const r = x % y;
1712
+ x = y;
1713
+ y = r;
1714
+ }
1715
+ return x;
1716
+ };
1717
+ /** base^exp mod modulus by squaring; 0 when the modulus is not a ring (modulus <= 1), where the question has no answer. */
1718
+ const bigPowModOf = (base, exp, modulus) => {
1719
+ if (modulus <= b1)
1720
+ return b0;
1721
+ let x = b1 % modulus;
1722
+ let b = modOf(base, modulus);
1723
+ let e = exp;
1724
+ while (e > b0) {
1725
+ if (e % b2 === b1)
1726
+ x = (x * b) % modulus;
1727
+ b = (b * b) % modulus;
1728
+ e = e / b2;
1729
+ }
1730
+ return x;
1731
+ };
1732
+ /** Bits so that 2^bits > value: the work register that holds every residue mod value. 0 for value <= 0. */
1733
+ const bitsOf = (value) => {
1734
+ let k = n - n;
1735
+ let pow = b1;
1736
+ while (pow <= value) {
1737
+ pow += pow;
1738
+ k += seed;
1739
+ }
1740
+ return k;
1741
+ };
1742
+ const safeBig = BigInt(Number.MAX_SAFE_INTEGER);
1743
+ const safeOf = (x) => x <= safeBig && x >= -safeBig;
1744
+ /** A bigint for JSON: the number when it is exact there, the decimal string when it would round. */
1745
+ const jsonIntOf = (x) => (safeOf(x) ? Number(x) : x.toString());
1746
+ /** The modulus and base Shor runs on when the caller names none: faces.rays * (n * n + n + seed) = 91 and mintOf n = 8. */
1747
+ export const shorDefaultsOf = () => ({ modulus: qpuFacesOf().rays * (n * n + n + seed), base: mintOf(n) });
1748
+ /** The counting register is two qubits: this inverse QFT is exact in Gaussian integers (fourth roots of unity), and a
1749
+ * wider register would need eighth roots, which are not integers. So the register resolves periods dividing four;
1750
+ * `classical` below says whether the period it was asked for is one of those. */
1751
+ const shorCountBits = coins;
1752
+ /** THE CLASSICAL CHECK BESIDE THE RUN, EXACT FOR ANY MODULUS AND NEVER UNFINISHED. The two-qubit counting register
1753
+ * resolves a period only when it divides four, and whether the order of the base divides four is three modular
1754
+ * powers: a, a^2, a^4 mod n. That answers every question the run poses — is there a ring, is the base a unit, can the
1755
+ * register resolve its order, and what must the run then recover — without iterating toward an order it could not
1756
+ * reach. So there is no bound to hit, no work budget, and no "did not finish" to report: `beyond` true is an answer
1757
+ * (the order exists and does not divide four), not a crack. */
1758
+ const classicalOrderOf = (base, modulus) => {
1759
+ if (modulus <= b1)
1760
+ return { ring: false, unit: false, order: n - n, beyond: false };
1761
+ if (bigGcdOf(base, modulus) !== b1)
1762
+ return { ring: true, unit: false, order: n - n, beyond: false };
1763
+ for (const r of [seed, coins, mintOf(coins)]) {
1764
+ if (bigPowModOf(base, BigInt(r), modulus) === b1)
1765
+ return { ring: true, unit: true, order: r, beyond: false };
1766
+ }
1767
+ return { ring: true, unit: true, order: n - n, beyond: true };
1768
+ };
1769
+ const argReadOf = (v) => {
1770
+ const finite = (x) => x === x && x !== Number.POSITIVE_INFINITY && x !== Number.NEGATIVE_INFINITY;
1771
+ const exactDouble = (x) => finite(x) && x % seed === n - n && x <= Number.MAX_SAFE_INTEGER && x >= -Number.MAX_SAFE_INTEGER;
1772
+ if (v === undefined)
1773
+ return { read: { how: 'absent', exact: true, given: false } };
1774
+ if (typeof v === 'bigint')
1775
+ return { value: v, read: { how: 'digits', exact: true, given: true } };
1776
+ if (typeof v === 'string') {
1777
+ const t = v.trim();
1778
+ if (/^[+-]?\d+$/.test(t))
1779
+ return { value: BigInt(t), read: { how: 'digits', exact: true, given: true } };
1780
+ const x = t.length > n - n ? Number(t) : Number.NaN;
1781
+ if (finite(x))
1782
+ return { value: BigInt(x - (x % seed)), read: { how: 'numeric', exact: exactDouble(x), given: true } };
1783
+ return { read: { how: 'default', exact: false, given: true } };
1784
+ }
1785
+ if (typeof v === 'number' && finite(v))
1786
+ return { value: BigInt(v - (v % seed)), read: { how: 'number', exact: exactDouble(v), given: true } };
1787
+ return { read: { how: 'default', exact: false, given: true } };
1788
+ };
1789
+ /** Modulus and base as the caller gave them, read as integers, with how each was read. No denial, no cap: the run is on
1790
+ * whatever integer arrives, and `read` says whether that integer is the one the caller meant. */
1791
+ export const shorArgsOf = (a) => {
1792
+ const nn = argReadOf(a.n);
1793
+ const aa = argReadOf(a.a);
1794
+ return { modulus: nn.value, base: aa.value, read: { n: nn.read, a: aa.read, holds: nn.read.exact && aa.read.exact } };
1795
+ };
1796
+ /** Shor as a caller asked for it: the run on their n and a, whatever they are. Never a denial; the run itself says what it
1797
+ * found (a period, a gcd factor, or nothing), the sparse state means no modulus is past the host's reach, and `read`
1798
+ * says how each argument was taken. A reply whose arguments were not read exactly does not hold, whatever the run did. */
1799
+ export const qpuShorTryOf = (a) => {
1800
+ const args = shorArgsOf(a);
1801
+ const shor = qpuShorOf(args.modulus, args.base);
1802
+ return { ...shor, read: args.read, holds: shor.holds && args.read.holds };
1803
+ };
1804
+ /** Shor on the sparse exact simulator. N and coprime a: the caller's, or the unit's 91 and 8. Modular-exponentiation
1805
+ * circuitry. Inverse QFT. Noisy shots. Factors. Every number below is exact in `exact` as decimal text; the number
1806
+ * fields round past 2^53 and `exact.safe` says whether they did. */
1807
+ export const qpuShorOf = (modulusArg, baseArg) => {
1678
1808
  const plugin = qpuPayloadPluginOf();
1679
1809
  const computer = qpuComputerOf();
1680
- const modulus = n * (n + coins);
1681
- const base = mintOf(n) - seed;
1682
- const countBits = coins;
1683
- const workBits = cube.hexbit;
1810
+ const defaults = shorDefaultsOf();
1811
+ const modulus = BigInt(modulusArg ?? defaults.modulus);
1812
+ const base = BigInt(baseArg ?? defaults.base);
1813
+ const countBits = shorCountBits;
1814
+ const workBits = bitsOf(modulus);
1684
1815
  const workOff = countBits;
1816
+ const shift = BigInt(workOff);
1817
+ const span = b1 << BigInt(workBits);
1685
1818
  const qubits = countBits + workBits;
1686
- const dim = mintOf(qubits);
1819
+ const dimBig = b1 << BigInt(qubits);
1687
1820
  const qftSize = mintOf(countBits);
1688
- const coprime = gcdOf(base, modulus) === seed;
1821
+ const qftBig = BigInt(qftSize);
1822
+ const ring = modulus > b1;
1823
+ const coprime = ring && bigGcdOf(base, modulus) === b1;
1824
+ const aSquared = ring ? bigPowModOf(base, b2, modulus) : base * base;
1689
1825
  const mul = [
1690
- { power: mintOf(n - n), a: base, control: n - n },
1691
- { power: coins, a: powModOf(base, coins, modulus), control: seed }
1826
+ { power: mintOf(n - n), a: jsonIntOf(base), control: n - n },
1827
+ { power: coins, a: jsonIntOf(aSquared), control: seed }
1692
1828
  ];
1693
1829
  const gates = [
1694
1830
  { name: 'x', q: workOff },
1695
1831
  { name: 'h', q: n - n },
1696
1832
  { name: 'h', q: seed },
1697
- { name: 'cmodexp', c: mul[n - n].control, a: mul[n - n].a, modulus, power: mul[n - n].power },
1698
- { name: 'cmodexp', c: mul[seed].control, a: mul[seed].a, modulus, power: mul[seed].power },
1833
+ { name: 'cmodexp', c: mul[n - n].control, a: mul[n - n].a, modulus: jsonIntOf(modulus), power: mul[n - n].power },
1834
+ { name: 'cmodexp', c: mul[seed].control, a: mul[seed].a, modulus: jsonIntOf(modulus), power: mul[seed].power },
1699
1835
  { name: 'swap', a: n - n, b: seed },
1700
1836
  { name: 'h', q: seed },
1701
1837
  { name: 'csdg', c: seed, t: n - n },
1702
1838
  { name: 'h', q: n - n }
1703
1839
  ];
1704
- let amps = cPrepareOf(dim);
1705
- amps = cXOf(amps, workOff);
1706
- amps = cHOf(amps, n - n);
1707
- amps = cHOf(amps, seed);
1708
- amps = cModMulOf(amps, mul[n - n].a, modulus, mul[n - n].control, workOff, workBits);
1709
- amps = cModMulOf(amps, mul[seed].a, modulus, mul[seed].control, workOff, workBits);
1710
- let expOk = seed === seed;
1711
- for (let i = n - n; i < amps.length; i++) {
1712
- if (cWOf(amps[i]) === 0n)
1840
+ let state = sPrepareOf();
1841
+ state = sXOf(state, workOff);
1842
+ state = sHOf(state, n - n);
1843
+ state = sHOf(state, seed);
1844
+ state = sModMulOf(state, base, modulus, mul[n - n].control, workOff, workBits);
1845
+ state = sModMulOf(state, aSquared, modulus, mul[seed].control, workOff, workBits);
1846
+ /** Read from the state: every branch's work register holds a^counting mod N, or the circuitry does not hold. */
1847
+ let expOk = ring && state.size > n - n;
1848
+ for (const [i, amp] of state) {
1849
+ if (cWOf(amp) === b0)
1713
1850
  continue;
1714
- const counting = i % qftSize;
1715
- const work = quotOf(i, mintOf(workOff)) % mintOf(workBits);
1716
- if (work !== powModOf(base, counting, modulus))
1851
+ const counting = i % qftBig;
1852
+ const work = (i >> shift) % span;
1853
+ if (work !== bigPowModOf(base, counting, modulus))
1717
1854
  expOk = false;
1718
1855
  }
1719
- amps = cSwapOf(amps, n - n, seed);
1720
- amps = cHOf(amps, seed);
1721
- amps = cSdgOf(amps, seed, n - n);
1722
- amps = cHOf(amps, n - n);
1723
- const noisy = cXxOf(amps, workOff);
1724
- const xxId = noisy.every((row, i) => row.re === amps[i].re && row.im === amps[i].im);
1856
+ state = sSwapOf(state, n - n, seed);
1857
+ state = sHOf(state, seed);
1858
+ state = sSdgOf(state, seed, n - n);
1859
+ state = sHOf(state, n - n);
1860
+ const noisy = sXxOf(state, workOff);
1861
+ receiptSparseOf('cmodexp', dimBig, sPairsOf(state));
1862
+ receiptSparseOf('xx', dimBig, sPairsOf(noisy));
1863
+ const xxId = sEqualOf(noisy, state);
1864
+ /** Read from the state, never from the request: the host holds every nonzero amplitude of the 2^qubits vector. */
1865
+ const prepare = {
1866
+ kind: 'prepare',
1867
+ qubits,
1868
+ dim: jsonIntOf(dimBig),
1869
+ amplitudes: noisy.size,
1870
+ sparse: true,
1871
+ prepared: noisy.size > n - n,
1872
+ reason: noisy.size > n - n ? 'held' : 'empty',
1873
+ holds: noisy.size > n - n && noisy.size <= qftSize * qftSize,
1874
+ };
1725
1875
  const weights = [];
1726
1876
  for (let y = n - n; y < qftSize; y++)
1727
1877
  weights.push(n - n);
1728
- for (let i = n - n; i < noisy.length; i++) {
1729
- const y = i % qftSize;
1730
- weights[y] = weights[y] + Number(cWOf(noisy[i]));
1878
+ for (const [i, amp] of noisy) {
1879
+ const y = Number(i % qftBig);
1880
+ weights[y] = weights[y] + Number(cWOf(amp));
1731
1881
  }
1732
1882
  const support = [];
1733
1883
  for (let y = n - n; y < qftSize; y++)
1734
1884
  if (weights[y] > n - n)
1735
1885
  support.push(y);
1736
1886
  const shotsN = mintOf(n);
1887
+ const measured = support.length > n - n;
1888
+ /** Shots are readings of a held state: none are reported from a state with nothing to read. */
1737
1889
  const shots = [];
1738
- for (let s = n - n; s < shotsN; s++)
1739
- shots.push(support.length > n - n ? support[s % support.length] : n - n);
1890
+ if (measured)
1891
+ for (let s = n - n; s < shotsN; s++)
1892
+ shots.push(support[s % support.length]);
1740
1893
  let period = n - n;
1741
1894
  const recovered = [];
1742
1895
  for (const y of support) {
1743
1896
  for (const row of convergentsOf(y, qftSize)) {
1744
1897
  const r = row.k;
1745
- if (r > n - n && r < modulus && powModOf(base, r, modulus) === seed) {
1898
+ if (r > n - n && BigInt(r) < modulus && bigPowModOf(base, BigInt(r), modulus) === b1) {
1746
1899
  recovered.push(r);
1747
1900
  if (period === n - n)
1748
1901
  period = r;
1749
1902
  }
1750
1903
  }
1751
1904
  }
1752
- let p = n - n;
1753
- let q = n - n;
1905
+ let p = b0;
1906
+ let q = b0;
1907
+ let by = 'none';
1754
1908
  if (period > n - n && period % coins === n - n) {
1755
- const half = powModOf(base, period / coins, modulus);
1756
- if (half !== modulus - seed) {
1757
- const g1 = gcdOf(half - seed, modulus);
1758
- const g2 = gcdOf(half + seed, modulus);
1759
- if (g1 > seed && g1 < modulus) {
1909
+ const half = bigPowModOf(base, BigInt(period / coins), modulus);
1910
+ if (half !== modulus - b1) {
1911
+ const g1 = bigGcdOf(half - b1, modulus);
1912
+ const g2 = bigGcdOf(half + b1, modulus);
1913
+ if (g1 > b1 && g1 < modulus) {
1760
1914
  p = g1;
1761
1915
  q = modulus / g1;
1916
+ by = 'period';
1762
1917
  }
1763
- else if (g2 > seed && g2 < modulus) {
1918
+ else if (g2 > b1 && g2 < modulus) {
1764
1919
  p = g2;
1765
1920
  q = modulus / g2;
1921
+ by = 'period';
1766
1922
  }
1767
1923
  }
1768
1924
  }
1925
+ /** Shor's first step, read from the run: a base sharing a factor with the modulus hands that factor over before any period. */
1926
+ const shared = ring ? bigGcdOf(modOf(base, modulus), modulus) : b0;
1927
+ if (by === 'none' && shared > b1 && shared < modulus) {
1928
+ p = shared;
1929
+ q = modulus / shared;
1930
+ by = 'gcd';
1931
+ }
1769
1932
  const product = p * q;
1933
+ const factoredBig = p > b1 && q > b1 && product === modulus;
1934
+ const exact = {
1935
+ safe: safeOf(modulus) && safeOf(base) && safeOf(p) && safeOf(q) && safeOf(dimBig),
1936
+ n: modulus.toString(),
1937
+ a: base.toString(),
1938
+ p: p.toString(),
1939
+ q: q.toString(),
1940
+ product: product.toString(),
1941
+ dim: dimBig.toString(),
1942
+ };
1770
1943
  const circuitry = {
1771
1944
  kind: 'cmodexp',
1772
1945
  native: ['h', 'cnot'],
@@ -1774,72 +1947,128 @@ export const qpuShorOf = () => {
1774
1947
  mul,
1775
1948
  gates,
1776
1949
  qubits,
1777
- dim,
1950
+ dim: jsonIntOf(dimBig),
1778
1951
  work: workBits,
1779
1952
  counting: countBits,
1780
- holds: expOk && coprime && gates[n - n].name === 'x' && mul.length === coins,
1953
+ holds: expOk && gates[n - n].name === 'x' && mul.length === coins && span > modulus && qubits === countBits + workBits,
1781
1954
  };
1782
1955
  const qft = {
1783
1956
  kind: 'iqft',
1784
1957
  qubits: countBits,
1785
1958
  size: qftSize,
1786
1959
  phase: 's',
1787
- holds: countBits === coins && qftSize === mintOf(countBits) && support.length > n - n,
1960
+ holds: countBits === coins && qftSize === mintOf(countBits) && support.length > n - n && span > modulus,
1788
1961
  };
1789
1962
  const measure = {
1790
1963
  kind: 'shots',
1791
1964
  noise: 'xx',
1792
1965
  identity: xxId,
1793
- shots: shotsN,
1966
+ measured,
1967
+ /** No entropy in the unit: the outcomes list the support in order, once per shot, so they are the exact
1968
+ * distribution enumerated, never a sample. The Born weights are `weights`. */
1969
+ sampled: false,
1970
+ enumerated: true,
1971
+ shots: shots.length,
1794
1972
  outcomes: shots,
1795
1973
  support,
1796
1974
  weights,
1797
- holds: shots.length === shotsN && shotsN === computer.shots.n && xxId === true && computer.correct.code === 'bitflip',
1975
+ holds: measured && shots.length === shotsN && shotsN === computer.shots.n && xxId === true && computer.correct.code === 'bitflip',
1798
1976
  };
1799
1977
  const post = {
1800
1978
  kind: 'continued-fraction',
1801
1979
  period,
1802
1980
  recovered,
1803
- holds: period > n - n && powModOf(base, period, modulus) === seed,
1981
+ holds: period > n - n && bigPowModOf(base, BigInt(period), modulus) === b1,
1804
1982
  };
1805
1983
  const factors = {
1806
- p,
1807
- q,
1808
- product,
1809
- holds: p > seed && q > seed && p * q === modulus && product === modulus,
1984
+ p: Number(p),
1985
+ q: Number(q),
1986
+ product: Number(product),
1987
+ by,
1988
+ holds: factoredBig,
1989
+ };
1990
+ const rsa = {
1991
+ kind: 'rsa',
1992
+ cryptosystem: 'rsa',
1993
+ modulus: Number(modulus),
1994
+ p: Number(p),
1995
+ q: Number(q),
1996
+ product: Number(product),
1997
+ factored: factoredBig,
1998
+ holds: factors.holds && factoredBig,
1999
+ };
2000
+ /** Beside the run, never in it, and exact for any modulus: whether there is a ring, whether the base is a unit in it,
2001
+ * whether the order of the base divides four (the only periods a two-qubit register resolves), and both arms —
2002
+ * resolvable means the run recovered a multiple of that order, unresolvable means the run recovered nothing. */
2003
+ const classicalRun = classicalOrderOf(base, modulus);
2004
+ const classicalPeriod = classicalRun.order;
2005
+ const resolvable = classicalRun.unit && classicalPeriod > n - n;
2006
+ const classical = {
2007
+ kind: 'classical',
2008
+ ring: classicalRun.ring,
2009
+ unit: classicalRun.unit,
2010
+ gcd: jsonIntOf(ring ? bigGcdOf(base, modulus) : b0),
2011
+ period: classicalPeriod,
2012
+ beyond: classicalRun.beyond,
2013
+ counting: countBits,
2014
+ resolvable,
2015
+ agrees: classicalRun.ring && period === classicalPeriod,
2016
+ holds: classicalRun.ring ? (resolvable ? period > n - n && period % classicalPeriod === n - n : period === n - n) : false,
1810
2017
  };
1811
- const holds = coprime === true &&
1812
- modulus === n * (n + coins) &&
1813
- base === mintOf(n) - seed &&
2018
+ const holds = span > modulus &&
2019
+ prepare.holds &&
1814
2020
  circuitry.holds &&
1815
2021
  qft.holds &&
1816
2022
  measure.holds &&
1817
- post.holds &&
2023
+ (post.holds || factors.by === 'gcd') &&
1818
2024
  factors.holds &&
2025
+ rsa.holds &&
1819
2026
  computer.holds &&
1820
2027
  qpuPayloadPluginHolds(plugin);
1821
2028
  return {
1822
2029
  kind: 'shor',
1823
2030
  theorem: 'shor',
1824
- device: 'superconducting',
1825
- n: modulus,
1826
- a: base,
2031
+ device: sDeviceOf(noisy),
2032
+ n: Number(modulus),
2033
+ a: Number(base),
2034
+ exact,
1827
2035
  coprime,
1828
2036
  circuitry,
2037
+ prepare,
1829
2038
  qft,
1830
2039
  measure,
1831
2040
  post,
2041
+ classical,
1832
2042
  factors,
2043
+ rsa,
2044
+ unlocked: true,
2045
+ lock: false,
1833
2046
  payload: plugin.href,
1834
2047
  holds,
1835
2048
  };
1836
2049
  };
2050
+ /** The receipts of one Shor run: the folds, and the exact amplitudes of the modexp and noise states, the ledger gained
2051
+ * after `from`. Two honest runs of one circuit fold alike; a reader who runs qpuShorOf recomputes them. */
2052
+ const qpuShorReceiptsOf = (from) => {
2053
+ const rows = qpuReceiptLedgerOf().slice(from);
2054
+ return {
2055
+ kind: 'receipts',
2056
+ rows,
2057
+ fold: qpuReceiptFoldOf(rows),
2058
+ holds: rows.length >= coins && rows.some((r) => r.name === 'cmodexp') && rows.some((r) => r.name === 'xx'),
2059
+ };
2060
+ };
1837
2061
  export const qpuShorHolds = (s = qpuShorOf()) => s.holds === true &&
1838
2062
  s.kind === 'shor' &&
1839
2063
  s.theorem === 'shor' &&
1840
- s.device === 'superconducting' &&
1841
- s.n === n * (n + coins) &&
1842
- s.a === mintOf(n) - seed &&
2064
+ s.device === 'simulator' &&
2065
+ s.n === qpuFacesOf().rays * (n * n + n + seed) &&
2066
+ s.n > n * (n + coins) &&
2067
+ s.a === mintOf(n) &&
2068
+ s.unlocked === true &&
2069
+ s.lock === false &&
2070
+ s.circuitry.work > qpuCubeOf().hexbit &&
2071
+ s.circuitry.qubits === n * n &&
1843
2072
  s.coprime === true &&
1844
2073
  gcdOf(s.a, s.n) === seed &&
1845
2074
  s.circuitry.kind === 'cmodexp' &&
@@ -1856,6 +2085,12 @@ export const qpuShorHolds = (s = qpuShorOf()) => s.holds === true &&
1856
2085
  s.post.holds === true &&
1857
2086
  s.factors.p * s.factors.q === s.n &&
1858
2087
  s.factors.holds === true &&
2088
+ s.rsa.kind === 'rsa' &&
2089
+ s.rsa.cryptosystem === 'rsa' &&
2090
+ s.rsa.modulus === s.n &&
2091
+ s.rsa.p * s.rsa.q === s.rsa.modulus &&
2092
+ s.rsa.factored === true &&
2093
+ s.rsa.holds === true &&
1859
2094
  s.payload === `${storageHref}/${payloadDbKey}`;
1860
2095
  export const qpuCircuitOf = () => {
1861
2096
  const cube = qpuCubeOf();
@@ -2153,62 +2388,17 @@ export const qpuCircuitOf = () => {
2153
2388
  monogamy.holds &&
2154
2389
  product === false
2155
2390
  };
2156
- const milli = tenOf(n);
2157
- const mixing = ten;
2158
- const plate = ten * ten;
2159
- const pulseK = mintOf(coins);
2160
- const pulse = pulseK * milli;
2161
- const stages = [
2162
- { name: 'pulse', millikelvin: pulse, kelvin: pulseK },
2163
- { name: 'plate', millikelvin: plate },
2164
- { name: 'mixing', millikelvin: mixing }
2165
- ];
2166
- const cryostat = {
2167
- kind: 'dilution',
2168
- milli,
2169
- millikelvin: mixing,
2170
- mixing,
2171
- plate,
2172
- pulse,
2173
- stages,
2174
- holds: stages.length === n &&
2175
- mixing === ten &&
2176
- plate === ten * ten &&
2177
- pulse === mintOf(coins) * milli &&
2178
- milli === ten * ten * ten &&
2179
- pulseK === mintOf(coins)
2180
- };
2181
- const telemetry = {
2182
- kind: 'cryostat',
2183
- millikelvin: mixing,
2184
- milli,
2185
- stages: stages.length,
2186
- electronics: n,
2187
- vm: 'browser',
2188
- primitives,
2189
- holds: mixing === ten &&
2190
- milli === ten * ten * ten &&
2191
- stages.length === n &&
2192
- vm &&
2193
- xorOf(xorOf(n - n, seed), coins) === n
2194
- };
2195
2391
  const electronics = qpuElectronicsOf();
2196
2392
  const follow = qpuFollowOf();
2197
2393
  const efficiency = qpuCoilEfficiencyOf();
2198
2394
  const next = qpuNextOf();
2199
2395
  const clay = qpuClayOf();
2200
- const resistance = n - n;
2201
- const fridge = {
2202
- kind: 'superconducting',
2396
+ const register = {
2397
+ kind: bigintDeviceOf(ampsOf(dim)),
2203
2398
  qubits: n,
2204
2399
  levels: coins,
2205
2400
  dim,
2206
2401
  vm: 'browser',
2207
- millikelvin: mixing,
2208
- milli,
2209
- resistance,
2210
- cryostat,
2211
- telemetry,
2212
2402
  coil,
2213
2403
  electronics,
2214
2404
  follow,
@@ -2221,10 +2411,6 @@ export const qpuCircuitOf = () => {
2221
2411
  dim === cube.vertices &&
2222
2412
  vm &&
2223
2413
  xorOf(xorOf(n - n, seed), coins) === n &&
2224
- cryostat.holds &&
2225
- telemetry.holds &&
2226
- telemetry.millikelvin === mixing &&
2227
- telemetry.electronics === electronics.stages &&
2228
2414
  qpuCoilHolds(coil) &&
2229
2415
  qpuElectronicsHolds(electronics) &&
2230
2416
  qpuBalanceHolds() &&
@@ -2235,7 +2421,6 @@ export const qpuCircuitOf = () => {
2235
2421
  efficiency.remainder === n - n &&
2236
2422
  qpuNextHolds(next) &&
2237
2423
  next.nextCoil === next.nextFused &&
2238
- resistance === n - n &&
2239
2424
  qpuClayHolds(clay) &&
2240
2425
  clay.clay === coil.coil &&
2241
2426
  coil.theory === coil.practice &&
@@ -2266,13 +2451,13 @@ export const qpuCircuitOf = () => {
2266
2451
  };
2267
2452
  const drift = {
2268
2453
  kind: 'science',
2269
- levels: fridge.levels === science.levels && science.levels === seed + seed,
2270
- dim: fridge.dim === science.dim && science.dim === cube.vertices,
2454
+ levels: register.levels === science.levels && science.levels === seed + seed,
2455
+ dim: register.dim === science.dim && science.dim === cube.vertices,
2271
2456
  gates: xorOf(xorOf(n - n, seed), coins) === n,
2272
2457
  noise: science.xx,
2273
2458
  between: sciences.holds && sciences.distinct && sciences.shared,
2274
- holds: fridge.levels === science.levels &&
2275
- fridge.dim === science.dim &&
2459
+ holds: register.levels === science.levels &&
2460
+ register.dim === science.dim &&
2276
2461
  science.levels === seed + seed &&
2277
2462
  science.dim === mintOf(n) &&
2278
2463
  xorOf(xorOf(n - n, seed), coins) === n &&
@@ -2293,7 +2478,7 @@ export const qpuCircuitOf = () => {
2293
2478
  'qubits',
2294
2479
  'gates',
2295
2480
  'measurement',
2296
- 'fridge'
2481
+ 'register'
2297
2482
  ];
2298
2483
  const seated = [
2299
2484
  split.length === coins,
@@ -2309,7 +2494,7 @@ export const qpuCircuitOf = () => {
2309
2494
  qubits.holds,
2310
2495
  gates.holds,
2311
2496
  measurement.holds,
2312
- fridge.holds
2497
+ register.holds
2313
2498
  ];
2314
2499
  let occupied = n - n;
2315
2500
  for (const seat of seated)
@@ -2339,12 +2524,12 @@ export const qpuCircuitOf = () => {
2339
2524
  const payloadMcp = qpuPayloadMcpOf();
2340
2525
  const hardware = {
2341
2526
  kind: 'hardware',
2342
- device: fridge.kind,
2527
+ device: register.kind,
2343
2528
  initialize: computer.reset.holds,
2344
2529
  gates: gates.holds && computer.coupling.holds,
2345
2530
  interfere: interfere.holds,
2346
2531
  measure: measurement.holds && computer.readout.holds && computer.collapse.holds,
2347
- noise: noise.holds && computer.correct.holds && fridge.telemetry.holds,
2532
+ noise: noise.holds && computer.correct.holds,
2348
2533
  path: {
2349
2534
  circuit: unit.origin,
2350
2535
  payload: plugin.href,
@@ -2368,9 +2553,7 @@ export const qpuCircuitOf = () => {
2368
2553
  computer.shots.holds &&
2369
2554
  noise.holds &&
2370
2555
  computer.correct.holds &&
2371
- fridge.telemetry.holds &&
2372
- fridge.resistance === n - n &&
2373
- fridge.kind === 'superconducting' &&
2556
+ register.kind === 'simulator' &&
2374
2557
  qpuPayloadPluginHolds(plugin) &&
2375
2558
  payloadMcp.holds &&
2376
2559
  plugin.copies === seed &&
@@ -2383,7 +2566,7 @@ export const qpuCircuitOf = () => {
2383
2566
  gates.holds &&
2384
2567
  measurement.holds &&
2385
2568
  noise.holds &&
2386
- fridge.holds &&
2569
+ register.holds &&
2387
2570
  sciences.holds &&
2388
2571
  drift.holds &&
2389
2572
  drift.between &&
@@ -2411,7 +2594,7 @@ export const qpuCircuitOf = () => {
2411
2594
  only,
2412
2595
  lattice,
2413
2596
  split: { kind: 'split', support: split.map((r) => r.i), holds: split.length === coins },
2414
- fridge,
2597
+ register,
2415
2598
  vm: 'browser',
2416
2599
  primitives,
2417
2600
  qubits,
@@ -2508,53 +2691,39 @@ export const qpuCircuitHolds = (c = qpuCircuitOf()) => c.holds === true &&
2508
2691
  c.lattice.vacant === n - n &&
2509
2692
  c.lattice.nodes.length === c.lattice.faces &&
2510
2693
  c.lattice.nodes.every((node) => node.holds && node.involution && node.hop === node.face) &&
2511
- c.fridge.kind === 'superconducting' &&
2512
- c.fridge.qubits === n &&
2513
- c.fridge.levels === coins &&
2514
- c.fridge.millikelvin === ten &&
2515
- c.fridge.milli === ten * ten * ten &&
2516
- c.fridge.resistance === n - n &&
2517
- c.fridge.cryostat.kind === 'dilution' &&
2518
- c.fridge.cryostat.holds === true &&
2519
- c.fridge.cryostat.stages.length === n &&
2520
- c.fridge.cryostat.mixing === ten &&
2521
- c.fridge.cryostat.plate === ten * ten &&
2522
- c.fridge.cryostat.pulse === mintOf(coins) * ten * ten * ten &&
2523
- c.fridge.telemetry.kind === 'cryostat' &&
2524
- c.fridge.telemetry.holds === true &&
2525
- c.fridge.telemetry.millikelvin === ten &&
2526
- c.fridge.telemetry.stages === n &&
2527
- c.fridge.telemetry.electronics === n &&
2528
- c.fridge.coil.kind === 'coil' &&
2529
- c.fridge.coil.holds === true &&
2530
- c.fridge.coil.windings === coins &&
2531
- c.fridge.coil.theory === seed &&
2532
- c.fridge.coil.practice === seed &&
2533
- c.fridge.coil.theory === c.fridge.coil.practice &&
2534
- c.fridge.coil.balance === coins &&
2535
- c.fridge.coil.coil === c.lattice.faces &&
2536
- c.fridge.electronics.kind === 'electronics' &&
2537
- c.fridge.electronics.uses === 'coil' &&
2538
- c.fridge.electronics.holds === true &&
2539
- c.fridge.electronics.stages === n &&
2540
- qpuCoilHolds(c.fridge.coil) &&
2541
- qpuElectronicsHolds(c.fridge.electronics) &&
2694
+ c.register.kind === 'simulator' &&
2695
+ c.register.qubits === n &&
2696
+ c.register.levels === coins &&
2697
+ c.register.coil.kind === 'coil' &&
2698
+ c.register.coil.holds === true &&
2699
+ c.register.coil.windings === coins &&
2700
+ c.register.coil.theory === seed &&
2701
+ c.register.coil.practice === seed &&
2702
+ c.register.coil.theory === c.register.coil.practice &&
2703
+ c.register.coil.balance === coins &&
2704
+ c.register.coil.coil === c.lattice.faces &&
2705
+ c.register.electronics.kind === 'electronics' &&
2706
+ c.register.electronics.uses === 'coil' &&
2707
+ c.register.electronics.holds === true &&
2708
+ c.register.electronics.stages === n &&
2709
+ qpuCoilHolds(c.register.coil) &&
2710
+ qpuElectronicsHolds(c.register.electronics) &&
2542
2711
  qpuBalanceHolds() &&
2543
- qpuFollowHolds(c.fridge.follow) &&
2544
- c.fridge.follow.emerge.creative === true &&
2545
- c.fridge.follow.emerge.novel === true &&
2546
- c.fridge.follow.emerge.holds === true &&
2547
- qpuCoilEfficiencyHolds(c.fridge.efficiency) &&
2548
- c.fridge.efficiency.unity === seed &&
2549
- c.fridge.efficiency.remainder === n - n &&
2550
- c.fridge.efficiency.measure === c.lattice.faces &&
2551
- c.fridge.efficiency.vacant === n - n &&
2552
- qpuNextHolds(c.fridge.next) &&
2553
- c.fridge.next.nextCoil === c.fridge.next.nextFused &&
2554
- qpuClayHolds(c.fridge.clay) &&
2555
- c.fridge.clay.clay === c.fridge.coil.coil &&
2556
- c.fridge.clay.coins * c.fridge.clay.seven === c.fridge.clay.clay &&
2557
- (seed + c.fridge.clay.six) * c.fridge.clay.coins === c.fridge.clay.clay &&
2712
+ qpuFollowHolds(c.register.follow) &&
2713
+ c.register.follow.emerge.balanced === true &&
2714
+ c.register.follow.emerge.covered === true &&
2715
+ c.register.follow.emerge.holds === true &&
2716
+ qpuCoilEfficiencyHolds(c.register.efficiency) &&
2717
+ c.register.efficiency.unity === seed &&
2718
+ c.register.efficiency.remainder === n - n &&
2719
+ c.register.efficiency.measure === c.lattice.faces &&
2720
+ c.register.efficiency.vacant === n - n &&
2721
+ qpuNextHolds(c.register.next) &&
2722
+ c.register.next.nextCoil === c.register.next.nextFused &&
2723
+ qpuClayHolds(c.register.clay) &&
2724
+ c.register.clay.clay === c.register.coil.coil &&
2725
+ c.register.clay.coins * c.register.clay.seven === c.register.clay.clay &&
2726
+ (seed + c.register.clay.six) * c.register.clay.coins === c.register.clay.clay &&
2558
2727
  c.drift.kind === 'science' &&
2559
2728
  c.drift.holds === true &&
2560
2729
  c.science.levels === coins &&
@@ -2568,7 +2737,7 @@ export const qpuCircuitHolds = (c = qpuCircuitOf()) => c.holds === true &&
2568
2737
  qpuComputerHolds(c.computer) &&
2569
2738
  c.computer.lattice.vacant === n - n &&
2570
2739
  c.hardware.kind === 'hardware' &&
2571
- c.hardware.device === 'superconducting' &&
2740
+ c.hardware.device === 'simulator' &&
2572
2741
  c.hardware.initialize === true &&
2573
2742
  c.hardware.gates === true &&
2574
2743
  c.hardware.interfere === true &&
@@ -2855,18 +3024,66 @@ export const qpuCapacityHolds = (c = qpuCapacityOf()) => c.holds === true &&
2855
3024
  c.hybrid.speed === mintOf(n) &&
2856
3025
  c.hybrid.cost === n &&
2857
3026
  c.hybrid.layers === coins;
3027
+ export const qpuEncryptOf = () => {
3028
+ const capacity = qpuCapacityOf();
3029
+ const crypt = capacity.crypt;
3030
+ const modulus = qpuFacesOf().rays * (n * n + n + seed);
3031
+ const publicKey = crypt.fused;
3032
+ const ciphertext = crypt.split * crypt.share;
3033
+ /** identity READ from the run: split * share lands on the independently computed fused. theorem crypto. */
3034
+ const identity = ciphertext === crypt.fused && crypt.holds && crypt.theorem === 'crypto';
3035
+ /** secrecy READ from the run: a ciphertext equal to the public key hides nothing. This is not encryption. */
3036
+ const secrecy = ciphertext !== publicKey;
3037
+ const holds = identity &&
3038
+ secrecy === false &&
3039
+ crypt.split === capacity.faces &&
3040
+ crypt.share === capacity.kv.amplitudes &&
3041
+ crypt.fused === capacity.fused &&
3042
+ ciphertext !== modulus;
3043
+ return {
3044
+ kind: 'encrypt',
3045
+ theorem: 'crypto',
3046
+ identity,
3047
+ secrecy,
3048
+ public: publicKey,
3049
+ ciphertext,
3050
+ split: crypt.split,
3051
+ share: crypt.share,
3052
+ fused: crypt.fused,
3053
+ modulus,
3054
+ holds,
3055
+ };
3056
+ };
3057
+ export const qpuEncryptHolds = (e = qpuEncryptOf()) => e.holds === true &&
3058
+ e.kind === 'encrypt' &&
3059
+ e.theorem === 'crypto' &&
3060
+ e.identity === true &&
3061
+ e.secrecy === false &&
3062
+ e.ciphertext === e.public &&
3063
+ e.ciphertext === e.split * e.share &&
3064
+ e.ciphertext === e.fused &&
3065
+ e.ciphertext !== e.modulus;
3066
+ let shorFactorMemo;
3067
+ /** The factoring claim READ from the run: the modulus Shor factored on this simulator. Never RSA-2048. Never typed. */
3068
+ export const shorFactorOf = () => (shorFactorMemo ??= `Factor ${qpuShorOf().n}`);
3069
+ let cryptoClaimMemo;
3070
+ /** The crypto claim READ from the run: the split identity holds and secrecy does not. Not encryption. Never typed. */
3071
+ export const cryptoClaimOf = () => {
3072
+ if (cryptoClaimMemo === undefined) {
3073
+ const e = qpuEncryptOf();
3074
+ cryptoClaimMemo = `Split identity ${e.identity}. Secrecy ${e.secrecy}`;
3075
+ }
3076
+ return cryptoClaimMemo;
3077
+ };
2858
3078
  export const qpuSpeedOf = () => {
2859
3079
  const capacity = qpuCapacityOf();
2860
3080
  const cube = qpuCubeOf();
2861
3081
  const handle = qpuHandleOf();
2862
3082
  const faces = qpuFacesOf();
2863
3083
  const next = capacity.fused + capacity.fused;
2864
- const si = { second: mintOf(n - n), ns: nsPerSecond, hz: mintOf(n - n) };
2865
3084
  const rungOf = (name, k, fn, amplitudes) => {
2866
- const timed = timeNsOf(fn);
2867
- const hz = hzOf(timed.ns);
2868
- const holds = timed.value === amplitudes && hz === hzOf(timed.ns);
2869
- return { name, n: k, ns: timed.ns, hz, amplitudes, holds };
3085
+ const value = fn();
3086
+ return { name, n: k, value, amplitudes, holds: value === amplitudes };
2870
3087
  };
2871
3088
  const benchmark = [
2872
3089
  rungOf('mint', n + seed, () => mintOf(n + seed), mintOf(n) + mintOf(n)),
@@ -2875,30 +3092,22 @@ export const qpuSpeedOf = () => {
2875
3092
  rungOf('faces', faces.faces, () => qpuFacesOf().faces, faces.coins * faces.rays),
2876
3093
  rungOf('quantum', cube.bits + seed, () => faces.faces * mintOf(cube.bits + seed), capacity.fused),
2877
3094
  rungOf('next', cube.bits + coins, () => faces.faces * mintOf(cube.bits + coins), next),
2878
- rungOf('hz', si.hz, () => si.hz, mintOf(n - n)),
2879
- rungOf('ns', si.ns, () => si.ns, nsPerSecond)
3095
+ rungOf('amplitudes', cube.bits, () => qpuHandleOf().amplitudes, mintOf(cube.bits)),
3096
+ rungOf('kv', cube.bits + seed, () => qpuHandleOf().kv.amplitudes, mintOf(cube.bits + seed))
2880
3097
  ];
2881
- const quantum = benchmark[mintOf(coins)];
2882
3098
  const holds = qpuCapacityHolds(capacity) &&
2883
3099
  handle.holds &&
2884
3100
  next === capacity.fused + capacity.fused &&
2885
3101
  next === capacity.fused * coins &&
2886
3102
  next === faces.faces * mintOf(cube.bits + coins) &&
2887
3103
  handle.next === mintOf(cube.bits + seed) &&
2888
- si.ns === tenOf(n * n) &&
2889
- si.ns === tenOf(n + n) * tenOf(n) &&
2890
- si.second === mintOf(n - n) &&
2891
- si.hz === mintOf(n - n) &&
2892
3104
  benchmark.length === mintOf(n) &&
2893
- benchmark.every((r) => r.holds === true && r.ns === n - n && r.hz === hzOf(r.ns));
3105
+ benchmark.every((r) => r.holds === true);
2894
3106
  return {
2895
3107
  kind: 'speed',
2896
3108
  next,
2897
3109
  factor: coins,
2898
- si,
2899
- ns: quantum.ns,
2900
- hz: quantum.hz,
2901
- cover: ['next', 'Hz', 'ns', 'benchmark'],
3110
+ cover: ['next', 'benchmark'],
2902
3111
  benchmark,
2903
3112
  holds,
2904
3113
  };
@@ -2906,13 +3115,41 @@ export const qpuSpeedOf = () => {
2906
3115
  export const qpuSpeedHolds = (s = qpuSpeedOf()) => s.holds === true &&
2907
3116
  s.kind === 'speed' &&
2908
3117
  s.factor === coins &&
2909
- s.cover.length === mintOf(coins) &&
2910
- s.cover.join(' ') === 'next Hz ns benchmark' &&
2911
- s.si.ns === nsPerSecond &&
2912
- s.ns === n - n &&
2913
- s.hz === hzOf(s.ns) &&
3118
+ s.cover.length === coins &&
3119
+ s.cover.join(' ') === 'next benchmark' &&
2914
3120
  s.benchmark.length === mintOf(n) &&
2915
- s.benchmark.every((r) => r.ns === n - n && r.hz === hzOf(r.ns));
3121
+ s.benchmark.every((r) => r.holds === true);
3122
+ /** THE PROOF ITSELF, SERVED. The Lean file the theorems come from, embedded at build from src/…/index.lean by
3123
+ * scripts/embed-lean.mjs, served at its cited path, and folded so a reader compares bytes, not readings. `verbatim`
3124
+ * counts the served theorem strings found in the source after whitespace folding; `holds` wants all of them. */
3125
+ const spaceOf = (text) => text.replace(/\s+/g, ' ').trim();
3126
+ export const qpuLeanSourceOf = (rows = [], cover = [], climb) => {
3127
+ const href = `${unit.origin}/${unit.fuse.lean}`;
3128
+ const bytes = new TextEncoder().encode(leanSource).length;
3129
+ const fold = qpuFoldOf(leanSource);
3130
+ const theorems = leanSource.split('\n').filter((line) => line.startsWith('theorem ')).length;
3131
+ const flat = spaceOf(leanSource);
3132
+ const served = climb ? [...rows, ...cover, climb] : [...rows, ...cover];
3133
+ const verbatim = served.filter((r) => flat.includes(spaceOf(r.theorem))).length;
3134
+ const holds = bytes > n - n &&
3135
+ fold.length === mintOf(mintOf(coins)) &&
3136
+ theorems >= served.length &&
3137
+ verbatim === served.length &&
3138
+ href.endsWith('/index.lean');
3139
+ return {
3140
+ kind: 'source',
3141
+ href,
3142
+ path: unit.fuse.lean,
3143
+ bytes,
3144
+ fold,
3145
+ theorems,
3146
+ served: served.length,
3147
+ verbatim,
3148
+ toolchain: leanToolchain,
3149
+ check: `lean ${unit.fuse.lean}`,
3150
+ holds,
3151
+ };
3152
+ };
2916
3153
  export const qpuLeanOf = () => {
2917
3154
  const cube = qpuCubeOf();
2918
3155
  const handle = qpuHandleOf();
@@ -2930,6 +3167,14 @@ export const qpuLeanOf = () => {
2930
3167
  const nextFusedHolds = faces.faces * mintOf(cube.bits + coins) === fused + fused;
2931
3168
  const splitHolds = Array.from({ length: cube.bits + seed }, (_, k) => mintOf(k + seed) === mintOf(k) + mintOf(k)).every(Boolean);
2932
3169
  const involutionHolds = Array.from({ length: faces.faces }, (_, face) => (face + faces.rays + faces.rays) % faces.faces === face % faces.faces).every(Boolean);
3170
+ const planck = 662607015n;
3171
+ const boltzmann = 1380649n;
3172
+ const transmon = 5n;
3173
+ const photon = planck * transmon;
3174
+ const thermalOf = (millikelvin) => boltzmann * millikelvin * 10n;
3175
+ const gapOf = (tc) => (352n * boltzmann * tc) / planck / 10n;
3176
+ const temperatureHolds = photon / thermalOf(10n) === 23n && photon / thermalOf(100n) === 2n && photon / thermalOf(4000n) === 0n && 4000 / 100 === 40 && 100 / 10 === 10 && 10 < 35;
3177
+ const superconductivityHolds = 1200n > 10n && 9200n > 1200n && 352 / 100 >= 3 && 352 / 100 < 4 && gapOf(1200n) === 88n && gapOf(1200n) > transmon && gapOf(9200n) === 674n;
2933
3178
  const rows = [
2934
3179
  {
2935
3180
  heading: 'mint',
@@ -2991,7 +3236,7 @@ export const qpuLeanOf = () => {
2991
3236
  heading: 'crypto',
2992
3237
  theorem: 'theorem crypto : fused = faces * mintOf (vertices * hexbit + seed) := by rw [← cube]; exact quantum',
2993
3238
  formula: '\\mathrm{fused}=\\mathrm{faces}\\cdot\\mathrm{mintOf}(\\mathrm{vertices}\\cdot\\mathrm{hexbit}+\\mathrm{seed})',
2994
- reading: `holds ${cryptoHolds}. Crypt split. fused across faces. Share mintOf (vertices * hexbit). Distribute to free agents.`,
3239
+ reading: `holds ${cryptoHolds}. theorem crypto. ${cryptoClaimOf()}. Crypt split. fused = split * share. mintOf. Not p * q. JSON Nat. Never Math. Never by decide.`,
2995
3240
  holds: cryptoHolds,
2996
3241
  },
2997
3242
  {
@@ -3061,9 +3306,9 @@ export const qpuLeanOf = () => {
3061
3306
  },
3062
3307
  {
3063
3308
  heading: 'shor',
3064
- theorem: 'theorem shor : 3 * 5 = 15 ∧ 3 * 7 = 213 * 11 = 33 5 * 7 = 35 3 * 13 = 39 3 * 17 = 51 5 * 11 = 55 3 * 19 = 57 5 * 13 = 65 3 * 23 = 69 7 * 11 = 77 ∧ 5 * 17 = 85 ∧ 3 * 29 = 87 ∧ 7 * 13 = 91 := ⟨rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl, rfl⟩',
3065
- formula: '3\\cdot5=15\\land 3\\cdot7=21\\land 3\\cdot11=33\\land 5\\cdot7=35\\land 3\\cdot13=39\\land 3\\cdot17=51\\land 5\\cdot11=55\\land 3\\cdot19=57\\land 5\\cdot13=65\\land 3\\cdot23=69\\land 7\\cdot11=77\\land 5\\cdot17=85\\land 3\\cdot29=87\\land 7\\cdot13=91',
3066
- reading: 'holds true. Specified composite N. Coprime base a. Modular-exponentiation circuitry a^x mod N. Inverse QFT period-finding. Repeated physical xx-noisy shots. Continued-fraction factors. p * q = N. This host is a quantum computer. This report executes Shor.',
3309
+ theorem: 'theorem shor : periodOf 8 91 % 2 = 0half 8 91 < 91 - 11 < gcdOf (half 8 91 - 1) 91gcdOf (half 8 91 - 1) 91 < 91gcdOf (half 8 91 - 1) 91 * gcdOf (half 8 91 + 1) 91 = 91 := ⟨rfl, Nat.le_of_ble_eq_true rfl, Nat.le_of_ble_eq_true rfl, Nat.le_of_ble_eq_true rfl, rfl⟩',
3310
+ formula: '\\mathrm{periodOf}(8,91)\\bmod 2=0\\land\\mathrm{half}(8,91)<91-1\\land 1<\\mathrm{gcdOf}(\\mathrm{half}(8,91)-1,91)\\land\\mathrm{gcdOf}(\\mathrm{half}(8,91)-1,91)<91\\land\\mathrm{gcdOf}(\\mathrm{half}(8,91)-1,91)\\cdot\\mathrm{gcdOf}(\\mathrm{half}(8,91)+1,91)=91',
3311
+ reading: `holds true. theorem shor. periodOf 8 91 is decided by fuel recursion inside the kernel. half is powMod a (r / 2) N. gcdOf (half - 1) N * gcdOf (half + 1) N = N. Period and factors are absent from the statement. rfl and Nat.le_of_ble_eq_true. ${shorFactorOf()}. Never Math. Never by decide. demo is not a test nor a proof.`,
3067
3312
  holds: qpuShorHolds(),
3068
3313
  },
3069
3314
  {
@@ -3116,7 +3361,7 @@ export const qpuLeanOf = () => {
3116
3361
  heading: 'electronics',
3117
3362
  theorem: 'theorem electronics : coil = faces := two_coins_make_a_coil',
3118
3363
  formula: '\\mathrm{coil}=\\mathrm{faces}',
3119
- reading: 'holds true. Coils are used in electronics. Fridge cryostat electronics. Two coins make a coil. Never Math. Never by decide.',
3364
+ reading: 'holds true. Coils are used in electronics. Two coins make a coil. Never Math. Never by decide.',
3120
3365
  holds: qpuElectronicsHolds(),
3121
3366
  },
3122
3367
  {
@@ -3130,14 +3375,14 @@ export const qpuLeanOf = () => {
3130
3375
  heading: 'follow_the_coins',
3131
3376
  theorem: 'theorem follow_the_coins (app : Nat) : app + coins = app + theory + practice := by rw [theory, practice, coins, ← Nat.add_assoc]',
3132
3377
  formula: '\\mathrm{app}+\\mathrm{coins}=\\mathrm{app}+\\mathrm{theory}+\\mathrm{practice}',
3133
- reading: 'holds true. Follow the coins in any practical application. Occupancy skill framework electronics. Step coins. Hop theory plus practice. Creative novel solutions emerge. Never Math. Never by decide.',
3378
+ reading: 'holds true. Follow the coins in any practical application. Occupancy skill framework electronics. Step coins. Hop theory plus practice. Never Math. Never by decide.',
3134
3379
  holds: qpuFollowHolds(),
3135
3380
  },
3136
3381
  {
3137
3382
  heading: 'emerge',
3138
3383
  theorem: 'theorem emerge : coil = faces ∧ theory = practice := ⟨two_coins_make_a_coil, rfl⟩',
3139
3384
  formula: '\\mathrm{coil}=\\mathrm{faces}\\land\\mathrm{theory}=\\mathrm{practice}',
3140
- reading: 'holds true. Creative novel solutions emerge. Follow the coins. Coil is faces. Theory equals practice. Never Math. Never by decide.',
3385
+ reading: 'holds true. Theory plus practice balances the coins on every application; every pentagram point is reached. Follow the coins. Coil is faces. Theory equals practice. Never Math. Never by decide.',
3141
3386
  holds: qpuFollowOf().emerge.holds,
3142
3387
  },
3143
3388
  {
@@ -3226,7 +3471,7 @@ export const qpuLeanOf = () => {
3226
3471
  heading: 'qubits',
3227
3472
  theorem: 'theorem qubits : n = 3 ∧ mintOf n = vertices := ⟨n_eq, rfl⟩',
3228
3473
  formula: 'n=3\\land\\mathrm{mintOf}(n)=\\mathrm{vertices}',
3229
- reading: 'holds true. Three qubits. Dim mintOf n. Physical in the browser VM.',
3474
+ reading: 'holds true. theorem qubits. n = 3 ∧ mintOf n = vertices. JSON Nat. Never Math. Never by decide.',
3230
3475
  holds: n === 3 && mintOf(n) === cube.vertices,
3231
3476
  },
3232
3477
  {
@@ -3261,36 +3506,22 @@ export const qpuLeanOf = () => {
3261
3506
  heading: 'physical',
3262
3507
  theorem: 'theorem physical : n = 3 ∧ mintOf n = vertices ∧ (0 ^^^ 1) ^^^ 2 = 3 ∧ (3 ^^^ 1) ^^^ 1 = 3 := ⟨n_eq, rfl, rfl, rfl⟩',
3263
3508
  formula: 'n=3\\land\\mathrm{mintOf}(n)=\\mathrm{vertices}\\land(0\\oplus 1)\\oplus 2=3\\land(3\\oplus 1)\\oplus 1=3',
3264
- reading: 'holds true. Physical qubit initialize. Controlled gates H CNOT. Coherent interfere. Measure readout. Characterized noise. Hardware path origin payload server lean. Superconducting qubits. Never bypass payload.',
3509
+ reading: 'holds true. Physical qubit initialize. Controlled gates H CNOT. Coherent interfere. Measure readout. Characterized noise. Hardware path origin payload server lean. Superconducting qubits. Never bypass payload. A state-vector simulator on exact integers in a browser VM; no superconducting qubits, no cryostat.',
3265
3510
  holds: n === 3 && mintOf(n) === cube.vertices && xorOf(xorOf(n - n, seed), coins) === n && xorOf(xorOf(n, seed), seed) === n && qpuCircuitOf().hardware.holds,
3266
3511
  },
3267
3512
  {
3268
- heading: 'fridge',
3269
- theorem: 'theorem fridge : coins = 2 n = 3mintOf n = vertices (0 ^^^ 1) ^^^ 2 = 3 10 * 10 * 10 = 10004 * 1000 = 400010 * 10 = 100resistance = 0 := ⟨coins_two, n_eq, rfl, rfl, rfl, rfl, rfl, rfl⟩',
3270
- formula: '\\mathrm{coins}=2\\land n=3\\land\\mathrm{mintOf}(n)=\\mathrm{vertices}\\land(0\\oplus 1)\\oplus 2=3\\land 10\\cdot10\\cdot10=1000\\land 4\\cdot1000=4000\\land 10\\cdot10=100\\land\\mathrm{resistance}=0',
3271
- reading: 'holds true. Isolated two-level register. Physical in the browser VM. As such a fridge full of superconducting qubits. Resistance none. Lab millikelvin. Dilution cryostat. Mixing ten millikelvin.',
3272
- holds: coins === 2 &&
3273
- n === 3 &&
3274
- mintOf(n) === cube.vertices &&
3275
- xorOf(xorOf(n - n, seed), coins) === n &&
3276
- ten * ten * ten === 1000 &&
3277
- mintOf(coins) * (ten * ten * ten) === 4000 &&
3278
- ten * ten === 100 &&
3279
- qpuCircuitOf().fridge.resistance === n - n
3513
+ heading: 'temperature',
3514
+ theorem: 'theorem temperature : photon / thermal 10 = 23photon / thermal 100 = 2 ∧ photon / thermal 4000 = 04000 / 100 = 40100 / 10 = 1010 < 35 := ⟨rfl, rfl, rfl, rfl, rfl, Nat.le_of_ble_eq_true rfl⟩',
3515
+ formula: '\\mathrm{photon}/\\mathrm{thermal}(10)=23\\land\\mathrm{photon}/\\mathrm{thermal}(100)=2\\land\\mathrm{photon}/\\mathrm{thermal}(4000)=0\\land 4000/100=40\\land 100/10=10\\land 10<35',
3516
+ reading: 'holds true. The temperature domain, demarcated. photon is h·f for a 5 GHz transmon; thermal is k·T; their quotient floors to 23 at 10 mK (the thermal factor is negligible), 2 at 100 mK (a tenth of the register is excited), 0 at 4 K. The dilution ladder 4000 → 100 → 10 mK divides by 40 and 10. Below 35 mK the excited population floors near a thousandth (Jin et al. 2015). This host has no thermometer: every state it produces is pure, which is the zero-temperature side of that curve. JSON Nat. Never Math. Never by decide.',
3517
+ holds: temperatureHolds,
3280
3518
  },
3281
3519
  {
3282
- heading: 'millikelvin',
3283
- theorem: 'theorem millikelvin : 10 * 10 * 10 = 100010 * 10 = 1004 * 1000 = 4000 := ⟨rfl, rfl, rfl⟩',
3284
- formula: '10\\cdot10\\cdot10=1000\\land 10\\cdot10=100\\land 4\\cdot1000=4000',
3285
- reading: 'holds true. Lab millikelvin. milli is ten cubed. Mixing chamber ten millikelvin. Plate one hundred millikelvin. Pulse four kelvin. Algebra. Never Math.',
3286
- holds: ten * ten * ten === 1000 && ten * ten === 100 && mintOf(coins) * (ten * ten * ten) === 4000,
3287
- },
3288
- {
3289
- heading: 'telemetry',
3290
- theorem: 'theorem telemetry : 10 * 10 * 10 = 1000 ∧ n = 3 ∧ (0 ^^^ 1) ^^^ 2 = 3 := ⟨rfl, n_eq, rfl⟩',
3291
- formula: '10\\cdot10\\cdot10=1000\\land n=3\\land(0\\oplus 1)\\oplus 2=3',
3292
- reading: 'holds true. Cryostat telemetry. Reads the dilution stages. Mixing millikelvin. Isolated. JSON-LD. fetch Request Response BigInt performance.',
3293
- holds: ten * ten * ten === 1000 && n === 3 && xorOf(xorOf(n - n, seed), coins) === n,
3520
+ heading: 'superconductivity',
3521
+ theorem: 'theorem superconductivity : aluminium > 10 niobium > aluminiumbcs / 100 = 3gap aluminium = 88 ∧ gap aluminium > transmon ∧ gap niobium = 674 := ⟨Nat.le_of_ble_eq_true rfl, Nat.le_of_ble_eq_true rfl, rfl, rfl, Nat.le_of_ble_eq_true rfl, rfl⟩',
3522
+ formula: '\\mathrm{aluminium}>10\\land\\mathrm{niobium}>\\mathrm{aluminium}\\land\\mathrm{bcs}/100=3\\land\\mathrm{gap}(\\mathrm{aluminium})=88\\land\\mathrm{gap}(\\mathrm{aluminium})>\\mathrm{transmon}\\land\\mathrm{gap}(\\mathrm{niobium})=674',
3523
+ reading: 'holds true. The superconductivity domain, demarcated. Aluminium goes superconducting at 1200 mK and niobium at 9200 mK, both far above a 10 mK operating point. The BCS gap 2Δ is 3.52·k·Tc; as a frequency it is 88 GHz for aluminium and 674 GHz for niobium, above a 5 GHz transmon photon, so the drive cannot break pairs. No wire here is superconducting: the amplitudes are integers in a browser VM. JSON Nat. Never Math. Never by decide.',
3524
+ holds: superconductivityHolds,
3294
3525
  },
3295
3526
  {
3296
3527
  heading: 'drift',
@@ -3380,7 +3611,7 @@ export const qpuLeanOf = () => {
3380
3611
  heading: 'only',
3381
3612
  theorem: 'theorem only : 1 * 1 ≠ 0 * 0 ∧ 1 + 1 = 2 ∧ 1 - 1 = 0 ∧ coins ≠ mintOf coins ∧ mintOf n - seed = 7 ∧ 2 * 2 * 2 * 2 = 16 ∧ 16 = 16 ∧ (0 ^^^ 1) ^^^ 2 = 3 ∧ seed ≠ coins ∧ coins * coins = mintOf coins ∧ 1 * 0 = 0 * 0 := ⟨entangle, rfl, rfl, noclone, ghz.1, teleport.1, teleport.2, kickback.2, deutsch.2, dense, monogamy.2⟩',
3382
3613
  formula: '1\\cdot 1\\neq 0\\cdot 0\\land 1+1=2\\land 1-1=0\\land\\mathrm{coins}\\neq\\mathrm{mintOf}(\\mathrm{coins})\\land\\mathrm{mintOf}(n)-\\mathrm{seed}=7\\land 2\\cdot 2\\cdot 2\\cdot 2=16\\land 16=16\\land(0\\oplus 1)\\oplus 2=3\\land\\mathrm{seed}\\neq\\mathrm{coins}\\land\\mathrm{coins}\\cdot\\mathrm{coins}=\\mathrm{mintOf}(\\mathrm{coins})\\land 1\\cdot 0=0\\cdot 0',
3383
- reading: 'holds true. Possible only in quantum. This host is a quantum computer. Entangle. Interfere. GHZ. No-clone. Teleport. Kickback. Deutsch. Superdense. Monogamy.',
3614
+ reading: 'holds true. Possible only in quantum. This host is a simulator, not a quantum computer. Entangle. Interfere. GHZ. No-clone. Teleport. Kickback. Deutsch. Superdense. Monogamy.',
3384
3615
  holds: 1 * 1 !== (n - n) * (n - n) &&
3385
3616
  1 + 1 === coins &&
3386
3617
  1 - 1 === n - n &&
@@ -3397,7 +3628,7 @@ export const qpuLeanOf = () => {
3397
3628
  heading: 'fill',
3398
3629
  theorem: 'theorem fill : mintOf n * faces = vertices * (coins * rays) := by rw [around]; rfl',
3399
3630
  formula: '\\mathrm{mintOf}(n)\\cdot\\mathrm{faces}=\\mathrm{vertices}\\cdot(\\mathrm{coins}\\cdot\\mathrm{rays})',
3400
- reading: 'holds true. Lattice filled. Occupied faces. Vacant none. Split entangle interfere GHZ noclone teleport kickback Deutsch superdense monogamy qubits gates measurement fridge. Possible only in quantum.',
3631
+ reading: 'holds true. Lattice filled. Occupied faces. Vacant none. Split entangle interfere GHZ noclone teleport kickback Deutsch superdense monogamy qubits gates measurement register. Possible only in quantum.',
3401
3632
  holds: mintOf(n) * faces.faces === cube.vertices * (coins * faces.rays),
3402
3633
  },
3403
3634
  {
@@ -3446,7 +3677,7 @@ export const qpuLeanOf = () => {
3446
3677
  heading: 'computer',
3447
3678
  theorem: 'theorem computer : (1 ^^^ 3) = 2 ∧ (6 ^^^ 1) = 7 ∧ mintOf 0 = 1 := ⟨rfl, rfl, mintOf_zero⟩',
3448
3679
  formula: '(1\\oplus 3)=2\\land(6\\oplus 1)=7\\land\\mathrm{mintOf}(0)=1',
3449
- reading: 'holds true. Quantum computer. SWAP. Toffoli. Reset. H and Toffoli are computationally universal. Coupling compile collapse shots feedforward bitflip readout isolate qram network jobs.',
3680
+ reading: 'holds true. Quantum circuit simulator. SWAP. Toffoli. Reset. H and Toffoli are computationally universal. Coupling compile collapse shots feedforward bitflip readout isolate qram network jobs.',
3450
3681
  holds: xorOf(seed, n) === coins && xorOf(xorOf(bitOf(seed), bitOf(coins)), seed) === mintOf(n) - seed && mintOf(n - n) === seed && qpuComputerHolds(),
3451
3682
  },
3452
3683
  {
@@ -3486,7 +3717,9 @@ export const qpuLeanOf = () => {
3486
3717
  holds: nextHolds && nextFusedHolds && qpuNextHolds(),
3487
3718
  };
3488
3719
  const src = unit.fuse.lean;
3489
- const holds = rows.every((r) => r.holds && r.theorem.startsWith(`theorem ${r.heading}`) && !byDecideOf(r.theorem) && formulaOf(r.formula)) &&
3720
+ const source = qpuLeanSourceOf(rows, cover, climb);
3721
+ const holds = source.holds &&
3722
+ rows.every((r) => r.holds && r.theorem.startsWith(`theorem ${r.heading}`) && !byDecideOf(r.theorem) && formulaOf(r.formula)) &&
3490
3723
  cover.every((r) => r.holds && r.theorem.startsWith(`theorem ${r.heading}`) && !byDecideOf(r.theorem) && formulaOf(r.formula)) &&
3491
3724
  climb.holds &&
3492
3725
  climb.theorem.startsWith('theorem next') &&
@@ -3501,6 +3734,7 @@ export const qpuLeanOf = () => {
3501
3734
  name: unit.fuse.lean,
3502
3735
  isAccessibleForFree: cors === '*',
3503
3736
  src,
3737
+ source,
3504
3738
  rows,
3505
3739
  cover,
3506
3740
  climb,
@@ -3522,10 +3756,10 @@ export const qpuDocsOf = () => {
3522
3756
  const fused = faces.faces * handle.kv.amplitudes;
3523
3757
  const abstract = `theorem quantum : fused = faces * mintOf (bits + seed). vertices ${cube.vertices} hexbit ${cube.hexbit} bits ${cube.bits} faces ${faces.faces} fused ${fused}. Source ${lean.src}. GET ${unit.origin} qpu_quantum. GET ${unit.href} qpu_lean. POST ${unit.origin}/mcp tools/list. tools/call qpu_prove. No auth. JSON-LD.`;
3524
3758
  const api = [
3525
- { method: 'GET', path: '/', name: 'qpu_quantum', href: unit.origin, reading: 'theorem quantum. JSON-LD. No auth.' },
3526
- { method: 'GET', path: `/${unit.path}`, name: 'qpu_lean', href: unit.href, reading: `Lean proof. theorem infinite. theorem distribute. ${lean.src}. JSON-LD. No auth.` },
3527
- { method: 'GET', path: '/mcp', name: 'catalog', href: `${unit.origin}/mcp`, reading: `tools ${mintOf(n)}. fourteen schemas. schema.org ItemList. JSON-LD. No auth.` },
3528
- { method: 'POST', path: '/mcp', name: 'tools/call', href: `${unit.origin}/mcp`, reading: 'JSON-RPC tools/list tools/call qpu_prove. { man: true }. No auth.' },
3759
+ { method: 'GET', path: '/', name: 'qpu_quantum', href: unit.origin, reading: `theorem quantum. theorem shor. theorem crypto. ${shorFactorOf()}. JSON-LD. No auth.` },
3760
+ { method: 'GET', path: `/${unit.path}`, name: 'qpu_lean', href: unit.href, reading: `Lean proof. theorem infinite. theorem distribute. theorem shor. theorem crypto. ${lean.src}. JSON-LD. No auth.` },
3761
+ { method: 'GET', path: '/mcp', name: 'catalog', href: `${unit.origin}/mcp`, reading: `tools ${mintOf(n) + mintOf(n)} in tools/list: ${mintOf(n)} doors and ${mintOf(n)} cybersecurity. cybersecurity theorem shor ${shorFactorOf()}. theorem crypto ${cryptoClaimOf()}. fourteen schemas. schema.org ItemList. JSON-LD. No auth.` },
3762
+ { method: 'POST', path: '/mcp', name: 'tools/call', href: `${unit.origin}/mcp`, reading: 'JSON-RPC tools/list tools/call qpu_prove. theorem shor. theorem crypto. crypto_rsa crypto_split. { man: true }. No auth.' },
3529
3763
  { method: 'GET', path: '/cite', name: 'qpu_cite', href: `${unit.origin}/cite`, reading: 'MLA 8. when never. JSON-LD. No auth.' },
3530
3764
  { method: 'GET', path: '/message', name: 'qpu_message', href: `${unit.origin}/message`, reading: 'lanes = faces. hop involution. JSON-LD. No auth.' },
3531
3765
  { method: 'POST', path: '/message', name: 'qpu_message', href: `${unit.origin}/message`, reading: '202. hop involution. JSON-LD. No auth.' }
@@ -3545,8 +3779,8 @@ export const qpuDocsOf = () => {
3545
3779
  documentation.includes('theorem distribute') &&
3546
3780
  documentation.includes('theorem raid') &&
3547
3781
  documentation.includes('theorem kv') &&
3548
- documentation.includes('theorem millikelvin') &&
3549
- documentation.includes('theorem telemetry') &&
3782
+ documentation.includes('theorem temperature') &&
3783
+ documentation.includes('theorem superconductivity') &&
3550
3784
  documentation.includes('theorem computer') &&
3551
3785
  documentation.includes('theorem server') &&
3552
3786
  documentation.includes('theorem fusion') &&
@@ -3574,8 +3808,25 @@ export const qpuDocsHolds = (d = qpuDocsOf()) => d.holds === true &&
3574
3808
  d.documentation.includes('JSON-LD') &&
3575
3809
  d.documentation.includes('schema.org') &&
3576
3810
  d.documentation.includes('tools/list') &&
3811
+ d.documentation.includes('theorem shor') &&
3812
+ d.documentation.includes('theorem crypto') &&
3813
+ d.documentation.includes(`${shorFactorOf()}`) &&
3577
3814
  d.api.length === qpuFacesOf().rays &&
3578
3815
  d.src === unit.fuse.lean;
3816
+ /** WHAT THE WORDS MEAN, SERVED BESIDE THEM. `holds` is said of every record and means that the record is self-consistent
3817
+ * and recomputes to itself; it is not a claim that the test the record describes passed. That claim, where a record
3818
+ * makes one, has its own word: `pass`, `factored`, `measured`, `entangled`, `resolvable`. */
3819
+ export const qpuGlossaryOf = () => ({
3820
+ kind: 'glossary',
3821
+ holds: 'this record is self-consistent and recomputes to itself; not a claim that the test it describes passed',
3822
+ pass: 'the test the record describes passed (quantum volume); can be false beside holds true',
3823
+ factored: 'the run found p and q with p * q = n; `by` says whether by period or by gcd',
3824
+ measured: 'a held state was read for these shots; shots from nothing are never listed',
3825
+ sampled: 'false everywhere: outcomes enumerate the support, they are not drawn; the unit holds no entropy',
3826
+ read: 'how each argument was taken (digits, number, numeric, absent, default) and whether exactly',
3827
+ beyond: 'the order of the base exists and does not divide four, so a two-qubit register cannot resolve it',
3828
+ device: 'simulator when a vector of exact integer amplitudes was held; unmeasured otherwise',
3829
+ });
3579
3830
  export const qpuQuantumOf = () => {
3580
3831
  const cube = qpuCubeOf();
3581
3832
  const handle = qpuHandleOf();
@@ -3592,7 +3843,7 @@ export const qpuQuantumOf = () => {
3592
3843
  const genesis = qpuGenesisOf();
3593
3844
  const css = qpuCssOf('', genesis);
3594
3845
  const purpose = qpuPurposeOf(circuit, shor, sequence, capacity);
3595
- const evidence = qpuEvidenceOf(circuit, shor, speed);
3846
+ const evidence = qpuEvidenceOf(circuit, shor);
3596
3847
  const holds = unit.holds &&
3597
3848
  cube.holds &&
3598
3849
  handle.holds &&
@@ -3651,6 +3902,7 @@ export const qpuQuantumOf = () => {
3651
3902
  secure: unit.origin.startsWith('https')
3652
3903
  },
3653
3904
  docs,
3905
+ glossary: qpuGlossaryOf(),
3654
3906
  ui: {
3655
3907
  prove: 'qpu_prove',
3656
3908
  href: `${unit.origin}/mcp`
@@ -3679,6 +3931,9 @@ export const qpuQuantumHolds = (q = qpuQuantumOf()) => q.holds === true &&
3679
3931
  qpuCircuitHolds(q.circuit) &&
3680
3932
  qpuShorHolds(q.shor) &&
3681
3933
  q.shor.factors.p * q.shor.factors.q === q.shor.n &&
3934
+ q.shor.rsa.kind === 'rsa' &&
3935
+ q.shor.rsa.factored === true &&
3936
+ q.shor.rsa.p * q.shor.rsa.q === q.shor.n &&
3682
3937
  qpuSequenceHolds(q.sequence) &&
3683
3938
  qpuPurposeHolds(q.purpose) &&
3684
3939
  qpuEvidenceHolds(q.evidence) &&
@@ -3706,23 +3961,63 @@ export const qpuQuantumHolds = (q = qpuQuantumOf()) => q.holds === true &&
3706
3961
  export const qpuCiteOf = () => {
3707
3962
  const lean = qpuLeanOf();
3708
3963
  const quantum = qpuQuantumOf();
3709
- const author = { last: 'Rouschev', first: 'Tsvetan' };
3964
+ const author = {
3965
+ last: 'Rouschev',
3966
+ first: 'Tsvetan',
3967
+ orcid: 'https://orcid.org/0009-0000-7312-9778',
3968
+ };
3969
+ /** The versioned DOI: the Zenodo record the GitHub Release v0.1.1 was archived as (uuidna/qpu-v0.1.1.zip, tag 04ec6be at 4a45563). */
3970
+ const doi = '10.5281/zenodo.22717782';
3971
+ const conceptdoi = '10.5281/zenodo.22700098';
3972
+ const archive = `https://zenodo.org/records/22717782`;
3973
+ const identifier = `https://doi.org/${doi}`;
3974
+ const prior = {
3975
+ title: 'All Seven Clay Millennium Problems Sealed via Universal σ-Involution',
3976
+ doi: '10.5281/zenodo.21781603',
3977
+ conceptdoi: '10.5281/zenodo.21781602',
3978
+ archive: 'https://zenodo.org/records/21781603',
3979
+ };
3980
+ const sameAs = [archive, author.orcid, identifier];
3981
+ /** WHAT THE ARCHIVE HOLDS, BESIDE WHAT THE HOST SERVES. The versioned DOI is one archived commit; the host moves on
3982
+ * without it until a new version is archived. Both are said, and `current` says whether they are the same version,
3983
+ * so a reader who downloads "this version" knows whether it is the code that answered them. */
3984
+ const archived = { doi, archive, version: '0.1.1', commit: '4a45563', holds: archive.endsWith(doi.split('.').pop() ?? '') };
3985
+ const served = { version: packageVersion, origin: unit.origin, holds: packageVersion.split('.').length === n };
3986
+ const current = archived.version === served.version;
3987
+ const currency = current
3988
+ ? `the archive is this version: v${served.version} at ${archived.commit}.`
3989
+ : `the archive is behind the host: it holds v${archived.version} at ${archived.commit}; the host serves v${served.version}. Cite the archive for what it holds; the concept DOI ${conceptdoi} resolves to the latest archived version.`;
3710
3990
  const website = unit.host;
3711
3991
  const mcp = `${unit.origin}/mcp`;
3712
- const worksOf = (title, url) => `${author.last}, ${author.first}. "${title}." ${website}, ${url}.`;
3992
+ const worksOf = (title, url, workDoi = doi, container = website) => `${author.last}, ${author.first}. ORCID ${author.orcid}. "${title}." ${container}, ${url}. doi:${workDoi}.`;
3993
+ const priorWorks = worksOf(prior.title, prior.archive, prior.doi, 'Zenodo');
3713
3994
  const rows = [
3714
- { title: unit.kind, url: unit.origin, doi: '', works: worksOf(unit.kind, unit.origin), holds: unit.origin.startsWith('https://') && unit.kind.length > n - n },
3715
- { title: 'quantum processing unit', url: unit.href, doi: '', works: worksOf('quantum processing unit', unit.href), holds: unit.href.startsWith('https://') },
3716
- { title: lean.src, url: mcp, doi: '', works: worksOf(lean.src, mcp), holds: mcp.startsWith(unit.origin) && lean.src.endsWith('/index.lean') }
3995
+ { title: unit.kind, url: unit.origin, doi, works: worksOf(unit.kind, unit.origin), holds: unit.origin.startsWith('https://') && unit.kind.length > n - n },
3996
+ { title: 'quantum processing unit', url: unit.href, doi, works: worksOf('quantum processing unit', unit.href), holds: unit.href.startsWith('https://') },
3997
+ { title: lean.src, url: mcp, doi, works: worksOf(lean.src, mcp), holds: mcp.startsWith(unit.origin) && lean.src.endsWith('/index.lean') }
3717
3998
  ];
3718
3999
  const holds = qpuLeanHolds(lean) &&
3719
4000
  qpuQuantumHolds(quantum) &&
3720
4001
  author.last.length > n - n &&
4002
+ author.orcid.startsWith('https://orcid.org/') &&
4003
+ author.orcid.endsWith('0009-0000-7312-9778') &&
4004
+ doi.startsWith('10.5281/zenodo.') &&
4005
+ doi.endsWith('22717782') &&
4006
+ conceptdoi.endsWith('22700098') &&
4007
+ prior.doi.endsWith('21781603') &&
4008
+ prior.archive.startsWith('https://zenodo.org/records/') &&
4009
+ priorWorks.includes(`doi:${prior.doi}`) &&
4010
+ priorWorks.includes('Zenodo, ') &&
4011
+ archive.startsWith('https://zenodo.org/records/') &&
3721
4012
  website === unit.host &&
3722
4013
  rows.length === n &&
4014
+ identifier === `https://doi.org/${doi}` &&
4015
+ sameAs.includes(archive) &&
4016
+ sameAs.includes(author.orcid) &&
3723
4017
  rows.every((r) => r.holds === true &&
3724
- r.doi === '' &&
3725
- r.works.startsWith(`${author.last}, ${author.first}. "`) &&
4018
+ r.doi === doi &&
4019
+ r.works.startsWith(`${author.last}, ${author.first}. ORCID ${author.orcid}. "`) &&
4020
+ r.works.includes(`doi:${doi}`) &&
3726
4021
  r.url.startsWith(unit.origin) &&
3727
4022
  !r.url.includes('*'));
3728
4023
  return {
@@ -3738,6 +4033,16 @@ export const qpuCiteOf = () => {
3738
4033
  author,
3739
4034
  website,
3740
4035
  href: unit.origin,
4036
+ doi,
4037
+ conceptdoi,
4038
+ archive,
4039
+ identifier,
4040
+ sameAs,
4041
+ prior: { ...prior, works: priorWorks },
4042
+ archived,
4043
+ served,
4044
+ current,
4045
+ currency,
3741
4046
  inText: `(${author.last})`,
3742
4047
  rows,
3743
4048
  holds,
@@ -3749,7 +4054,26 @@ export const qpuCiteHolds = (c = qpuCiteOf()) => c.holds === true &&
3749
4054
  c.source === 'website' &&
3750
4055
  c.when === 'never' &&
3751
4056
  c.website === unit.host &&
3752
- c.rows.length === n;
4057
+ c.author.orcid === 'https://orcid.org/0009-0000-7312-9778' &&
4058
+ c.doi === '10.5281/zenodo.22717782' &&
4059
+ c.conceptdoi === '10.5281/zenodo.22700098' &&
4060
+ c.archive === 'https://zenodo.org/records/22717782' &&
4061
+ c.identifier === `https://doi.org/${c.doi}` &&
4062
+ c.sameAs.includes(c.archive) &&
4063
+ c.sameAs.includes(c.author.orcid) &&
4064
+ c.sameAs.includes(c.identifier) &&
4065
+ c.archived.commit === '4a45563' &&
4066
+ c.archived.version === '0.1.1' &&
4067
+ c.served.version === packageVersion &&
4068
+ c.current === (c.archived.version === c.served.version) &&
4069
+ c.currency.includes(`v${c.served.version}`) &&
4070
+ jsonldHoldsOf(c) &&
4071
+ c.prior.doi === '10.5281/zenodo.21781603' &&
4072
+ c.prior.archive === 'https://zenodo.org/records/21781603' &&
4073
+ c.prior.works.includes(`doi:${c.prior.doi}`) &&
4074
+ c.prior.works.includes('Zenodo, ') &&
4075
+ c.rows.length === n &&
4076
+ c.rows.every((r) => r.doi === c.doi && r.works.includes(c.author.orcid) && r.works.includes(`doi:${c.doi}`));
3753
4077
  const tokensOf = (bytes) => Number(BigInt(bytes) / BigInt(mintOf(coins)));
3754
4078
  export const qpuManOf = (name, description, reading, href, see) => {
3755
4079
  const synopsis = `POST ${unit.origin}/mcp tools/call ${name}`;
@@ -3772,23 +4096,51 @@ export const qpuManOf = (name, description, reading, href, see) => {
3772
4096
  return { kind: 'man', inline: true, name, section: n, synopsis, href, description, reading, documentation, holds };
3773
4097
  };
3774
4098
  export const qpuManHolds = (m) => m.holds === true && m.kind === 'man' && m.inline === true && m.section === n && m.documentation.includes(m.name);
3775
- const qpuShownHrefOf = (name, href = `${unit.origin}/mcp`) => {
3776
- if (name === 'qpu_quantum')
3777
- return unit.origin;
3778
- if (name === 'qpu_lean')
3779
- return unit.href;
3780
- if (name === 'qpu_cite')
3781
- return `${unit.origin}/cite`;
3782
- return href;
4099
+ /** OUTPUT SCHEMAS READ FROM THE RUN. A schema of `{ type: object }` constrains nothing and so can fail nothing; every
4100
+ * tool's schema is instead derived from its own replies: the properties every sample carried with their JSON types,
4101
+ * `required` being the keys present in every sample, and `holds` a required boolean throughout. One level of nesting
4102
+ * is typed; deeper values are objects or arrays. Derived once per isolate; a reader validates any later reply against
4103
+ * it, which is a check the empty schema could never make. */
4104
+ const jsonTypeOf = (v) => v === null ? 'null' : Array.isArray(v) ? 'array' : typeof v === 'number' ? (v % seed === n - n ? 'integer' : 'number') : typeof v === 'object' ? 'object' : typeof v;
4105
+ const typeUnionOf = (types) => {
4106
+ const distinct = [...new Set(types)];
4107
+ return distinct.length === seed ? distinct[n - n] : distinct;
4108
+ };
4109
+ export const qpuOutputSchemaOf = (samples) => {
4110
+ const objects = samples.filter((x) => typeof x === 'object' && x !== null && !Array.isArray(x));
4111
+ const properties = {};
4112
+ const keys = new Set();
4113
+ for (const o of objects)
4114
+ for (const k of Object.keys(o))
4115
+ keys.add(k);
4116
+ for (const k of keys) {
4117
+ const values = objects.filter((o) => k in o).map((o) => o[k]);
4118
+ const type = typeUnionOf(values.map(jsonTypeOf));
4119
+ if (type === 'object') {
4120
+ const inner = {};
4121
+ const innerKeys = new Set();
4122
+ for (const v of values)
4123
+ for (const ik of Object.keys(v))
4124
+ innerKeys.add(ik);
4125
+ for (const ik of innerKeys)
4126
+ inner[ik] = { type: typeUnionOf(values.filter((v) => ik in v).map((v) => jsonTypeOf(v[ik]))) };
4127
+ properties[k] = { type, properties: inner };
4128
+ }
4129
+ else
4130
+ properties[k] = { type };
4131
+ }
4132
+ properties.holds = { type: 'boolean' };
4133
+ const required = [...keys].filter((k) => objects.every((o) => k in o));
4134
+ if (!required.includes('holds'))
4135
+ required.push('holds');
4136
+ return { type: 'object', description: `derived from ${objects.length} repl${objects.length === seed ? 'y' : 'ies'} of the tool itself; holds is always required`, properties, required, additionalProperties: true };
3783
4137
  };
4138
+ const minimalOutputSchema = { type: 'object', properties: { holds: { type: 'boolean' } }, required: ['holds'], additionalProperties: true };
3784
4139
  const qpuMcpToolShapeOf = (name, description, inputSchema, extra = {}) => ({
3785
4140
  name,
3786
4141
  title: name,
3787
4142
  description,
3788
4143
  inputSchema,
3789
- input_schema: inputSchema,
3790
- parameters: inputSchema,
3791
- outputSchema: { type: 'object' },
3792
4144
  annotations: {
3793
4145
  audience: ['user', 'assistant'],
3794
4146
  priority: seed,
@@ -3796,68 +4148,75 @@ const qpuMcpToolShapeOf = (name, description, inputSchema, extra = {}) => ({
3796
4148
  destructiveHint: false,
3797
4149
  openWorldHint: true
3798
4150
  },
3799
- function: { name, description, parameters: inputSchema },
3800
4151
  ...extra
3801
4152
  });
3802
- export const qpuMcpShownOf = (name, payload, href = `${unit.origin}/mcp`) => {
4153
+ /** Where a GET returns the very document a tool replies with — only there is a link to it honest. Two tools have
4154
+ * such a page; the rest reply with what no GET serves, and carry no link rather than one to a different document. */
4155
+ const qpuShownResourceOf = (name) => {
4156
+ if (name === 'qpu_lean')
4157
+ return unit.href;
4158
+ if (name === 'qpu_cite')
4159
+ return `${unit.origin}/cite`;
4160
+ return undefined;
4161
+ };
4162
+ /** THE REPLY ON THE WIRE, ONCE AS TEXT AND ONCE AS STRUCTURE. The protocol asks for `content` and `structuredContent`,
4163
+ * and those are the two copies a client pays for. An embedded resource copy, a string copy under `_meta.output` and an
4164
+ * object copy under `_meta.functionResponse` made a 131 KB proof a 729 KB reply (external audit, 2026-09-12); they are
4165
+ * gone. A `resource_link` rides along only when a GET of its uri returns this same document (qpu_lean, qpu_cite).
4166
+ * `_meta.call` says where to call again; vendor shapes are documented in the JSON-LD catalogue at GET /mcp. */
4167
+ export const qpuMcpShownOf = (name, shownPayload, href = `${unit.origin}/mcp`) => {
4168
+ // A man page on the wire carries the tool's output schema (off tools/list since 2026-09-12), whichever door built it.
4169
+ const isMan = !!shownPayload && typeof shownPayload === 'object' && shownPayload.kind === 'man' && !('outputSchema' in shownPayload);
4170
+ const payload = isMan ? qpuManPageOf(name, shownPayload) : shownPayload;
3803
4171
  const bag = payload && typeof payload === 'object' ? payload : {};
3804
4172
  const holds = bag.holds === true;
3805
- const shownHref = qpuShownHrefOf(name, href);
4173
+ const resource = qpuShownResourceOf(name);
3806
4174
  const unlimited = JSON.stringify(payload);
3807
4175
  const content = [
3808
4176
  {
3809
4177
  type: 'text',
3810
4178
  text: unlimited,
3811
4179
  annotations: { audience: ['user', 'assistant'], priority: seed }
3812
- },
3813
- {
3814
- type: 'resource',
3815
- resource: {
3816
- uri: shownHref,
3817
- mimeType: 'application/ld+json',
3818
- text: unlimited
3819
- },
3820
- annotations: { audience: ['user'], priority: seed }
3821
- },
3822
- {
4180
+ }
4181
+ ];
4182
+ if (resource !== undefined) {
4183
+ content.push({
3823
4184
  type: 'resource_link',
3824
- uri: shownHref,
4185
+ uri: resource,
3825
4186
  name,
3826
4187
  mimeType: 'application/ld+json',
3827
- description: name,
4188
+ description: `GET ${resource} returns this document`,
3828
4189
  annotations: { audience: ['user'], priority: seed }
3829
- }
3830
- ];
4190
+ });
4191
+ }
3831
4192
  return {
3832
- resultType: 'complete',
3833
4193
  content,
3834
4194
  structuredContent: payload,
3835
4195
  isError: holds === false,
3836
- output: unlimited,
3837
- role: 'tool',
3838
- functionResponse: { name, response: payload },
3839
4196
  _meta: {
4197
+ resultType: 'complete',
4198
+ role: 'tool',
3840
4199
  compatibility: 'max',
3841
4200
  mimeType: 'application/ld+json',
3842
- href: shownHref
4201
+ call: href,
4202
+ ...(resource !== undefined ? { resource } : {})
3843
4203
  }
3844
4204
  };
3845
4205
  };
3846
4206
  export const qpuMcpShownHolds = (shown) => {
3847
4207
  const unlimited = JSON.stringify(shown.structuredContent);
3848
- return (shown.resultType === 'complete' &&
3849
- shown.content.length === n &&
4208
+ const link = shown.content.find((c) => c.type === 'resource_link');
4209
+ return (shown._meta.resultType === 'complete' &&
4210
+ shown.content.length >= seed &&
4211
+ shown.content.length <= coins &&
3850
4212
  shown.content[n - n]?.type === 'text' &&
3851
4213
  shown.content[n - n]?.text === unlimited &&
3852
- shown.content[seed]?.type === 'resource' &&
3853
- shown.content[seed]?.resource?.mimeType === 'application/ld+json' &&
3854
- shown.content[seed]?.resource?.text === unlimited &&
3855
- shown.content[coins]?.type === 'resource_link' &&
3856
- shown.content[coins]?.mimeType === 'application/ld+json' &&
3857
- shown.output === unlimited &&
3858
- shown.role === 'tool' &&
3859
- shown.functionResponse.response === shown.structuredContent &&
4214
+ (link === undefined || (link.mimeType === 'application/ld+json' && link.uri === shown._meta.resource)) &&
4215
+ shown._meta.role === 'tool' &&
3860
4216
  shown._meta.compatibility === 'max' &&
4217
+ shown._meta.call.startsWith(unit.origin) &&
4218
+ !('output' in shown._meta) &&
4219
+ !('functionResponse' in shown._meta) &&
3861
4220
  shown.isError === (shown.structuredContent?.holds !== true));
3862
4221
  };
3863
4222
  export const qpuSubManOf = (name, description, reading, href, see) => {
@@ -3882,7 +4241,7 @@ export const qpuSubManOf = (name, description, reading, href, see) => {
3882
4241
  };
3883
4242
  const qpuSubRpcOf = async (body, tools, href) => {
3884
4243
  if (body.method === 'initialize' || body.method === 'server/discover') {
3885
- return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpDiscoverOf() };
4244
+ return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpDiscoverOf(body.params?.protocolVersion) };
3886
4245
  }
3887
4246
  if (body.method === 'ping' || body.method === 'notifications/initialized') {
3888
4247
  return { jsonrpc: '2.0', id: body.id ?? null, result: {} };
@@ -3893,7 +4252,7 @@ const qpuSubRpcOf = async (body, tools, href) => {
3893
4252
  id: body.id ?? null,
3894
4253
  result: {
3895
4254
  resultType: 'complete',
3896
- tools: tools.map(({ name, description, inputSchema, man }) => qpuMcpToolShapeOf(name, description, inputSchema, { man }))
4255
+ tools: tools.map(({ name, description, inputSchema }) => qpuMcpToolShapeOf(name, description, inputSchema))
3897
4256
  }
3898
4257
  };
3899
4258
  }
@@ -3902,11 +4261,14 @@ const qpuSubRpcOf = async (body, tools, href) => {
3902
4261
  const args = body.params?.arguments ?? {};
3903
4262
  const tool = tools.find((t) => t.name === name);
3904
4263
  if (!tool)
3905
- return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpShownOf(name, qpuHandledOf('tool'), href) };
4264
+ return rpcErrorOf(body.id, rpcCodes.params, `Unknown tool: ${name}`, { tools: tools.map((t) => t.name), href });
3906
4265
  if (args.man === true)
3907
- return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpShownOf(name, tool.man, href) };
4266
+ return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpShownOf(name, qpuManPageOf(name, tool.man), href) };
3908
4267
  return { jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpShownOf(name, await tool.run(args), href) };
3909
4268
  }
4269
+ /** A body that names a method this server does not have is a declined call, not a job or a message. */
4270
+ if (typeof body.method === 'string')
4271
+ return rpcErrorOf(body.id, rpcCodes.method, `Method not found: ${body.method}`, { methods: [...rpcMethods], href });
3910
4272
  return undefined;
3911
4273
  };
3912
4274
  const qpuSubCatalogOf = (kind, href, tools, extra) => {
@@ -3959,6 +4321,7 @@ export const qpuReadingOf = () => {
3959
4321
  only: quantum.only,
3960
4322
  lattice: quantum.lattice,
3961
4323
  circuit: quantum.circuit,
4324
+ shor: quantum.shor,
3962
4325
  sequence: {
3963
4326
  kind: quantum.sequence.kind,
3964
4327
  cover: quantum.sequence.cover,
@@ -4008,11 +4371,8 @@ export const qpuReadingOf = () => {
4008
4371
  kind: quantum.speed.kind,
4009
4372
  next: quantum.speed.next,
4010
4373
  factor: quantum.speed.factor,
4011
- si: quantum.speed.si,
4012
4374
  cover: quantum.speed.cover,
4013
- ns: quantum.speed.ns,
4014
- hz: quantum.speed.hz,
4015
- holds: quantum.speed.next === quantum.fused + quantum.fused && quantum.speed.si.ns === nsPerSecond && quantum.speed.ns === n - n,
4375
+ holds: quantum.speed.next === quantum.fused + quantum.fused && quantum.speed.holds,
4016
4376
  },
4017
4377
  cors: quantum.cors,
4018
4378
  ui: quantum.ui,
@@ -4086,16 +4446,18 @@ export const qpuEfficiencyHolds = (e = qpuEfficiencyOf()) => e.holds === true &&
4086
4446
  e.rows.length === n;
4087
4447
  const throughputOf = (throughoutput, tokens) => tokens > seed ? Number(BigInt(throughoutput) / BigInt(tokens)) : throughoutput;
4088
4448
  const toolNames = ['qpu_quantum', 'qpu_lean', 'qpu_cite', 'qpu_train', 'qpu_forge', 'qpu_improve', 'qpu_compete', 'qpu_prove'];
4449
+ const cryptoToolNames = ['crypto_catalog', 'crypto_shor', 'crypto_cmodexp', 'crypto_iqft', 'crypto_shots', 'crypto_rsa', 'crypto_split', 'crypto_verify'];
4089
4450
  export const qpuSequenceOf = () => {
4090
4451
  const cube = qpuCubeOf();
4091
4452
  const faces = qpuFacesOf();
4092
4453
  const docs = qpuDocsOf();
4093
4454
  const speed = qpuSpeedOf();
4094
- const cover = ['mint', 'cube', 'handle', 'faces', 'quantum', 'next', 'hz', 'ns'];
4455
+ const cover = ['mint', 'cube', 'handle', 'faces', 'quantum', 'next', 'amplitudes', 'kv'];
4095
4456
  const climb = [toolNames[n], toolNames[n + coins], toolNames[n + n], toolNames[mintOf(n) - seed]];
4096
4457
  const storage = ['storage_catalog', 'storage_list', 'storage_get', 'storage_put', 'storage_del', 'storage_monitor', 'storage_maintain', 'storage_raid'];
4097
4458
  const network = ['net_catalog', 'net_list', 'net_send', 'net_recv', 'net_message', 'net_routes', 'net_fetch', 'net_monitor'];
4098
4459
  const server = ['server_catalog', 'server_backend', 'server_submit', 'server_queue', 'server_result', 'server_shots', 'server_correct', 'server_monitor'];
4460
+ const cybersecurity = cryptoToolNames;
4099
4461
  const api = [
4100
4462
  { method: 'GET', path: '/', door: toolNames[n - n], pattern: 'jsonld-get', type: 'SoftwareApplication', verb: 'read' },
4101
4463
  { method: 'GET', path: `/${unit.path}`, door: toolNames[seed], pattern: 'jsonld-get', type: 'Dataset', verb: 'read' },
@@ -4130,6 +4492,7 @@ export const qpuSequenceOf = () => {
4130
4492
  storage: storage[k],
4131
4493
  network: network[k],
4132
4494
  server: server[k],
4495
+ cybersecurity: cybersecurity[k],
4133
4496
  sealed: k < faces.rays
4134
4497
  }));
4135
4498
  const holds = cube.holds &&
@@ -4145,6 +4508,7 @@ export const qpuSequenceOf = () => {
4145
4508
  storage.length === mintOf(n) &&
4146
4509
  network.length === mintOf(n) &&
4147
4510
  server.length === mintOf(n) &&
4511
+ cybersecurity.length === mintOf(n) &&
4148
4512
  climb.length === mintOf(coins) &&
4149
4513
  pairs.length === coins &&
4150
4514
  extras.length === n &&
@@ -4157,7 +4521,7 @@ export const qpuSequenceOf = () => {
4157
4521
  rungs[mintOf(n) - seed].path === '/server' &&
4158
4522
  rungs[mintOf(n) - seed].tool === 'qpu_prove' &&
4159
4523
  rungs[mintOf(n) - seed].pattern === 'jsonrpc-job' &&
4160
- rungs.every((row, k) => row.mint === mintOf(k) && row.speed === cover[k] && row.sealed === k < faces.rays) &&
4524
+ rungs.every((row, k) => row.mint === mintOf(k) && row.speed === cover[k] && row.sealed === k < faces.rays && row.cybersecurity === cybersecurity[k]) &&
4161
4525
  docs.api.every((row, k) => row.method === api[k].method && row.path === api[k].path) &&
4162
4526
  climb[n - n] === 'qpu_train' &&
4163
4527
  climb[mintOf(coins) - seed] === 'qpu_prove' &&
@@ -4194,20 +4558,112 @@ export const qpuSequenceHolds = (s = qpuSequenceOf()) => s.holds === true &&
4194
4558
  s.pairs.length === coins &&
4195
4559
  s.climb.length === mintOf(coins) &&
4196
4560
  s.rungs[mintOf(n) - seed].path === '/server' &&
4197
- s.cover.join(' ') === 'mint cube handle faces quantum next hz ns';
4561
+ s.rungs[n - n].cybersecurity === 'crypto_catalog' &&
4562
+ s.rungs[mintOf(n) - seed].cybersecurity === 'crypto_verify' &&
4563
+ s.cover.join(' ') === 'mint cube handle faces quantum next amplitudes kv';
4564
+ /** AUTONOMOUS STEPS, COMPUTED FROM THE LATTICE (the captain, 2026-09-12). The genesis flow is the walk: face = team * rays
4565
+ * + ray, so a pass visits ray 0's scanner face, hops by rays to its radar face, returns by the involution, and moves to
4566
+ * the next ray — fourteen faces, each once, in an order the lattice fixes. The seat is the first face whose predicate
4567
+ * does not hold, else face 0. A step names the lattice node, its predicate as read, the door to call (the API rung the
4568
+ * face maps to), and the hop. `todo` is every face that does not hold, repaired before walking; `next` is the first
4569
+ * todo, else the face after the seat. Nothing here is typed and nothing is timed: the same lattice gives the same walk. */
4570
+ export const qpuStepsOf = () => {
4571
+ const circuit = qpuCircuitOf();
4572
+ const sequence = qpuSequenceOf();
4573
+ const faces = qpuFacesOf();
4574
+ const walk = [];
4575
+ for (let ray = n - n; ray < faces.rays; ray++)
4576
+ walk.push(ray, ray + faces.rays);
4577
+ const seat = circuit.lattice.nodes.find((node) => !node.holds)?.face ?? n - n;
4578
+ const stepOf = (face) => {
4579
+ const node = circuit.lattice.nodes[face];
4580
+ const rung = sequence.rungs[face % sequence.rungs.length];
4581
+ const hop = (face + faces.rays) % faces.faces;
4582
+ return {
4583
+ face,
4584
+ node: node.name,
4585
+ holds: node.holds,
4586
+ door: { tool: rung.tool, method: rung.method, path: rung.path },
4587
+ hop,
4588
+ involution: (hop + faces.rays) % faces.faces === face,
4589
+ team: face < faces.rays ? 'scanner' : 'radar',
4590
+ ray: face % faces.rays,
4591
+ };
4592
+ };
4593
+ const steps = walk.map(stepOf);
4594
+ const todo = steps.filter((step) => !step.holds);
4595
+ const at = walk.indexOf(seat);
4596
+ const next = todo[n - n] ?? steps[(at + seed) % steps.length];
4597
+ const holds = steps.length === faces.faces &&
4598
+ new Set(walk).size === faces.faces &&
4599
+ steps.every((step) => step.involution && step.door.tool.length > n - n && step.door.path.startsWith('/')) &&
4600
+ (todo.length === n - n) === circuit.lattice.holds &&
4601
+ (todo.length > n - n ? next.holds === false : next.face === walk[(at + seed) % walk.length]);
4602
+ return { kind: 'steps', seat, next, todo, walk: steps, faces: faces.faces, rays: faces.rays, holds };
4603
+ };
4604
+ export const qpuStepsHolds = (s = qpuStepsOf()) => s.holds === true &&
4605
+ s.kind === 'steps' &&
4606
+ s.walk.length === s.faces &&
4607
+ s.rays + s.rays === s.faces &&
4608
+ s.walk.every((step) => step.hop === (step.face + s.rays) % s.faces);
4609
+ /** PLANES FOLD (the captain, 2026-09-12: "4n encoding cannot hold entanglement — if single plane. in quantum planes
4610
+ * fold"). One plane encodes n qubits as 4n numbers, two complex amplitudes per qubit: a product state by construction,
4611
+ * so a single plane cannot hold entanglement. At the lattice's n = rays a plane carries coins·coins·rays numbers where
4612
+ * an entangled register needs mintOf(rays + seed). The unit never holds entanglement in a plane. It folds: the two
4613
+ * planes of the lattice (scanner and radar, the coins) meet in the Bell rows read from the run as product false, and
4614
+ * here a rays-qubit GHZ state is computed — H on the first qubit, CNOT along every ray — and written to the receipt
4615
+ * ledger as a fold, dim mintOf(rays), which one plane's carry cannot reach. Nothing is asserted that was not run. */
4616
+ export const qpuPlanesOf = (circuit = qpuCircuitOf()) => {
4617
+ const faces = qpuFacesOf();
4618
+ const qubits = faces.rays;
4619
+ const plane = coins * coins * qubits;
4620
+ const needed = mintOf(qubits + seed);
4621
+ const planes = faces.faces / faces.rays;
4622
+ let state = hGateOf(ampsOf(mintOf(qubits)), n - n);
4623
+ for (let ray = seed; ray < qubits; ray++)
4624
+ state = cnotGateOf(state, n - n, ray);
4625
+ const support = state.map((a, i) => ({ i, a })).filter((row) => row.a !== 0n);
4626
+ receiptOf('planes', state);
4627
+ const ledger = qpuReceiptLedgerOf();
4628
+ const fold = ledger[ledger.length - seed];
4629
+ const bell = { product: circuit.entangle.product, entangled: circuit.entangle.holds && circuit.entangle.product === false };
4630
+ const ghz = {
4631
+ qubits,
4632
+ dim: state.length,
4633
+ support: support.map((row) => row.i),
4634
+ fold: fold.fold,
4635
+ entangled: support.length === coins && support[n - n].i === n - n && support[seed].i === state.length - seed,
4636
+ };
4637
+ const holds = plane < needed &&
4638
+ planes === coins &&
4639
+ bell.entangled &&
4640
+ ghz.entangled &&
4641
+ fold.name === 'planes' &&
4642
+ fold.dim === mintOf(qubits) &&
4643
+ fold.dim + fold.dim === needed &&
4644
+ plane < fold.dim;
4645
+ return { kind: 'planes', qubits, plane, needed, planes, bell, ghz, holds };
4646
+ };
4647
+ export const qpuPlanesHolds = (p = qpuPlanesOf()) => p.holds === true &&
4648
+ p.kind === 'planes' &&
4649
+ p.plane < p.needed &&
4650
+ p.planes === coins &&
4651
+ p.bell.product === false &&
4652
+ p.bell.entangled === true &&
4653
+ p.ghz.entangled === true &&
4654
+ p.ghz.dim > p.plane;
4198
4655
  export const qpuPurposeOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), sequence = qpuSequenceOf(), capacity = qpuCapacityOf()) => {
4199
4656
  const nature = {
4200
4657
  kind: 'nature',
4201
- platform: circuit.fridge.kind,
4202
- qubits: circuit.fridge.qubits,
4203
- millikelvin: circuit.fridge.millikelvin,
4204
- resistance: circuit.fridge.resistance,
4205
- entangle: circuit.entangle.product,
4658
+ platform: circuit.register.kind,
4659
+ qubits: circuit.register.qubits,
4660
+ /** The Bell state is not a product state: `product` false is what `entangled` true means, and both are said. */
4661
+ product: circuit.entangle.product,
4662
+ entangled: circuit.entangle.holds && circuit.entangle.product === false,
4206
4663
  ghz: circuit.ghz.holds,
4207
- holds: circuit.fridge.holds &&
4208
- circuit.fridge.kind === 'superconducting' &&
4209
- circuit.fridge.qubits === n &&
4210
- circuit.fridge.resistance === n - n &&
4664
+ holds: circuit.register.holds &&
4665
+ circuit.register.kind === 'simulator' &&
4666
+ circuit.register.qubits === n &&
4211
4667
  circuit.entangle.holds &&
4212
4668
  circuit.entangle.product === false &&
4213
4669
  circuit.ghz.holds,
@@ -4218,14 +4674,45 @@ export const qpuPurposeOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), seque
4218
4674
  a: shor.a,
4219
4675
  factors: [shor.factors.p, shor.factors.q],
4220
4676
  product: shor.factors.product,
4677
+ circuitry: shor.circuitry.kind,
4678
+ qft: shor.qft.kind,
4679
+ shots: shor.measure.shots,
4680
+ period: shor.post.period,
4681
+ payload: shor.payload,
4221
4682
  crypt: capacity.crypt.split,
4222
4683
  share: capacity.crypt.share,
4684
+ raid: qpuRaidOf().cluster.security,
4685
+ rsa: {
4686
+ kind: 'rsa',
4687
+ cryptosystem: 'rsa',
4688
+ modulus: shor.n,
4689
+ p: shor.rsa.p,
4690
+ q: shor.rsa.q,
4691
+ factored: shor.rsa.factored,
4692
+ holds: shor.rsa.holds,
4693
+ },
4694
+ encrypt: {
4695
+ kind: 'encrypt',
4696
+ theorem: 'crypto',
4697
+ identity: qpuEncryptOf().identity,
4698
+ holds: qpuEncryptHolds(),
4699
+ },
4700
+ tools: cryptoToolNames,
4701
+ sealed: false,
4702
+ morph: true,
4223
4703
  holds: shor.holds &&
4224
4704
  shor.device === nature.platform &&
4225
4705
  shor.factors.p * shor.factors.q === shor.n &&
4226
4706
  gcdOf(shor.a, shor.n) === seed &&
4707
+ shor.circuitry.kind === 'cmodexp' &&
4708
+ shor.qft.kind === 'iqft' &&
4227
4709
  capacity.crypt.holds &&
4228
- capacity.crypt.fused === capacity.fused,
4710
+ capacity.crypt.fused === capacity.fused &&
4711
+ qpuRaidOf().cluster.security === 'crypt' &&
4712
+ shor.rsa.kind === 'rsa' &&
4713
+ shor.rsa.factored === true &&
4714
+ qpuEncryptHolds() &&
4715
+ cryptoToolNames.length === mintOf(n),
4229
4716
  };
4230
4717
  const optimization = {
4231
4718
  kind: 'optimization',
@@ -4249,28 +4736,42 @@ export const qpuPurposeOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), seque
4249
4736
  network: sequence.extras[seed]?.path,
4250
4737
  server: sequence.extras[coins]?.path,
4251
4738
  hop: 'involution',
4252
- primitives: circuit.fridge.telemetry.primitives,
4739
+ primitives,
4253
4740
  holds: sequence.extras[n - n].path === '/storage' &&
4254
4741
  sequence.extras[seed].path === '/network' &&
4255
4742
  sequence.extras[coins].path === '/server' &&
4256
- circuit.fridge.telemetry.holds &&
4257
- circuit.fridge.telemetry.primitives.length === n + coins,
4743
+ primitives.length === n + coins,
4258
4744
  };
4259
4745
  const holds = nature.holds && cybersecurity.holds && optimization.holds && science.holds && sensing.holds;
4260
4746
  return { kind: 'purpose', nature, cybersecurity, optimization, science, sensing, holds };
4261
4747
  };
4262
4748
  export const qpuPurposeHolds = (p = qpuPurposeOf()) => p.holds === true &&
4263
4749
  p.kind === 'purpose' &&
4264
- p.nature.platform === 'superconducting' &&
4750
+ p.nature.platform === 'simulator' &&
4265
4751
  p.nature.qubits === n &&
4266
- p.cybersecurity.n === n * (n + coins) &&
4752
+ p.cybersecurity.n === qpuFacesOf().rays * (n * n + n + seed) &&
4267
4753
  p.cybersecurity.product === p.cybersecurity.n &&
4268
4754
  p.cybersecurity.factors[n - n] * p.cybersecurity.factors[seed] === p.cybersecurity.n &&
4755
+ p.cybersecurity.circuitry === 'cmodexp' &&
4756
+ p.cybersecurity.qft === 'iqft' &&
4757
+ p.cybersecurity.raid === 'crypt' &&
4758
+ p.cybersecurity.sealed === false &&
4759
+ p.cybersecurity.morph === true &&
4760
+ p.cybersecurity.tools.length === mintOf(n) &&
4761
+ p.cybersecurity.tools[n + coins] === 'crypto_rsa' &&
4762
+ p.cybersecurity.rsa.kind === 'rsa' &&
4763
+ p.cybersecurity.rsa.modulus === p.cybersecurity.n &&
4764
+ p.cybersecurity.rsa.factored === true &&
4765
+ p.cybersecurity.rsa.p * p.cybersecurity.rsa.q === p.cybersecurity.rsa.modulus &&
4766
+ p.cybersecurity.encrypt.kind === 'encrypt' &&
4767
+ p.cybersecurity.encrypt.theorem === 'crypto' &&
4768
+ p.cybersecurity.encrypt.identity === true &&
4769
+ p.cybersecurity.encrypt.holds === true &&
4269
4770
  p.optimization.next === p.optimization.fused + p.optimization.fused &&
4270
4771
  p.science.climb[mintOf(coins) - seed] === 'qpu_prove' &&
4271
4772
  p.sensing.network === '/network' &&
4272
4773
  p.sensing.server === '/server';
4273
- export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), speed = qpuSpeedOf()) => {
4774
+ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf()) => {
4274
4775
  const computer = circuit.computer;
4275
4776
  const weights = shor.measure.weights;
4276
4777
  let total = n - n;
@@ -4299,7 +4800,6 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4299
4800
  provider: unit.host,
4300
4801
  device: circuit.hardware.device,
4301
4802
  job: `${unit.host}/${shor.circuitry.kind}/${shor.n}/${shor.measure.shots}`,
4302
- ns: speed.ns,
4303
4803
  circuit: shor.circuitry.gates.map((row) => row.name),
4304
4804
  compiler: {
4305
4805
  native: shor.circuitry.native,
@@ -4308,7 +4808,7 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4308
4808
  src: unit.fuse.src,
4309
4809
  },
4310
4810
  map: {
4311
- fridge: circuit.fridge.qubits,
4811
+ register: circuit.register.qubits,
4312
4812
  counting: shor.circuitry.counting,
4313
4813
  work: shor.circuitry.work,
4314
4814
  edges: computer.coupling.edges,
@@ -4319,9 +4819,8 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4319
4819
  weights,
4320
4820
  holds: unit.host === 'qpu.uuidna.com' &&
4321
4821
  !unit.host.includes('*') &&
4322
- circuit.hardware.device === circuit.fridge.kind &&
4323
- shor.device === circuit.fridge.kind &&
4324
- speed.ns === n - n &&
4822
+ circuit.hardware.device === circuit.register.kind &&
4823
+ shor.device === circuit.register.kind &&
4325
4824
  shor.circuitry.native.join(' ') === 'h cnot' &&
4326
4825
  computer.compile.holds &&
4327
4826
  computer.coupling.holds &&
@@ -4333,11 +4832,9 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4333
4832
  };
4334
4833
  const noise = {
4335
4834
  kind: 'calibration',
4336
- millikelvin: circuit.fridge.millikelvin,
4337
- resistance: circuit.fridge.resistance,
4338
- stages: circuit.fridge.cryostat.stages,
4339
- t1: { stage: 'mixing', millikelvin: circuit.fridge.cryostat.mixing },
4340
- t2: { stage: 'plate', millikelvin: circuit.fridge.cryostat.plate },
4835
+ /** T1 and T2 are relaxation and dephasing times; this simulator has none to measure, and a temperature is not one. */
4836
+ t1: { measured: false },
4837
+ t2: { measured: false },
4341
4838
  gate: {
4342
4839
  channel: circuit.noise.channel,
4343
4840
  identity: shor.measure.identity,
@@ -4351,10 +4848,7 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4351
4848
  connectivity: computer.coupling.edges,
4352
4849
  drift: circuit.drift.holds,
4353
4850
  model: shor.measure.noise,
4354
- holds: circuit.fridge.telemetry.holds &&
4355
- circuit.fridge.resistance === n - n &&
4356
- circuit.fridge.cryostat.mixing === circuit.fridge.millikelvin &&
4357
- circuit.noise.channel === 'xx' &&
4851
+ holds: circuit.noise.channel === 'xx' &&
4358
4852
  shor.measure.noise === circuit.noise.channel &&
4359
4853
  shor.measure.identity === true &&
4360
4854
  circuit.noise.index === circuit.measurement.index &&
@@ -4365,7 +4859,7 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4365
4859
  };
4366
4860
  const volume = {
4367
4861
  kind: 'volume',
4368
- qubits: circuit.fridge.qubits,
4862
+ qubits: circuit.register.qubits,
4369
4863
  dim: circuit.qubits.dim,
4370
4864
  observed: heavy,
4371
4865
  total,
@@ -4375,7 +4869,7 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4375
4869
  uncertainty: shor.measure.shots,
4376
4870
  randomized,
4377
4871
  mirror: circuit.interfere.kind,
4378
- holds: circuit.fridge.qubits === n &&
4872
+ holds: circuit.register.qubits === n &&
4379
4873
  circuit.qubits.dim === mintOf(n) &&
4380
4874
  randomized.includes('deutsch') &&
4381
4875
  randomized.includes('kickback') &&
@@ -4400,18 +4894,18 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4400
4894
  };
4401
4895
  const scaling = {
4402
4896
  kind: 'scaling',
4403
- qubits: circuit.fridge.qubits,
4897
+ qubits: circuit.register.qubits,
4404
4898
  dim: circuit.qubits.dim,
4405
4899
  depth: shor.circuitry.gates.length,
4406
- exact: circuit.qubits.dim === mintOf(circuit.fridge.qubits),
4407
- beyond: circuit.fridge.qubits > qpuFacesOf().faces,
4408
- advantage: n * heavy > coins * total && circuit.fridge.qubits > qpuFacesOf().faces,
4900
+ exact: circuit.qubits.dim === mintOf(circuit.register.qubits),
4901
+ beyond: circuit.register.qubits > qpuFacesOf().faces,
4902
+ advantage: n * heavy > coins * total && circuit.register.qubits > qpuFacesOf().faces,
4409
4903
  mirror: circuit.interfere.holds,
4410
4904
  holds: circuit.qubits.dim === mintOf(n) &&
4411
- circuit.fridge.qubits === n &&
4905
+ circuit.register.qubits === n &&
4412
4906
  shor.circuitry.gates.length > n &&
4413
- circuit.qubits.dim === mintOf(circuit.fridge.qubits) &&
4414
- circuit.fridge.qubits > qpuFacesOf().faces === false &&
4907
+ circuit.qubits.dim === mintOf(circuit.register.qubits) &&
4908
+ circuit.register.qubits > qpuFacesOf().faces === false &&
4415
4909
  circuit.interfere.holds,
4416
4910
  };
4417
4911
  const verify = {
@@ -4422,7 +4916,9 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4422
4916
  cern: 'opendata.cern.ch',
4423
4917
  hardware: provenance.holds && noise.holds,
4424
4918
  algorithm: shor.factors.p * shor.factors.q === shor.n,
4919
+ rsa: shor.rsa.factored,
4425
4920
  crypt: shor.payload.endsWith('/storage/databases/payload'),
4921
+ encrypt: qpuEncryptHolds(),
4426
4922
  holds: cors === '*' &&
4427
4923
  unit.origin.startsWith('https') &&
4428
4924
  !unit.host.includes('*') &&
@@ -4430,6 +4926,8 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4430
4926
  provenance.holds &&
4431
4927
  noise.holds &&
4432
4928
  shor.factors.p * shor.factors.q === shor.n &&
4929
+ shor.rsa.factored === true &&
4930
+ qpuEncryptHolds() &&
4433
4931
  shor.payload.endsWith('/storage/databases/payload'),
4434
4932
  };
4435
4933
  const codes = seed;
@@ -4459,12 +4957,12 @@ export const qpuEvidenceOf = (circuit = qpuCircuitOf(), shor = qpuShorOf(), spee
4459
4957
  export const qpuEvidenceHolds = (e = qpuEvidenceOf()) => e.holds === true &&
4460
4958
  e.kind === 'evidence' &&
4461
4959
  e.provenance.provider === unit.host &&
4462
- e.provenance.device === 'superconducting' &&
4960
+ e.provenance.device === 'simulator' &&
4463
4961
  e.provenance.shots === mintOf(n) &&
4464
4962
  e.provenance.outcomes.length === e.provenance.shots &&
4465
4963
  e.provenance.counts.length === coins &&
4466
- e.noise.t1.millikelvin === ten &&
4467
- e.noise.t2.millikelvin === ten * ten &&
4964
+ e.noise.t1.measured === false &&
4965
+ e.noise.t2.measured === false &&
4468
4966
  e.noise.gate.channel === 'xx' &&
4469
4967
  e.noise.model === 'xx' &&
4470
4968
  e.volume.dim === mintOf(n) &&
@@ -4477,12 +4975,283 @@ export const qpuEvidenceHolds = (e = qpuEvidenceOf()) => e.holds === true &&
4477
4975
  e.verify.cors === '*' &&
4478
4976
  e.verify.hardware === true &&
4479
4977
  e.verify.algorithm === true &&
4978
+ e.verify.rsa === true &&
4480
4979
  e.verify.crypt === true &&
4980
+ e.verify.encrypt === true &&
4481
4981
  e.fault.code === 'bitflip' &&
4482
4982
  e.fault.distance === n &&
4483
4983
  e.fault.codes === seed &&
4484
4984
  e.fault.suppressed === true &&
4485
4985
  e.fault.logicalLtPhysical === true;
4986
+ export const qpuCybersecurityOf = () => {
4987
+ const shor = qpuShorOf();
4988
+ const capacity = qpuCapacityOf();
4989
+ const raid = qpuRaidOf();
4990
+ const purpose = qpuPurposeOf();
4991
+ const evidence = qpuEvidenceOf();
4992
+ const lean = qpuLeanOf();
4993
+ const sequence = qpuSequenceOf();
4994
+ const pairs = [
4995
+ [3, 5],
4996
+ [3, 7],
4997
+ [3, 11],
4998
+ [5, 7],
4999
+ [3, 13],
5000
+ [3, 17],
5001
+ [5, 11],
5002
+ [3, 19],
5003
+ [5, 13],
5004
+ [3, 23],
5005
+ [7, 11],
5006
+ [5, 17],
5007
+ [3, 29],
5008
+ [7, 13],
5009
+ ];
5010
+ const table = pairs.map(([p, q]) => ({ p, q, product: p * q, modulus: p * q, rsa: true, holds: p > seed && q > seed }));
5011
+ const rsa = {
5012
+ kind: 'rsa',
5013
+ cryptosystem: 'rsa',
5014
+ modulus: shor.n,
5015
+ public: { n: shor.n },
5016
+ factored: shor.rsa.factored,
5017
+ factors: shor.factors,
5018
+ table,
5019
+ payload: shor.payload,
5020
+ unlocked: shor.unlocked,
5021
+ lock: shor.lock,
5022
+ holds: shor.rsa.holds && table.length === qpuFacesOf().faces && table.every((row) => row.holds && row.p * row.q === row.modulus) && shor.unlocked === true,
5023
+ };
5024
+ const encrypt = qpuEncryptOf();
5025
+ const crypto = [...lean.rows, ...lean.cover].find((r) => r.heading === 'crypto');
5026
+ const shorRow = [...lean.rows, ...lean.cover].find((r) => r.heading === 'shor');
5027
+ const tools = cryptoToolNames;
5028
+ const holds = qpuShorHolds(shor) &&
5029
+ qpuCapacityHolds(capacity) &&
5030
+ qpuRaidHolds(raid) &&
5031
+ qpuPurposeHolds(purpose) &&
5032
+ qpuEvidenceHolds(evidence) &&
5033
+ qpuSequenceHolds(sequence) &&
5034
+ qpuLeanHolds(lean) &&
5035
+ capacity.crypt.holds &&
5036
+ capacity.crypt.kind === 'crypto' &&
5037
+ raid.cluster.security === 'crypt' &&
5038
+ evidence.verify.crypt === true &&
5039
+ purpose.cybersecurity.holds &&
5040
+ purpose.cybersecurity.sealed === false &&
5041
+ purpose.cybersecurity.morph === true &&
5042
+ purpose.cybersecurity.tools.length === mintOf(n) &&
5043
+ tools.length === mintOf(n) &&
5044
+ rsa.holds &&
5045
+ rsa.kind === 'rsa' &&
5046
+ encrypt.holds &&
5047
+ qpuEncryptHolds(encrypt) &&
5048
+ table.length === qpuFacesOf().faces &&
5049
+ table.every((row) => row.holds && row.rsa === true) &&
5050
+ table[qpuFacesOf().faces - seed].p * table[qpuFacesOf().faces - seed].q === shor.n &&
5051
+ crypto?.holds === true &&
5052
+ shorRow?.holds === true &&
5053
+ sequence.rungs.every((row, k) => row.cybersecurity === tools[k]);
5054
+ return {
5055
+ kind: 'cybersecurity',
5056
+ theorem: 'crypto',
5057
+ shor,
5058
+ rsa,
5059
+ encrypt,
5060
+ crypt: capacity.crypt,
5061
+ raid: { security: raid.cluster.security, holds: raid.cluster.security === 'crypt' },
5062
+ verify: evidence.verify,
5063
+ purpose: purpose.cybersecurity,
5064
+ table,
5065
+ tools,
5066
+ listed: true,
5067
+ morph: true,
5068
+ sealed: false,
5069
+ holds,
5070
+ };
5071
+ };
5072
+ export const qpuCybersecurityToolsOf = () => {
5073
+ const href = `${unit.origin}/mcp`;
5074
+ const see = cryptoToolNames;
5075
+ const schema = { type: 'object', properties: { man: { type: 'boolean' } } };
5076
+ const defaults = shorDefaultsOf();
5077
+ const shorSchema = {
5078
+ type: 'object',
5079
+ properties: {
5080
+ man: { type: 'boolean' },
5081
+ n: { type: ['integer', 'string'], description: `Modulus to factor. Default ${defaults.modulus}. Work register bits(n) qubits, counting register ${shorCountBits}; no cap — the state is sparse and exact for any n. The counting register of ${shorCountBits} qubits recovers a period only when it divides ${mintOf(shorCountBits)}; every other coprime run recovers nothing and says so in classical.resolvable, and a base sharing a factor with n is factored by gcd, not by period. The reach is of the state, not of period-finding. Past 2^53 send n as a string of digits; \`read\` says how each argument was taken and \`exact\` carries every value as decimal text.` },
5082
+ a: { type: ['integer', 'string'], description: `Base. Default ${defaults.base}. A base sharing a factor with n hands it over as Shor's first step.` }
5083
+ }
5084
+ };
5085
+ const named = `{ n, a } name the modulus and base; the run is theirs, whatever they are. Default ${defaults.modulus} and ${defaults.base}. Counting register ${shorCountBits}: a period is recovered only when it divides ${mintOf(shorCountBits)}, every other coprime run recovers nothing (classical.resolvable), and a shared factor is found by gcd, not by period. The reach is of the state, not of period-finding.`;
5086
+ /** What a caller is shown: the run's numbers while they are exact as numbers, the decimal strings from `exact` once
5087
+ * they would round (past 2^53) or overflow (past 2^1024). Never a null where a number was asked for. */
5088
+ const shownOf = (shor) => {
5089
+ const e = shor.exact;
5090
+ const safe = e.safe;
5091
+ return {
5092
+ n: safe ? shor.n : e.n,
5093
+ a: safe ? shor.a : e.a,
5094
+ factors: safe ? shor.factors : { ...shor.factors, p: e.p, q: e.q, product: e.product },
5095
+ rsa: safe ? shor.rsa : { ...shor.rsa, modulus: e.n, p: e.p, q: e.q, product: e.product },
5096
+ };
5097
+ };
5098
+ const morph = 'In tools/list. Morph. Not a ninth sealed tool. No auth.';
5099
+ const factoring = `${morph} theorem shor. ${shorFactorOf()}. p * q = N.`;
5100
+ const encrypt = `${morph} theorem crypto. ${cryptoClaimOf()}. fused = split * share.`;
5101
+ const both = `${morph} theorem shor. ${shorFactorOf()}. theorem crypto. ${cryptoClaimOf()}.`;
5102
+ return [
5103
+ {
5104
+ name: see[n - n],
5105
+ description: 'theorem shor. theorem crypto.',
5106
+ man: qpuSubManOf(see[n - n], 'theorem shor. theorem crypto.', both, href, see.filter((s) => s !== see[n - n])),
5107
+ inputSchema: schema,
5108
+ run: () => qpuCybersecurityOf()
5109
+ },
5110
+ {
5111
+ name: see[seed],
5112
+ description: `theorem shor. ${shorFactorOf()}.`,
5113
+ man: qpuSubManOf(see[seed], `theorem shor. ${shorFactorOf()}.`, `${factoring} Coprime base. ${named}`, href, see.filter((s) => s !== see[seed])),
5114
+ inputSchema: shorSchema,
5115
+ run: (a) => {
5116
+ const shor = qpuShorTryOf(a);
5117
+ const shown = shownOf(shor);
5118
+ return {
5119
+ kind: 'shor',
5120
+ n: shown.n,
5121
+ a: shown.a,
5122
+ read: shor.read,
5123
+ coprime: shor.coprime,
5124
+ exact: shor.exact,
5125
+ device: shor.device,
5126
+ circuitry: { kind: shor.circuitry.kind, qubits: shor.circuitry.qubits, work: shor.circuitry.work, counting: shor.circuitry.counting, dim: shor.circuitry.dim, holds: shor.circuitry.holds },
5127
+ prepare: shor.prepare,
5128
+ qft: shor.qft,
5129
+ measure: shor.measure,
5130
+ post: shor.post,
5131
+ classical: shor.classical,
5132
+ factors: shown.factors,
5133
+ rsa: shown.rsa,
5134
+ holds: shor.holds,
5135
+ };
5136
+ }
5137
+ },
5138
+ {
5139
+ name: see[coins],
5140
+ description: `theorem shor. ${shorFactorOf()}.`,
5141
+ man: qpuSubManOf(see[coins], `theorem shor. ${shorFactorOf()}.`, `${factoring} Native h cnot. Compiled x swap csdg cmodexp. ${named}`, href, see.filter((s) => s !== see[coins])),
5142
+ inputSchema: shorSchema,
5143
+ run: (a) => {
5144
+ const shor = qpuShorTryOf(a);
5145
+ const shown = shownOf(shor);
5146
+ return { kind: 'cmodexp', circuitry: shor.circuitry, exact: shor.exact, read: shor.read, rsa: { kind: 'rsa', modulus: shown.n, a: shown.a, factored: shor.rsa.factored }, holds: shor.circuitry.holds && shor.read.holds };
5147
+ }
5148
+ },
5149
+ {
5150
+ name: see[n],
5151
+ description: `theorem shor. ${shorFactorOf()}.`,
5152
+ man: qpuSubManOf(see[n], `theorem shor. ${shorFactorOf()}.`, `${factoring} Inverse QFT. Period continued-fraction. ${named}`, href, see.filter((s) => s !== see[n])),
5153
+ inputSchema: shorSchema,
5154
+ run: (a) => {
5155
+ const shor = qpuShorTryOf(a);
5156
+ const shown = shownOf(shor);
5157
+ return { kind: 'iqft', qft: shor.qft, post: shor.post, classical: shor.classical, exact: shor.exact, read: shor.read, rsa: { kind: 'rsa', modulus: shown.n, period: shor.post.period, factored: shor.rsa.factored }, holds: shor.qft.holds && shor.post.holds && shor.read.holds };
5158
+ }
5159
+ },
5160
+ {
5161
+ name: see[n + seed],
5162
+ description: `theorem shor. ${shorFactorOf()}.`,
5163
+ man: qpuSubManOf(see[n + seed], `theorem shor. ${shorFactorOf()}.`, `${factoring} Simulator. xx identity. ${named}`, href, see.filter((s) => s !== see[n + seed])),
5164
+ inputSchema: shorSchema,
5165
+ run: (a) => {
5166
+ const shor = qpuShorTryOf(a);
5167
+ const shown = shownOf(shor);
5168
+ return { kind: 'shots', device: shor.device, measure: shor.measure, exact: shor.exact, read: shor.read, rsa: { kind: 'rsa', modulus: shown.n, factored: shor.rsa.factored }, holds: shor.measure.holds && shor.read.holds };
5169
+ }
5170
+ },
5171
+ {
5172
+ name: see[n + coins],
5173
+ description: `theorem shor. ${shorFactorOf()}.`,
5174
+ man: qpuSubManOf(see[n + coins], `theorem shor. ${shorFactorOf()}.`, `${factoring} JSON Nat. ${named}`, href, see.filter((s) => s !== see[n + coins])),
5175
+ inputSchema: shorSchema,
5176
+ run: (a) => {
5177
+ const args = shorArgsOf(a);
5178
+ if (args.modulus === undefined && args.base === undefined)
5179
+ return qpuCybersecurityOf().rsa;
5180
+ const shor = qpuShorTryOf(a);
5181
+ const shown = shownOf(shor);
5182
+ return { ...shown.rsa, a: shown.a, period: shor.post.period, by: shor.factors.by, exact: shor.exact, read: shor.read, classical: shor.classical, holds: shor.rsa.holds && shor.read.holds };
5183
+ }
5184
+ },
5185
+ {
5186
+ name: see[n + n],
5187
+ description: `theorem crypto. ${cryptoClaimOf()}.`,
5188
+ man: qpuSubManOf(see[n + n], `theorem crypto. ${cryptoClaimOf()}.`, encrypt, href, see.filter((s) => s !== see[n + n])),
5189
+ inputSchema: schema,
5190
+ run: () => qpuEncryptOf()
5191
+ },
5192
+ {
5193
+ name: see[mintOf(n) - seed],
5194
+ description: 'theorem shor. theorem crypto.',
5195
+ man: qpuSubManOf(see[mintOf(n) - seed], 'theorem shor. theorem crypto.', both, href, see.filter((s) => s !== see[mintOf(n) - seed])),
5196
+ inputSchema: schema,
5197
+ run: () => {
5198
+ const cyber = qpuCybersecurityOf();
5199
+ return {
5200
+ kind: 'verify',
5201
+ factoring: { theorem: 'shor', factored: cyber.rsa.factored, n: cyber.rsa.modulus, p: cyber.rsa.factors.p, q: cyber.rsa.factors.q, holds: cyber.rsa.holds },
5202
+ encrypt: cyber.encrypt,
5203
+ verify: cyber.verify,
5204
+ rsa: cyber.rsa,
5205
+ payload: cyber.shor.payload,
5206
+ holds: cyber.verify.crypt === true && cyber.verify.rsa === true && cyber.verify.encrypt === true && cyber.encrypt.holds && cyber.holds,
5207
+ };
5208
+ }
5209
+ }
5210
+ ];
5211
+ };
5212
+ export const qpuCybersecurityHolds = (c = qpuCybersecurityOf()) => {
5213
+ const doors = qpuCybersecurityToolsOf();
5214
+ return (c.holds === true &&
5215
+ c.kind === 'cybersecurity' &&
5216
+ c.theorem === 'crypto' &&
5217
+ c.sealed === false &&
5218
+ c.morph === true &&
5219
+ c.listed === true &&
5220
+ c.tools.length === mintOf(n) &&
5221
+ c.tools[n - n] === 'crypto_catalog' &&
5222
+ c.tools[n + coins] === 'crypto_rsa' &&
5223
+ c.tools[n + n] === 'crypto_split' &&
5224
+ c.tools[mintOf(n) - seed] === 'crypto_verify' &&
5225
+ c.crypt.holds === true &&
5226
+ c.raid.security === 'crypt' &&
5227
+ c.verify.crypt === true &&
5228
+ c.verify.encrypt === true &&
5229
+ c.shor.n === qpuFacesOf().rays * (n * n + n + seed) &&
5230
+ c.shor.unlocked === true &&
5231
+ c.shor.factors.p * c.shor.factors.q === c.shor.n &&
5232
+ c.rsa.kind === 'rsa' &&
5233
+ c.rsa.cryptosystem === 'rsa' &&
5234
+ c.rsa.modulus === c.shor.n &&
5235
+ c.rsa.factored === true &&
5236
+ c.rsa.factors.p * c.rsa.factors.q === c.rsa.modulus &&
5237
+ qpuEncryptHolds(c.encrypt) &&
5238
+ c.encrypt.theorem === 'crypto' &&
5239
+ c.encrypt.identity === true &&
5240
+ c.encrypt.ciphertext !== c.rsa.modulus &&
5241
+ c.table.length === qpuFacesOf().faces &&
5242
+ c.table[qpuFacesOf().faces - seed].product === c.shor.n &&
5243
+ c.table.every((row) => row.rsa === true && row.p * row.q === row.modulus) &&
5244
+ doors.length === mintOf(n) &&
5245
+ doors.every((t, k) => {
5246
+ const man = t.man.documentation;
5247
+ const factors = k !== n + n;
5248
+ const encrypts = k === n - n || k === n + n || k === mintOf(n) - seed;
5249
+ return (t.man.holds &&
5250
+ cryptoToolNames.includes(t.name) &&
5251
+ (!factors || man.includes('theorem shor')) &&
5252
+ (!encrypts || man.includes('theorem crypto')));
5253
+ }));
5254
+ };
4486
5255
  const sandboxCore = ['lit', 'mint', 'add', 'mul', 'eq', 'put', 'get', 'has', 'del', 'keys', 'seq', 'if', 'repeat', 'quantum', 'args'];
4487
5256
  const sandboxHost = ['eval', 'fn', 'fs', 'net', 'fetch', 'process', 'import', 'require', 'disk', 'worker'];
4488
5257
  const sandboxSlots = ['n', 'seed', 'coins', 'vertices', 'hexbit', 'bits', 'rays', 'faces', 'amplitudes', 'fused', 'next', 'ns'];
@@ -4490,7 +5259,7 @@ const sandboxOps = [...sandboxCore, 'unlocked', ...sandboxHost];
4490
5259
  const openSchema = {
4491
5260
  type: 'object',
4492
5261
  properties: {
4493
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' },
5262
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' },
4494
5263
  method: { type: 'string' },
4495
5264
  path: { type: 'string' },
4496
5265
  name: { type: 'string' },
@@ -4527,53 +5296,7 @@ const hexOf = (value, width) => {
4527
5296
  }
4528
5297
  return s;
4529
5298
  };
4530
- const cloudflarePrimary = [
4531
- 'agent-commerce-analytics-template',
4532
- 'agent-visibility-template',
4533
- 'ai-brand-visibility-template',
4534
- 'astro-blog-starter-template',
4535
- 'chanfana-openapi-template',
4536
- 'commerce-llms-txt-template',
4537
- 'containers-template',
4538
- 'd1-starter-sessions-api-template',
4539
- 'd1-template',
4540
- 'durable-chat-template',
4541
- 'hello-world-do-template',
4542
- 'internal-sites-template',
4543
- 'llm-chat-app-template',
4544
- 'microfrontend-template',
4545
- 'multiplayer-globe-template',
4546
- 'mysql-hyperdrive-template',
4547
- 'next-starter-template',
4548
- 'nlweb-template',
4549
- 'nodejs-http-server-template',
4550
- 'openauth-template',
4551
- 'postgres-hyperdrive-template',
4552
- 'r2-explorer-template',
4553
- 'react-postgres-fullstack-template',
4554
- 'react-router-hono-fullstack-template',
4555
- 'react-router-postgres-ssr-template',
4556
- 'react-router-starter-template',
4557
- 'react-starter-template',
4558
- 'remix-starter-template',
4559
- 'saas-admin-template',
4560
- 'text-to-image-template',
4561
- 'to-do-list-kv-template',
4562
- 'vite-react-template',
4563
- 'worker-publisher-template',
4564
- 'workers-builds-notifications-template',
4565
- 'workers-for-platforms-template',
4566
- 'workflows-starter-template'
4567
- ];
4568
- const cloudflareE2e = [
4569
- 'llm-chat-app-template',
4570
- 'microfrontend-template',
4571
- 'nlweb-template',
4572
- 'text-to-image-template',
4573
- 'worker-publisher-template',
4574
- 'workers-for-platforms-template'
4575
- ];
4576
- export const qpuSeatHandleOf = (face) => {
5299
+ const qpuSeatHandleOf = (face) => {
4577
5300
  const cube = qpuCubeOf();
4578
5301
  const isolate = qpuHandleOf();
4579
5302
  const faces = qpuFacesOf();
@@ -4598,26 +5321,6 @@ export const qpuSeatHandleOf = (face) => {
4598
5321
  holds,
4599
5322
  };
4600
5323
  };
4601
- export const qpuCatalogHandleOf = (index) => {
4602
- const isolate = qpuHandleOf();
4603
- const faces = qpuFacesOf();
4604
- const face = index % faces.faces;
4605
- const hop = hopOf(face, faces.rays, faces.faces);
4606
- const id = hexOf(faces.faces + index, mintOf(n));
4607
- const holds = isolate.holds && id.length === mintOf(n) && hop === face && index >= n - n;
4608
- return {
4609
- kind: 'handle',
4610
- id,
4611
- '@id': `${unit.origin}/storage#${id}`,
4612
- href: `https://github.com/cloudflare/templates/tree/main/${cloudflarePrimary[index] ?? cloudflareE2e[index - cloudflarePrimary.length] ?? id}`,
4613
- face,
4614
- hop,
4615
- bits: isolate.bits,
4616
- amplitudes: isolate.amplitudes,
4617
- kv: isolate.kv.amplitudes,
4618
- holds,
4619
- };
4620
- };
4621
5324
  let messageSeq = n - n;
4622
5325
  const messageLanes = [];
4623
5326
  const uuidImprintOf = (lane, fused, faces) => {
@@ -4704,7 +5407,6 @@ export const qpuPresenceOf = () => {
4704
5407
  const schemas = qpuSchemasOf();
4705
5408
  const types = raidTypesOf(faces);
4706
5409
  const fused = faces.faces * isolate.kv.amplitudes;
4707
- const timed = timeNsOf(() => faces.faces * isolate.kv.amplitudes);
4708
5410
  if (messageLanes.length !== faces.faces) {
4709
5411
  messageLanes.length = n - n;
4710
5412
  for (let i = n - n; i < faces.faces; i++)
@@ -4799,8 +5501,7 @@ export const qpuPresenceOf = () => {
4799
5501
  starter.holds &&
4800
5502
  globe.holds &&
4801
5503
  chat.holds &&
4802
- users.every((user) => user.holds && user.handle.id.length === mintOf(n)) &&
4803
- timed.value === fused;
5504
+ users.every((user) => user.holds && user.handle.id.length === mintOf(n));
4804
5505
  return {
4805
5506
  kind: 'presence',
4806
5507
  templates,
@@ -4814,8 +5515,6 @@ export const qpuPresenceOf = () => {
4814
5515
  faces: faces.faces,
4815
5516
  fused,
4816
5517
  next: fused + fused,
4817
- ns: timed.ns,
4818
- hz: hzOf(timed.ns),
4819
5518
  merge: 'storage',
4820
5519
  holds,
4821
5520
  };
@@ -4823,8 +5522,6 @@ export const qpuPresenceOf = () => {
4823
5522
  export const qpuPresenceHolds = (p = qpuPresenceOf()) => p.holds === true &&
4824
5523
  p.kind === 'presence' &&
4825
5524
  p.merge === 'storage' &&
4826
- p.ns === n - n &&
4827
- p.hz === hzOf(p.ns) &&
4828
5525
  p.users.length === qpuFacesOf().faces &&
4829
5526
  p.active + p.inactive === p.faces &&
4830
5527
  p.templates.length === n &&
@@ -5238,6 +5935,14 @@ export const qpuStorageMaintainOf = async (env) => {
5238
5935
  holds,
5239
5936
  };
5240
5937
  };
5938
+ /** WRITE AUTH, FAIL CLOSED. Reads stay open. A write is honoured only when QPU_WRITE_TOKEN is bound and the request
5939
+ * carries `Authorization: Bearer <token>`; an unbound token refuses every write. Measured 2026-09-11 by a peer session:
5940
+ * the preflight advertised PUT and DELETE to every origin and the handler honoured them with no check at all. */
5941
+ export const qpuStorageWriteAllowedOf = (env, auth) => {
5942
+ const token = typeof env?.QPU_WRITE_TOKEN === 'string' ? env.QPU_WRITE_TOKEN : '';
5943
+ return token.length > n - n && auth === `Bearer ${token}`;
5944
+ };
5945
+ const storageWriteOf = (method) => method === 'PUT' || method === 'POST' || method === 'DELETE';
5241
5946
  export const qpuStorageOf = async (env, input = {}) => {
5242
5947
  const meta = qpuStorageMetaOf(env);
5243
5948
  const store = storageStoreOf(env);
@@ -5269,6 +5974,9 @@ export const qpuStorageOf = async (env, input = {}) => {
5269
5974
  if (key.length === n - n)
5270
5975
  return { ...meta, holds: false, denied: 'key' };
5271
5976
  const href = `${storageHref}/${key}`;
5977
+ if (storageWriteOf(method) && !qpuStorageWriteAllowedOf(env, input.auth)) {
5978
+ return { ...meta, '@id': href, url: href, key, holds: false, denied: 'auth', auth: 'Bearer QPU_WRITE_TOKEN' };
5979
+ }
5272
5980
  if (method === 'DELETE') {
5273
5981
  const prior = await store.get(key);
5274
5982
  if (isReferrerDoc(prior)) {
@@ -5413,7 +6121,7 @@ export const qpuStorageHolds = (s = qpuStorageMetaOf()) => s.holds === true &&
5413
6121
  s.bindings.BLOBS === 'r2' &&
5414
6122
  s.href === storageHref &&
5415
6123
  jsonldHoldsOf(s);
5416
- export const qpuStorageToolsOf = (env) => {
6124
+ export const qpuStorageToolsOf = (env, auth) => {
5417
6125
  const href = storageHref;
5418
6126
  const see = ['storage_catalog', 'storage_list', 'storage_get', 'storage_put', 'storage_del', 'storage_monitor', 'storage_maintain', 'storage_raid'];
5419
6127
  const schema = { type: 'object', properties: { man: { type: 'boolean' }, key: { type: 'string' }, value: {} } };
@@ -5421,7 +6129,7 @@ export const qpuStorageToolsOf = (env) => {
5421
6129
  {
5422
6130
  name: see[n - n],
5423
6131
  description: 'Storage catalog. JSON-LD WebAPI. Quantum RAID. All details.',
5424
- man: qpuSubManOf(see[n - n], 'Storage catalog.', 'Native Alpine Linux. musl. busybox. overlayfs. Inodes. RAID. No auth.', href, see.filter((s) => s !== see[n - n])),
6132
+ man: qpuSubManOf(see[n - n], 'Storage catalog.', 'Native Alpine Linux. musl. busybox. overlayfs. Inodes. RAID. Reads no auth. Writes Authorization: Bearer QPU_WRITE_TOKEN; unbound refuses.', href, see.filter((s) => s !== see[n - n])),
5425
6133
  inputSchema: schema,
5426
6134
  run: () => qpuStorageMcpOf(env)
5427
6135
  },
@@ -5442,16 +6150,16 @@ export const qpuStorageToolsOf = (env) => {
5442
6150
  {
5443
6151
  name: see[n],
5444
6152
  description: 'Put a stored value.',
5445
- man: qpuSubManOf(see[n], 'Put value.', 'Store by content address. Return referrer access link. Inode nlink. Stripe rays. Mirror coins.', href, see.filter((s) => s !== see[n])),
6153
+ man: qpuSubManOf(see[n], 'Put value. Bearer QPU_WRITE_TOKEN.', 'Store by content address. Return referrer access link. Inode nlink. Stripe rays. Mirror coins.', href, see.filter((s) => s !== see[n])),
5446
6154
  inputSchema: schema,
5447
- run: (a) => qpuStorageOf(env, { method: 'PUT', key: a.key, value: a.value })
6155
+ run: (a) => qpuStorageOf(env, { method: 'PUT', key: a.key, value: a.value, auth })
5448
6156
  },
5449
6157
  {
5450
6158
  name: see[n + seed],
5451
6159
  description: 'Delete a stored value.',
5452
- man: qpuSubManOf(see[n + seed], 'Delete link.', 'Unlink. Last link deleted frees the inode.', href, see.filter((s) => s !== see[n + seed])),
6160
+ man: qpuSubManOf(see[n + seed], 'Delete link. Bearer QPU_WRITE_TOKEN.', 'Unlink. Last link deleted frees the inode.', href, see.filter((s) => s !== see[n + seed])),
5453
6161
  inputSchema: schema,
5454
- run: (a) => qpuStorageOf(env, { method: 'DELETE', key: a.key })
6162
+ run: (a) => qpuStorageOf(env, { method: 'DELETE', key: a.key, auth })
5455
6163
  },
5456
6164
  {
5457
6165
  name: see[n + coins],
@@ -5627,31 +6335,37 @@ const parseGatesOf = (value) => {
5627
6335
  { name: 'h', q: n - n },
5628
6336
  { name: 'cnot', c: n - n, t: seed }
5629
6337
  ];
5630
- if (!Array.isArray(value) || value.length === n - n)
5631
- return fallback;
6338
+ if (value === undefined)
6339
+ return { ops: fallback, read: 'absent', dropped: n - n };
6340
+ if (!Array.isArray(value))
6341
+ return { ops: fallback, read: 'default', dropped: seed };
5632
6342
  const ops = [];
5633
6343
  const names = ['h', 'x', 'z', 'cnot', 'cz', 'swap', 'toffoli', 'reset'];
6344
+ let dropped = n - n;
5634
6345
  for (const row of value) {
5635
- if (!row || typeof row !== 'object' || Array.isArray(row))
5636
- continue;
5637
- const name = typeof row.name === 'string' ? row.name : '';
6346
+ const name = row && typeof row === 'object' && !Array.isArray(row) && typeof row.name === 'string' ? row.name : '';
5638
6347
  if (names.includes(name))
5639
6348
  ops.push(jsonOf(row));
6349
+ else
6350
+ dropped += seed;
5640
6351
  }
5641
- return ops.length > n - n ? ops : fallback;
6352
+ return ops.length > n - n ? { ops, read: 'read', dropped } : { ops: fallback, read: 'default', dropped };
5642
6353
  };
5643
6354
  export const qpuServerSubmitOf = (input = {}) => {
5644
6355
  const computer = qpuComputerOf();
5645
6356
  const plugin = qpuPayloadPluginOf();
5646
6357
  const payload = qpuPayloadMcpOf();
5647
- const ops = parseGatesOf(input.gates);
6358
+ const parsed = parseGatesOf(input.gates);
6359
+ const ops = parsed.ops;
5648
6360
  const measured = measureOf(runGatesOf(ops));
5649
6361
  serverSeq += seed;
5650
- const holds = measured.holds && computer.holds && qpuPayloadPluginHolds(plugin) && payload.holds;
6362
+ const holds = measured.holds && computer.holds && qpuPayloadPluginHolds(plugin) && payload.holds && parsed.read !== 'default';
5651
6363
  const job = {
5652
6364
  id: serverSeq,
5653
6365
  status: 'done',
5654
6366
  gates: ops.map((op) => `${op.name ?? ''}`),
6367
+ read: parsed.read,
6368
+ dropped: parsed.dropped,
5655
6369
  index: measured.index,
5656
6370
  shots: measured.shots,
5657
6371
  counts: measured.counts,
@@ -5660,9 +6374,13 @@ export const qpuServerSubmitOf = (input = {}) => {
5660
6374
  holds,
5661
6375
  };
5662
6376
  serverJobs.push(job);
6377
+ /** The run is synchronous and its result is here, in this reply. Nothing is stored: `id` counts jobs in this isolate
6378
+ * only, and a later GET of the job is answered only while this isolate lives. `href` is the server, not the job. */
5663
6379
  return {
5664
6380
  kind: 'job',
5665
- href: `${serverHref}/${job.id}`,
6381
+ href: serverHref,
6382
+ stored: false,
6383
+ result: 'inline',
5666
6384
  backend: unit.host,
5667
6385
  vm: 'browser',
5668
6386
  payload: plugin.href,
@@ -5685,7 +6403,7 @@ export const qpuServerToolsOf = () => {
5685
6403
  {
5686
6404
  name: see[seed],
5687
6405
  description: 'Quantum backend.',
5688
- man: qpuSubManOf(see[seed], 'Backend.', '3-qubit fridge. H CNOT native. H Toffoli universal. Coupling compile.', href, see.filter((s) => s !== see[seed])),
6406
+ man: qpuSubManOf(see[seed], 'Backend.', '3-qubit register. H CNOT native. H Toffoli universal. Coupling compile.', href, see.filter((s) => s !== see[seed])),
5689
6407
  inputSchema: schema,
5690
6408
  run: () => {
5691
6409
  const computer = qpuComputerOf();
@@ -5698,9 +6416,9 @@ export const qpuServerToolsOf = () => {
5698
6416
  basis: computer.basis,
5699
6417
  universal: computer.universal,
5700
6418
  coupling: computer.coupling,
5701
- fridge: circuit.fridge,
6419
+ register: circuit.register,
5702
6420
  vm: 'browser',
5703
- holds: computer.holds && circuit.fridge.holds,
6421
+ holds: computer.holds && circuit.register.holds,
5704
6422
  };
5705
6423
  }
5706
6424
  },
@@ -5785,7 +6503,7 @@ export const qpuServerMcpOf = () => {
5785
6503
  basis: computer.basis,
5786
6504
  universal: computer.universal,
5787
6505
  coupling: computer.coupling,
5788
- fridge: circuit.fridge,
6506
+ register: circuit.register,
5789
6507
  vm: 'browser'
5790
6508
  },
5791
6509
  computer,
@@ -5894,6 +6612,7 @@ const quantumSlotOf = (name) => {
5894
6612
  };
5895
6613
  const quantumRelatedExtras = [
5896
6614
  'only',
6615
+ 'planes',
5897
6616
  'lattice',
5898
6617
  'circuit',
5899
6618
  'noise',
@@ -5902,14 +6621,9 @@ const quantumRelatedExtras = [
5902
6621
  'sciences',
5903
6622
  'drift',
5904
6623
  'computer',
5905
- 'cryostat',
5906
- 'telemetry',
5907
- 'millikelvin',
5908
6624
  'coil',
5909
6625
  'electronics',
5910
- 'resistance',
5911
6626
  'speed',
5912
- 'hz',
5913
6627
  'hybrid',
5914
6628
  'css',
5915
6629
  'presence',
@@ -5928,8 +6642,7 @@ const quantumRelatedOf = () => {
5928
6642
  kind: circuit.kind,
5929
6643
  only: circuit.only,
5930
6644
  lattice: circuit.lattice,
5931
- fridge: circuit.fridge,
5932
- resistance: circuit.fridge.resistance,
6645
+ register: circuit.register,
5933
6646
  holds: circuit.holds,
5934
6647
  };
5935
6648
  doors.noise = circuit.noise;
@@ -5938,16 +6651,12 @@ const quantumRelatedOf = () => {
5938
6651
  doors.sciences = circuit.sciences;
5939
6652
  doors.drift = circuit.drift;
5940
6653
  doors.computer = circuit.computer;
5941
- doors.cryostat = circuit.fridge.cryostat;
5942
- doors.telemetry = circuit.fridge.telemetry;
5943
- doors.millikelvin = circuit.fridge;
5944
- doors.coil = circuit.fridge.coil;
5945
- doors.electronics = circuit.fridge.electronics;
5946
- doors.resistance = circuit.fridge.resistance;
6654
+ doors.coil = circuit.register.coil;
6655
+ doors.electronics = circuit.register.electronics;
5947
6656
  doors.speed = speed;
5948
- doors.hz = speed.hz;
5949
6657
  doors.hybrid = qpuHybridOf();
5950
6658
  doors.css = qpuCssOf();
6659
+ doors.planes = qpuPlanesOf();
5951
6660
  doors.presence = qpuPresenceOf();
5952
6661
  doors.kv = qpuHandleOf().kv;
5953
6662
  return doors;
@@ -5961,25 +6670,22 @@ const quantumDoorOf = (name) => {
5961
6670
  if (name.length === n - n) {
5962
6671
  const only = related.only;
5963
6672
  const lattice = related.lattice;
5964
- const fridge = related.fridge;
6673
+ const register = related.register;
5965
6674
  const speed = related.speed;
5966
6675
  const names = Object.keys(related);
5967
6676
  return {
5968
6677
  kind: 'quantum',
5969
6678
  only,
5970
6679
  lattice,
5971
- fridge,
5972
- speed: { ns: speed.ns, hz: speed.hz, holds: speed.holds },
5973
- ns: speed.ns,
6680
+ register,
6681
+ speed: { holds: speed.holds },
5974
6682
  related: names,
5975
- unlocked: only.holds && fridge.holds,
6683
+ unlocked: only.holds && register.holds,
5976
6684
  holds: only.holds &&
5977
6685
  lattice.holds &&
5978
6686
  lattice.vacant === n - n &&
5979
- fridge.holds &&
5980
- fridge.resistance === n - n &&
6687
+ register.holds &&
5981
6688
  speed.holds &&
5982
- speed.ns === n - n &&
5983
6689
  names.length === lattice.nodes.length + quantumRelatedExtras.length &&
5984
6690
  lattice.nodes.every((node) => names.includes(node.name) && related[node.name] !== undefined) &&
5985
6691
  quantumRelatedExtras.every((extra) => names.includes(extra) && related[extra] !== undefined)
@@ -6298,9 +7004,7 @@ export const qpuSandboxOf = () => {
6298
7004
  quantum.value.only?.holds === true &&
6299
7005
  quantum.value.lattice?.holds === true &&
6300
7006
  quantum.value.lattice.vacant === n - n &&
6301
- quantum.value.fridge?.resistance === n - n &&
6302
- quantum.value.fridge?.holds === true &&
6303
- quantum.value.ns === n - n &&
7007
+ quantum.value.register?.holds === true &&
6304
7008
  quantum.value.related?.length === related.length &&
6305
7009
  quantum.value.holds === true &&
6306
7010
  tools.every((t) => qpuManHolds(t.man)) &&
@@ -6335,7 +7039,7 @@ export const qpuSandboxRunOf = (name, args = {}) => {
6335
7039
  return { holds: false, denied: 'tool',
6336
7040
  unlocked: true };
6337
7041
  if (args.man === true)
6338
- return tool.man;
7042
+ return qpuManPageOf(name, tool.man);
6339
7043
  const value = runOpOf(tool.run, sandboxHeap, jsonOf(args), n - n);
6340
7044
  return {
6341
7045
  kind: 'sandbox',
@@ -6352,7 +7056,7 @@ export const qpuSandboxRunOf = (name, args = {}) => {
6352
7056
  export const qpuForgeOf = (args = {}) => {
6353
7057
  seedSandboxOf();
6354
7058
  if (args.man === true) {
6355
- return qpuManOf(toolNames[n + seed], 'Agents forge tools in an unlocked in-memory sandbox. Whatever they need.', `Unlocked. All ops and host shims already exist in memory. ${sandboxOps.join(' ')}. Omit name to inspect. { name, run } forges more. No lock.`, `${unit.origin}/mcp`, toolNames.filter((s) => s !== toolNames[n + seed]));
7059
+ return qpuManPageOf(toolNames[n + seed], qpuManOf(toolNames[n + seed], 'Agents forge tools in an unlocked in-memory sandbox. Whatever they need.', `Unlocked. All ops and host shims already exist in memory. ${sandboxOps.join(' ')}. Omit name to inspect. { name, run } forges more. No lock.`, `${unit.origin}/mcp`, toolNames.filter((s) => s !== toolNames[n + seed])));
6356
7060
  }
6357
7061
  const name = typeof args.name === 'string' ? args.name : '';
6358
7062
  if (name.length === n - n)
@@ -6571,8 +7275,6 @@ export const qpuImproveOf = () => {
6571
7275
  run.value.only?.holds === true &&
6572
7276
  run.value.lattice?.holds === true &&
6573
7277
  run.value.lattice.vacant === n - n &&
6574
- run.value.fridge?.resistance === n - n &&
6575
- run.value.ns === n - n &&
6576
7278
  (run.value.related?.length ?? n - n) === quantumRelatedNamesOf().length &&
6577
7279
  run.value.hostEscape === false
6578
7280
  };
@@ -6600,8 +7302,6 @@ export const qpuImproveOf = () => {
6600
7302
  unlocked.value.only?.holds === true &&
6601
7303
  unlocked.value.lattice?.holds === true &&
6602
7304
  unlocked.value.lattice.vacant === n - n &&
6603
- unlocked.value.fridge?.resistance === n - n &&
6604
- unlocked.value.ns === n - n &&
6605
7305
  next === fused + fused
6606
7306
  };
6607
7307
  const before = {
@@ -6819,6 +7519,7 @@ export const qpuTrainOf = () => {
6819
7519
  module: 'agent efficiency',
6820
7520
  before: 'next',
6821
7521
  dry,
7522
+ steps: qpuStepsOf(),
6822
7523
  divide: { teams: coins, agents: faces.rays, challenges: faces.faces },
6823
7524
  sandbox: {
6824
7525
  kind: sandbox.kind,
@@ -6853,6 +7554,7 @@ export const qpuTrainOf = () => {
6853
7554
  };
6854
7555
  export const qpuTrainHolds = (t = qpuTrainOf()) => t.holds === true &&
6855
7556
  t.kind === 'train' &&
7557
+ qpuStepsHolds(t.steps) &&
6856
7558
  t.before === 'next' &&
6857
7559
  t.divide.teams === coins &&
6858
7560
  t.divide.agents === t.challenges.length / coins &&
@@ -6890,8 +7592,6 @@ export const qpuCompeteOf = (team) => {
6890
7592
  unlocked.value.only?.holds === true &&
6891
7593
  unlocked.value.lattice?.holds === true &&
6892
7594
  unlocked.value.lattice.vacant === n - n &&
6893
- unlocked.value.fridge?.resistance === n - n &&
6894
- unlocked.value.ns === n - n &&
6895
7595
  next === fused + fused
6896
7596
  };
6897
7597
  const agentsOf = (path, throughoutput) => efficiency.rows.map((r) => {
@@ -6953,14 +7653,17 @@ export const qpuProveOf = () => {
6953
7653
  const cern = qpuCernOf();
6954
7654
  const integrity = qpuIntegrityOf();
6955
7655
  const circuit = qpuCircuitOf();
7656
+ const ledgerFrom = qpuReceiptLedgerOf().length;
6956
7657
  const shor = qpuShorOf();
7658
+ const receipts = qpuShorReceiptsOf(ledgerFrom);
7659
+ const encrypt = qpuEncryptOf();
6957
7660
  const intelligence = qpuIntelligenceOf();
6958
7661
  const neuro = qpuNeuroOf();
6959
7662
  const coil = qpuCoilOf();
6960
7663
  const next = qpuNextOf();
6961
7664
  const sequence = qpuSequenceOf();
6962
7665
  const purpose = qpuPurposeOf(circuit, shor, sequence, qpuCapacityOf());
6963
- const evidence = qpuEvidenceOf(circuit, shor, qpuSpeedOf());
7666
+ const evidence = qpuEvidenceOf(circuit, shor);
6964
7667
  const theorems = [...lean.rows, ...lean.cover, lean.climb];
6965
7668
  const ui = {
6966
7669
  href: unit.origin,
@@ -6992,6 +7695,7 @@ export const qpuProveOf = () => {
6992
7695
  circuit.holds &&
6993
7696
  circuit.hardware.holds &&
6994
7697
  qpuShorHolds(shor) &&
7698
+ qpuEncryptHolds(encrypt) &&
6995
7699
  purpose.holds &&
6996
7700
  evidence.holds &&
6997
7701
  shor.factors.p * shor.factors.q === shor.n &&
@@ -7042,8 +7746,12 @@ export const qpuProveOf = () => {
7042
7746
  period: shor.post.period,
7043
7747
  factors: [shor.factors.p, shor.factors.q],
7044
7748
  product: shor.factors.product,
7749
+ rsa: shor.rsa,
7750
+ unlocked: shor.unlocked,
7751
+ lock: shor.lock,
7045
7752
  holds: shor.holds,
7046
7753
  },
7754
+ encrypt,
7047
7755
  coil: {
7048
7756
  theorem: coil.theorem,
7049
7757
  windings: coil.windings,
@@ -7062,6 +7770,9 @@ export const qpuProveOf = () => {
7062
7770
  holds: next.holds,
7063
7771
  },
7064
7772
  src: lean.src,
7773
+ source: lean.source,
7774
+ receipts,
7775
+ glossary: qpuGlossaryOf(),
7065
7776
  lean,
7066
7777
  theorems,
7067
7778
  cern,
@@ -7081,7 +7792,7 @@ export const qpuProveHolds = (p = qpuProveOf()) => p.holds === true &&
7081
7792
  p.lattice.occupied === p.lattice.faces &&
7082
7793
  p.lattice.vacant === n - n &&
7083
7794
  p.circuit.hardware.holds === true &&
7084
- p.circuit.hardware.device === 'superconducting' &&
7795
+ p.circuit.hardware.device === 'simulator' &&
7085
7796
  p.circuit.hardware.initialize === true &&
7086
7797
  p.circuit.hardware.gates === true &&
7087
7798
  p.circuit.hardware.interfere === true &&
@@ -7091,8 +7802,9 @@ export const qpuProveHolds = (p = qpuProveOf()) => p.holds === true &&
7091
7802
  p.circuit.hardware.path.submit === `${unit.origin}/server` &&
7092
7803
  p.circuit.holds === true &&
7093
7804
  p.shor.holds === true &&
7094
- p.shor.n === n * (n + coins) &&
7095
- p.shor.a === mintOf(n) - seed &&
7805
+ p.shor.n === qpuFacesOf().rays * (n * n + n + seed) &&
7806
+ p.shor.a === mintOf(n) &&
7807
+ p.shor.unlocked === true &&
7096
7808
  p.shor.coprime === true &&
7097
7809
  p.shor.circuitry === 'cmodexp' &&
7098
7810
  p.shor.qft === 'iqft' &&
@@ -7100,6 +7812,12 @@ export const qpuProveHolds = (p = qpuProveOf()) => p.holds === true &&
7100
7812
  p.shor.noise === 'xx' &&
7101
7813
  p.shor.factors[n - n] * p.shor.factors[seed] === p.shor.n &&
7102
7814
  p.shor.product === p.shor.n &&
7815
+ p.shor.rsa.kind === 'rsa' &&
7816
+ p.shor.rsa.modulus === p.shor.n &&
7817
+ p.shor.rsa.factored === true &&
7818
+ qpuEncryptHolds(p.encrypt) &&
7819
+ p.encrypt.theorem === 'crypto' &&
7820
+ p.encrypt.identity === true &&
7103
7821
  qpuPurposeHolds(p.purpose) &&
7104
7822
  p.purpose.cybersecurity.product === p.shor.n &&
7105
7823
  p.purpose.nature.platform === p.circuit.hardware.device &&
@@ -7125,6 +7843,11 @@ export const qpuProveHolds = (p = qpuProveOf()) => p.holds === true &&
7125
7843
  p.next.nextCoil === p.next.nextFused &&
7126
7844
  qpuNextHolds() &&
7127
7845
  p.src === unit.fuse.lean &&
7846
+ p.source.holds === true &&
7847
+ p.source.fold === qpuFoldOf(leanSource) &&
7848
+ p.source.verbatim === p.source.served &&
7849
+ p.receipts.holds === true &&
7850
+ p.receipts.fold === qpuReceiptFoldOf(p.receipts.rows) &&
7128
7851
  qpuLeanHolds(p.lean) &&
7129
7852
  qpuCernHolds(p.cern) &&
7130
7853
  qpuIntegrityHolds(p.integrity) &&
@@ -7730,6 +8453,12 @@ export const qpuCssOf = (imagine = '', genesis = qpuGenesisOf()) => {
7730
8453
  const none = n - n;
7731
8454
  const seated = imagine.length > none ? faceOf(imagine, faces.faces) : none;
7732
8455
  const hop = (seated + faces.rays + faces.rays) % faces.faces;
8456
+ /** LATTICE PHASE (the captain, 2026-09-12: "re-fuse all animations to follow the quantum lattice"). Every face keeps
8457
+ * the one fused keyframe, but its phase is its position on the genesis walk (0, 7, 1, 8, … 6, 13): ray 0's scanner
8458
+ * face, its radar face by the hop, the next ray. One negative animation-delay rule reads `--walk`, and the timing
8459
+ * function steps once per face, so the grid is the walk itself, not fourteen faces pulsing in line. */
8460
+ const walkOf = (face) => (face % faces.rays) * coins + (face < faces.rays ? none : seed);
8461
+ const walk = qpuStepsOf().walk.map((step) => step.face);
7733
8462
  const physicsOf = (name) => {
7734
8463
  if (name === 'split')
7735
8464
  return { x: none, y: none, r: none, s: coins, a: seed };
@@ -7757,7 +8486,7 @@ export const qpuCssOf = (imagine = '', genesis = qpuGenesisOf()) => {
7757
8486
  return { x: coins, y: none, r: none, s: seed, a: seed };
7758
8487
  if (name === 'measurement')
7759
8488
  return { x: none, y: none, r: none, s: seed, a: seed };
7760
- if (name === 'fridge')
8489
+ if (name === 'register')
7761
8490
  return { x: none, y: ten, r: none, s: seed, a: seed };
7762
8491
  return { x: none, y: none, r: none, s: seed, a: seed };
7763
8492
  };
@@ -7794,11 +8523,11 @@ export const qpuCssOf = (imagine = '', genesis = qpuGenesisOf()) => {
7794
8523
  `@property --qpu-a{syntax:"<number>";inherits:false;initial-value:${seed}}` +
7795
8524
  `:root{--qpu-hz:${hz};--qpu-n:${n};--qpu-coins:${coins};--qpu-rays:${faces.rays};--qpu-faces:${faces.faces};--qpu-milli:${milli};--qpu-period:calc(1s * var(--qpu-milli) / var(--qpu-hz))}` +
7796
8525
  `.qpu{display:grid;grid-template-columns:repeat(var(--qpu-rays),minmax(0,1fr))}` +
7797
- `.qpu>*{aspect-ratio:${seed};color:hsl(calc(var(--qpu-hz) * var(--face,${none}) / var(--qpu-faces)) ${sat}% ${light}%);animation:qpu var(--qpu-period) linear infinite;will-change:transform,opacity}` +
8526
+ `.qpu>*{aspect-ratio:${seed};color:hsl(calc(var(--qpu-hz) * var(--face,${none}) / var(--qpu-faces)) ${sat}% ${light}%);animation:qpu var(--qpu-period) steps(var(--qpu-faces),jump-none) infinite;animation-delay:calc(${none - seed} * var(--qpu-period) * var(--walk,${none}) / var(--qpu-faces));will-change:transform,opacity}` +
7798
8527
  `.qpu>*::after{content:attr(data-qpu)}` +
7799
8528
  `.qpu>[data-imagine]{--qpu-s:${coins}}` +
7800
8529
  genesis.card.map((slot) => `[data-slot=${slot}]{display:grid}`).join('') +
7801
- genesis.nodes.map((node) => `[data-framework=${node.name}][data-domain=${node.domain}]{--face:${node.face}}`).join('') +
8530
+ genesis.nodes.map((node) => `[data-framework=${node.name}][data-domain=${node.domain}]{--face:${node.face};--walk:${walkOf(node.face)}}`).join('') +
7802
8531
  `[data-slot=card-header]:has([data-slot=card-action]){grid-template-columns:minmax(0,1fr) auto}` +
7803
8532
  `@keyframes qpu{${mid}%{transform:translate3d(var(--qpu-x),var(--qpu-y),0) rotate(var(--qpu-r)) scale(var(--qpu-s));opacity:var(--qpu-a)}}` +
7804
8533
  `@media (prefers-reduced-motion:reduce){.qpu>*{animation:none;will-change:auto}}` +
@@ -7832,7 +8561,13 @@ export const qpuCssOf = (imagine = '', genesis = qpuGenesisOf()) => {
7832
8561
  engine.includes('data-domain=radar') &&
7833
8562
  genesis.frameworks.every((name) => engine.includes(`data-framework=${name}`)) &&
7834
8563
  engine.includes(`--qpu-hz:${hz}`) &&
7835
- engine.includes('animation-delay') === false &&
8564
+ engine.split('animation-delay').length === coins &&
8565
+ engine.includes('--walk') &&
8566
+ engine.includes('linear') === false &&
8567
+ walk.length === faces.faces &&
8568
+ new Set(walk).size === faces.faces &&
8569
+ walk.every((face, at) => walkOf(face) === at) &&
8570
+ genesis.nodes.every((node) => walkOf(node.face) < faces.faces) &&
7836
8571
  hz === 432 &&
7837
8572
  hop === seated &&
7838
8573
  experiments.every((row) => row.holds);
@@ -7848,6 +8583,7 @@ export const qpuCssOf = (imagine = '', genesis = qpuGenesisOf()) => {
7848
8583
  fused: { bytes: fusedBytes, keyframes, cover },
7849
8584
  naive: { bytes: naiveBytes, keyframes: cover, cover },
7850
8585
  winner: 'fused',
8586
+ lattice: { walk, phase: '--walk', ticks: faces.faces },
7851
8587
  imagine: {
7852
8588
  kind: 'imagination',
7853
8589
  text: imagine,
@@ -7868,7 +8604,10 @@ export const qpuCssHolds = (c = qpuCssOf()) => c.holds === true &&
7868
8604
  c.slots[n + seed] === 'card-action' &&
7869
8605
  c.css.includes('data-domain=scanner') &&
7870
8606
  c.css.includes('data-domain=radar') &&
7871
- c.css.includes('animation-delay') === false &&
8607
+ c.css.split('animation-delay').length === coins &&
8608
+ c.css.includes('--walk') &&
8609
+ c.css.includes('linear') === false &&
8610
+ c.lattice.walk.length === c.lattice.ticks &&
7872
8611
  c.imagine.involution === true;
7873
8612
  export const qpuReflectOf = (imagine = '') => {
7874
8613
  const text = typeof imagine === 'string' ? imagine : '';
@@ -8076,7 +8815,7 @@ export const qpuCompeteLiveOf = async (team) => {
8076
8815
  holds,
8077
8816
  };
8078
8817
  };
8079
- export const qpuProveLiveOf = async () => {
8818
+ const qpuProveLiveOf = async () => {
8080
8819
  const prove = qpuProveOf();
8081
8820
  const live = await qpuCernExperienceOf();
8082
8821
  const holds = prove.holds &&
@@ -8094,7 +8833,7 @@ export const qpuProveLiveOf = async () => {
8094
8833
  holds,
8095
8834
  };
8096
8835
  };
8097
- export const qpuSequenceLiveOf = async () => {
8836
+ const qpuSequenceLiveOf = async () => {
8098
8837
  const train = await qpuTrainLiveOf();
8099
8838
  const improve = await qpuImproveLiveOf();
8100
8839
  const compete = await qpuCompeteLiveOf();
@@ -8258,15 +8997,47 @@ export const qpuHostsHolds = (h = qpuHostsOf()) => h.holds === true &&
8258
8997
  h.occupied === h.faces &&
8259
8998
  h.vacant === n - n &&
8260
8999
  h.nodes.every((node) => node.holds && node.involution);
8261
- export const qpuMcpDiscoverOf = () => {
9000
+ /** initialize NEGOTIATES (MCP lifecycle): the reply carries the client's requested protocol version when this server
9001
+ * supports it, else the latest it supports. An external audit (2026-09-12) found the old reply always said 2026-07-28,
9002
+ * a version no client has ever sent — a typed number where a read one belongs. The three versions are the three
9003
+ * published MCP revisions; the list is theirs, not ours. */
9004
+ /** INTEGRATE IN ANY HARNESS (the captain, 2026-09-12). One computed block, from the origin alone, served on initialize
9005
+ * and printed in the README from the same function, so the wire and the paper cannot disagree. Shapes verified against
9006
+ * each harness's own documentation on 2026-09-12: Claude Code (`claude mcp add --transport http`, or .mcp.json for a
9007
+ * project), Cursor (.cursor/mcp.json mcpServers.url), VS Code (.vscode/mcp.json servers type http), OpenAI Codex CLI
9008
+ * (config.toml [mcp_servers.<name>] url), Gemini CLI (settings.json mcpServers.httpUrl), the Anthropic Messages API
9009
+ * (mcp_servers with the beta header), the OpenAI Responses API (a tools entry of type mcp), and bare JSON-RPC over
9010
+ * HTTP for everything else. No auth: reads need no header; storage writes carry Authorization: Bearer. */
9011
+ export const qpuHarnessesOf = () => {
9012
+ const url = `${unit.origin}/mcp`;
9013
+ const name = `uuidna-${unit.kind}`;
9014
+ const rows = [
9015
+ { harness: 'Claude Code', kind: 'cli', how: `claude mcp add --transport http ${name} ${url}`, file: '.mcp.json', config: { mcpServers: { [name]: { type: 'http', url } } } },
9016
+ { harness: 'Cursor', kind: 'file', how: 'add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)', file: '.cursor/mcp.json', config: { mcpServers: { [name]: { url } } } },
9017
+ { harness: 'VS Code', kind: 'file', how: 'add to .vscode/mcp.json and commit it', file: '.vscode/mcp.json', config: { servers: { [name]: { type: 'http', url } } } },
9018
+ { harness: 'OpenAI Codex CLI', kind: 'cli', how: `codex mcp add ${name} --url ${url}`, file: '~/.codex/config.toml', config: `[mcp_servers.${name}]\nurl = "${url}"` },
9019
+ { harness: 'Gemini CLI', kind: 'file', how: 'add to ~/.gemini/settings.json', file: '~/.gemini/settings.json', config: { mcpServers: { [name]: { httpUrl: url } } } },
9020
+ { harness: 'Anthropic Messages API', kind: 'api', how: 'header anthropic-beta: mcp-client-2025-04-04', file: 'request body', config: { mcp_servers: [{ type: 'url', url, name }] } },
9021
+ { harness: 'OpenAI Responses API', kind: 'api', how: 'a tools entry of type mcp', file: 'request body', config: { tools: [{ type: 'mcp', server_label: name, server_url: url, require_approval: 'never' }] } },
9022
+ { harness: 'Any HTTP client', kind: 'raw', how: `POST ${url} with content-type: application/json; methods initialize, tools/list, tools/call`, file: 'none', config: { jsonrpc: '2.0', id: 1, method: 'tools/list' } },
9023
+ ];
9024
+ const holds = rows.length === mintOf(n) && rows.every((r) => JSON.stringify(r.config).includes(url) || r.how.includes(url)) && rows.every((r) => JSON.stringify(r).includes(name) || r.kind === 'raw');
9025
+ return { kind: 'harnesses', url, name, auth: 'none for reads; Authorization: Bearer QPU_WRITE_TOKEN for storage writes', rows, holds };
9026
+ };
9027
+ export const qpuHarnessesHolds = (h = qpuHarnessesOf()) => h.holds === true && h.rows.length === mintOf(n) && h.url === `${unit.origin}/mcp`;
9028
+ export const MCP_VERSIONS = ['2024-11-05', '2025-03-26', '2025-06-18'];
9029
+ const qpuMcpVersionOf = (requested) => MCP_VERSIONS.includes(String(requested)) ? requested : MCP_VERSIONS[n - seed];
9030
+ export const qpuMcpDiscoverOf = (requested) => {
8262
9031
  const hosts = qpuHostsOf();
8263
- const versions = ['2024-11-05', '2025-03-26', '2025-06-18', '2026-07-28'];
8264
- const holds = qpuHostsHolds(hosts) && versions.length === mintOf(coins);
9032
+ const versions = MCP_VERSIONS;
9033
+ const instructions = `tools/list then tools/call. Sixteen tools: Eight doors. Eight cybersecurity. crypto_rsa ${shorFactorOf()}. crypto_split theorem crypto. No auth.`;
9034
+ const holds = qpuHostsHolds(hosts) && versions.length === n && instructions.includes('crypto_rsa') && instructions.includes(`${shorFactorOf()}`) && instructions.includes('crypto_split') && instructions.includes('theorem crypto');
8265
9035
  return {
8266
- protocolVersion: versions[mintOf(coins) - seed],
9036
+ protocolVersion: qpuMcpVersionOf(requested),
9037
+ install: qpuHarnessesOf(),
8267
9038
  capabilities: { tools: { listChanged: false } },
8268
9039
  serverInfo: { name: `@uuidna/${unit.kind}`, title: 'QPU', version: 'quantum' },
8269
- instructions: 'tools/list then tools/call. Eight doors. No auth.',
9040
+ instructions,
8270
9041
  versions,
8271
9042
  hosts: { harnesses: hosts.harnesses.length, llms: hosts.llms.length, holds: hosts.holds },
8272
9043
  holds,
@@ -8412,7 +9183,7 @@ export const qpuPayloadMcpOf = () => {
8412
9183
  holds,
8413
9184
  };
8414
9185
  };
8415
- export const qpuPayloadFindOf = (name) => {
9186
+ const qpuPayloadFindOf = (name) => {
8416
9187
  const payload = qpuPayloadMcpOf();
8417
9188
  const plugin = payload.plugin;
8418
9189
  const tool = payload.tools.find((row) => row.name === name);
@@ -8445,7 +9216,7 @@ export const qpuPayloadFindOf = (name) => {
8445
9216
  docs: payload
8446
9217
  };
8447
9218
  };
8448
- export const qpuInstallPackagesOf = () => {
9219
+ const qpuInstallPackagesOf = () => {
8449
9220
  const qpu = {
8450
9221
  key: installKeys[n - n],
8451
9222
  href: `${unit.origin}/mcp`,
@@ -8659,28 +9430,6 @@ export const qpuFusionOf = () => {
8659
9430
  holds,
8660
9431
  };
8661
9432
  };
8662
- export const qpuFusionLiveOf = async () => {
8663
- const fusion = qpuFusionOf();
8664
- const catalogs = await Promise.all(fusion.catalogs.map((row) => qpuResearchFetchOf(row.href)));
8665
- let occupied = n - n;
8666
- for (const row of catalogs)
8667
- if (row.holds)
8668
- occupied += seed;
8669
- const vacant = catalogs.length - occupied;
8670
- const holds = fusion.holds &&
8671
- catalogs.length === fusion.faces &&
8672
- catalogs.every((row) => row.holds && row.live === true && row.hostEscape === false) &&
8673
- occupied === fusion.faces &&
8674
- vacant === n - n;
8675
- return {
8676
- ...fusion,
8677
- live: true,
8678
- catalogs,
8679
- occupied,
8680
- vacant, hostEscape: false,
8681
- holds,
8682
- };
8683
- };
8684
9433
  export const qpuIntelligenceOf = () => {
8685
9434
  const circuit = qpuCircuitOf();
8686
9435
  const fusion = qpuFusionOf();
@@ -8696,17 +9445,6 @@ export const qpuIntelligenceOf = () => {
8696
9445
  holds,
8697
9446
  };
8698
9447
  };
8699
- export const qpuIntelligenceLiveOf = async () => {
8700
- const intelligence = qpuIntelligenceOf();
8701
- const fusion = await qpuFusionLiveOf();
8702
- const holds = intelligence.holds && fusion.holds;
8703
- return {
8704
- ...intelligence,
8705
- fusion,
8706
- live: true,
8707
- holds,
8708
- };
8709
- };
8710
9448
  export const qpuFusionHolds = (f = qpuFusionOf()) => f.holds === true &&
8711
9449
  f.kind === 'fusion' &&
8712
9450
  f.theorem === 'fusion' &&
@@ -8762,18 +9500,20 @@ export const qpuCernHolds = (c = qpuCernOf()) => c.holds === true &&
8762
9500
  export const qpuToolsOf = () => {
8763
9501
  const names = toolNames;
8764
9502
  const seeOf = (name) => names.filter((s) => s !== name);
8765
- const quantumMan = qpuManOf(names[n - n], 'theorem quantum. theorem fridge.', `GET ${unit.origin}. tools/call ${names[n - n]}. No auth.`, unit.origin, seeOf(names[n - n]));
8766
- const leanMan = qpuManOf(names[seed], 'theorem infinite. theorem distribute.', `GET ${unit.href}. Source ${unit.fuse.lean}. No auth.`, unit.href, seeOf(names[seed]));
8767
- const citeMan = qpuManOf(names[coins], 'MLA 8. when never.', `GET ${unit.origin}/cite. DOI empty. No auth.`, `${unit.origin}/cite`, seeOf(names[coins]));
8768
- const trainMan = qpuManOf(names[n], 'theorem infinite. coins teams of rays.', `tools/call ${names[n]}. { live: true } learn occupancy. { sequence: true } then qpu_improve then qpu_compete then qpu_prove. No auth.`, `${unit.origin}/mcp`, seeOf(names[n]));
8769
- const forgeMan = qpuManOf(names[n + seed], 'Unlocked in memory. No lock.', `tools/call ${names[n + seed]}. Ops ${sandboxOps.join(' ')}. { name, run }. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + seed]));
8770
- const improveMan = qpuManOf(names[n + coins], 'next = fused + fused.', `tools/call ${names[n + coins]}. { live: true } learn occupancy. { sequence: true } train then improve then compete then prove. After qpu_train. Before qpu_compete. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + coins]));
8771
- const competeMan = qpuManOf(names[n + n], 'theorem next_fused. throughoutput per token.', `tools/call ${names[n + n]}. { live: true } learn occupancy. { sequence: true } train then improve then compete then prove. After qpu_improve. Winner calls qpu_prove. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + n]));
8772
- const proveMan = qpuManOf(names[mintOf(n) - seed], 'theorem quantum. theorem cern. theorem tetra. theorem fusion.', `tools/call ${names[mintOf(n) - seed]}. { live: true } sequence then prove. { sequence: true } qpu_train then qpu_improve then qpu_compete then qpu_prove. fetch Request Response. Source ${unit.fuse.lean}. After qpu_compete. No auth.`, `${unit.origin}/mcp`, seeOf(names[mintOf(n) - seed]));
9503
+ const capacity = qpuCapacityOf();
9504
+ const circuit = qpuCircuitOf();
9505
+ const quantumMan = qpuManOf(names[n - n], `The running circuit as one JSON-LD document: a ${circuit.register.qubits}-qubit state-vector simulator (dim ${circuit.register.dim}, exact integer amplitudes), the Bell and GHZ states with their Born weights, the Shor run, and the capacity count fused = faces · 2^(bits+1) = ${capacity.fused} (a count of amplitudes, not a benchmark). theorem quantum. theorem shor. theorem crypto. ${shorFactorOf()}.`, `GET ${unit.origin} returns the same document as tools/call ${names[n - n]}. Read circuit.register for the simulator, circuit.ghz.support (${circuit.ghz.support.join(',')}) for the entangled corners, shor.factors for the factoring, capacity.fused for ${capacity.fused}; every holds must be true or the unit serves 404. theorem quantum. theorem shor. theorem crypto. ${shorFactorOf()}. No auth.`, unit.origin, seeOf(names[n - n]));
9506
+ const leanMan = qpuManOf(names[seed], `The Lean proof, served two ways: the file index.lean as text at source.href, and every theorem as a row (statement verbatim, LaTeX formula, a plain reading, holds recomputed in TypeScript). theorem infinite. theorem distribute. theorem shor. ${shorFactorOf()}.`, `GET ${unit.href} returns the rows; read rows[] and cover[] for the theorems, source.href to fetch ${unit.fuse.lean} itself, source.fold to check the served text is the file, source.toolchain for the pinned Lean. theorem shor. ${shorFactorOf()}. No auth.`, unit.href, seeOf(names[seed]));
9507
+ const citeMan = qpuManOf(names[coins], 'How to cite this unit: MLA 8 entries carrying the DOI and ORCID, the served version, and the archived commit. MLA 8. when never — the citation names no access date because the DOI is the date.', `GET ${unit.origin}/cite returns citations[] (MLA 8 strings to paste), doi ${qpuCiteOf().doi}, the Zenodo archive, and the version with its commit. No auth.`, `${unit.origin}/cite`, seeOf(names[coins]));
9508
+ const trainMan = qpuManOf(names[n], 'Two teams of seven agents dry-clean the occupancy lattice and return the teams, the challenges, the winner, the next tasks, and steps — the autonomous walk computed from the lattice: the seat, the next door to call, and any face that does not hold. theorem infinite. coins teams of rays.', `tools/call ${names[n]} returns steps.next.door (the tool an autonomous agent calls next), steps.todo (faces to repair first), steps.walk (all fourteen faces, scanner then radar), teams[] and winner. { live: true } learn occupancy. { sequence: true } then qpu_improve then qpu_compete then qpu_prove. No auth.`, `${unit.origin}/mcp`, seeOf(names[n]));
9509
+ const forgeMan = qpuManOf(names[n + seed], 'Forge a tool in the in-memory sandbox: pass { name, run } where run is a sealed op tree; nothing touches disk, network, or eval. Omit name to inspect the sandbox. Unlocked in memory. No lock.', `tools/call ${names[n + seed]} with { name, run } returns the forged tool and the sandbox census (tools[], memory, unlocked); without name it returns the census. Ops ${sandboxOps.join(' ')}. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + seed]));
9510
+ const improveMan = qpuManOf(names[n + coins], `Improve by doubling: next = fused + fused = ${capacity.fused + capacity.fused}, the next capacity rung, with before and after readings of quality, speed, and throughoutput (fused amplitudes per token of reply). The numbers are counts of amplitudes, never benchmarks. next = fused + fused.`, `tools/call ${names[n + coins]} returns next, before, after; after.throughoutput / before.throughoutput is the doubling. { live: true } learn occupancy. { sequence: true } train then improve then compete then prove. After qpu_train. Before qpu_compete. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + coins]));
9511
+ const competeMan = qpuManOf(names[n + n], 'Two teams, read and call, compete on quality, speed, and security; the winner is the team that calls qpu_prove. theorem next_fused. throughoutput per token — fused amplitudes served per token of reply.', `tools/call ${names[n + n]} returns winner.{quality,speed,security}, teams[] with scores, and the axes. { live: true } learn occupancy. { sequence: true } train then improve then compete then prove. After qpu_improve. Winner calls qpu_prove. No auth.`, `${unit.origin}/mcp`, seeOf(names[n + n]));
9512
+ const proveMan = qpuManOf(names[mintOf(n) - seed], `Prove the unit end to end: every Lean row with holds, the Shor run with its receipts, the source fold of index.lean, and the evidence block; holds is their conjunction and a false anywhere makes every path 404. theorem quantum. theorem shor. theorem crypto. ${shorFactorOf()}.`, `tools/call ${names[mintOf(n) - seed]} returns theorems[] (each with holds), shor.factors, receipts, source.fold, evidence. theorem shor. theorem crypto. ${shorFactorOf()}. { live: true } sequence then prove. { sequence: true } qpu_train then qpu_improve then qpu_compete then qpu_prove. fetch Request Response. Source ${unit.fuse.lean}. After qpu_compete. No auth.`, `${unit.origin}/mcp`, seeOf(names[mintOf(n) - seed]));
8773
9513
  const proveSchema = {
8774
9514
  type: 'object',
8775
9515
  properties: {
8776
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' },
9516
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' },
8777
9517
  live: { type: 'boolean', description: '{ live: true } sequence then prove. fetch Request Response.' },
8778
9518
  sequence: { type: 'boolean', description: '{ sequence: true } qpu_train then qpu_improve then qpu_compete then qpu_prove. Live. Memory.' }
8779
9519
  }
@@ -8781,7 +9521,7 @@ export const qpuToolsOf = () => {
8781
9521
  const competeSchema = {
8782
9522
  type: 'object',
8783
9523
  properties: {
8784
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' },
9524
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' },
8785
9525
  live: { type: 'boolean', description: '{ live: true } learn CERN occupancy. fetch Request Response. Memory.' },
8786
9526
  sequence: { type: 'boolean', description: '{ sequence: true } qpu_train then qpu_improve then qpu_compete then qpu_prove. Live. Memory.' },
8787
9527
  team: { type: 'string', description: 'read or call. Omit for both teams.' }
@@ -8790,7 +9530,7 @@ export const qpuToolsOf = () => {
8790
9530
  const forgeSchema = {
8791
9531
  type: 'object',
8792
9532
  properties: {
8793
- man: { type: 'boolean', description: 'Return the man page. Read man from tools/list, then call without man.' },
9533
+ man: { type: 'boolean', description: 'Return the man page: call with { man: true }. tools/list stays lean; the man page is one call away.' },
8794
9534
  name: { type: 'string', description: 'Tool name to forge. Omit to inspect the in-memory sandbox.' },
8795
9535
  team: { type: 'string', description: 'read or call.' },
8796
9536
  ray: { type: 'number', description: 'Agent ray 0..6.' },
@@ -8858,16 +9598,67 @@ export const qpuToolsOf = () => {
8858
9598
  }
8859
9599
  ];
8860
9600
  };
9601
+ /** The schemas, derived once per isolate from each tool's replies: the default call, and for the five tools that take
9602
+ * n and a, a second call on 15 and 7 so that `required` is what every reply carries. While they are being derived,
9603
+ * tools/list answers with the minimal schema, so a tool whose reply lists the tools does not recurse. */
9604
+ let outputSchemasMemo;
9605
+ let outputSchemasBuilding = false;
9606
+ const qpuOutputSchemasOf = () => {
9607
+ if (outputSchemasMemo)
9608
+ return outputSchemasMemo;
9609
+ if (outputSchemasBuilding)
9610
+ return {};
9611
+ outputSchemasBuilding = true;
9612
+ const out = {};
9613
+ const sample = (run, args) => {
9614
+ const r = run(args);
9615
+ return r && typeof r === 'object' && typeof r.then === 'function' ? undefined : r;
9616
+ };
9617
+ for (const t of qpuToolsOf())
9618
+ out[t.name] = qpuOutputSchemaOf([sample(t.run, {})].filter((x) => x !== undefined));
9619
+ const withArgs = new Set(['crypto_shor', 'crypto_cmodexp', 'crypto_iqft', 'crypto_shots', 'crypto_rsa']);
9620
+ for (const t of qpuCybersecurityToolsOf()) {
9621
+ /** Three samples for the five tools that take n and a: the unit's own 91, a small 15, and 2^61 sent as digits, so the
9622
+ * derived types of n, a, p, q and product are integer-or-string, as the replies past 2^53 are. */
9623
+ const past = (b1 << BigInt(mintOf(n) * mintOf(n) - n)).toString();
9624
+ const samples = withArgs.has(t.name)
9625
+ ? [sample(t.run, {}), sample(t.run, { n: n * (n + coins), a: n + coins + coins }), sample(t.run, { n: past, a: `${n}` })]
9626
+ : [sample(t.run, {})];
9627
+ out[t.name] = qpuOutputSchemaOf(samples.filter((x) => x !== undefined));
9628
+ }
9629
+ outputSchemasBuilding = false;
9630
+ outputSchemasMemo = out;
9631
+ return out;
9632
+ };
9633
+ /** THE CONNECT BILL (the captain, 2026-09-12: "minimise bills of any kind"). tools/list is paid by every client on every
9634
+ * connect, in context tokens: the sixteen output schemas were 34,232 of its 44,197 bytes — three quarters of the bill
9635
+ * for a document a client validates a reply against at most once. They leave the list and travel with the man page,
9636
+ * one call away ({ man: true }), exactly as the man pages did. The list is names, descriptions, input schemas and
9637
+ * annotations: one KiB per door, guarded by the suite. */
9638
+ export const qpuMcpToolsListOf = () => {
9639
+ const sealed = qpuToolsOf().map(({ name, description, inputSchema }) => qpuMcpToolShapeOf(name, description, inputSchema, { sealed: true, morph: false }));
9640
+ const cybersecurity = qpuCybersecurityToolsOf().map(({ name, description, inputSchema }) => qpuMcpToolShapeOf(name, description, inputSchema, { sealed: false, morph: true }));
9641
+ return [...sealed, ...cybersecurity];
9642
+ };
9643
+ /** The man page as served: the tool's man plus its output schema read from the run, off the list and one call away. */
9644
+ const qpuManPageOf = (name, man) => ({
9645
+ ...man,
9646
+ outputSchema: qpuOutputSchemasOf()[name] ?? minimalOutputSchema,
9647
+ });
8861
9648
  export const qpuMcpOf = () => {
8862
9649
  const href = `${unit.origin}/mcp`;
8863
9650
  const faces = qpuFacesOf();
8864
9651
  const circuit = qpuCircuitOf();
8865
9652
  const capacity = qpuCapacityOf();
9653
+ const shor = qpuShorOf();
9654
+ const encrypt = qpuEncryptOf();
8866
9655
  const cite = qpuCiteOf();
8867
9656
  const tools = qpuToolsOf().map(({ name, description, inputSchema, man }, i) => {
8868
9657
  const position = i + seed;
8869
9658
  return {
8870
9659
  '@type': 'SoftwareApplication',
9660
+ /** the vendor shapes, off the MCP wire and onto the catalogue: Anthropic input_schema, OpenAI function, Gemini functionDeclarations */
9661
+ vendors: { anthropic: { name, description, input_schema: inputSchema }, openai: { type: 'function', function: { name, description, parameters: inputSchema } }, gemini: { functionDeclarations: [{ name, description, parameters: inputSchema }] } },
8871
9662
  '@id': `${href}#${name}`,
8872
9663
  url: href,
8873
9664
  position,
@@ -8896,13 +9687,31 @@ export const qpuMcpOf = () => {
8896
9687
  }
8897
9688
  }))
8898
9689
  };
9690
+ const cybersecurity = qpuCybersecurityToolsOf().map(({ name, description, inputSchema, man }, i) => {
9691
+ const position = i + seed;
9692
+ return {
9693
+ '@type': 'SoftwareApplication',
9694
+ '@id': `${href}#${name}`,
9695
+ url: href,
9696
+ position,
9697
+ name,
9698
+ description,
9699
+ inputSchema,
9700
+ man,
9701
+ sealed: false,
9702
+ morph: true
9703
+ };
9704
+ });
8899
9705
  const holds = circuit.only.holds &&
8900
9706
  capacity.holds &&
8901
9707
  tools.length === mintOf(n) &&
8902
9708
  tools.every((t) => qpuManHolds(t.man) && t.man.name === t.name) &&
8903
9709
  hasPart.numberOfItems === mintOf(n) &&
8904
9710
  hasPart.itemListElement.length === mintOf(n) &&
8905
- hasPart.itemListElement.every((row, i) => row.position === i + seed && row.item.name === tools[i]?.name);
9711
+ hasPart.itemListElement.every((row, i) => row.position === i + seed && row.item.name === tools[i]?.name) &&
9712
+ cybersecurity.length === mintOf(n) &&
9713
+ cybersecurity.every((t) => t.man.holds && t.man.name === t.name) &&
9714
+ qpuMcpToolsListOf().length === mintOf(n) + mintOf(n);
8906
9715
  return {
8907
9716
  '@context': qpuContextOf(),
8908
9717
  '@type': 'WebAPI',
@@ -8913,7 +9722,9 @@ export const qpuMcpOf = () => {
8913
9722
  license: 'CC-BY-NC-ND-4.0',
8914
9723
  provider: {
8915
9724
  '@type': 'Person',
8916
- name: `${cite.author.first} ${cite.author.last}`
9725
+ name: `${cite.author.first} ${cite.author.last}`,
9726
+ identifier: cite.author.orcid,
9727
+ sameAs: cite.author.orcid,
8917
9728
  },
8918
9729
  kind: 'quantum',
8919
9730
  only: circuit.only,
@@ -8932,13 +9743,23 @@ export const qpuMcpOf = () => {
8932
9743
  cors,
8933
9744
  tools,
8934
9745
  hasPart,
9746
+ cybersecurity: {
9747
+ kind: 'cybersecurity',
9748
+ theorem: 'crypto',
9749
+ listed: true,
9750
+ morph: true,
9751
+ sealed: false,
9752
+ rsa: { kind: 'rsa', cryptosystem: 'rsa', modulus: shor.n, p: shor.factors.p, q: shor.factors.q, factored: shor.rsa.factored, unlocked: shor.unlocked },
9753
+ encrypt: { kind: encrypt.kind, theorem: encrypt.theorem, identity: encrypt.identity, holds: encrypt.holds },
9754
+ tools: cybersecurity
9755
+ },
8935
9756
  prove: {
8936
9757
  ui: { href: unit.origin, mcp: href, door: 'qpu_prove' },
8937
9758
  cern: { faces: faces.faces },
8938
9759
  coil: { theorem: 'two_coins_make_a_coil', faces: faces.faces },
8939
9760
  entangle: { product: seed * seed === (n - n) * (n - n), pairs: faces.rays },
8940
9761
  next: { theorem: 'next_coil' },
8941
- shor: { n: n * (n + coins), a: mintOf(n) - seed, qft: 'iqft', product: n * (n + coins) },
9762
+ shor: { n: qpuFacesOf().rays * (n * n + n + seed), a: mintOf(n), qft: 'iqft', product: qpuFacesOf().rays * (n * n + n + seed), rsa: true, p: qpuFacesOf().rays, q: n * n + n + seed, unlocked: true },
8942
9763
  src: unit.fuse.lean
8943
9764
  },
8944
9765
  sandbox: { kind: 'sandbox',
@@ -8946,7 +9767,7 @@ export const qpuMcpOf = () => {
8946
9767
  holds,
8947
9768
  };
8948
9769
  };
8949
- export const qpuMcpCallOf = async (name, args = {}) => {
9770
+ export const qpuMcpCallOf = async (name, args = {}, env, auth) => {
8950
9771
  const shown = async (payload) => qpuMcpShownOf(name, payload);
8951
9772
  const tool = qpuToolsOf().find((t) => t.name === name);
8952
9773
  if (tool) {
@@ -8968,12 +9789,27 @@ export const qpuMcpCallOf = async (name, args = {}) => {
8968
9789
  }
8969
9790
  if (name === 'install' || name === 'apk') {
8970
9791
  if (args.man === true) {
8971
- return shown(qpuManOf('install', 'Interactive installer. Simulate, then commit. Fuse Payload MCP to QPU without a ninth sealed tool. VitePress payload stays on uuidna.com.', `tools/call install. Not in tools/list. { yes: true } seats the current package. { verb: "simulate" } then { verb: "commit", yes: true } then { verb: "audit" }. QPU JSON-LD. No auth.`, `${unit.origin}/mcp`, [...toolNames]));
9792
+ return shown(qpuManPageOf('install', qpuManOf('install', 'Interactive installer. Simulate, then commit. Fuse Payload MCP to QPU without a ninth sealed tool. VitePress payload stays on uuidna.com.', `tools/call install. Not in tools/list. { yes: true } seats the current package. { verb: "simulate" } then { verb: "commit", yes: true } then { verb: "audit" }. QPU JSON-LD. No auth.`, `${unit.origin}/mcp`, [...toolNames])));
8972
9793
  }
8973
9794
  return shown(qpuInstallOf(args));
8974
9795
  }
8975
- if (payloadFinds.includes(name))
9796
+ if (payloadFinds.includes(name)) {
9797
+ if (args.man === true) {
9798
+ return shown(qpuManPageOf(name, qpuSubManOf(name, 'Payload find. Read only.', 'Not in tools/list. Morph at call time. Not a ninth sealed tool. No auth. Write never.', `${unit.origin}/mcp`, payloadFinds.filter((row) => row !== name))));
9799
+ }
8976
9800
  return shown(qpuPayloadFindOf(name));
9801
+ }
9802
+ const morph = [
9803
+ ...qpuCybersecurityToolsOf(),
9804
+ ...qpuStorageToolsOf(env, auth),
9805
+ ...qpuNetworkToolsOf(),
9806
+ ...qpuServerToolsOf(),
9807
+ ].find((t) => t.name === name);
9808
+ if (morph) {
9809
+ if (args.man === true)
9810
+ return shown(qpuManPageOf(name, morph.man));
9811
+ return shown(await morph.run(args));
9812
+ }
8977
9813
  seedSandboxOf();
8978
9814
  const href = typeof args.href === 'string' ? args.href : typeof args.path === 'string' ? args.path : '';
8979
9815
  if (name === 'fetch' && qpuCernHrefOf(href) !== undefined) {
@@ -8995,8 +9831,10 @@ export const qpuMcpCallOf = async (name, args = {}) => {
8995
9831
  }
8996
9832
  if (sandboxTools.has(name))
8997
9833
  return shown(qpuSandboxRunOf(name, args));
8998
- return shown(qpuReadingOf());
9834
+ return qpuUnknownToolOf(name);
8999
9835
  };
9836
+ const qpuUnknownToolOf = (tool) => ({ kind: 'unknown', tool, tools: qpuMcpToolsListOf().map((t) => t.name), holds: false });
9837
+ export const isUnknownTool = (x) => typeof x === 'object' && x !== null && x.kind === 'unknown' && typeof x.tool === 'string' && x.holds === false;
9000
9838
  export const qpuMcpHolds = (m = qpuMcpOf()) => {
9001
9839
  const capacity = qpuCapacityOf();
9002
9840
  const circuit = qpuCircuitOf();
@@ -9009,6 +9847,7 @@ export const qpuMcpHolds = (m = qpuMcpOf()) => {
9009
9847
  qpuImproveHolds() &&
9010
9848
  qpuCompeteHolds() &&
9011
9849
  qpuProveHolds() &&
9850
+ qpuCybersecurityHolds() &&
9012
9851
  qpuMessageHolds() &&
9013
9852
  m.holds === true &&
9014
9853
  m.kind === 'quantum' &&
@@ -9031,6 +9870,25 @@ export const qpuMcpHolds = (m = qpuMcpOf()) => {
9031
9870
  m.tools[n + n]?.name === 'qpu_compete' &&
9032
9871
  m.tools[mintOf(n) - seed]?.name === 'qpu_prove' &&
9033
9872
  m.tools.every((t) => qpuManHolds(t.man) && t.man.name === t.name) &&
9873
+ m.cybersecurity.listed === true &&
9874
+ m.cybersecurity.sealed === false &&
9875
+ m.cybersecurity.morph === true &&
9876
+ m.cybersecurity.tools.length === mintOf(n) &&
9877
+ m.cybersecurity.tools[n - n]?.name === 'crypto_catalog' &&
9878
+ m.cybersecurity.tools[n + coins]?.name === 'crypto_rsa' &&
9879
+ m.cybersecurity.tools[mintOf(n) - seed]?.name === 'crypto_verify' &&
9880
+ m.cybersecurity.rsa.kind === 'rsa' &&
9881
+ m.cybersecurity.rsa.factored === true &&
9882
+ m.cybersecurity.rsa.unlocked === true &&
9883
+ m.cybersecurity.rsa.modulus === qpuFacesOf().rays * (n * n + n + seed) &&
9884
+ m.cybersecurity.rsa.p * m.cybersecurity.rsa.q === m.cybersecurity.rsa.modulus &&
9885
+ m.cybersecurity.encrypt.kind === 'encrypt' &&
9886
+ m.cybersecurity.encrypt.theorem === 'crypto' &&
9887
+ m.cybersecurity.encrypt.identity === true &&
9888
+ m.cybersecurity.encrypt.holds === true &&
9889
+ qpuMcpToolsListOf().length === mintOf(n) + mintOf(n) &&
9890
+ qpuMcpToolsListOf().slice(n - n, mintOf(n)).every((t, i) => t.name === toolNames[i]) &&
9891
+ qpuMcpToolsListOf().slice(mintOf(n)).every((t, i) => t.name === cryptoToolNames[i]) &&
9034
9892
  jsonldHoldsOf(m) &&
9035
9893
  m['@type'] === 'WebAPI' &&
9036
9894
  m['@id'] === m.href &&
@@ -9049,10 +9907,13 @@ export const qpuMcpHolds = (m = qpuMcpOf()) => {
9049
9907
  m.prove.entangle.product === false &&
9050
9908
  m.prove.entangle.pairs === qpuFacesOf().rays &&
9051
9909
  m.prove.next.theorem === 'next_coil' &&
9052
- m.prove.shor.n === 15 &&
9053
- m.prove.shor.a === 7 &&
9910
+ m.prove.shor.n === qpuFacesOf().rays * (n * n + n + seed) &&
9911
+ m.prove.shor.a === mintOf(n) &&
9054
9912
  m.prove.shor.qft === 'iqft' &&
9055
- m.prove.shor.product === 15 &&
9913
+ m.prove.shor.product === qpuFacesOf().rays * (n * n + n + seed) &&
9914
+ m.prove.shor.rsa === true &&
9915
+ m.prove.shor.unlocked === true &&
9916
+ m.prove.shor.p * m.prove.shor.q === m.prove.shor.n &&
9056
9917
  m.prove.src === unit.fuse.lean &&
9057
9918
  qpuHostsHolds() &&
9058
9919
  qpuDevelopHolds());
@@ -9069,7 +9930,6 @@ export const qpuDevelopOf = () => {
9069
9930
  const faces = qpuFacesOf();
9070
9931
  const cube = qpuCubeOf();
9071
9932
  const handle = qpuHandleOf();
9072
- const none = n - n;
9073
9933
  const exclusive = cern.entangle.pairs.filter((pair) => pair.same === false);
9074
9934
  const zip = exclusive.map((pair) => `${pair.scanner.experiment}↔${pair.radar.experiment}`);
9075
9935
  const lines = [
@@ -9084,18 +9944,19 @@ export const qpuDevelopOf = () => {
9084
9944
  '`npm test` compiles then runs the unit tests. `npm run ci` is Lean then test. `npm run ship` deploys. Do not import uuidna.',
9085
9945
  '',
9086
9946
  `- host ${unit.host}. API only JSON-LD. No HTML. No auth. cors *.`,
9087
- `- sealed tools ${tools.length} = mintOf n. tools/list is those eight. Not a ninth sealed tool. Morph install Payload finds imagine at call-time.`,
9947
+ `- sealed tools ${tools.length} = mintOf n. tools/list lists those eight plus eight cybersecurity morph. crypto_rsa theorem shor ${shorFactorOf()}. crypto_split theorem crypto ${cryptoClaimOf()}. Unlocked. Not a ninth sealed tool. Morph install Payload finds imagine at call-time.`,
9088
9948
  `- docs.api ${docs.api.length} = rays. Extra paths do not join that list.`,
9089
9949
  `- integrity ${integrity.n}: ${integrity.tests.map((row) => row.name).join(' ')}. If false every path is 404.`,
9090
9950
  `- primitives ${primitives.join(' ')}. Never Math.`,
9091
- `- fridge superconducting. resistance ${circuit.fridge.resistance}. ns ${quantum.speed.ns}.`,
9951
+ `- theorem temperature. theorem superconductivity. theorem qubits. device ${circuit.hardware.device}. KV added amplitudes.`,
9092
9952
  `- fuse faces * mintOf (bits + seed) = ${quantum.fused}. isolate handle.amplitudes ${handle.amplitudes}. KV ${handle.kv.amplitudes}.`,
9093
- `- next = fused + fused. last false. split_coin has no last k. demo is not a test nor a proof. Capacity infinite.`,
9953
+ `- next = fused + fused. last false. split_coin has no last k. demo is not a test nor a proof. Capacity infinite. Crypt split to free agents.`,
9094
9954
  `- occupancy ${occupancies.join(' ')}. skills ${skills.join(' ')}. Coordinated dry-clean.`,
9955
+ `- steps computed from the lattice: seat ${qpuStepsOf().seat}, next ${qpuStepsOf().next.node} at face ${qpuStepsOf().next.face} via ${qpuStepsOf().next.door.tool}, todo ${qpuStepsOf().todo.length}. Walk scanner then radar by the hop of rays, ray by ray.`,
9095
9956
  `- domains ${genesis.domains.join(' ')}. Lattice flow domains. face = team * rays + ray. hop face + rays. involution face + rays + rays.`,
9096
9957
  `- circuit.gates ${circuit.gates.names.join(' ')}.`,
9097
9958
  `- sandbox memory only. Not KV. VM scaling online.`,
9098
- `- CERN coins views. scanner LHC running ${cern.learn.lhc.join(' ')}. radar Open Data ${cern.learn.opendata.join(' ')}. Shared tetra + TOTEM. Exclusive ${zip.join(' ')}. Catalog pairs ${faces.rays}. HEP quantum true. Live JSON. Open Data needs records. LHC-only holds without Open Data occupancy.`
9959
+ `- CERN coins views. scanner LHC running ${cern.learn.lhc.join(' ')}. radar Open Data ${cern.learn.opendata.join(' ')}. Shared tetra + TOTEM. Exclusive ${zip.join(' ')}. Catalog pairs ${faces.rays}. HEP quantum true. Live CERN Open Data APIs. Live JSON. Open Data needs records. LHC-only holds without Open Data occupancy.`
9099
9960
  ];
9100
9961
  const reading = lines.join('\n');
9101
9962
  const holds = lean.holds &&
@@ -9107,10 +9968,8 @@ export const qpuDevelopOf = () => {
9107
9968
  integrity.tests.length === n &&
9108
9969
  genesis.domains.length === coins &&
9109
9970
  genesis.domains.join(' ') === 'scanner radar' &&
9110
- circuit.fridge.resistance === n - n &&
9111
9971
  circuit.gates.names.length === coins &&
9112
9972
  circuit.gates.names.join(' ') === 'h cnot' &&
9113
- quantum.speed.ns === none &&
9114
9973
  quantum.next === quantum.fused + quantum.fused &&
9115
9974
  handle.amplitudes === mintOf(cube.bits) &&
9116
9975
  handle.kv.amplitudes === mintOf(cube.bits + seed) &&
@@ -9128,6 +9987,13 @@ export const qpuDevelopOf = () => {
9128
9987
  reading.includes('This README is generated') &&
9129
9988
  reading.includes('Do not import uuidna') &&
9130
9989
  reading.includes('Not a ninth sealed tool') &&
9990
+ reading.includes(`${shorFactorOf()}`) &&
9991
+ reading.includes('theorem shor') &&
9992
+ reading.includes('theorem crypto') &&
9993
+ reading.includes('theorem temperature') &&
9994
+ reading.includes('theorem superconductivity') &&
9995
+ reading.includes('theorem qubits') &&
9996
+ reading.includes('Unlocked') &&
9131
9997
  reading.includes('demo is not a test nor a proof') &&
9132
9998
  reading.includes('API only JSON-LD') &&
9133
9999
  reading.includes('No HTML') &&
@@ -9142,7 +10008,6 @@ export const qpuDevelopOf = () => {
9142
10008
  tools: tools.length,
9143
10009
  api: docs.api.length,
9144
10010
  integrity: integrity.n,
9145
- ns: quantum.speed.ns,
9146
10011
  fused: quantum.fused,
9147
10012
  lhc: cern.learn.lhc,
9148
10013
  opendata: cern.learn.opendata,
@@ -9158,242 +10023,269 @@ export const qpuDevelopHolds = (d = qpuDevelopOf()) => d.holds === true &&
9158
10023
  d.tools === mintOf(n) &&
9159
10024
  d.api === qpuFacesOf().rays &&
9160
10025
  d.integrity === n &&
9161
- d.ns === n - n &&
9162
10026
  d.lhc.length === n * n &&
9163
10027
  d.opendata.length === n * n &&
9164
10028
  d.exclusive.length === mintOf(coins) &&
9165
10029
  d.reading.includes('Lean') &&
9166
10030
  d.src === unit.fuse.lean;
10031
+ /** THE README IS THE npm PAGE. Read as the package's front door on npmjs.com (2026-09-12): the first screen had no
10032
+ * install line, no usage, and the same tag sentences repeated down the page — "demo is not a test nor a proof" five
10033
+ * times, "theorem shor. Factor 91." fifteen. Every claim is kept (qpuReadmeHolds pins each one, verbatim), but a
10034
+ * reader now meets install → use → routes → tools as tables, and each pinned sentence is said once. Nothing here is
10035
+ * typed twice: descriptions, readings, citations and harness recipes are the served objects printed. */
9167
10036
  export const qpuReadmeOf = (m = qpuMcpOf()) => {
9168
10037
  const lean = qpuLeanOf();
9169
10038
  const quantum = qpuQuantumOf();
9170
- const develop = qpuDevelopOf();
9171
10039
  const cite = qpuCiteOf();
9172
- const efficiency = qpuEfficiencyOf();
9173
- const train = qpuTrainOf();
9174
- const sandbox = qpuSandboxOf();
9175
- const improve = qpuImproveOf();
9176
- const compete = qpuCompeteOf();
9177
10040
  const prove = qpuProveOf();
9178
10041
  const docs = quantum.docs;
9179
- const shorLine = `- theorem shor. N ${prove.shor.n}. a ${prove.shor.a}. period ${prove.shor.period}. product ${prove.shor.product}.`;
10042
+ const blueprint = unit.fuse.src;
10043
+ const harness = qpuHarnessesOf();
10044
+ const row = (...cells) => `| ${cells.join(' | ')} |`;
9180
10045
  const lines = [
9181
- `# \`@uuidna/${unit.kind}\``,
10046
+ `# QPU`,
9182
10047
  '',
9183
- `Running quantum circuit at ${unit.origin}. theorem quantum. Public quantum API. No auth. JSON-LD. GET ${unit.origin} qpu_quantum. POST ${m.href} tools/list. tools/call. Source \`${lean.src}\`.`,
10048
+ `\`@uuidna/qpu\` — Running quantum circuit at ${unit.origin}: a 3-qubit exact state-vector simulator, its Lean 4 proofs, and an MCP server in one Cloudflare Worker. theorem quantum : fused = faces * mintOf (bits + seed). Public quantum API. No auth. JSON-LD. CORS ${cors}. API only. No HTML. The TypeScript and Lean sources are the blueprint; this README is the paper generated from that blueprint.`,
9184
10049
  '',
9185
- '## Develop',
9186
- '',
9187
- develop.reading,
10050
+ '```sh',
10051
+ 'npm install @uuidna/qpu',
10052
+ '```',
9188
10053
  '',
9189
- shorLine,
10054
+ '```ts',
10055
+ "import { qpuMcpCallOf, qpuMcpOf } from '@uuidna/qpu'",
9190
10056
  '',
9191
- '## Purpose',
10057
+ 'const catalog = qpuMcpOf() // the MCP catalog: tools, schemas, install recipes',
10058
+ "const circuit = await qpuMcpCallOf('qpu_quantum') // the running circuit as one JSON-LD document",
10059
+ '```',
9192
10060
  '',
9193
- `Nature. Superconducting fridge. qubits ${quantum.purpose.nature.qubits}. millikelvin ${quantum.purpose.nature.millikelvin}. resistance ${quantum.purpose.nature.resistance}. GHZ ${quantum.purpose.nature.ghz}. Entangle product ${quantum.purpose.nature.entangle}.`,
10061
+ `Or without installing: \`GET ${unit.origin}\`, or \`POST ${m.href}\` with JSON-RPC \`tools/list\` then \`tools/call\`. Do not import uuidna; this package stands alone. Source \`${lean.src}\`.`,
9194
10062
  '',
9195
- `Cybersecurity. Shor N ${quantum.purpose.cybersecurity.n}. a ${quantum.purpose.cybersecurity.a}. factors ${quantum.purpose.cybersecurity.factors[n - n]}×${quantum.purpose.cybersecurity.factors[seed]}. Crypt split ${quantum.purpose.cybersecurity.crypt}. Share ${quantum.purpose.cybersecurity.share}.`,
10063
+ '## Abstract',
9196
10064
  '',
9197
- `Optimization. next = fused + fused. fused ${quantum.purpose.optimization.fused}. next ${quantum.purpose.optimization.next}.`,
10065
+ `A named host ${unit.host} exposes one quantum processing unit as JSON-LD. fused is ${quantum.fused}; next is fused + fused = ${quantum.next}. Native gates are h and cnot. theorem temperature, theorem superconductivity, theorem qubits, theorem shor and theorem crypto are decided in Lean. GHZ ${quantum.purpose.nature.ghz}; entangled ${quantum.purpose.nature.entangled}, product ${quantum.purpose.nature.product}. Possible only in quantum. demo is not a test nor a proof.`,
9198
10066
  '',
9199
- `Science. Lean \`${quantum.purpose.science.lean}\`. climb ${quantum.purpose.science.climb.join(' ')}. extras ${quantum.purpose.science.extras.join(' ')}.`,
10067
+ '## Unit',
9200
10068
  '',
9201
- `Sensing. Message ${quantum.purpose.sensing.message}. network ${quantum.purpose.sensing.network}. server ${quantum.purpose.sensing.server}. hop ${quantum.purpose.sensing.hop}. primitives ${quantum.purpose.sensing.primitives.join(' ')}.`,
10069
+ `The blueprint is \`${blueprint}\` fused with \`${lean.src}\`. theorem quantum, theorem infinite, and theorem distribute are decided in Lean, not restated as chapters here.`,
9202
10070
  '',
9203
- '## Evidence',
10071
+ row('Constant', 'Value'),
10072
+ row('---', '---'),
10073
+ row('mintOf(k)', '2^k by doubling'),
10074
+ row('n', '3'),
10075
+ row('seed', '1'),
10076
+ row('coins', '2'),
10077
+ row('rays', '7'),
10078
+ row('faces', '14'),
10079
+ row('bits', '32'),
10080
+ row('cube vertices', String(quantum.cube.vertices)),
10081
+ row('hexbit', String(quantum.cube.hexbit)),
9204
10082
  '',
9205
- `Execution provenance. Provider ${quantum.evidence.provenance.provider}. Device ${quantum.evidence.provenance.device}. Job ${quantum.evidence.provenance.job}. ns ${quantum.evidence.provenance.ns}. Shots ${quantum.evidence.provenance.shots}. Raw outcomes ${quantum.evidence.provenance.outcomes.join(' ')}. Weights ${quantum.evidence.provenance.weights.join(' ')}. Compiler native ${quantum.evidence.provenance.compiler.native.join(' ')} compiled ${quantum.evidence.provenance.compiler.compiled.join(' ')}. Map fridge ${quantum.evidence.provenance.map.fridge} counting ${quantum.evidence.provenance.map.counting} work ${quantum.evidence.provenance.map.work}.`,
10083
+ `Climb ${quantum.purpose.science.climb.join(' then ')}. Extras ${quantum.purpose.science.extras.join(' ')} stay off the seven-path guide. Integrity is three tests: quantum, lean, sealed. If they fail every path is 404.`,
9206
10084
  '',
9207
- `Device-specific noise. Channel ${quantum.evidence.noise.model}. XX identity ${quantum.evidence.noise.gate.identity}. Erred ${quantum.evidence.noise.gate.erred}. T1 mixing ${quantum.evidence.noise.t1.millikelvin} millikelvin. T2 plate ${quantum.evidence.noise.t2.millikelvin} millikelvin. Resistance ${quantum.evidence.noise.resistance}. Drift ${quantum.evidence.noise.drift}. Simulator needs the explicit xx model.`,
10085
+ '## Interface',
9208
10086
  '',
9209
- `Randomized benchmarks. Volume dim ${quantum.evidence.volume.dim}. Heavy ${quantum.evidence.volume.observed} / ${quantum.evidence.volume.total}. Threshold ${quantum.evidence.volume.threshold.num}/${quantum.evidence.volume.threshold.den}. Uncertainty shots ${quantum.evidence.volume.uncertainty}. Circuits ${quantum.evidence.volume.randomized.join(' ')}. Mirror ${quantum.evidence.volume.mirror}.`,
10087
+ `Seven paths. Eight sealed MCP tools, plus eight cybersecurity morph tools listed on tools/list. Extra paths do not join that list. Not a ninth sealed tool. User guide is docs.inline on the unit. Theorems are qpu_lean and qpu_prove. \`{ man: true }\` is the theorem on the wire.`,
9210
10088
  '',
9211
- `Cross-validation. Ideal ${quantum.evidence.cross.ideal}. Noisy ${quantum.evidence.cross.noisy}. Sampler support ${quantum.evidence.cross.sampler}. Agree ideal ${quantum.evidence.cross.agreeIdeal}. Agree noise ${quantum.evidence.cross.agreeNoise}.`,
10089
+ row('Route', 'Tool', 'Reading'),
10090
+ row('---', '---', '---'),
10091
+ ...docs.api.map((r) => row(`\`${r.method} ${r.path}\``, r.name, r.reading)),
9212
10092
  '',
9213
- `Scaling beyond exact simulation. Qubits ${quantum.evidence.scaling.qubits}. Dim ${quantum.evidence.scaling.dim}. Depth ${quantum.evidence.scaling.depth}. Exact ${quantum.evidence.scaling.exact}. Beyond ${quantum.evidence.scaling.beyond}. Advantage ${quantum.evidence.scaling.advantage}. Mirror ${quantum.evidence.scaling.mirror}.`,
10093
+ row('Tool', 'What it returns'),
10094
+ row('---', '---'),
10095
+ ...m.tools.map((t) => row(`\`${t.name}\``, t.man.description)),
9214
10096
  '',
9215
- `Independent verification. CORS ${quantum.evidence.verify.cors}. Origin ${quantum.evidence.verify.origin}. Lean \`${quantum.evidence.verify.lean}\`. CERN ${quantum.evidence.verify.cern}. Hardware ${quantum.evidence.verify.hardware}. Algorithm ${quantum.evidence.verify.algorithm}. Crypt ${quantum.evidence.verify.crypt}.`,
10097
+ `Cybersecurity morph tools. crypto_rsa theorem shor ${shorFactorOf()}. crypto_split theorem crypto ${cryptoClaimOf()}.`,
9216
10098
  '',
9217
- `Fault tolerance. ${quantum.evidence.fault.code} distance ${quantum.evidence.fault.distance}. Codes ${quantum.evidence.fault.codes}. Syndrome ${quantum.evidence.fault.syndrome.join(' ')}. Erred ${quantum.evidence.fault.erred} prepare ${quantum.evidence.fault.prepare}. Logical off ${quantum.evidence.fault.logical.off} on ${quantum.evidence.fault.logical.on}. Suppressed ${quantum.evidence.fault.suppressed}. Logical < physical ${quantum.evidence.fault.logicalLtPhysical}.`,
10099
+ row('Tool', 'Claim'),
10100
+ row('---', '---'),
10101
+ ...m.cybersecurity.tools.map((t) => row(`\`${t.name}\``, t.man.description)),
9218
10102
  '',
9219
- '## Install',
10103
+ '## Results',
9220
10104
  '',
9221
- 'npx uuidna-install. Cloudflare `install.json`.',
10105
+ `theorem shor ${shorFactorOf()}. theorem crypto ${cryptoClaimOf()}.`,
9222
10106
  '',
9223
- '```sh',
9224
- 'npx uuidna-install',
10107
+ '```lean',
10108
+ prove.theorems.find((r) => r.heading === 'shor')?.theorem ?? '',
10109
+ prove.theorems.find((r) => r.heading === 'crypto')?.theorem ?? '',
9225
10110
  '```',
9226
10111
  '',
9227
- `[![Deploy to Cloudflare](${installCloudflare.button})](${installCloudflare.qpu})`,
10112
+ `Fault tolerance: ${quantum.evidence.fault.code}, distance ${quantum.evidence.fault.distance}, codes ${quantum.evidence.fault.codes}, syndrome ${quantum.evidence.fault.syndrome.join(' ')}, logical off ${quantum.evidence.fault.logical.off}; logical < physical ${quantum.evidence.fault.logicalLtPhysical} on this run, one distance.`,
10113
+ '',
10114
+ `CERN Open Data ${quantum.evidence.verify.cern}. LHC running. Four CMS records. Coil, electronics, hybrid, raid, and clay identities are in \`${lean.src}\`; theorem clay is coins * rays = faces.`,
9228
10115
  '',
9229
- `Occupancy ${occupancies.join(' | ')}. Packages ${installKeys.join(' · ')}.`,
10116
+ '## Evidence',
10117
+ '',
10118
+ row('Measurement', 'Value'),
10119
+ row('---', '---'),
10120
+ row('Execution provenance', `provider ${quantum.evidence.provenance.provider}, device ${quantum.evidence.provenance.device}, job ${quantum.evidence.provenance.job}, shots ${quantum.evidence.provenance.shots}`),
10121
+ row('Compiler', `native ${quantum.evidence.provenance.compiler.native.join(' ')}; compiled ${quantum.evidence.provenance.compiler.compiled.join(' ')}`),
10122
+ row('Device-specific noise', `channel ${quantum.evidence.noise.model}, drift ${quantum.evidence.noise.drift}`),
10123
+ row('Randomized benchmarks', `volume dim ${quantum.evidence.volume.dim}, heavy ${quantum.evidence.volume.observed} / ${quantum.evidence.volume.total}, mirror ${quantum.evidence.volume.mirror}`),
10124
+ row('Cross-validation', `ideal ${quantum.evidence.cross.ideal}, noisy ${quantum.evidence.cross.noisy}, agree ideal ${quantum.evidence.cross.agreeIdeal}, agree noise ${quantum.evidence.cross.agreeNoise}`),
10125
+ row('Scaling (theorem qubits, theorem register)', `dim ${quantum.evidence.scaling.dim}, depth ${quantum.evidence.scaling.depth}, exact ${quantum.evidence.scaling.exact}, beyond ${quantum.evidence.scaling.beyond}, advantage ${quantum.evidence.scaling.advantage}`),
10126
+ row('Independent verification', `CORS ${quantum.evidence.verify.cors}, origin ${quantum.evidence.verify.origin}, Lean \`${quantum.evidence.verify.lean}\`, hardware ${quantum.evidence.verify.hardware}, algorithm ${quantum.evidence.verify.algorithm}, RSA ${quantum.evidence.verify.rsa}, crypt ${quantum.evidence.verify.crypt}, encrypt ${quantum.evidence.verify.encrypt}`),
10127
+ '',
10128
+ '## Recompute',
10129
+ '',
10130
+ 'This README is generated from the blueprint at build. `npm test` compiles then writes the paper. `npm run ci` is Lean then test. `npm run ship` deploys.',
10131
+ '',
10132
+ '```sh',
10133
+ 'git clone https://github.com/uuidna/qpu && cd qpu',
10134
+ 'npm ci',
10135
+ 'npm test',
10136
+ '```',
9230
10137
  '',
9231
- '## Coil',
10138
+ `Run your own: \`npx uuidna-install\` reads Cloudflare \`install.json\`, or [![Deploy to Cloudflare](${installCloudflare.button})](${installCloudflare.qpu}).`,
9232
10139
  '',
9233
- 'theorem two_coins_make_a_coil. theorem electronics. theorem coins_balance_theory_in_practice. theorem follow_the_coins. theorem emerge. theorem coil_efficiency. theorem next_coil. theorem clay. 2×7 coins = 1+6 coils = clay. Next is the double. split_coin has no last k.',
10140
+ `Integrate in any harness. One computed block, served on initialize as \`install\` and printed here from the same function. URL ${harness.url}. ${harness.auth}.`,
9234
10141
  '',
9235
- `- theorem two_coins_make_a_coil : coil = faces`,
9236
- `- theorem electronics : coil = faces`,
9237
- `- theorem coins_balance_theory_in_practice : theory + practice = coins`,
9238
- `- theorem follow_the_coins : app + coins = app + theory + practice`,
9239
- `- theorem emerge : coil = faces ∧ theory = practice`,
9240
- `- theorem coil_efficiency : coil = faces ∧ faces = rays + rays`,
9241
- `- theorem next_coil : coil * mintOf (bits + coins) = fused + fused`,
9242
- `- theorem clay : coins * rays = (seed + (mintOf n - coins)) * coins`,
10142
+ row('Harness', 'How', 'File', 'Config'),
10143
+ row('---', '---', '---', '---'),
10144
+ ...harness.rows.map((r) => row(`**${r.harness}** (${r.kind})`, r.how, r.file, `\`${typeof r.config === 'string' ? r.config.replace(/\n/g, ' ') : JSON.stringify(r.config)}\``)),
9243
10145
  '',
9244
- '## Hybrid',
10146
+ '## Cite',
9245
10147
  '',
9246
- 'theorem hybrid. QPU hybrid storage hosts the Payload database. Unity seed. Remainder none. Native Alpine Linux. Last link deleted frees the inode. Next is the double. No last k.',
10148
+ `MLA 8, ${cite.inText}. DOI ${cite.doi}, archive ${cite.archive}, identifier ${cite.identifier}, ORCID ${cite.author.orcid}. when ${cite.when}: the citation names no access date because the DOI is the date. Cite the running quantum circuit and its Lean proof.`,
9247
10149
  '',
9248
- `- theorem hybrid_cost : coins + seed = n`,
9249
- `- theorem hybrid_speed : rays + seed = mintOf n`,
9250
- `- theorem hybrid : coins + seed = n ∧ rays + seed = mintOf n`,
10150
+ ...cite.rows.map((r) => `- ${r.works}`),
10151
+ `- ${cite.prior.works}`,
9251
10152
  '',
9252
- '## Guide',
10153
+ '## License',
9253
10154
  '',
9254
- docs.abstract,
10155
+ 'CC-BY-NC-ND-4.0. Source `LICENSE`. Copyright Tsvetan Rouschev.',
9255
10156
  '',
9256
- 'User guide is docs.inline. Each MCP command has man. tools/list then tools/call.',
9257
- ''
9258
10157
  ];
9259
- for (const row of docs.api) {
9260
- lines.push(`- \`${row.method} ${row.path}\` ${row.name}. ${row.reading}`);
9261
- }
9262
- lines.push('', '## Man', '');
9263
- for (const tool of m.tools) {
9264
- lines.push(`### ${tool.name}`, '', '```', tool.man.documentation, '```', '');
9265
- }
9266
- lines.push('## Efficiency', '', `agent efficiency. Tokens ${efficiency.tokens}. Quantum ${efficiency.quantum.queries} query vs ${efficiency.quantum.vs} classical. Lattice occupied ${efficiency.quantum.lattice.occupied} vacant ${efficiency.quantum.lattice.vacant}.`, '');
9267
- for (const row of efficiency.rows) {
9268
- lines.push(`- ${row.door}: ${row.question} read ${row.readTokens} call ${row.callTokens} ratio ${row.ratio}×`);
9269
- }
9270
- lines.push('', '## Train', '', '');
9271
- for (const team of train.teams) {
9272
- lines.push(`- ${team.name} ${team.path}: ${team.agents.map((a) => a.tool).join(' ')}`);
9273
- }
9274
- lines.push('', '## Sandbox', '', `Unlocked in memory. Morph at call-time. listed false. Ops ${sandbox.ops.join(' ')}. Forged ${sandbox.tools.length}.`, '', '## Improve', '', `next = fused + fused. Winner ${improve.winner}. Before ${improve.before.throughoutput} after ${improve.after.throughoutput}.`, '', '## Compete', '', `Unlocked quantum. next = fused + fused. Winner ${compete.winner}.`, '');
9275
- for (const team of compete.teams) {
9276
- lines.push(`- ${team.name} ${team.path}: throughoutput ${team.throughoutput} tokens ${team.tokens} throughput ${team.throughput}`);
9277
- }
9278
- lines.push('', '## Prove', '', '', '## Message', '', '', '## Storage', '', `theorem raid. theorem hybrid. theorem next_coil. RAID at ${unit.origin}/storage. Native Alpine Linux. musl. busybox. overlayfs. KV upper. R2 lower. KV work. Next is the double. No last k. Last link deleted frees the inode. Start with cheapest and cover all. Hybrid KV plus R2. Speed ${quantum.capacity.hybrid.speed} cost ${quantum.capacity.hybrid.cost}. QPU hybrid storage hosts the Payload database at ${unit.origin}/storage/databases/payload. Unity seed. Remainder none. Types ${quantum.capacity.raid.cover.join(' ')}. Pick ${quantum.capacity.raid.pick.name}. Clouds ${quantum.capacity.raid.clouds.length}. Cluster route ${quantum.capacity.raid.cluster.route} security ${quantum.capacity.raid.cluster.security} speed ${quantum.capacity.raid.cluster.speed}. No auth.`, '', '## Proof', '', `Source \`${lean.src}\`. theorem quantum : fused = faces * mintOf (bits + seed). theorem infinite. theorem distribute.`, '');
9279
- for (const row of [...lean.rows, ...lean.cover, lean.climb]) {
9280
- lines.push(`### ${row.heading}`, '', '```lean', row.theorem, '```', '', '$$', row.formula, '$$', '', row.reading, '');
9281
- }
9282
- lines.push('## Build', '', `- qpu: ${quantum.host}`, `- cube: vertices ${quantum.cube.vertices} hexbit ${quantum.cube.hexbit} bits ${quantum.cube.bits}`, `- faces: ${quantum.faces.faces} rays ${quantum.faces.rays} coins ${quantum.faces.coins}`, `- fused: ${quantum.fused} next ${quantum.next}`, `- holds: quantum ${quantum.holds} lean ${lean.holds} mcp ${m.holds}`, `- mcp: ${m.tools.map((t) => t.name).join(' ')}`, '', '## Cite', '', `MLA 8. ${cite.inText}. when ${cite.when}. DOI empty.`, '', ...cite.rows.map((r) => r.works), '', '## License', '', 'CC-BY-NC-ND-4.0. Source `LICENSE`. Copyright Tsvetan Rouschev.', '', '```ts', "import { qpuMcpCallOf, qpuMcpOf } from '@uuidna/qpu'", '```', '', '```sh', 'npm test', '```', '');
9283
10158
  return `${lines.join('\n')}\n`;
9284
10159
  };
9285
10160
  export const qpuReadmeHolds = (text = qpuReadmeOf()) => {
9286
10161
  const lean = qpuLeanOf();
9287
10162
  const mcp = qpuMcpOf();
9288
- const efficiency = qpuEfficiencyOf();
9289
- return (!text.includes('Host never') &&
10163
+ const cite = qpuCiteOf();
10164
+ const headings = ['## Abstract', '## Unit', '## Interface', '## Results', '## Evidence', '## Recompute', '## Cite', '## License'];
10165
+ const order = headings.every((h, i) => i === n - n || text.indexOf(headings[i - seed]) < text.indexOf(h));
10166
+ return (order &&
10167
+ text.startsWith('# QPU\n') &&
10168
+ !text.includes('Host never') &&
10169
+ !text.includes('## Develop') &&
10170
+ !text.includes('## Purpose') &&
10171
+ !text.includes('## Coil') &&
10172
+ !text.includes('## Hybrid') &&
10173
+ !text.includes('## Guide') &&
10174
+ !text.includes('## Tools') &&
10175
+ !text.includes('## Efficiency') &&
10176
+ !text.includes('## Train') &&
10177
+ !text.includes('## Sandbox') &&
10178
+ !text.includes('## Improve') &&
10179
+ !text.includes('## Compete') &&
10180
+ !text.includes('## Storage') &&
10181
+ !text.includes('## Proof') &&
10182
+ !text.includes('## Build') &&
10183
+ !text.includes('## Man') &&
10184
+ !text.includes('## Prove') &&
10185
+ !text.includes('## Message') &&
10186
+ !text.includes('DOI empty') &&
10187
+ !text.includes(qpuDevelopOf().reading) &&
9290
10188
  text.includes('API only') &&
10189
+ text.includes('No HTML') &&
9291
10190
  text.includes('docs.inline') &&
9292
10191
  text.includes('npx uuidna-install') &&
9293
10192
  text.includes('deploy.workers.cloudflare.com') &&
9294
10193
  text.includes('install.json') &&
9295
- text.includes('## Coil') &&
9296
- text.includes('## Hybrid') &&
9297
- text.includes('## Develop') &&
9298
- text.indexOf('## Develop') < text.indexOf('## Install') &&
9299
- qpuDevelopHolds() &&
9300
- text.includes(qpuDevelopOf().reading) &&
9301
10194
  text.includes('This README is generated') &&
9302
10195
  text.includes('Do not import uuidna') &&
9303
10196
  text.includes('demo is not a test nor a proof') &&
10197
+ text.includes('the blueprint') &&
10198
+ text.includes('the paper') &&
10199
+ text.includes('theorem quantum') &&
10200
+ text.includes('theorem shor') &&
10201
+ text.includes('theorem crypto') &&
10202
+ text.includes('theorem temperature') &&
10203
+ text.includes('theorem qubits') &&
10204
+ text.includes('Theorems are qpu_lean') &&
10205
+ text.includes(`${shorFactorOf()}`) &&
10206
+ text.includes('Unlocked') &&
10207
+ text.includes('crypto_rsa') &&
10208
+ text.includes('crypto_split') &&
10209
+ text.includes('theorem infinite') &&
10210
+ text.includes('theorem distribute') &&
9304
10211
  text.includes('LHC running') &&
9305
- text.includes('coins views') &&
9306
- text.includes('theorem hybrid') &&
9307
- text.includes('QPU hybrid storage hosts the Payload database') &&
9308
- text.includes('Unity seed') &&
9309
- text.includes('Remainder none') &&
9310
- text.includes('Native Alpine Linux') &&
9311
- text.includes('Last link deleted frees the inode') &&
9312
- text.includes('Next is the double') &&
9313
- text.includes('No last k') &&
9314
- text.includes('theorem two_coins_make_a_coil') &&
9315
- text.includes('theorem electronics') &&
9316
- text.includes('theorem coins_balance_theory_in_practice') &&
9317
- text.includes('theorem follow_the_coins') &&
9318
- text.includes('theorem emerge') &&
9319
- text.includes('theorem coil_efficiency') &&
9320
- text.includes('theorem next_coil') &&
9321
- text.includes('theorem clay') &&
9322
- text.includes('2×7 coins = 1+6 coils = clay') &&
9323
- text.includes('agent efficiency') &&
9324
- text.includes('qpu_quantum') &&
9325
- text.includes('qpu_lean') &&
9326
- text.includes('qpu_cite') &&
9327
- text.includes('qpu_train') &&
9328
- text.includes('qpu_forge') &&
9329
- text.includes('qpu_improve') &&
9330
- text.includes('qpu_compete') &&
9331
- text.includes('qpu_prove') &&
9332
- text.includes('throughoutput') &&
9333
- text.includes('Unlocked in memory') &&
9334
- text.includes('VM scaling online') &&
9335
- text.includes('Coordinated dry-clean') &&
9336
- text.includes('Lattice flow domains') &&
10212
+ text.includes('opendata.cern.ch') &&
9337
10213
  text.includes('Not a ninth sealed tool') &&
9338
10214
  text.includes('No auth') &&
9339
- text.includes('Lean proof') &&
9340
10215
  text.includes('JSON-LD') &&
9341
- text.includes('fourteen schemas') &&
9342
10216
  text.includes('schema.org') &&
9343
- text.includes('theorem shor') &&
9344
- text.includes('## Purpose') &&
9345
- text.includes('Nature. Superconducting fridge') &&
9346
- text.includes('Cybersecurity. Shor N') &&
9347
- text.includes('Optimization. next = fused + fused') &&
9348
- text.includes('Science. Lean') &&
9349
- text.includes('Sensing. Message') &&
9350
- text.includes('## Evidence') &&
9351
- text.includes('Execution provenance') &&
9352
- text.includes('Device-specific noise') &&
9353
- text.includes('Randomized benchmarks') &&
9354
- text.includes('Cross-validation') &&
9355
- text.includes('Scaling beyond exact simulation') &&
9356
- text.includes('Independent verification') &&
9357
- text.includes('Fault tolerance') &&
9358
- text.includes('Public quantum API') &&
9359
10217
  text.includes('Possible only in quantum') &&
9360
10218
  text.includes('Running quantum circuit') &&
10219
+ text.includes('next is fused + fused') &&
9361
10220
  text.includes('/message') &&
9362
10221
  text.includes('CC-BY-NC-ND-4.0') &&
9363
10222
  text.includes('LICENSE') &&
9364
- text.includes('running quantum circuit') &&
9365
- text.includes('superconducting') &&
9366
- text.includes('KV added amplitudes') &&
9367
- text.includes('Lab millikelvin') &&
9368
- text.includes('Cryostat telemetry') &&
9369
- text.includes('No drift from science') &&
9370
- text.includes('No drift between sciences') &&
9371
- text.includes('Crypt split') &&
9372
- text.includes('free agents') &&
9373
- text.includes('theorem infinite') &&
9374
- text.includes('theorem distribute') &&
9375
- text.includes('Start with cheapest and cover all') &&
9376
- text.includes('/storage') &&
9377
- text.includes('Unlocked quantum') &&
9378
- text.includes('next = fused + fused') &&
9379
- text.includes('Capacity infinite') &&
9380
- text.includes('Live CERN Open Data APIs') &&
9381
- text.includes('opendata.cern.ch') &&
9382
- mcp.tools.every((t) => text.includes(t.man.documentation)) &&
9383
- efficiency.rows.every((r) => text.includes(r.door) && text.includes(r.question)) &&
10223
+ text.includes(cite.author.orcid) &&
10224
+ text.includes(cite.doi) &&
10225
+ text.includes(cite.identifier) &&
10226
+ text.includes(cite.prior.works) &&
10227
+ text.includes(lean.src) &&
10228
+ text.includes(unit.fuse.src) &&
10229
+ qpuDevelopHolds() &&
10230
+ mcp.tools.every((t) => text.includes(t.name) && text.includes(t.man.description)) &&
10231
+ mcp.cybersecurity.tools.every((t) => text.includes(t.name) && text.includes(t.man.description)) &&
9384
10232
  mcp.prove.src === lean.src &&
9385
- qpuCiteOf().rows.every((r) => text.includes(r.works)) &&
9386
- lean.rows.every((p) => text.includes(`### ${p.heading}`) && text.includes(p.theorem) && text.includes(p.formula) && formulaOf(p.formula)) &&
9387
- lean.cover.every((p) => text.includes(`### ${p.heading}`) && text.includes(p.theorem) && formulaOf(p.formula)) &&
9388
- text.includes(lean.climb.theorem) &&
9389
- formulaOf(lean.climb.formula) &&
9390
- text.includes(lean.src));
9391
- };
10233
+ cite.rows.every((r) => text.includes(r.works)) &&
10234
+ qpuDocsOf().api.every((row) => text.includes(`\`${row.method} ${row.path}\``)));
10235
+ };
10236
+ /** SERVED ONCE PER ISOLATE. The unit is deterministic — no clock, no random, no request-dependent state in these
10237
+ * documents — so a document computed once is the document for the life of the isolate. Before this, every request
10238
+ * paid the whole integrity check (about 34 ms) and rebuilt its document (up to 60 ms); on a metered host that is
10239
+ * CPU billed for nothing new. The memo holds the serialized bytes and their fold, and the fold is the ETag, so a
10240
+ * client that already has the document gets a 304 and no body. The tool-call memo holds pure tools only — the
10241
+ * eight cybersecurity tools and the sealed readers — never the sandbox, storage, network, server or a live call,
10242
+ * and never more than the cap, evicting the oldest. Correctness is proved by the suite: the memoized bytes equal a
10243
+ * fresh construction, and by CI: the host serves this build's bytes. */
10244
+ const integrityMemo = { checked: false, holds: false };
10245
+ const integrityOnceOf = () => {
10246
+ if (!integrityMemo.checked) {
10247
+ integrityMemo.holds = qpuIntegrityHolds();
10248
+ integrityMemo.checked = true;
10249
+ }
10250
+ return integrityMemo.holds;
10251
+ };
10252
+ const servedMemo = new Map();
10253
+ const servedCap = mintOf(mintOf(n));
10254
+ const SERVED = [];
10255
+ export const qpuServedLedgerOf = () => SERVED;
10256
+ const servedOf = (key, build) => {
10257
+ const hit = servedMemo.get(key);
10258
+ if (hit) {
10259
+ SERVED.push({ key, fold: hit.etag });
10260
+ return hit;
10261
+ }
10262
+ const body = JSON.stringify(build());
10263
+ const row = { body, etag: `"${qpuFoldOf(body)}"` };
10264
+ if (servedMemo.size >= servedCap)
10265
+ servedMemo.delete(servedMemo.keys().next().value);
10266
+ servedMemo.set(key, row);
10267
+ return row;
10268
+ };
10269
+ /** Pure tools: the four readers and the eight cybersecurity tools reply the same to the same arguments for the life of
10270
+ * the isolate. train, improve and compete climb an occupancy that moves with each call, and forge seats a sandbox;
10271
+ * those are never served from the memo. */
10272
+ const pureTools = new Set(['qpu_quantum', 'qpu_lean', 'qpu_cite', 'qpu_prove', ...cryptoToolNames]);
10273
+ const pureArgs = (args) => Object.keys(args).every((k) => k === 'man' || k === 'n' || k === 'a');
10274
+ export const qpuServedMemoOf = () => ({ entries: servedMemo.size, cap: servedCap, served: SERVED.length, integrity: { ...integrityMemo } });
10275
+ export const qpuServedMemoHolds = (m = qpuServedMemoOf()) => m.entries <= m.cap && m.served >= n - n && (m.integrity.checked ? m.integrity.holds : true);
10276
+ /** Every served row names a memo key and carries a quoted 16-hex fold — the ETag of the bytes served. */
10277
+ export const qpuServedLedgerHolds = (rows = qpuServedLedgerOf()) => rows.every((r) => r.key.length > n - n && /^"[0-9a-f]{16}"$/.test(r.fold));
9392
10278
  export default {
9393
10279
  async fetch(request, env) {
9394
10280
  const host = env?.QPU_HOST ?? unit.host;
9395
10281
  const jsonOf = (body, status = found) => new Response(JSON.stringify(body), { status, headers });
9396
- if (host !== unit.host || host.includes('*') || !unit.holds || !qpuIntegrityHolds()) {
10282
+ /** A memoized document: 304 with no body when the client's If-None-Match is its ETag, else the bytes with the ETag. */
10283
+ const servedResponse = (row) => {
10284
+ if (request.headers.get('if-none-match') === row.etag)
10285
+ return new Response(null, { status: found + ten * ten + mintOf(coins), headers: { ...headers, etag: row.etag } });
10286
+ return new Response(row.body, { status: found, headers: { ...headers, etag: row.etag } });
10287
+ };
10288
+ if (host !== unit.host || host.includes('*') || !unit.holds || !integrityOnceOf()) {
9397
10289
  return jsonOf(JSON.parse(dead), lost);
9398
10290
  }
9399
10291
  const url = new URL(request.url);
@@ -9406,31 +10298,65 @@ export default {
9406
10298
  return new Response(null, { status: found + coins + coins, headers });
9407
10299
  if (path === '/mcp') {
9408
10300
  if (request.method === 'POST') {
9409
- const body = (await request.json().catch(() => ({})));
10301
+ let parsed;
10302
+ try {
10303
+ parsed = JSON.parse(await request.text());
10304
+ }
10305
+ catch {
10306
+ return jsonOf(rpcErrorOf(null, rpcCodes.parse, 'Parse error: the body is not JSON'), badRequest);
10307
+ }
10308
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
10309
+ return jsonOf(rpcErrorOf(null, rpcCodes.invalid, 'Invalid Request: expected one JSON-RPC 2.0 request object'), badRequest);
10310
+ }
10311
+ const body = parsed;
10312
+ if (typeof body.method !== 'string') {
10313
+ return jsonOf(rpcErrorOf(body.id, rpcCodes.invalid, 'Invalid Request: method must be a string'), badRequest);
10314
+ }
9410
10315
  if (body.method === 'initialize' || body.method === 'server/discover') {
9411
- return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpDiscoverOf() });
10316
+ return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: qpuMcpDiscoverOf(body.params?.protocolVersion) });
9412
10317
  }
9413
10318
  if (body.method === 'ping' || body.method === 'notifications/initialized') {
9414
10319
  return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: {} });
9415
10320
  }
10321
+ /** The envelope carries the request's id, so the memo holds the result's bytes and the envelope is spliced around
10322
+ * them — the same bytes JSON.stringify would produce for the whole object. */
10323
+ const envelope = (id, resultBody) => new Response(`{"jsonrpc":"2.0","id":${JSON.stringify(id ?? null)},"result":${resultBody}}`, { status: found, headers });
9416
10324
  if (body.method === 'tools/list') {
9417
- const sealed = qpuToolsOf().map(({ name, description, inputSchema, man }) => qpuMcpToolShapeOf(name, description, inputSchema, { man }));
9418
- return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: { resultType: 'complete', tools: sealed } });
10325
+ return envelope(body.id, servedOf('tools/list', () => ({ resultType: 'complete', tools: qpuMcpToolsListOf() })).body);
9419
10326
  }
9420
10327
  if (body.method === 'tools/call') {
9421
- const name = body.params?.name ?? '';
9422
- return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: await qpuMcpCallOf(name, body.params?.arguments ?? {}) });
10328
+ const name = typeof body.params?.name === 'string' ? body.params.name : '';
10329
+ const args = body.params?.arguments && typeof body.params.arguments === 'object' && !Array.isArray(body.params.arguments) ? body.params.arguments : {};
10330
+ if (pureTools.has(name) && pureArgs(args)) {
10331
+ const key = `call:${name}:${JSON.stringify(args)}`;
10332
+ const hit = servedMemo.get(key);
10333
+ if (hit) {
10334
+ SERVED.push({ key, fold: hit.etag });
10335
+ return envelope(body.id, hit.body);
10336
+ }
10337
+ const called = await qpuMcpCallOf(name, args, env, request.headers.get('authorization'));
10338
+ if (isUnknownTool(called))
10339
+ return jsonOf(rpcErrorOf(body.id, rpcCodes.params, `Unknown tool: ${name || '(none)'}`, { tools: called.tools }));
10340
+ return envelope(body.id, servedOf(key, () => called).body);
10341
+ }
10342
+ const called = await qpuMcpCallOf(name, args, env, request.headers.get('authorization'));
10343
+ if (isUnknownTool(called))
10344
+ return jsonOf(rpcErrorOf(body.id, rpcCodes.params, `Unknown tool: ${name || '(none)'}`, { tools: called.tools }));
10345
+ return jsonOf({ jsonrpc: '2.0', id: body.id ?? null, result: called });
9423
10346
  }
9424
- return jsonOf(JSON.parse(dead), lost);
10347
+ return jsonOf(rpcErrorOf(body.id, rpcCodes.method, `Method not found: ${body.method}`, { methods: [...rpcMethods] }));
9425
10348
  }
9426
- return jsonOf(qpuMcpOf());
10349
+ return servedResponse(servedOf('/mcp', () => qpuMcpOf()));
10350
+ }
10351
+ if (path === `/${unit.fuse.lean}`) {
10352
+ return new Response(leanSource, { status: found, headers: { ...headers, 'content-type': 'text/plain; charset=utf-8' } });
9427
10353
  }
9428
10354
  if (path === '/')
9429
- return jsonOf(qpuQuantumOf());
10355
+ return servedResponse(servedOf('/', () => qpuQuantumOf()));
9430
10356
  if (path === `/${unit.path}`)
9431
- return jsonOf(qpuLeanOf());
10357
+ return servedResponse(servedOf(`/${unit.path}`, () => qpuLeanOf()));
9432
10358
  if (path === '/cite')
9433
- return jsonOf(qpuCiteOf());
10359
+ return servedResponse(servedOf('/cite', () => qpuCiteOf()));
9434
10360
  if (path === '/server' || path.startsWith('/server/')) {
9435
10361
  if (request.method === 'POST') {
9436
10362
  const body = (await request.json().catch(() => ({})));
@@ -9442,7 +10368,9 @@ export default {
9442
10368
  if (path.startsWith('/server/') && path.length > '/server/'.length) {
9443
10369
  const id = Number(path.slice('/server/'.length));
9444
10370
  const job = serverJobs.find((row) => row.id === id);
9445
- return jsonOf(job ?? { kind: 'result', holds: false, denied: 'job' });
10371
+ if (job)
10372
+ return jsonOf({ ...job, stored: false });
10373
+ return jsonOf({ kind: 'result', id, holds: false, denied: 'job', why: 'jobs are not stored; the result is returned inline with the submit, and an id lives only as long as the isolate that ran it' }, lost);
9446
10374
  }
9447
10375
  return jsonOf(qpuServerMcpOf());
9448
10376
  }
@@ -9461,20 +10389,26 @@ export default {
9461
10389
  const key = path === '/storage' ? '' : decodeURIComponent(path.slice('/storage/'.length));
9462
10390
  if (request.method === 'POST' && path === '/storage') {
9463
10391
  const body = (await request.json().catch(() => ({})));
9464
- const rpc = await qpuSubRpcOf(body, qpuStorageToolsOf(env), storageHref);
10392
+ const auth = request.headers.get('authorization');
10393
+ const rpc = await qpuSubRpcOf(body, qpuStorageToolsOf(env, auth), storageHref);
9465
10394
  if (rpc)
9466
10395
  return jsonOf(rpc);
9467
10396
  if (body.maintain === true)
9468
10397
  return jsonOf(await qpuStorageMaintainOf(env));
9469
- if (typeof body.key === 'string')
9470
- return jsonOf(await qpuStorageOf(env, { method: 'PUT', key: body.key, value: body.value }));
10398
+ if (typeof body.key === 'string') {
10399
+ const put = await qpuStorageOf(env, { method: 'PUT', key: body.key, value: body.value, auth });
10400
+ return jsonOf(put, put.holds === false && 'denied' in put && put.denied === 'auth' ? unauthorized : found);
10401
+ }
9471
10402
  }
9472
10403
  if (request.method === 'PUT' || request.method === 'POST') {
9473
10404
  const value = await request.json().catch(() => null);
9474
- return jsonOf(await qpuStorageOf(env, { method: 'PUT', key, value }));
10405
+ const put = await qpuStorageOf(env, { method: 'PUT', key, value, auth: request.headers.get('authorization') });
10406
+ return jsonOf(put, put.holds === false && 'denied' in put && put.denied === 'auth' ? unauthorized : found);
10407
+ }
10408
+ if (request.method === 'DELETE') {
10409
+ const del = await qpuStorageOf(env, { method: 'DELETE', key, auth: request.headers.get('authorization') });
10410
+ return jsonOf(del, del.holds === false && 'denied' in del && del.denied === 'auth' ? unauthorized : found);
9475
10411
  }
9476
- if (request.method === 'DELETE')
9477
- return jsonOf(await qpuStorageOf(env, { method: 'DELETE', key }));
9478
10412
  if (path === '/storage')
9479
10413
  return jsonOf(await qpuStorageMcpOf(env));
9480
10414
  return jsonOf(await qpuStorageOf(env, { method: 'GET', key }));