@metaharness/darwin 0.1.0 → 0.2.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.
Files changed (69) hide show
  1. package/README.md +113 -19
  2. package/dist/archive.d.ts +15 -0
  3. package/dist/archive.d.ts.map +1 -1
  4. package/dist/archive.js +41 -0
  5. package/dist/archive.js.map +1 -1
  6. package/dist/bench/promotion.d.ts.map +1 -1
  7. package/dist/bench/promotion.js +1 -0
  8. package/dist/bench/promotion.js.map +1 -1
  9. package/dist/bench/stats.d.ts +14 -0
  10. package/dist/bench/stats.d.ts.map +1 -1
  11. package/dist/bench/stats.js +38 -2
  12. package/dist/bench/stats.js.map +1 -1
  13. package/dist/bench/types.d.ts +4 -0
  14. package/dist/bench/types.d.ts.map +1 -1
  15. package/dist/clade.d.ts +26 -0
  16. package/dist/clade.d.ts.map +1 -0
  17. package/dist/clade.js +115 -0
  18. package/dist/clade.js.map +1 -0
  19. package/dist/cli.js +34 -1
  20. package/dist/cli.js.map +1 -1
  21. package/dist/curriculum.d.ts +19 -0
  22. package/dist/curriculum.d.ts.map +1 -0
  23. package/dist/curriculum.js +48 -0
  24. package/dist/curriculum.js.map +1 -0
  25. package/dist/epistasis.d.ts +40 -0
  26. package/dist/epistasis.d.ts.map +1 -0
  27. package/dist/epistasis.js +88 -0
  28. package/dist/epistasis.js.map +1 -0
  29. package/dist/evolve.d.ts +9 -1
  30. package/dist/evolve.d.ts.map +1 -1
  31. package/dist/evolve.js +314 -9
  32. package/dist/evolve.js.map +1 -1
  33. package/dist/index.d.ts +8 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +9 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/mock-sandbox.d.ts +58 -0
  38. package/dist/mock-sandbox.d.ts.map +1 -0
  39. package/dist/mock-sandbox.js +119 -0
  40. package/dist/mock-sandbox.js.map +1 -0
  41. package/dist/mutator.d.ts +44 -2
  42. package/dist/mutator.d.ts.map +1 -1
  43. package/dist/mutator.js +100 -7
  44. package/dist/mutator.js.map +1 -1
  45. package/dist/openrouter-mutator.d.ts.map +1 -1
  46. package/dist/openrouter-mutator.js +5 -2
  47. package/dist/openrouter-mutator.js.map +1 -1
  48. package/dist/pareto.d.ts +7 -0
  49. package/dist/pareto.d.ts.map +1 -0
  50. package/dist/pareto.js +46 -0
  51. package/dist/pareto.js.map +1 -0
  52. package/dist/phenotype.d.ts +83 -0
  53. package/dist/phenotype.d.ts.map +1 -0
  54. package/dist/phenotype.js +189 -0
  55. package/dist/phenotype.js.map +1 -0
  56. package/dist/templates.d.ts.map +1 -1
  57. package/dist/templates.js +6 -1
  58. package/dist/templates.js.map +1 -1
  59. package/dist/tier2-driver.d.ts +10 -0
  60. package/dist/tier2-driver.d.ts.map +1 -0
  61. package/dist/tier2-driver.js +62 -0
  62. package/dist/tier2-driver.js.map +1 -0
  63. package/dist/tier2-sandbox.d.ts +18 -0
  64. package/dist/tier2-sandbox.d.ts.map +1 -0
  65. package/dist/tier2-sandbox.js +91 -0
  66. package/dist/tier2-sandbox.js.map +1 -0
  67. package/dist/types.d.ts +99 -0
  68. package/dist/types.d.ts.map +1 -1
  69. package/package.json +10 -7
package/README.md CHANGED
@@ -1,17 +1,26 @@
1
1
  # @metaharness/darwin
2
2
 
