melete-ai 0.88.2

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.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +72 -0
  3. package/bin/melete-server.mjs +345 -0
  4. package/bin/melete.mjs +165 -0
  5. package/dist/achievability.d.ts +38 -0
  6. package/dist/achievability.d.ts.map +1 -0
  7. package/dist/achievability.js +135 -0
  8. package/dist/achievability.js.map +1 -0
  9. package/dist/aegis.d.ts +52 -0
  10. package/dist/aegis.d.ts.map +1 -0
  11. package/dist/aegis.js +191 -0
  12. package/dist/aegis.js.map +1 -0
  13. package/dist/arms.d.ts +70 -0
  14. package/dist/arms.d.ts.map +1 -0
  15. package/dist/arms.js +399 -0
  16. package/dist/arms.js.map +1 -0
  17. package/dist/batch.d.ts +30 -0
  18. package/dist/batch.d.ts.map +1 -0
  19. package/dist/batch.js +151 -0
  20. package/dist/batch.js.map +1 -0
  21. package/dist/bench.d.ts +49 -0
  22. package/dist/bench.d.ts.map +1 -0
  23. package/dist/bench.js +124 -0
  24. package/dist/bench.js.map +1 -0
  25. package/dist/certify.d.ts +48 -0
  26. package/dist/certify.d.ts.map +1 -0
  27. package/dist/certify.js +125 -0
  28. package/dist/certify.js.map +1 -0
  29. package/dist/cliff.d.ts +41 -0
  30. package/dist/cliff.d.ts.map +1 -0
  31. package/dist/cliff.js +132 -0
  32. package/dist/cliff.js.map +1 -0
  33. package/dist/confidence.d.ts +38 -0
  34. package/dist/confidence.d.ts.map +1 -0
  35. package/dist/confidence.js +98 -0
  36. package/dist/confidence.js.map +1 -0
  37. package/dist/constrained.d.ts +59 -0
  38. package/dist/constrained.d.ts.map +1 -0
  39. package/dist/constrained.js +191 -0
  40. package/dist/constrained.js.map +1 -0
  41. package/dist/cortex.d.ts +56 -0
  42. package/dist/cortex.d.ts.map +1 -0
  43. package/dist/cortex.js +81 -0
  44. package/dist/cortex.js.map +1 -0
  45. package/dist/costaware.d.ts +49 -0
  46. package/dist/costaware.d.ts.map +1 -0
  47. package/dist/costaware.js +185 -0
  48. package/dist/costaware.js.map +1 -0
  49. package/dist/drift.d.ts +36 -0
  50. package/dist/drift.d.ts.map +1 -0
  51. package/dist/drift.js +157 -0
  52. package/dist/drift.js.map +1 -0
  53. package/dist/efficiency.d.ts +49 -0
  54. package/dist/efficiency.d.ts.map +1 -0
  55. package/dist/efficiency.js +143 -0
  56. package/dist/efficiency.js.map +1 -0
  57. package/dist/engine.d.ts +64 -0
  58. package/dist/engine.d.ts.map +1 -0
  59. package/dist/engine.js +130 -0
  60. package/dist/engine.js.map +1 -0
  61. package/dist/federated.d.ts +38 -0
  62. package/dist/federated.d.ts.map +1 -0
  63. package/dist/federated.js +121 -0
  64. package/dist/federated.js.map +1 -0
  65. package/dist/frontier.d.ts +51 -0
  66. package/dist/frontier.d.ts.map +1 -0
  67. package/dist/frontier.js +117 -0
  68. package/dist/frontier.js.map +1 -0
  69. package/dist/guardian.d.ts +46 -0
  70. package/dist/guardian.d.ts.map +1 -0
  71. package/dist/guardian.js +101 -0
  72. package/dist/guardian.js.map +1 -0
  73. package/dist/index.d.ts +90 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +189 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/interaction.d.ts +44 -0
  78. package/dist/interaction.d.ts.map +1 -0
  79. package/dist/interaction.js +167 -0
  80. package/dist/interaction.js.map +1 -0
  81. package/dist/interactive.d.ts +25 -0
  82. package/dist/interactive.d.ts.map +1 -0
  83. package/dist/interactive.js +75 -0
  84. package/dist/interactive.js.map +1 -0
  85. package/dist/inverse.d.ts +44 -0
  86. package/dist/inverse.d.ts.map +1 -0
  87. package/dist/inverse.js +141 -0
  88. package/dist/inverse.js.map +1 -0
  89. package/dist/ipshield.d.ts +62 -0
  90. package/dist/ipshield.d.ts.map +1 -0
  91. package/dist/ipshield.js +104 -0
  92. package/dist/ipshield.js.map +1 -0
  93. package/dist/journalist.d.ts +56 -0
  94. package/dist/journalist.d.ts.map +1 -0
  95. package/dist/journalist.js +132 -0
  96. package/dist/journalist.js.map +1 -0
  97. package/dist/lineage.d.ts +43 -0
  98. package/dist/lineage.d.ts.map +1 -0
  99. package/dist/lineage.js +112 -0
  100. package/dist/lineage.js.map +1 -0
  101. package/dist/metabrain.d.ts +59 -0
  102. package/dist/metabrain.d.ts.map +1 -0
  103. package/dist/metabrain.js +215 -0
  104. package/dist/metabrain.js.map +1 -0
  105. package/dist/mixedspace.d.ts +61 -0
  106. package/dist/mixedspace.d.ts.map +1 -0
  107. package/dist/mixedspace.js +267 -0
  108. package/dist/mixedspace.js.map +1 -0
  109. package/dist/multiobjective.d.ts +42 -0
  110. package/dist/multiobjective.d.ts.map +1 -0
  111. package/dist/multiobjective.js +123 -0
  112. package/dist/multiobjective.js.map +1 -0
  113. package/dist/noise.d.ts +45 -0
  114. package/dist/noise.d.ts.map +1 -0
  115. package/dist/noise.js +148 -0
  116. package/dist/noise.js.map +1 -0
  117. package/dist/noiserobust.d.ts +71 -0
  118. package/dist/noiserobust.d.ts.map +1 -0
  119. package/dist/noiserobust.js +215 -0
  120. package/dist/noiserobust.js.map +1 -0
  121. package/dist/oracle.d.ts +63 -0
  122. package/dist/oracle.d.ts.map +1 -0
  123. package/dist/oracle.js +106 -0
  124. package/dist/oracle.js.map +1 -0
  125. package/dist/poopt.d.ts +79 -0
  126. package/dist/poopt.d.ts.map +1 -0
  127. package/dist/poopt.js +148 -0
  128. package/dist/poopt.js.map +1 -0
  129. package/dist/portfolio.d.ts +51 -0
  130. package/dist/portfolio.d.ts.map +1 -0
  131. package/dist/portfolio.js +132 -0
  132. package/dist/portfolio.js.map +1 -0
  133. package/dist/prescription.d.ts +57 -0
  134. package/dist/prescription.d.ts.map +1 -0
  135. package/dist/prescription.js +131 -0
  136. package/dist/prescription.js.map +1 -0
  137. package/dist/prime.d.ts +85 -0
  138. package/dist/prime.d.ts.map +1 -0
  139. package/dist/prime.js +157 -0
  140. package/dist/prime.js.map +1 -0
  141. package/dist/provenance.d.ts +77 -0
  142. package/dist/provenance.d.ts.map +1 -0
  143. package/dist/provenance.js +155 -0
  144. package/dist/provenance.js.map +1 -0
  145. package/dist/rashomon.d.ts +40 -0
  146. package/dist/rashomon.d.ts.map +1 -0
  147. package/dist/rashomon.js +93 -0
  148. package/dist/rashomon.js.map +1 -0
  149. package/dist/reliability.d.ts +79 -0
  150. package/dist/reliability.d.ts.map +1 -0
  151. package/dist/reliability.js +197 -0
  152. package/dist/reliability.js.map +1 -0
  153. package/dist/replay.d.ts +62 -0
  154. package/dist/replay.d.ts.map +1 -0
  155. package/dist/replay.js +146 -0
  156. package/dist/replay.js.map +1 -0
  157. package/dist/replicate.d.ts +72 -0
  158. package/dist/replicate.d.ts.map +1 -0
  159. package/dist/replicate.js +103 -0
  160. package/dist/replicate.js.map +1 -0
  161. package/dist/resonance.d.ts +32 -0
  162. package/dist/resonance.d.ts.map +1 -0
  163. package/dist/resonance.js +190 -0
  164. package/dist/resonance.js.map +1 -0
  165. package/dist/sensitivity.d.ts +44 -0
  166. package/dist/sensitivity.d.ts.map +1 -0
  167. package/dist/sensitivity.js +109 -0
  168. package/dist/sensitivity.js.map +1 -0
  169. package/dist/server.d.ts +26 -0
  170. package/dist/server.d.ts.map +1 -0
  171. package/dist/server.js +1410 -0
  172. package/dist/server.js.map +1 -0
  173. package/dist/shape.d.ts +37 -0
  174. package/dist/shape.d.ts.map +1 -0
  175. package/dist/shape.js +170 -0
  176. package/dist/shape.js.map +1 -0
  177. package/dist/sloppiness.d.ts +44 -0
  178. package/dist/sloppiness.d.ts.map +1 -0
  179. package/dist/sloppiness.js +194 -0
  180. package/dist/sloppiness.js.map +1 -0
  181. package/dist/sovereign.d.ts +77 -0
  182. package/dist/sovereign.d.ts.map +1 -0
  183. package/dist/sovereign.js +144 -0
  184. package/dist/sovereign.js.map +1 -0
  185. package/dist/space.d.ts +38 -0
  186. package/dist/space.d.ts.map +1 -0
  187. package/dist/space.js +107 -0
  188. package/dist/space.js.map +1 -0
  189. package/dist/surprise.d.ts +43 -0
  190. package/dist/surprise.d.ts.map +1 -0
  191. package/dist/surprise.js +123 -0
  192. package/dist/surprise.js.map +1 -0
  193. package/dist/territory.d.ts +43 -0
  194. package/dist/territory.d.ts.map +1 -0
  195. package/dist/territory.js +102 -0
  196. package/dist/territory.js.map +1 -0
  197. package/dist/trace.d.ts +58 -0
  198. package/dist/trace.d.ts.map +1 -0
  199. package/dist/trace.js +0 -0
  200. package/dist/trace.js.map +1 -0
  201. package/dist/transfer.d.ts +46 -0
  202. package/dist/transfer.d.ts.map +1 -0
  203. package/dist/transfer.js +112 -0
  204. package/dist/transfer.js.map +1 -0
  205. package/dist/twin.d.ts +41 -0
  206. package/dist/twin.d.ts.map +1 -0
  207. package/dist/twin.js +116 -0
  208. package/dist/twin.js.map +1 -0
  209. package/examples/train.mjs +8 -0
  210. package/examples/tune.mjs +11 -0
  211. package/package.json +56 -0
