@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/dist/cli.js CHANGED
@@ -5,6 +5,7 @@
5
5
  //
6
6
  // metaharness-darwin evolve <repo> [--generations N] [--children N]
7
7
  // [--concurrency N] [--seed N]
8
+ // [--bench <suite.json>] [--tie faster]
8
9
  // metaharness-darwin bench create <repo> [--out <suite.json>]
9
10
  // metaharness-darwin bench verify <suite.json>
10
11
  //
@@ -94,13 +95,36 @@ async function main() {
94
95
  }
95
96
  if (command !== 'evolve') {
96
97
  process.stderr.write('usage: metaharness-darwin <evolve|bench> …\n' +
97
- ' evolve <repo> [--generations N] [--children N] [--concurrency N] [--seed N]\n' +
98
+ ' evolve <repo> [--generations N] [--children N] [--concurrency N] [--seed N] [--bench <suite.json>] [--tie faster] [--selection quality-diversity|behavioral-diversity|niche-steering|clade|pareto] [--crossover] [--epistasis] [--risk-budget N] [--fdr Q] [--curriculum] [--sandbox real|mock|agent]\n' +
98
99
  ' bench create <repo> [--out <suite.json>]\n' +
99
100
  ' bench verify <suite.json>\n');
100
101
  process.exit(1);
101
102
  }
102
103
  const repoRoot = resolve(process.argv[3] ?? process.cwd());
103
104
  const workRoot = resolve(repoRoot, '.metaharness');
105
+ // Opt-in graded promotion (ADR-076/087): --bench <suite.json> loads a
106
+ // hash-verified suite (throws on tamper) and routes promotion through the
107
+ // statistical gate. --tie faster opts into efficiency tie-breaking (ADR-086).
108
+ const benchPath = flag('--bench', '');
109
+ const benchSuite = benchPath ? await loadSuite(resolve(benchPath)) : undefined;
110
+ const tieBreaker = flag('--tie', 'insertion') === 'faster' ? 'faster' : 'insertion';
111
+ const selRaw = flag('--selection', 'score');
112
+ const selection = selRaw === 'quality-diversity' ||
113
+ selRaw === 'behavioral-diversity' ||
114
+ selRaw === 'niche-steering' ||
115
+ selRaw === 'clade' ||
116
+ selRaw === 'pareto'
117
+ ? selRaw
118
+ : 'score';
119
+ const crossover = process.argv.includes('--crossover');
120
+ const epistasis = process.argv.includes('--epistasis');
121
+ const riskArg = flag('--risk-budget', '');
122
+ const riskBudgetTotal = riskArg === '' ? undefined : num('--risk-budget', 0);
123
+ const fdrArg = flag('--fdr', '');
124
+ const fdrQ = fdrArg === '' ? undefined : num('--fdr', 0.05);
125
+ const curriculum = process.argv.includes('--curriculum');
126
+ const sbRaw = flag('--sandbox', 'real');
127
+ const sandboxMode = sbRaw === 'mock' || sbRaw === 'agent' ? sbRaw : 'real';
104
128
  const result = await evolve({
105
129
  repoRoot,
106
130
  workRoot,
@@ -114,6 +138,15 @@ async function main() {
114
138
  'verify generated harness safety',
115
139
  'check trace quality',
116
140
  ],
141
+ ...(benchSuite ? { benchSuite } : {}),
142
+ ...(riskBudgetTotal !== undefined ? { riskBudgetTotal } : {}),
143
+ ...(fdrQ !== undefined ? { fdrQ } : {}),
144
+ ...(curriculum ? { curriculum } : {}),
145
+ ...(sandboxMode !== 'real' ? { sandboxMode } : {}),
146
+ tieBreaker,
147
+ selection,
148
+ crossover,
149
+ epistasis,
117
150
  });
118
151
  printReport(result);