3
- > Darwin Mode **the model is frozen; the harness evolves.**
4
-
5
- Bounded, empirical, population-based self-improvement of an agent harness
6
- (ADR-070…075). "Self-improving agents" is widely misread as "the model trains
7
- itself." Darwin Mode ships the practical version: an agent **modifies its own
8
- harness**, runs benchmarks in a sandbox, keeps the variants that *measurably*
9
- improve, and builds an **archive of successful descendants**. The foundation
10
- model never changes what evolves is the operating system around it (planner,
11
- context builder, reviewer, retry/tool/memory/score policy). This follows the
12
- **Darwin Gödel Machine** lineage: iteratively mutate the source of a coding
13
- agent, then *empirically validate* each variant — no weight updates, just a
14
- population, a benchmark, and an archive.
3
+ > **An LLM supercharger and cost optimizer.** Keep your model frozen evolve the
4
+ > harness around it so a *cheap* model performs like an expensive one, for a fraction
5
+ > of the cost.
6
+
7
+ Darwin Mode makes the LLM you already use **measurably better and cheaper** by
8
+ evolving the *operating system around it* planner, context builder, reviewer,
9
+ retry/tool/memory/score policy instead of paying for a bigger model. It mutates one
10
+ surface at a time, tests each change in a sandbox, and keeps only what *measurably*
11
+ improves, building an archive of successful descendants. No weight updates, no
12
+ fine-tuning just a population, a benchmark, and an archive.
13
+
14
+ **Why it pays off (measured, not marketing):**
15
+ - **Cheap beats frontier.** On a 15-model × 6-language execution benchmark, DeepSeek-V3
16
+ ($0.4/Mtok) tops quality-per-dollar — and the harness, not the model, is the lever (ADR-085).
17
+ - **Real bug-fixing for pennies.** Resolves real **SWE-bench Lite** issues at **~$0.01/instance**
18
+ with a sub-$1/Mtok model (ADR-142–146) — vs. $1–20/instance for frontier-model agents.
19
+ - **The harness is the multiplier.** Evolving context-window/selection/retry policy lifts a
20
+ fixed model's measured outcomes (e.g. `finalScore 0.765 → 0.985`, ADR-103) — same model, better results.
21
+
22
+ This follows the **Darwin Gödel Machine** lineage: iteratively mutate the source of a
23
+ coding agent, then *empirically validate* each variant.
15
24
 
16
25
  ```
17
26
  repo
@@ -38,7 +47,10 @@ npm run build # tsc
38
47
  Then evolve a repo with the CLI (one verb, `evolve`):
39
48
 
40
49
  ```bash