package/dist/replay.js ADDED
@@ -0,0 +1,146 @@
1
+ /**
2
+ * REPLAY TOKEN — the auditor's time machine. When a regulated lab/bank gets audited, or a system behaves
3
+ * unexpectedly, the worst words are "we can't reproduce how that decision was reached." Melete's engines are
4
+ * fully DETERMINISTIC (seeded; no wall-clock, no randomness), so an analysis is exactly reproducible. The
5
+ * Replay Token captures everything needed to re-derive a verdict — the measured inputs, the goal — plus a
6
+ * per-step hash chain and an Ed25519 signature, in one self-contained, offline artifact.
7
+ *
8
+ * Hand the token to an auditor and they don't have to trust Melete (or you): they re-run it on their own
9
+ * machine and get a BYTE-IDENTICAL verdict, step by step (DISCOVER → DECIDE → DIAGNOSE). If even one input
10
+ * was altered, the signature fails; if the engine ever diverged, the replay names the exact step that
11
+ * differs. "Here is cryptographic proof of exactly how this decision was reached, re-derivable by anyone,
12
+ * forever, with no server."
13
+ *
14
+ * Honest by construction (DIAKRISIS): a Replay Token reproduces MELETE'S OWN analysis/decision from the
15
+ * signed inputs — it is the audit trail of the reasoning, NOT a recording of the customer's production RAM /
16
+ * network / environment (that is a different, kernel-level product). What it proves is real and exact:
17
+ * provenance (these inputs, this result, unaltered) + reproducibility (re-derivable offline, step by step).
18
+ */
19
+ import { createHash, generateKeyPairSync, sign as edSign, verify as edVerify, createPublicKey } from "node:crypto";
20
+ import { sovereignAnalyze } from "./sovereign.js";
21
+ function canonical(o) {
22
+ if (o === null || typeof o !== "object")
23
+ return JSON.stringify(o);
24
+ if (Array.isArray(o))
25
+ return "[" + o.map(canonical).join(",") + "]";
26
+ const keys = Object.keys(o).sort();
27
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canonical(o[k])).join(",") + "}";
28
+ }
29
+ const h = (o) => createHash("sha256").update(canonical(o)).digest("hex");
30
+ /** Derive the deterministic step-chain + verdict hash for a run (the thing replay must reproduce). */
31
+ function derive(obs, space, goal) {
32
+ const v = sovereignAnalyze(obs, space, goal, { keys: FIXED_KEYS, issuedAtMs: 0 }); // fixed keys → deterministic payload
33
+ const { certify, ...payload } = v; // exclude the cert (its key is irrelevant to replay; we hash the payload)
34
+ void certify;
35
+ const steps = [
36
+ { name: "DISCOVER", hash: h(payload.discover) },
37
+ { name: "DECIDE", hash: h(payload.decide) },
38
+ { name: "DIAGNOSE", hash: h(payload.diagnose) },
39
+ ];
40
+ return { steps, verdictHash: h(payload) };
41
+ }
42
+ // a single fixed keypair just for deterministic PAYLOAD derivation inside derive(); the TOKEN itself is
43
+ // signed with the issuer's key (passed to issueReplayToken). Generated once per process.
44
+ const FIXED_KEYS = generateKeyPairSync("ed25519");
45
+ /** Issue a self-contained, signed Replay Token for an analysis run. */
46
+ export function issueReplayToken(obs, space, goal = "maximize", opts = {}) {
47
+ const observations = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value)).map((o) => ({ experiment: o.experiment, value: o.value }));
48
+ const { steps, verdictHash } = derive(observations, space, goal);
49
+ const kp = opts.keys ?? generateKeyPairSync("ed25519");
50
+ const body = { standard: "melete-replay-token/v1", space, goal, observations, steps, verdictHash, issuedAtMs: Math.max(0, Math.floor(opts.issuedAtMs ?? 0)) };
51
+ const signature = edSign(null, Buffer.from(h(body), "hex"), kp.privateKey).toString("base64");
52
+ return { ...body, signature, publicKeyPem: kp.publicKey.export({ type: "spki", format: "pem" }).toString(), algo: "ed25519+sha256" };
53
+ }
54
+ /** Re-run a Replay Token OFFLINE: check its signature, then deterministically reproduce the verdict step-by-step. */
55
+ export function replayToken(token) {
56
+ try {
57
+ if (!token || token.standard !== "melete-replay-token/v1")
58
+ return { signatureValid: false, reproduced: false, firstDivergingStep: null, reason: "not a melete-replay-token/v1" };
59
+ // 1) signature integrity over the token body (inputs + expected hashes)
60
+ const { signature, publicKeyPem, algo, ...body } = token;
61
+ void algo;
62
+ const sigOk = edVerify(null, Buffer.from(h(body), "hex"), createPublicKey(publicKeyPem), Buffer.from(signature, "base64"));
63
+ if (!sigOk)
64
+ return { signatureValid: false, reproduced: false, firstDivergingStep: null, reason: "signature invalid — the token (inputs or expected result) was altered" };
65
+ // 2) deterministic re-derivation from the signed inputs
66
+ const re = derive(token.observations, token.space, token.goal);
67
+ let diverge = null;
68
+ for (let i = 0; i < token.steps.length; i++) {
69
+ if (!re.steps[i] || re.steps[i].hash !== token.steps[i].hash) {
70
+ diverge = token.steps[i].name;
71
+ break;
72
+ }
73
+ }
74
+ const reproduced = diverge === null && re.verdictHash === token.verdictHash;
75
+ return { signatureValid: true, reproduced, firstDivergingStep: diverge, reason: reproduced ? "reproduced byte-identically, step by step — offline, no server" : `diverged at step ${diverge ?? "(verdict)"}` };
76
+ }
77
+ catch (e) {
78
+ return { signatureValid: false, reproduced: false, firstDivergingStep: null, reason: "replay error: " + e.message.slice(0, 100) };
79
+ }
80
+ }
81
+ // ── gauntlet ──────────────────────────────────────────────────────────────────
82
+ import { lcg } from "./space.js";
83
+ export function replayGauntlet() {
84
+ const space = { dims: [{ name: "x", type: "real", min: 0, max: 1 }, { name: "y", type: "real", min: 0, max: 1 }] };
85
+ const f = (x, y) => Math.exp(-(((x - 0.4) ** 2) + ((y - 0.6) ** 2)) / 0.2);
86
+ const rnd = lcg(7);
87
+ const obs = [];
88
+ for (let i = 0; i < 50; i++) {
89
+ const x = rnd(), y = rnd();
90
+ obs.push({ experiment: { x, y }, value: f(x, y) });
91
+ }
92
+ const kp = generateKeyPairSync("ed25519");
93
+ const tok = issueReplayToken(obs, space, "maximize", { keys: kp, issuedAtMs: 1000 });
94
+ const wellFormed = tok.standard === "melete-replay-token/v1" && tok.steps.length === 3 && tok.steps.map((s) => s.name).join(",") === "DISCOVER,DECIDE,DIAGNOSE" && !!tok.verdictHash && !!tok.signature;
95
+ const r = replayToken(tok);
96
+ const replaysIdentical = r.signatureValid && r.reproduced && r.firstDivergingStep === null;
97
+ // TAMPER an input observation → signature must fail
98
+ const t1 = JSON.parse(JSON.stringify(tok));
99
+ t1.observations[0].value = 999;
100
+ const inputTamperCaught = replayToken(t1).signatureValid === false;
101
+ // TAMPER the expected verdictHash (and re-sign with a fresh key so the signature passes) → replay must
102
+ // re-derive the TRUE result and report it does NOT match the tampered expectation
103
+ const t2body = JSON.parse(JSON.stringify(tok));
104
+ t2body.verdictHash = "deadbeef".repeat(8);
105
+ const kp2 = generateKeyPairSync("ed25519");
106
+ const { signature: _s, publicKeyPem: _p, algo: _a, ...b2 } = t2body;
107
+ void _s;
108
+ void _p;
109
+ void _a;
110
+ t2body.signature = edSign(null, Buffer.from(h(b2), "hex"), kp2.privateKey).toString("base64");
111
+ t2body.publicKeyPem = kp2.publicKey.export({ type: "spki", format: "pem" }).toString();
112
+ const r2 = replayToken(t2body);
113
+ const forgedResultCaught = r2.signatureValid === true && r2.reproduced === false;
114
+ // STEP-BY-STEP divergence is named: corrupt the DISCOVER expectation specifically
115
+ const t3 = JSON.parse(JSON.stringify(tok));
116
+ t3.steps[0].hash = "0".repeat(64);
117
+ const { signature: _s3, publicKeyPem: _p3, algo: _a3, ...b3 } = t3;
118
+ void _s3;
119
+ void _p3;
120
+ void _a3;
121
+ const kp3 = generateKeyPairSync("ed25519");
122
+ t3.signature = edSign(null, Buffer.from(h(b3), "hex"), kp3.privateKey).toString("base64");
123
+ t3.publicKeyPem = kp3.publicKey.export({ type: "spki", format: "pem" }).toString();
124
+ const namesStep = replayToken(t3).firstDivergingStep === "DISCOVER";
125
+ const det = JSON.stringify(issueReplayToken(obs, space, "maximize", { keys: kp, issuedAtMs: 1000 })) === JSON.stringify(tok);
126
+ const total = (() => { try {
127
+ replayToken(null);
128
+ issueReplayToken([], space);
129
+ replayToken({ standard: "x" });
130
+ return true;
131
+ }
132
+ catch {
133
+ return false;
134
+ } })();
135
+ const checks = [
136
+ { name: "ISSUES-SIGNED-TOKEN", pass: wellFormed, detail: "self-contained token: inputs + 3-step hash chain + verdict hash + Ed25519 signature" },
137
+ { name: "REPLAYS-BYTE-IDENTICAL", pass: replaysIdentical, detail: `re-derived offline → ${r.reason}` },
138
+ { name: "INPUT-TAMPER-CAUGHT", pass: inputTamperCaught, detail: "altering a measured input breaks the signature" },
139
+ { name: "FORGED-RESULT-CAUGHT", pass: forgedResultCaught, detail: "a re-signed token with a faked result fails to reproduce" },
140
+ { name: "NAMES-DIVERGING-STEP", pass: namesStep, detail: "replay points to the exact step that differs (DISCOVER)" },
141
+ { name: "DETERMINISTIC", pass: det, detail: "same inputs + keys → byte-identical token" },
142
+ { name: "TOTAL", pass: total, detail: "null / empty / malformed never throws" },
143
+ ];
144
+ return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
145
+ }
146
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * REPLICATION ATTESTATION — the gem that closes the replication crisis for machine discovery, and makes
3
+ * discoveries trustworthy across a multiverse of agents.
4
+ *
5
+ * A signed discovery TRACE proves the PATH (who searched, in what order, unaltered). It does NOT, by
6
+ * itself, prove the SCIENCE reproduces — that the claimed best really scores what it claims. In a world of
7
+ * millions of agents each running expensive experiments, the load-bearing question is: can agent B TRUST
8
+ * agent A's discovery without re-running A's entire 40-experiment search?
9
+ *
10
+ * Yes — cheaply. `replicate` takes a published discovery (its claimed best + a sample of its path), re-
11
+ * evaluates just those few points against an oracle (B's own, or a fresh run of the same process), and
12
+ * checks the measured scores match the claimed ones within tolerance. Re-running the BEST point alone (1
13
+ * experiment) verifies a 40-experiment discovery — 40× cheaper trust. The verdict is wrapped in a SIGNED
14
+ * REPLICATION CERTIFICATE anyone can verify offline.
15
+ *
16
+ * ★HONEST (DIAKRISIS): replication checks that the recorded points reproduce on re-evaluation — it catches
17
+ * fabricated / drifted / p-hacked claims (the common failure). It does NOT prove global optimality, and
18
+ * for a genuinely noisy oracle it certifies "within tolerance", not bit-exact. It is the strongest cheap,
19
+ * portable trust signal between agents — not an omniscience claim.
20
+ */
21
+ import { type Experiment } from "./space.js";
22
+ import { type Oracle } from "./oracle.js";
23
+ import { Tracer, type SignedTrace } from "./trace.js";
24
+ export interface Claim {
25
+ best: {
26
+ experiment: Experiment;
27
+ value: number;
28
+ };
29
+ path: Array<{
30
+ experiment: Experiment;
31
+ value: number;
32
+ }>;
33
+ }
34
+ export interface ReplicationCheck {
35
+ experiment: Experiment;
36
+ claimed: number;
37
+ measured: number;
38
+ absErr: number;
39
+ relErr: number;
40
+ match: boolean;
41
+ }
42
+ export interface ReplicationReport {
43
+ replicates: boolean;
44
+ goal: "maximize" | "minimize";
45
+ best: ReplicationCheck;
46
+ samples: ReplicationCheck[];
47
+ reEvaluations: number;
48
+ tolerance: number;
49
+ matchRate: number;
50
+ summary: string;
51
+ }
52
+ /** Pull the claimed best + the path (experiment→value) out of a signed discovery trace. */
53
+ export declare function extractClaim(trace: SignedTrace): Claim;
54
+ /** Re-evaluate a discovery's best + a sample of its path against an oracle; certify whether it replicates. */
55
+ export declare function replicate(opts: {
56
+ claim: Claim;
57
+ oracle: Oracle;
58
+ samples?: number;
59
+ tolerance?: number;
60
+ goal?: "maximize" | "minimize";
61
+ }): Promise<ReplicationReport>;
62
+ /** Wrap a replication report in a signed certificate that any third party verifies offline. */
63
+ export declare function certifyReplication(report: ReplicationReport, tracer?: Tracer): SignedTrace;
64
+ export declare function replicateGauntlet(): Promise<{
65
+ score: 0 | 100;
66
+ checks: Array<{
67
+ name: string;
68
+ pass: boolean;
69
+ detail: string;
70
+ }>;
71
+ }>;
72
+ //# sourceMappingURL=replicate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAe,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,KAAK;IAAG,IAAI,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AAClI,MAAM,WAAW,gBAAgB;IAAG,UAAU,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AAC/I,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IACnD,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IACpD,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAC9E;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAStD;AAQD,8GAA8G;AAC9G,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,CAAA;CAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiBxK;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAI1F;AAGD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6BrI"}
@@ -0,0 +1,103 @@
1
+ import { Tracer, verifyTrace } from "./trace.js";
2
+ /** Pull the claimed best + the path (experiment→value) out of a signed discovery trace. */
3
+ export function extractClaim(trace) {
4
+ const path = [];
5
+ let best = null;
6
+ for (const f of trace?.frames ?? []) {
7
+ const p = f.payload;
8
+ if (f.kind === "observation" && p && p["experiment"])
9
+ path.push({ experiment: p["experiment"], value: Number(p["value"]) });
10
+ if (f.kind === "result" && p && p["phase"] === "final" && p["best"]) {
11
+ const b = p["best"];
12
+ best = { experiment: b.experiment, value: Number(b.value) };
13
+ }
14
+ }
15
+ if (!best && path.length)
16
+ best = path.reduce((a, b) => (b.value > a.value ? b : a), path[0]);
17
+ return { best: best ?? { experiment: {}, value: 0 }, path };
18
+ }
19
+ const checkPoint = async (oracle, e, claimed, tol) => {
20
+ const measured = Number(await oracle(e));
21
+ const absErr = Math.abs(measured - claimed);
22
+ const relErr = absErr / (Math.abs(claimed) || 1);
23
+ return { experiment: e, claimed, measured, absErr, relErr, match: absErr <= tol || relErr <= tol };
24
+ };
25
+ /** Re-evaluate a discovery's best + a sample of its path against an oracle; certify whether it replicates. */
26
+ export async function replicate(opts) {
27
+ const goal = opts.goal ?? "maximize";
28
+ const tol = opts.tolerance ?? 1e-3;
29
+ const nSamples = Math.max(0, opts.samples ?? 3);
30
+ const claim = opts.claim ?? { best: { experiment: {}, value: 0 }, path: [] };
31
+ const best = await checkPoint(opts.oracle, claim.best.experiment, claim.best.value, tol);
32
+ // sample evenly across the path (deterministic — no RNG), excluding the best if present
33
+ const pool = claim.path.filter((p) => JSON.stringify(p.experiment) !== JSON.stringify(claim.best.experiment));
34
+ const picks = [];
35
+ if (pool.length && nSamples) {
36
+ const step = pool.length / Math.min(nSamples, pool.length);
37
+ for (let i = 0; i < Math.min(nSamples, pool.length); i++)
38
+ picks.push(pool[Math.floor(i * step)]);
39
+ }
40
+ const samples = [];
41
+ for (const p of picks)
42
+ samples.push(await checkPoint(opts.oracle, p.experiment, p.value, tol));
43
+ const allChecks = [best, ...samples];
44
+ const matched = allChecks.filter((c) => c.match).length;
45
+ const matchRate = allChecks.length ? matched / allChecks.length : 0;
46
+ const replicates = best.match && samples.every((s) => s.match);
47
+ const summary = replicates
48
+ ? `REPLICATES — best re-scored ${best.measured} (claimed ${best.claimed}); ${samples.length}/${samples.length} sampled points matched, in ${allChecks.length} re-evaluations.`
49
+ : `DOES NOT REPLICATE — ${best.match ? "" : `best claimed ${best.claimed} but re-scored ${best.measured}; `}${matched}/${allChecks.length} points matched (within tol ${tol}).`;
50
+ return { replicates, goal, best, samples, reEvaluations: allChecks.length, tolerance: tol, matchRate, summary };
51
+ }
52
+ /** Wrap a replication report in a signed certificate that any third party verifies offline. */
53
+ export function certifyReplication(report, tracer) {
54
+ const t = tracer ?? new Tracer();
55
+ t.record("result", { phase: "replication", replicates: report.replicates, best: report.best, samples: report.samples, reEvaluations: report.reEvaluations, tolerance: report.tolerance, matchRate: report.matchRate });
56
+ return t.export();
57
+ }
58
+ // ── gauntlet ──────────────────────────────────────────────────────────────────
59
+ export async function replicateGauntlet() {
60
+ const f = (e) => Math.exp(-((e["x"] - 7) ** 2) / 2); // true process, deterministic
61
+ const honest = { best: { experiment: { x: 7 }, value: f({ x: 7 }) }, path: [{ experiment: { x: 3 }, value: f({ x: 3 }) }, { experiment: { x: 5 }, value: f({ x: 5 }) }, { experiment: { x: 7 }, value: f({ x: 7 }) }] };
62
+ const r1 = await replicate({ claim: honest, oracle: f, samples: 2 });
63
+ const honestOK = r1.replicates === true && r1.best.match && r1.reEvaluations >= 1;
64
+ // a FABRICATED claim — best.value inflated → must fail
65
+ const lie = { best: { experiment: { x: 7 }, value: 9.9 }, path: honest.path };
66
+ const r2 = await replicate({ claim: lie, oracle: f, samples: 1 });
67
+ const catchesLie = r2.replicates === false && !r2.best.match;
68
+ // cheap trust: re-running just the best (samples 0) still certifies the headline result
69
+ const r3 = await replicate({ claim: honest, oracle: f, samples: 0 });
70
+ const cheap = r3.replicates === true && r3.reEvaluations === 1;
71
+ // signed cert verifies offline; tampering breaks it
72
+ const cert = certifyReplication(r1);
73
+ const certOK = verifyTrace(cert).ok === true;
74
+ const tampered = JSON.parse(JSON.stringify(cert));
75
+ const fr = tampered.frames.find((x) => x.kind === "result" && x.payload["phase"] === "replication");
76
+ if (fr)
77
+ fr.payload["replicates"] = !r1.replicates;
78
+ const tamperCaught = verifyTrace(tampered).ok === false;
79
+ // extract a claim from a trace
80
+ const tr = new Tracer();
81
+ tr.record("observation", { experiment: { x: 7 }, value: 1 });
82
+ tr.record("result", { phase: "final", best: { experiment: { x: 7 }, value: 1 } });
83
+ const ex = extractClaim(tr.export());
84
+ const extractOK = ex.best.value === 1 && ex.path.length === 1;
85
+ const total = await (async () => { try {
86
+ await replicate({ claim: null, oracle: f });
87
+ extractClaim(null);
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ } })();
93
+ const checks = [
94
+ { name: "HONEST-REPLICATES", pass: honestOK, detail: "a real discovery re-evaluates to its claimed scores → REPLICATES" },
95
+ { name: "CATCHES-FABRICATION", pass: catchesLie, detail: "an inflated/fabricated best fails replication (catches p-hacking / faked claims)" },
96
+ { name: "CHEAP-CROSS-AGENT-TRUST", pass: cheap, detail: "re-running just the best (1 experiment) certifies a whole multi-experiment discovery" },
97
+ { name: "SIGNED-CERTIFICATE", pass: certOK && tamperCaught, detail: "the replication verdict is Ed25519-signed + offline-verifiable; tampering is caught" },
98
+ { name: "EXTRACT-FROM-TRACE", pass: extractOK, detail: "a published discovery trace yields the claim to replicate (cross-agent)" },
99
+ { name: "TOTAL", pass: total, detail: "null/garbage never throws" },
100
+ ];
101
+ return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
102
+ }
103
+ //# sourceMappingURL=replicate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replicate.js","sourceRoot":"","sources":["../src/replicate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type DiscoveryResult, type DiscoverOpts } from "./engine.js";
2
+ export interface ResonanceOpts extends DiscoverOpts {
3
+ rho?: number;
4
+ wavenumber0?: number;
5
+ sigma?: number;
6
+ lambda?: number;
7
+ }
8
+ /** Discover via the Melete Resonance Field. Same contract as engine.discover — a drop-in alternative engine. */
9
+ export declare function resonanceDiscover(opts: ResonanceOpts): Promise<DiscoveryResult>;
10
+ export interface Showdown {
11
+ resonance: number | null;
12
+ bayes: number | null;
13
+ random: number;
14
+ grid: number | null;
15
+ target: number;
16
+ budget: number;
17
+ winner: string;
18
+ }
19
+ export declare function resonanceVsBayes(opts?: {
20
+ budget?: number;
21
+ target?: number;
22
+ seeds?: number;
23
+ }): Promise<Showdown>;
24
+ export declare function resonanceGauntlet(): Promise<{
25
+ score: 0 | 100;
26
+ checks: Array<{
27
+ name: string;
28
+ pass: boolean;
29
+ detail: string;
30
+ }>;
31
+ }>;
32
+ //# sourceMappingURL=resonance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resonance.d.ts","sourceRoot":"","sources":["../src/resonance.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA0C,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB9G,MAAM,WAAW,aAAc,SAAQ,YAAY;IAAG,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAE3H,gHAAgH;AAChH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAiDrF;AAMD,MAAM,WAAW,QAAQ;IAAG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAWjK,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAUrH;AASD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmBrI"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * MELETE RESONANCE FIELD (MRF) — a NON-Bayesian, deterministic, wave-interference optimizer.
3
+ *
4
+ * ★HONEST FIRST (DIAKRISIS): this is NOT quantum hardware, it does NOT "disrupt quantum", and it does not
5
+ * shake mathematics. It is an ORIGINAL CLASSICAL heuristic, quantum-INSPIRED (interference, constructive/
6
+ * destructive superposition). Its value is empirical and MEASURED, not asserted — see resonanceVsBayes().
7
+ *
8
+ * The mechanism (genuinely different from Bayesian optimisation — no posterior, no acquisition function):
9
+ * treat every past experiment as a COHERENT WAVE SOURCE. A high-value observation radiates a POSITIVE
10
+ * amplitude (it attracts the next probe); a low-value one radiates a NEGATIVE amplitude (destructive — it
11
+ * repels). Each source's wave is modulated by an interference term cos(k·d): the field doesn't only peak
12
+ * AT a good point, it RE-PEAKS on a "shell" at distance ≈ 2π/k around it — and when the shells of several
13
+ * good sources OVERLAP, they constructively super-peak in the empty space BETWEEN known optima. So MRF
14
+ * proposes the geometric point "where the good evidence conspires", which a mean+uncertainty acquisition
15
+ * never reasons about. A frequency anneal (k high→low) sweeps from fine structure to broad exploitation.
16
+ *
17
+ * field(x) = Σ_i ampᵢ · exp(-dᵢ²/2σ²) · (1 + ρ·cos(k·dᵢ)) + λ · (distance to nearest source)
18
+ * ampᵢ = 2·rank_fractionᵢ − 1 ∈ [−1, +1] (best obs → +1 attract, worst → −1 repel; rank-based = scale-free)
19
+ *
20
+ * Deterministic + seeded ⇒ reproducible ⇒ its signed discovery trace is meaningful.
21
+ */
22
+ import { lcg, gridCandidates, randomCandidates, localCandidates, dist2 } from "./space.js";
23
+ const key = (e) => JSON.stringify(e);
24
+ /** Rank-normalised amplitudes in [-1,1] (best→+1 attract, worst→-1 repel) — scale-free, outlier-robust. */
25
+ function amplitudes(obs, goal) {
26
+ const n = obs.length;
27
+ if (n === 0)
28
+ return [];
29
+ if (n === 1)
30
+ return [1];
31
+ const idx = obs.map((_, i) => i).sort((a, b) => goal === "maximize" ? obs[a].value - obs[b].value : obs[b].value - obs[a].value);
32
+ const amp = new Array(n);
33
+ // rank-normalised amplitude in [0,1] (best→1, worst→0): scale-free + outlier-robust. Good points radiate
34
+ // a strong positive wave; weak points contribute little. (A signed [-1,1] repel variant destabilised the
35
+ // search on single-peak surfaces — measured — so the stable engine uses non-negative amplitudes.)
36
+ idx.forEach((origIdx, rank) => { amp[origIdx] = rank / (n - 1); });
37
+ return amp;
38
+ }
39
+ /** Discover via the Melete Resonance Field. Same contract as engine.discover — a drop-in alternative engine. */
40
+ export async function resonanceDiscover(opts) {
41
+ const space = opts.space;
42
+ const goal = opts.goal ?? "maximize";
43
+ const budget = Math.max(1, opts.budget | 0);
44
+ const seed = opts.seed ?? 1;
45
+ const rnd = lcg(seed);
46
+ const pool = Math.max(64, opts.candidatePool ?? 800);
47
+ const rho = opts.rho ?? 0.25, k0 = opts.wavenumber0 ?? 5.0, sigma = opts.sigma ?? 0.06, lambda = opts.lambda ?? 1.0;
48
+ const better = (a, b) => goal === "maximize" ? a > b : a < b;
49
+ const obs = [];
50
+ const seen = new Set();
51
+ const history = [];
52
+ const evalExp = async (e) => { const v = Number(await opts.oracle(e)); return Number.isFinite(v) ? v : (goal === "maximize" ? -1e18 : 1e18); };
53
+ const record = async (e, acq, k, rationale) => {
54
+ const v = await evalExp(e);
55
+ obs.push({ experiment: e, value: v });
56
+ seen.add(key(e));
57
+ const step = { n: obs.length, experiment: e, value: v, acquisition: acq, kappa: k, rationale };
58
+ history.push(step);
59
+ if (opts.onStep)
60
+ await opts.onStep(step);
61
+ return obs.reduce((a, b) => better(b.value, a.value) ? b : a);
62
+ };
63
+ const perDim = space.dims.length <= 2 ? 3 : 2;
64
+ for (const e of gridCandidates(space, perDim).slice(0, Math.max(1, Math.min(budget, space.dims.length <= 2 ? 9 : 8)))) {
65
+ if (obs.length >= budget)
66
+ break;
67
+ if (seen.has(key(e)))
68
+ continue;
69
+ await record(e, 0, k0, "seed: design-of-experiments grid point");
70
+ }
71
+ let best = obs.length ? obs.reduce((a, b) => better(b.value, a.value) ? b : a) : { experiment: {}, value: goal === "maximize" ? -Infinity : Infinity };
72
+ for (let t = obs.length; t < budget; t++) {
73
+ if (opts.target != null && better(best.value, opts.target))
74
+ break;
75
+ const amp = amplitudes(obs, goal);
76
+ const progress = (t - obs.length + 1) / Math.max(1, budget - obs.length);
77
+ const k = k0 * Math.exp(-progress * 2.0); // frequency anneal: fine → broad
78
+ const radius = 0.25 * Math.exp(-progress * 2.5); // shrinking local-search ball
79
+ // dense grid (covers the true optimum) + local cloud around the best (sub-grid refinement) + some random
80
+ const perDim = Math.max(4, Math.min(60, Math.round(Math.pow(pool, 1 / Math.max(1, space.dims.length)))));
81
+ const candidates = [...gridCandidates(space, perDim, pool * 2), ...localCandidates(space, best.experiment, Math.ceil(pool / 3), Math.max(0.02, radius), rnd), ...randomCandidates(space, Math.ceil(pool / 4), rnd)];
82
+ let pick = null, pf = -Infinity;
83
+ for (const c of candidates) {
84
+ if (seen.has(key(c)))
85
+ continue;
86
+ let field = 0, nearest = Infinity;
87
+ for (let i = 0; i < obs.length; i++) {
88
+ const d = Math.sqrt(dist2(space, c, obs[i].experiment));
89
+ field += amp[i] * Math.exp(-(d * d) / (2 * sigma * sigma)) * (1 + rho * Math.cos(k * d));
90
+ if (d < nearest)
91
+ nearest = d;
92
+ }
93
+ const score = field + lambda * Math.exp(-progress * 3) * nearest; // interference field + decaying exploration (explore early, exploit late)
94
+ if (score > pf) {
95
+ pf = score;
96
+ pick = c;
97
+ }
98
+ }
99
+ if (!pick)
100
+ break;
101
+ best = await record(pick, pf, k, `resonance field=${pf.toFixed(3)} (k=${k.toFixed(2)}, interference of ${obs.length} sources)`);
102
+ }
103
+ const converged = opts.target != null ? better(best.value, opts.target) || Math.abs(best.value - opts.target) < 1e-9 : true;
104
+ return { best, history, evaluations: obs.length, converged, goal };
105
+ }
106
+ // ── head-to-head: MRF vs Bayesian-lite vs random vs grid (measured, not claimed) ───────────────
107
+ import { discover } from "./engine.js";
108
+ import { multimodal, benchSpace } from "./bench.js";
109
+ function randomTo(target, budget, seeds) {
110
+ let sum = 0, c = 0;
111
+ for (let s = 1; s <= seeds; s++) {
112
+ const rnd = lcg(s * 7919);
113
+ let best = -Infinity, found = null;
114
+ for (let t = 0; t < budget; t++) {
115
+ const e = { x: 10 * rnd(), y: 10 * rnd() };
116
+ const v = multimodal(e);
117
+ if (v > best)
118
+ best = v;
119
+ if (best >= target) {
120
+ found = t + 1;
121
+ break;
122
+ }
123
+ }
124
+ if (found) {
125
+ sum += found;
126
+ c++;
127
+ }
128
+ }
129
+ return c ? Math.round((sum / c) * 10) / 10 : budget;
130
+ }
131
+ function gridTo(target, budget) {
132
+ const n = Math.floor(Math.sqrt(budget));
133
+ const cs = gridCandidates(benchSpace, n);
134
+ let best = -Infinity;
135
+ for (let i = 0; i < cs.length && i < budget; i++) {
136
+ const v = multimodal(cs[i]);
137
+ if (v > best)
138
+ best = v;
139
+ if (best >= target)
140
+ return i + 1;
141
+ }
142
+ return null;
143
+ }
144
+ export async function resonanceVsBayes(opts) {
145
+ const budget = opts?.budget ?? 150, target = opts?.target ?? 0.99, seeds = opts?.seeds ?? 30;
146
+ const mrf = await resonanceDiscover({ space: benchSpace, oracle: (e) => multimodal(e), budget, seed: 7, goal: "maximize", target });
147
+ const bo = await discover({ space: benchSpace, oracle: (e) => multimodal(e), budget, seed: 7, goal: "maximize", target });
148
+ const resonance = mrf.best.value >= target ? mrf.evaluations : null;
149
+ const bayes = bo.best.value >= target ? bo.evaluations : null;
150
+ const random = randomTo(target, budget, seeds);
151
+ const grid = gridTo(target, budget);
152
+ const scores = [["resonance", resonance ?? budget * 2], ["bayes", bayes ?? budget * 2], ["random", random], ["grid", grid ?? budget * 2]];
153
+ scores.sort((a, b) => a[1] - b[1]);
154
+ return { resonance, bayes, random, grid, target, budget, winner: scores[0][0] };
155
+ }
156
+ // ── gauntlet ──────────────────────────────────────────────────────────────────
157
+ // ★HONEST STATUS (DIAKRISIS): the Resonance Field is an EXPERIMENTAL, novel, non-Bayesian engine. It runs
158
+ // deterministically and is a genuinely original mechanism — but MEASURED head-to-head it does NOT beat the
159
+ // Bayesian-lite core engine on smooth single-peak surfaces (its greedy interference attractor escapes a
160
+ // bad cold-start slower than UCB exploration). It is shipped, clearly labelled, as open research — NOT as a
161
+ // breakthrough. The gauntlet therefore asserts only what is TRUE: it runs, it is deterministic, its
162
+ // amplitudes are correct, and the head-to-head executes and is reported honestly.
163
+ export async function resonanceGauntlet() {
164
+ const r = await resonanceDiscover({ space: benchSpace, oracle: (e) => multimodal(e), budget: 60, seed: 7, goal: "maximize" });
165
+ const runs = Number.isFinite(r.best.value) && r.evaluations <= 60 && r.history.length === r.evaluations;
166
+ const a = await resonanceDiscover({ space: benchSpace, oracle: (e) => multimodal(e), budget: 60, seed: 7, goal: "maximize" });
167
+ const b = await resonanceDiscover({ space: benchSpace, oracle: (e) => multimodal(e), budget: 60, seed: 7, goal: "maximize" });
168
+ const deterministic = JSON.stringify(a.best) === JSON.stringify(b.best);
169
+ const amps = amplitudes([{ experiment: {}, value: 1 }, { experiment: {}, value: 5 }, { experiment: {}, value: 3 }], "maximize");
170
+ const ampsOK = amps.length === 3 && Math.max(...amps) === 1 && Math.min(...amps) === 0; // best→1, worst→0
171
+ const sd = await resonanceVsBayes({ budget: 150, target: 0.99, seeds: 10 });
172
+ const showdownHonest = ["resonance", "bayes", "random", "grid"].includes(sd.winner); // executes + reports a real winner
173
+ const total = (() => { try {
174
+ amplitudes([], "maximize");
175
+ amplitudes([{ experiment: {}, value: 1 }], "maximize");
176
+ return true;
177
+ }
178
+ catch {
179
+ return false;
180
+ } })();
181
+ const checks = [
182
+ { name: "RUNS", pass: runs, detail: `runs deterministically within budget (best=${r.best.value.toFixed(3)})` },
183
+ { name: "DETERMINISTIC", pass: deterministic, detail: "same seed → identical discovery (reproducible)" },
184
+ { name: "AMPLITUDES", pass: ampsOK, detail: "rank-normalised amplitudes: best→1, worst→0" },
185
+ { name: "HONEST-SHOWDOWN", pass: showdownHonest, detail: `head-to-head executes + reports winner=${sd.winner} (currently the Bayesian core — stated honestly)` },
186
+ { name: "TOTAL", pass: total, detail: "amplitudes handle 0 and 1 observation without throwing" },
187
+ ];
188
+ return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
189
+ }
190
+ //# sourceMappingURL=resonance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resonance.js","sourceRoot":"","sources":["../src/resonance.ts"],"names":[],"mappings":"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"}