119
152
  process.stdout.write(`\nArtifacts: ${workRoot}\n`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { BenchSuite, BenchmarkTask } from './bench/types.js';
2
+ /** Tasks at or below the current difficulty level (the admitted curriculum tier). */
3
+ export declare function admittedTasks(tasks: readonly BenchmarkTask[], level: number): BenchmarkTask[];
4
+ /**
5
+ * A hash-pinned sub-suite of just the admitted tasks. Re-pinned via `makeSuite`
6
+ * so it still passes `verifySuite` (selecting a tier is not tampering). Falls
7
+ * back to the lowest-difficulty tasks if `level` admits none (so a generation is
8
+ * never scored on an empty suite).
9
+ */
10
+ export declare function curriculumSuite(suite: BenchSuite, level: number): BenchSuite;
11
+ /** The highest difficulty present in the suite — the curriculum's top rung. */
12
+ export declare function maxDifficulty(suite: BenchSuite): number;
13
+ /**
14
+ * Escalate the curriculum: if the population has MASTERED the current tier
15
+ * (mean solve rate ≥ `threshold`), advance one level (capped at the suite's top
16
+ * rung); otherwise hold. Pure. Default threshold 0.9.
17
+ */
18
+ export declare function nextCurriculumLevel(level: number, meanSolveRate: number, cap: number, threshold?: number): number;
19
+ //# sourceMappingURL=curriculum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curriculum.d.ts","sourceRoot":"","sources":["../src/curriculum.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAO5E;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,SAAS,SAAM,GACd,MAAM,CAGR"}
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Self-directed curriculum (ADR-097) — a difficulty LADDER over the benchmark.
4
+ // The honest fix for the "degenerate manifold" (Gap 3, benchmark saturation):
5
+ // scoring every variant on the full suite from generation 0 means an easy suite
6
+ // never forces struggle, so the high-complexity Poincaré frontier (ADR-091/092)
7
+ // stays empty. Instead, sequence the EXISTING graded tasks by their `difficulty`
8
+ // (1..5): admit only difficulty ≤ L, and raise L once the population MASTERS the
9
+ // current tier. Harder tasks arrive exactly when the agents are ready for them —
10
+ // "the perfect exam for the current population".
11
+ //
12
+ // This reuses real task metadata (no LLM task synthesis, no fabrication); it is
13
+ // pure and deterministic. An LLM-backed adversarial-task generator can extend it
14
+ // later behind the same admit() seam, but the deterministic ladder works today.
15
+ import { makeSuite } from './bench/suite.js';
16
+ /** Tasks at or below the current difficulty level (the admitted curriculum tier). */
17
+ export function admittedTasks(tasks, level) {
18
+ return tasks.filter((t) => t.difficulty <= level);
19
+ }
20
+ /**
21
+ * A hash-pinned sub-suite of just the admitted tasks. Re-pinned via `makeSuite`
22
+ * so it still passes `verifySuite` (selecting a tier is not tampering). Falls
23
+ * back to the lowest-difficulty tasks if `level` admits none (so a generation is
24
+ * never scored on an empty suite).
25
+ */
26
+ export function curriculumSuite(suite, level) {
27
+ let tasks = admittedTasks(suite.tasks, level);
28
+ if (tasks.length === 0 && suite.tasks.length > 0) {
29
+ const min = Math.min(...suite.tasks.map((t) => t.difficulty));
30
+ tasks = suite.tasks.filter((t) => t.difficulty === min);
31
+ }
32
+ return makeSuite(suite.id, suite.version, tasks);
33
+ }
34
+ /** The highest difficulty present in the suite — the curriculum's top rung. */
35
+ export function maxDifficulty(suite) {
36
+ return suite.tasks.reduce((m, t) => Math.max(m, t.difficulty), 1);
37
+ }
38
+ /**
39
+ * Escalate the curriculum: if the population has MASTERED the current tier
40
+ * (mean solve rate ≥ `threshold`), advance one level (capped at the suite's top
41
+ * rung); otherwise hold. Pure. Default threshold 0.9.
42
+ */
43
+ export function nextCurriculumLevel(level, meanSolveRate, cap, threshold = 0.9) {
44
+ if (meanSolveRate >= threshold && level < cap)
45
+ return level + 1;
46
+ return level;
47
+ }
48
+ //# sourceMappingURL=curriculum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curriculum.js","sourceRoot":"","sources":["../src/curriculum.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,iDAAiD;AACjD,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAE,KAAa;IAC1E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,KAAa;IAC9D,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,aAAqB,EACrB,GAAW,EACX,SAAS,GAAG,GAAG;IAEf,IAAI,aAAa,IAAI,SAAS,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { MutationSurface } from './types.js';
2
+ /**
3
+ * A learned, symmetric epistatic-linkage graph over the seven mutation surfaces.
4
+ * Edge weight = accumulated evidence that two surfaces are co-adapted (they
5
+ * change together in successful lineages).
6
+ */
7
+ export declare class LinkageGraph {
8
+ private readonly edges;
9
+ /** Add `weight` of co-occurrence evidence to every pair within `surfaces`. */
10
+ record(surfaces: readonly MutationSurface[], weight: number): void;
11
+ /** Co-adaptation weight between two surfaces (0 if never co-observed). */
12
+ weight(a: MutationSurface, b: MutationSurface): number;
13
+ /**
14
+ * Surfaces linked to `a` with weight ≥ `minWeight`, strongest first
15
+ * (deterministic: ties break by the canonical SURFACES order). Excludes `a`.
16
+ */
17
+ linkedTo(a: MutationSurface, minWeight?: number): MutationSurface[];
18
+ /** Serializable snapshot (for the work-tree report); sorted for determinism. */
19
+ toJSON(): Array<{
20
+ pair: string;
21
+ weight: number;
22
+ }>;
23
+ }
24
+ /**
25
+ * Build a linkage graph from scored lineages. Each lineage contributes the set
26
+ * of surfaces mutated along it, weighted by its finalScore (clamped ≥ 0), so
27
+ * surfaces that co-occur in HIGH-fitness lineages accrue the most weight. Pure.
28
+ */
29
+ export declare function buildLinkage(lineages: ReadonlyArray<{
30
+ surfaces: readonly MutationSurface[];
31
+ score: number;
32
+ }>): LinkageGraph;
33
+ /**
34
+ * The epistatic block to inherit from parentB in a topology-aware crossover: a
35
+ * seed surface plus its strongly-linked neighbours (so co-adapted surfaces stay
36
+ * together), kept a PROPER non-empty subset of the seven. Deterministic in
37
+ * `(seed surface, graph)`. Falls back to just the seed when nothing is linked.
38
+ */
39
+ export declare function linkedCrossoverBlock(graph: LinkageGraph, seedSurface: MutationSurface, minWeight?: number): MutationSurface[];
40
+ //# sourceMappingURL=epistasis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epistasis.d.ts","sourceRoot":"","sources":["../src/epistasis.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD,8EAA8E;IAC9E,MAAM,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAWlE,0EAA0E;IAC1E,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,MAAM;IAKtD;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,SAAI,GAAG,eAAe,EAAE;IAQ9D,gFAAgF;IAChF,MAAM,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAKlD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/E,YAAY,CAMd;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,eAAe,EAC5B,SAAS,SAAI,GACZ,eAAe,EAAE,CAKnB"}
@@ -0,0 +1,88 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Epistatic linkage learning (ADR-093). Crossover (ADR-089) swaps a RANDOM subset
4
+ // of surfaces between parents. But surfaces are epistatic: a `planner` change may
5
+ // only pay off when matched by a complementary `retryPolicy` change. Splitting a
6
+ // co-adapted pair destroys both. This module LEARNS which surfaces co-occur in
7
+ // high-fitness lineages and lets crossover keep linked surfaces together —
8
+ // topology-aware recombination instead of blind swapping.
9
+ //
10
+ // The linkage model is a symmetric, surface×surface co-occurrence graph weighted
11
+ // by the finalScore of the lineages a pair appears in. Dependency-free and
12
+ // deterministic. NOTE on RuVector: `ruvnet/ruvector` implements GNN message
13
+ // passing that can refine these edge weights (propagating linkage through the
14
+ // graph) at scale; this native co-occurrence graph is the dependency-free model
15
+ // that works today, behind the same `LinkageGraph` seam.
16
+ import { SURFACES } from './safety.js';
17
+ /** Sorted, stable key for an unordered surface pair. */
18
+ function pairKey(a, b) {
19
+ return a < b ? `${a}|${b}` : `${b}|${a}`;
20
+ }
21
+ /**
22
+ * A learned, symmetric epistatic-linkage graph over the seven mutation surfaces.
23
+ * Edge weight = accumulated evidence that two surfaces are co-adapted (they
24
+ * change together in successful lineages).
25
+ */
26
+ export class LinkageGraph {
27
+ edges = new Map();
28
+ /** Add `weight` of co-occurrence evidence to every pair within `surfaces`. */
29
+ record(surfaces, weight) {
30
+ if (weight <= 0)
31
+ return;
32
+ const uniq = [...new Set(surfaces)];
33
+ for (let i = 0; i < uniq.length; i++) {
34
+ for (let j = i + 1; j < uniq.length; j++) {
35
+ const k = pairKey(uniq[i], uniq[j]);
36
+ this.edges.set(k, (this.edges.get(k) ?? 0) + weight);
37
+ }
38
+ }
39
+ }
40
+ /** Co-adaptation weight between two surfaces (0 if never co-observed). */
41
+ weight(a, b) {
42
+ if (a === b)
43
+ return 0;
44
+ return this.edges.get(pairKey(a, b)) ?? 0;
45
+ }
46
+ /**
47
+ * Surfaces linked to `a` with weight ≥ `minWeight`, strongest first
48
+ * (deterministic: ties break by the canonical SURFACES order). Excludes `a`.
49
+ */
50
+ linkedTo(a, minWeight = 0) {
51
+ return SURFACES.filter((s) => s !== a && this.weight(a, s) >= minWeight && this.weight(a, s) > 0)
52
+ .sort((x, y) => {
53
+ const d = this.weight(a, y) - this.weight(a, x);
54
+ return d !== 0 ? d : SURFACES.indexOf(x) - SURFACES.indexOf(y);
55
+ });
56
+ }
57
+ /** Serializable snapshot (for the work-tree report); sorted for determinism. */
58
+ toJSON() {
59
+ return [...this.edges.entries()]
60
+ .map(([pair, weight]) => ({ pair, weight }))
61
+ .sort((a, b) => b.weight - a.weight || (a.pair < b.pair ? -1 : 1));
62
+ }
63
+ }
64
+ /**
65
+ * Build a linkage graph from scored lineages. Each lineage contributes the set
66
+ * of surfaces mutated along it, weighted by its finalScore (clamped ≥ 0), so
67
+ * surfaces that co-occur in HIGH-fitness lineages accrue the most weight. Pure.
68
+ */
69
+ export function buildLinkage(lineages) {
70
+ const graph = new LinkageGraph();
71
+ for (const { surfaces, score } of lineages) {
72
+ graph.record(surfaces, Math.max(0, score));
73
+ }
74
+ return graph;
75
+ }
76
+ /**
77
+ * The epistatic block to inherit from parentB in a topology-aware crossover: a
78
+ * seed surface plus its strongly-linked neighbours (so co-adapted surfaces stay
79
+ * together), kept a PROPER non-empty subset of the seven. Deterministic in
80
+ * `(seed surface, graph)`. Falls back to just the seed when nothing is linked.
81
+ */
82
+ export function linkedCrossoverBlock(graph, seedSurface, minWeight = 0) {
83
+ const block = [seedSurface, ...graph.linkedTo(seedSurface, minWeight)];
84
+ const uniq = [...new Set(block)];
85
+ // Keep it a proper subset (never all seven) so crossover always mixes parents.
86
+ return uniq.length >= SURFACES.length ? uniq.slice(0, SURFACES.length - 1) : uniq;
87
+ }
88
+ //# sourceMappingURL=epistasis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epistasis.js","sourceRoot":"","sources":["../src/epistasis.ts"],"names":[],"mappings":"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"}
package/dist/evolve.d.ts CHANGED
@@ -1,6 +1,14 @@
1
- import type { EvolutionConfig, EvolutionResult } from './types.js';
1
+ import type { ArchiveRecord, EvolutionConfig, EvolutionResult, RunTrace } from './types.js';
2
2
  /** Run async `fn` over `items` with at most `limit` in flight at once. Order-preserving. */
3
3
  export declare function mapLimit<T, R>(items: T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
4
+ /**
5
+ * Among scored records sharing the TOP finalScore, return the most efficient
6
+ * (lowest mean trace wall-clock). Pure: caller supplies the per-variant traces.
7
+ * Returns `null` only when no record is scored. This is the 'faster' tie-break
8
+ * (ADR-072 scorer is ceiling-bound, so the efficiency signal lives here, not in
9
+ * finalScore). NOT reproducible by construction — opt-in via config.tieBreaker.
10
+ */
11
+ export declare function pickEfficientWinner(records: ArchiveRecord[], tracesById: Map<string, RunTrace[]>): ArchiveRecord | null;
4
12
  /**
5
13
  * Run a full Darwin Mode evolution. Returns the baseline, the winning record,
6
14
  * the whole archive, and the winner's lineage. Side effects are confined to the
@@ -1 +1 @@
1
- {"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../src/evolve.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAKhB,MAAM,YAAY,CAAC;AAKpB,4FAA4F;AAC5F,wBAAsB,QAAQ,CAAC,CAAC,EAAE,CAAC,EACjC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAad;AAqDD;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAuF9E"}
1
+ {"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../src/evolve.ts"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,eAAe,EAGf,QAAQ,EAET,MAAM,YAAY,CAAC;AAKpB,4FAA4F;AAC5F,wBAAsB,QAAQ,CAAC,CAAC,EAAE,CAAC,EACjC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAad;AAiGD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAClC,aAAa,GAAG,IAAI,CAkBtB;AAeD;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAsT9E"}