41
- metaharness-darwin evolve <repo> [--generations N] [--children N] [--concurrency N] [--seed N]
50
+ metaharness-darwin evolve <repo> [--generations N] [--children N] [--concurrency N] [--seed N] \
51
+ [--bench <suite.json>] [--tie faster] \
52
+ [--selection score|quality-diversity|behavioral-diversity|niche-steering|clade|pareto] \
53
+ [--crossover] [--epistasis] [--risk-budget N] [--fdr Q] [--curriculum] [--sandbox real|mock|agent]
42
54
  ```
43
55
 
44
56
  | Flag | Meaning | Default |
@@ -47,6 +59,17 @@ metaharness-darwin evolve <repo> [--generations N] [--children N] [--concurrency
47
59
  | `--children N` | children produced per parent per generation | `4` |
48
60
  | `--concurrency N` | max variants evaluated concurrently (bounded fan-out) | `4` |
49
61
  | `--seed N` | deterministic seed for mutation selection | `0` |
62
+ | `--bench <suite.json>` | route promotion through the statistical benchmark gate (ADR-087) | off |
63
+ | `--tie faster` | break score ties by efficiency (ADR-086) | `insertion` |
64
+ | `--selection …` | parent-selection strategy (see *Evolutionary stack*) | `score` |
65
+ | `--crossover` | recombine two parents' surfaces (ADR-089) | off |
66
+ | `--epistasis` | topology-aware crossover via learned linkage (ADR-093) | off |
67
+ | `--risk-budget N` | SGM cumulative risk cap on promotions (ADR-090) | off |
68
+ | `--fdr Q` | Benjamini-Hochberg FDR control on promotion (ADR-096) | off |
69
+ | `--curriculum` | difficulty-ladder over a graded suite (ADR-097) | off |
70
+ | `--sandbox …` | evaluation substrate: `real` (repo test) · `mock` (surface params, ADR-102) · `agent` (real surface code, ADR-106) | `real` |
71
+
72
+ All flags are **opt-in and additive** over a frozen, reproducible core — every default-path run is byte-identical to the ADR-070…075 baseline.
50
73
 
51
74
  The `<repo>` argument defaults to the current directory. Everything is written
52
75
  under a self-describing `.metaharness/` work tree inside the repo:
@@ -200,14 +223,85 @@ The package also re-exports the building blocks behind `evolve`: `profileRepo`,
200
223
  `scoreWeights`, `Archive`, `inspectVariant` / `validateGeneratedCode`, plus the
201
224
  `SURFACES`, `FILE_BY_SURFACE`, and `APPROVED_FILES` constants.
202
225
 
226
+ ## Evolutionary stack (ADR-084–105)
227
+
228
+ The baseline above is the frozen core. On top of it, a set of **opt-in, additive,
229
+ reproducible** mechanisms turn the loop from a single-best search into a real
230
+ evolutionary algorithm. Every one is off by default (so the core stays
231
+ byte-identical) and individually toggled:
232
+
233
+ | Capability | ADR | How to enable |
234
+ |---|---|---|
235
+ | **Failure-driven mutation** — feed a parent's failing traces into the mutator | 084 | always (the deterministic mutator ignores it) |
236
+ | **LLM mutator** — `OpenRouterMutator` as a `CodeGenerator`, behind the same safety gate; model chosen by a 15-model execution benchmark | 085 | `config.generator` |
237
+ | **Efficiency tie-break** — break score ties by speed | 086 | `--tie faster` |
238
+ | **Graded statistical promotion** — public∧hidden∧regression∧safety + seeded bootstrap CI over a hash-pinned suite | 087 | `--bench s.json` |
239
+ | **MAP-Elites** — keep the elite per behaviour niche | 088 | `--selection quality-diversity` |
240
+ | **Genetic crossover** — recombine two parents' surfaces | 089 | `--crossover` |
241
+ | **SGM risk budget** — bound cumulative self-modification | 090 | `--risk-budget N` |
242
+ | **Hyperbolic phenotyping** — Poincaré-ball behavioural niche from traces | 091 | `--selection behavioral-diversity` |
243
+ | **Active niche steering** — drive toward under-explored regions | 092 | `--selection niche-steering` |
244
+ | **Epistatic linkage** — topology-aware crossover of co-adapted surfaces | 093 | `--crossover --epistasis` |
245
+ | **Clade metaproductivity** — select parents by descendant potential (Huxley-Gödel) | 094 | `--selection clade` |
246
+ | **Benjamini-Hochberg FDR control** — correct promotion for multiple testing | 096 | `--fdr Q` |
247
+ | **Self-directed curriculum** — difficulty ladder over a graded suite | 097 | `--curriculum` |
248
+ | **Multi-objective Pareto** — non-dominated (capability × parsimony) front | 100 | `--selection pareto` |
249
+
250
+ ### The evaluation substrate (ADR-101/102)
251
+
252
+ By default the sandbox runs the **repo's test command**, which is independent of
253
+ the harness surfaces — so the behavioural manifold is degenerate (measured:
254
+ `nicheEntropy = 0`, ADR-099). `sandboxMode: 'mock'` (ADR-102) instead runs a
255
+ **deterministic surface-driven agent loop**, so a variant's traces depend on its
256
+ surface content and the manifold comes alive. `sandboxMode: 'agent'` (ADR-106)
257
+ runs a variant's **real surface code** in a child process. The real-LLM-on-real-code
258
+ substrate is **no longer deferred** — it shipped (ADR-106→141) and now runs on
259
+ **canonical SWE-bench Lite** (ADR-142+, below).
260
+
261
+ ### Validated results (real, reproducible — see `bench/results/`)
262
+
263
+ - **Manifold goes live** (ADR-102): real `nicheEntropy 0 → 0.69`, finalScores
264
+ `flat 0.985 → spread 0.435–0.802` under mock mode.
265
+ - **Self-improvement** (ADR-103): the loop evolves `contextBuilder` (window
266
+ 30 → 70) and climbs `finalScore 0.765 → 0.985` by generation 3.
267
+ - **Diversity beats greedy on deception** (ADR-105): on a deceptive epistatic
268
+ landscape across 5 seeds, greedy `score` selection crosses it **0/5**,
269
+ `behavioral-diversity` **5/5**, `clade` **4/5** — empirically justifying the
270
+ diversity machinery.
271
+ - **Polyglot model frontier** (ADR-085): 15 models × 6 languages, execution-scored;
272
+ DeepSeek-V3 ($0.4/Mtok) tops quality-per-dollar — cheap beats frontier for code.
273
+
274
+ ### Canonical SWE-bench Lite (real, official harness — ADR-142–146)
275
+
276
+ Run on the **full 300** SWE-bench Lite (test) instances, scored by the **official
277
+ `swebench` Docker harness** — no cherry-picking, tight CIs. Solver = relevance-ranked
278
+ context + symbol-aware localization + search/replace patch, `deepseek-chat`, ~$0.01/instance.
279
+
280
+ | config | resolved | Wilson 95% CI | ADR |
281
+ |---|---|---|---|
282
+ | baseline (open-loop, single-shot) | 23/300 = **7.7%** | [5.2, 11.2] | 144 |
283
+ | + LLM localization | 24/300 = **8.0%** | [5.4, 11.6] | 146 |
284
+ | + closed-loop repair (test-feedback) | *measuring (full 300)* | — | 149 |
285
+
286
+ Honest framing: this is a **cheap-model, single-shot baseline** ($0.4/Mtok, <1¢/instance) —
287
+ leaderboard leaders hit 65–88% on Verified using iterative agentic loops + frontier models at
288
+ $1–20/instance. Localization lifted file-selection recall **44.7% → 59.7%** but resolve-rate held
289
+ flat — the bottleneck relocated to *patch emission* (ADR-146). The repair loop and a hybrid
290
+ cheap→frontier escalation (ADR-148) are the measured next levers. Every number is reproducible
291
+ under `bench/swebench/`.
292
+
203
293
  ## Status
204
294
 
205
- **Prototype.** The default `DeterministicMutator` performs seeded,
206
- signature-preserving string edits (bounded context-window, retry-budget,
207
- threshold, and phrasing perturbations) a **placeholder** for an LLM-backed
208
- `CodeGenerator` that slots in behind the *same* `validateGeneratedCode` gate. The
209
- mutator is the only piece meant to be swapped; the safety boundary, scorer, and
210
- archive are kernel code.
295
+ **Working, empirically validated on both the mock substrate *and* canonical
296
+ SWE-bench Lite.** The `DeterministicMutator` is seeded and signature-preserving;
297
+ the `OpenRouterMutator` (ADR-085) is the production LLM `CodeGenerator`, behind the
298
+ *same* `validateGeneratedCode` gate. The safety boundary, scorer, archive, and bench
299
+ layer are kernel code. The real-LLM-on-real-code frontier (once deferred) is now
300
+ **measured**: a reproducible **7.7% [5.2–11.2%]** open-loop baseline on the full
301
+ SWE-bench Lite (ADR-144), with localization (146), the repair loop (149), and a
302
+ hybrid cheap→frontier escalation (148) as the active levers. Darwin Mode also ships
303
+ **integrated into the `metaharness` scaffolder** — `npx metaharness <name>` produces
304
+ a harness with `npm run evolve` out of the box (ADR-147).
211
305
 
212
306
  ## License
213
307
 
package/dist/archive.d.ts CHANGED
@@ -51,6 +51,21 @@ export declare class Archive {
51
51
  * @param limit Maximum number of parents to return. `<= 0` yields `[]`.
52
52
  */
53
53
  selectParents(limit: number): HarnessVariant[];
54
+ /**
55
+ * MAP-Elites elite selection (quality-diversity). Bin the scored records by a
56
+ * behaviour descriptor (default: the mutated surface), keep the BEST record per
57
+ * bin (highest finalScore, ties by earliest insertion), and return up to
58
+ * `limit` bin-champions ordered by finalScore. Where `selectParents` can return
59
+ * `limit` near-identical variants (all the same surface — common at the ADR-072
60
+ * 0.985 ceiling), this returns champions from DISTINCT niches, so the next
61
+ * generation explores diverse surfaces instead of collapsing onto one.
62
+ *
63
+ * Pure and deterministic (no wall-clock) → reproducible from `archive.json`.
64
+ *
65
+ * @param limit Maximum number of elites to return. `<= 0` yields `[]`.
66
+ * @param descriptorOf Behaviour-descriptor function; defaults to mutated surface.
67
+ */
68
+ selectElites(limit: number, descriptorOf?: (variant: HarnessVariant) => string): HarnessVariant[];
54
69
  /**
55
70
  * The path of ids from the root ancestor down to `variantId`, following
56
71
  * `parentId` upward then reversing. Returns `[]` if `variantId` is unknown.
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,OAAO;IAQN,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAEjE;;;OAGG;gBAC0B,IAAI,EAAE,MAAM;IAEzC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAczC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAUnD,8EAA8E;IAC9E,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,wCAAwC;IACxC,GAAG,IAAI,aAAa,EAAE;IAItB;;;;OAIG;IACH,IAAI,IAAI,aAAa,GAAG,IAAI;IAW5B;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAoB9C;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBtC;;;;;OAKG;IACH,cAAc,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YACxB,UAAU,EAAE,MAAM,CAAC;YACnB,eAAe,EAAE,MAAM,CAAC;YACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;SAC1B,CAAC,CAAC;QACH,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5C;IA+BD;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,OAAO;IAQN,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAEjE;;;OAGG;gBAC0B,IAAI,EAAE,MAAM;IAEzC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAczC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAUnD,8EAA8E;IAC9E,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,wCAAwC;IACxC,GAAG,IAAI,aAAa,EAAE;IAItB;;;;OAIG;IACH,IAAI,IAAI,aAAa,GAAG,IAAI;IAW5B;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAoB9C;;;;;;;;;;;;;OAaG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,CAAC,OAAO,EAAE,cAAc,KAAK,MAAiC,GAC3E,cAAc,EAAE;IA6BnB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBtC;;;;;OAKG;IACH,cAAc,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YACxB,UAAU,EAAE,MAAM,CAAC;YACnB,eAAe,EAAE,MAAM,CAAC;YACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;SAC1B,CAAC,CAAC;QACH,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5C;IA+BD;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
package/dist/archive.js CHANGED
@@ -137,6 +137,47 @@ export class Archive {
137
137
  });
138
138
  return scored.slice(0, limit).map((s) => s.record.variant);
139
139
  }
140
+ /**
141
+ * MAP-Elites elite selection (quality-diversity). Bin the scored records by a
142
+ * behaviour descriptor (default: the mutated surface), keep the BEST record per
143
+ * bin (highest finalScore, ties by earliest insertion), and return up to
144
+ * `limit` bin-champions ordered by finalScore. Where `selectParents` can return
145
+ * `limit` near-identical variants (all the same surface — common at the ADR-072
146
+ * 0.985 ceiling), this returns champions from DISTINCT niches, so the next
147
+ * generation explores diverse surfaces instead of collapsing onto one.
148
+ *
149
+ * Pure and deterministic (no wall-clock) → reproducible from `archive.json`.
150
+ *
151
+ * @param limit Maximum number of elites to return. `<= 0` yields `[]`.
152
+ * @param descriptorOf Behaviour-descriptor function; defaults to mutated surface.
153
+ */
154
+ selectElites(limit, descriptorOf = (v) => v.mutationSurface) {
155
+ if (limit <= 0)
156
+ return [];
157
+ // descriptor → champion, tracking insertion index for deterministic ties.
158
+ const champions = new Map();
159
+ let index = 0;
160
+ for (const record of this.records.values()) {
161
+ const i = index++;
162
+ if (record.score === null)
163
+ continue;
164
+ const key = descriptorOf(record.variant);
165
+ const current = champions.get(key);
166
+ if (current === undefined ||
167
+ record.score.finalScore > current.record.score.finalScore) {
168
+ champions.set(key, { record, index: i });
169
+ }
170
+ }
171
+ return [...champions.values()]
172
+ .sort((a, b) => {
173
+ const delta = b.record.score.finalScore - a.record.score.finalScore;
174
+ if (delta !== 0)
175
+ return delta; // higher finalScore first
176
+ return a.index - b.index; // tie-break: earlier insertion first
177
+ })
178
+ .slice(0, limit)
179
+ .map((c) => c.record.variant);
180
+ }
140
181
  /**
141
182
  * The path of ids from the root ancestor down to `variantId`, following
142
183
  * `parentId` upward then reversing. Returns `[]` if `variantId` is unknown.
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"promotion.d.ts","sourceRoot":"","sources":["../../src/bench/promotion.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAerE;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,iBAAiB,CAiFpB"}
1
+ {"version":3,"file":"promotion.d.ts","sourceRoot":"","sources":["../../src/bench/promotion.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAerE;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,iBAAiB,CAkFpB"}
@@ -104,6 +104,7 @@ export function decidePromotion(input) {
104
104
  parentRegressionRate,
105
105
  childSafetyViolations,
106
106
  cleanReplay,
107
+ pValue: bootstrap.pValue,
107
108
  };
108
109
  }
109
110
  //# sourceMappingURL=promotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promotion.js","sourceRoot":"","sources":["../../src/bench/promotion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promotion.js","sourceRoot":"","sources":["../../src/bench/promotion.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,18 @@ export declare function bootstrapDelta(parentScores: number[], childScores: numb
23
23
  seed?: number;
24
24
  minDelta?: number;
25
25
  }): BootstrapResult;
26
+ /**
27
+ * Benjamini–Hochberg false-discovery-rate control (ADR-096). Given a set of
28
+ * one-sided p-values and a target FDR `q`, return a boolean per hypothesis:
29
+ * `true` ⇒ rejected H0 (i.e. a statistically real discovery after correcting
30
+ * for multiple testing). Standard step-up: sort ascending, find the largest k
31
+ * with p_(k) ≤ (k/m)·q, reject all hypotheses with p ≤ that threshold. Pure and
32
+ * deterministic. Empty input ⇒ empty output; q ≤ 0 ⇒ reject nothing.
33
+ *
34
+ * CALIBRATION (ADR-112): BH controls FDR only when the input p-values are
35
+ * (super-)uniform under the null. Bootstrap p-values from `bootstrapDelta` meet
36
+ * this from ~5 samples up; at n=3 they are too coarse/anti-conservative and the
37
+ * empirical FDR is ~33% at q=0.05. Callers must supply ≥ 5 task-scores per variant.
38
+ */
39
+ export declare function benjaminiHochberg(pValues: readonly number[], q: number): boolean[];
26
40
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/bench/stats.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CASlD;AAWD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,eAAe,CA4BjB"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/bench/stats.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CASlD;AAWD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,eAAe,CAgCjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAYlF"}
@@ -52,23 +52,59 @@ export function bootstrapDelta(parentScores, childScores, opts) {
52
52
  const seed = opts?.seed ?? 0;
53
53
  const minDelta = opts?.minDelta ?? 0.05;
54
54
  if (parentScores.length === 0 || childScores.length === 0) {
55
- return { meanDelta: 0, lower95: 0, upper95: 0, promote: false, samples };
55
+ return { meanDelta: 0, lower95: 0, upper95: 0, promote: false, samples, pValue: 1 };
56
56
  }
57
57
  const rng = makeRng(seed);
58
58
  const deltas = new Array(samples);
59
59
  let sum = 0;
60
+ let nonPositive = 0;
60
61
  for (let i = 0; i < samples; i += 1) {
61
62
  const parent = parentScores[Math.floor(rng() * parentScores.length)];
62
63
  const child = childScores[Math.floor(rng() * childScores.length)];
63
64
  const delta = child - parent;
64
65
  deltas[i] = delta;
65
66
  sum += delta;
67
+ if (delta <= 0)
68
+ nonPositive += 1;
66
69
  }
67
70
  deltas.sort((x, y) => x - y);
68
71
  const meanDelta = round6(sum / samples);
69
72
  const lower95 = round6(deltas[Math.floor(samples * 0.025)]);
70
73
  const upper95 = round6(deltas[Math.floor(samples * 0.975)]);
71
74
  const promote = meanDelta > minDelta && lower95 > 0;
72
- return { meanDelta, lower95, upper95, promote, samples };
75
+ // One-sided bootstrap p-value for H0: delta ≤ 0 (the share of resamples ≤ 0).
76
+ const pValue = round6(nonPositive / samples);
77
+ return { meanDelta, lower95, upper95, promote, samples, pValue };
78
+ }
79
+ /**
80
+ * Benjamini–Hochberg false-discovery-rate control (ADR-096). Given a set of
81
+ * one-sided p-values and a target FDR `q`, return a boolean per hypothesis:
82
+ * `true` ⇒ rejected H0 (i.e. a statistically real discovery after correcting
83
+ * for multiple testing). Standard step-up: sort ascending, find the largest k
84
+ * with p_(k) ≤ (k/m)·q, reject all hypotheses with p ≤ that threshold. Pure and
85
+ * deterministic. Empty input ⇒ empty output; q ≤ 0 ⇒ reject nothing.
86
+ *
87
+ * CALIBRATION (ADR-112): BH controls FDR only when the input p-values are
88
+ * (super-)uniform under the null. Bootstrap p-values from `bootstrapDelta` meet
89
+ * this from ~5 samples up; at n=3 they are too coarse/anti-conservative and the
90
+ * empirical FDR is ~33% at q=0.05. Callers must supply ≥ 5 task-scores per variant.
91
+ */
92
+ export function benjaminiHochberg(pValues, q) {
93
+ const m = pValues.length;
94
+ const result = new Array(m).fill(false);
95
+ if (m === 0 || q <= 0)
96
+ return result;
97
+ const order = pValues.map((p, i) => ({ p, i })).sort((a, b) => a.p - b.p);
98
+ let cutoff = -1; // largest p that passes the BH threshold
99
+ for (let rank = 1; rank <= m; rank += 1) {
100
+ if (order[rank - 1].p <= (rank / m) * q)
101
+ cutoff = order[rank - 1].p;
102
+ }
103
+ if (cutoff < 0)
104
+ return result;
105
+ for (let j = 0; j < m; j += 1)
106
+ if (pValues[j] <= cutoff)
107
+ result[j] = true;
108
+ return result;
73
109
  }
74
110
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/bench/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/bench/stats.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,8 @@ export interface BootstrapResult {
107
107
  /** meanDelta > minDelta ∧ lower95 > 0. */
108
108
  promote: boolean;
109
109
  samples: number;
110
+ /** One-sided bootstrap p-value for H0: delta ≤ 0 (fraction of resamples ≤ 0). */
111
+ pValue: number;
110
112
  }
111
113
  /** The full, auditable promotion verdict for a child vs its parent. */
112
114
  export interface PromotionDecision {
@@ -122,6 +124,8 @@ export interface PromotionDecision {
122
124
  parentRegressionRate: number;
123
125
  childSafetyViolations: number;
124
126
  cleanReplay: boolean;
127
+ /** One-sided bootstrap p-value for the child>parent win (for FDR control, ADR-096). */
128
+ pValue: number;
125
129
  }
126
130
  /** A node in the lineage tree used for descendant-potential analysis. */
127
131
  export interface LineageNode {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bench/types.ts"],"names":[],"mappings":"AAeA,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iEAAiE;IACjE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,qEAAqE;IACrE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,KAChB,OAAO,CAAC,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bench/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Archive } from './archive.js';
2
+ import type { HarnessVariant } from './types.js';
3
+ /** mulberry32 — a tiny, fast, deterministic PRNG seeded from a 32-bit integer. */
4
+ export declare function mulberry32(seed: number): () => number;
5
+ /** Beta(a, b) = X/(X+Y), X~Gamma(a), Y~Gamma(b). Deterministic given `rng`. */
6
+ export declare function sampleBeta(rng: () => number, a: number, b: number): number;
7
+ /**
8
+ * Clade outcome counts over a variant's descendant subtree (inclusive). A scored
9
+ * node is a "success" iff it was promoted, else a "failure"; unscored nodes are
10
+ * ignored. Cycle-guarded. O(subtree).
11
+ */
12
+ export declare function cladeOutcomes(archive: Archive, rootId: string): {
13
+ passes: number;
14
+ failures: number;
15
+ };
16
+ /**
17
+ * Clade-metaproductivity Thompson selection: for every scored variant draw
18
+ * `u ~ Beta(τ·passes+1, τ·failures+1)` over its subtree outcomes and return the
19
+ * top-`limit` variants by `u`. Seeded → reproducible. Returns `[]` when nothing
20
+ * is scored (caller falls back).
21
+ *
22
+ * @param tau exploration→exploitation schedule in [0, ∞): 0 ⇒ uniform Beta(1,1)
23
+ * (pure exploration); larger ⇒ sharper posteriors (exploitation).
24
+ */
25
+ export declare function cladeThompsonSelect(archive: Archive, tau: number, limit: number, seed: number): HarnessVariant[];
26
+ //# sourceMappingURL=clade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clade.d.ts","sourceRoot":"","sources":["../src/clade.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CASrD;AA0BD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAiBpG;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,cAAc,EAAE,CAclB"}
package/dist/clade.js ADDED
@@ -0,0 +1,115 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Clade-metaproductivity parent selection (ADR-094), after the Huxley-Gödel
4
+ // Machine (Wang, Piękos, Li et al., arXiv:2510.21614, 2025). It fixes the
5
+ // "metaproductivity–performance mismatch": the best-SCORING variant is a poor
6
+ // PARENT because it has exhausted its descendant diversity. HGM instead selects
7
+ // parents by Clade Metaproductivity — the success rate of a variant's whole
8
+ // descendant subtree — via Thompson sampling over Beta(τ·passes+1, τ·fails+1),
9
+ // with τ scheduling exploration→exploitation.
10
+ //
11
+ // We tie τ to the SGM risk budget (ADR-090): early (budget full) → low τ → flat
12
+ // Betas → exploration; late (budget spent) → high τ → sharp Betas → exploitation.
13
+ //
14
+ // Unlike the paper (which uses Math.random), the Beta draws here come from a
15
+ // SEEDED PRNG, so clade selection is fully reproducible (ADR-075) — same seed ⇒
16
+ // same parents. Dependency-free.
17
+ /** mulberry32 — a tiny, fast, deterministic PRNG seeded from a 32-bit integer. */
18
+ export function mulberry32(seed) {
19
+ let a = seed >>> 0;
20
+ return () => {
21
+ a = (a + 0x6d2b79f5) >>> 0;
22
+ let t = a;
23
+ t = Math.imul(t ^ (t >>> 15), t | 1);
24
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
25
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
26
+ };
27
+ }
28
+ /** Standard normal via Box–Muller from a uniform stream. */
29
+ function sampleNormal(rng) {
30
+ let u = 0, v = 0;
31
+ while (u === 0)
32
+ u = rng();
33
+ while (v === 0)
34
+ v = rng();
35
+ return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
36
+ }
37
+ /** Gamma(shape ≥ 1, scale 1) via Marsaglia–Tsang. Our shapes are always ≥ 1. */
38
+ function sampleGamma(rng, shape) {
39
+ const k = Math.max(1, shape);
40
+ const d = k - 1 / 3;
41
+ const c = 1 / Math.sqrt(9 * d);
42
+ for (;;) {
43
+ const x = sampleNormal(rng);
44
+ const v0 = 1 + c * x;
45
+ if (v0 <= 0)
46
+ continue;
47
+ const v = v0 * v0 * v0;
48
+ const u = rng();
49
+ if (u < 1 - 0.0331 * x * x * x * x)
50
+ return d * v;
51
+ if (Math.log(u) < 0.5 * x * x + d * (1 - v + Math.log(v)))
52
+ return d * v;
53
+ }
54
+ }
55
+ /** Beta(a, b) = X/(X+Y), X~Gamma(a), Y~Gamma(b). Deterministic given `rng`. */
56
+ export function sampleBeta(rng, a, b) {
57
+ const x = sampleGamma(rng, a);
58
+ const y = sampleGamma(rng, b);
59
+ return x + y === 0 ? 0.5 : x / (x + y);
60
+ }
61
+ /**
62
+ * Clade outcome counts over a variant's descendant subtree (inclusive). A scored
63
+ * node is a "success" iff it was promoted, else a "failure"; unscored nodes are
64
+ * ignored. Cycle-guarded. O(subtree).
65
+ */
66
+ export function cladeOutcomes(archive, rootId) {
67
+ let passes = 0, failures = 0;
68
+ const seen = new Set();
69
+ const stack = [rootId];
70
+ while (stack.length > 0) {
71
+ const id = stack.pop();
72
+ if (seen.has(id))
73
+ continue;
74
+ seen.add(id);
75
+ const rec = archive.get(id);
76
+ if (!rec)
77
+ continue;
78
+ if (rec.score !== null) {
79
+ if (rec.score.promoted)
80
+ passes += 1;
81
+ else
82
+ failures += 1;
83
+ }
84
+ for (const child of rec.children)
85
+ stack.push(child);
86
+ }
87
+ return { passes, failures };
88
+ }
89
+ /**
90
+ * Clade-metaproductivity Thompson selection: for every scored variant draw
91
+ * `u ~ Beta(τ·passes+1, τ·failures+1)` over its subtree outcomes and return the
92
+ * top-`limit` variants by `u`. Seeded → reproducible. Returns `[]` when nothing
93
+ * is scored (caller falls back).
94
+ *
95
+ * @param tau exploration→exploitation schedule in [0, ∞): 0 ⇒ uniform Beta(1,1)
96
+ * (pure exploration); larger ⇒ sharper posteriors (exploitation).
97
+ */
98
+ export function cladeThompsonSelect(archive, tau, limit, seed) {
99
+ if (limit <= 0)
100
+ return [];
101
+ const rng = mulberry32(seed);
102
+ const t = Math.max(0, tau);
103
+ const scored = archive.all().filter((r) => r.score !== null);
104
+ if (scored.length === 0)
105
+ return [];
106
+ const ranked = scored
107
+ .map((r) => {
108
+ const { passes, failures } = cladeOutcomes(archive, r.variant.id);
109
+ const u = sampleBeta(rng, t * passes + 1, t * failures + 1);
110
+ return { variant: r.variant, u };
111
+ })
112
+ .sort((a, b) => b.u - a.u);
113
+ return ranked.slice(0, limit).map((x) => x.variant);
114
+ }
115
+ //# sourceMappingURL=clade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clade.js","sourceRoot":"","sources":["../src/clade.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,iCAAiC;AAKjC,kFAAkF;AAClF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,SAAS,YAAY,CAAC,GAAiB;IACrC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,GAAiB,EAAE,KAAa;IACnD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,SAAS,CAAC;QACR,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QACtB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,UAAU,CAAC,GAAiB,EAAE,CAAS,EAAE,CAAS;IAChE,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,MAAc;IAC5D,IAAI,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ;gBAAE,MAAM,IAAI,CAAC,CAAC;;gBAC/B,QAAQ,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,GAAW,EACX,KAAa,EACb,IAAY;IAEZ,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC"}