aifastdb 3.10.5 → 3.10.7

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 (73) hide show
  1. package/aifastdb.node +0 -0
  2. package/aifastdb.win32-x64-msvc.node +0 -0
  3. package/dist/concurrent-document-store.d.ts +4 -0
  4. package/dist/concurrent-document-store.d.ts.map +1 -1
  5. package/dist/concurrent-document-store.js +6 -0
  6. package/dist/concurrent-document-store.js.map +1 -1
  7. package/dist/find-async-baseline.d.ts +33 -0
  8. package/dist/find-async-baseline.d.ts.map +1 -0
  9. package/dist/find-async-baseline.js +424 -0
  10. package/dist/find-async-baseline.js.map +1 -0
  11. package/dist/find-async-bench.d.ts +22 -0
  12. package/dist/find-async-bench.d.ts.map +1 -0
  13. package/dist/find-async-bench.js +322 -0
  14. package/dist/find-async-bench.js.map +1 -0
  15. package/dist/find-async-verify.d.ts +23 -0
  16. package/dist/find-async-verify.d.ts.map +1 -0
  17. package/dist/find-async-verify.js +286 -0
  18. package/dist/find-async-verify.js.map +1 -0
  19. package/dist/hnsw-insert-profile-verify.d.ts +35 -0
  20. package/dist/hnsw-insert-profile-verify.d.ts.map +1 -0
  21. package/dist/hnsw-insert-profile-verify.js +250 -0
  22. package/dist/hnsw-insert-profile-verify.js.map +1 -0
  23. package/dist/micro-batcher-benchmark.d.ts +3 -0
  24. package/dist/micro-batcher-benchmark.d.ts.map +1 -0
  25. package/dist/micro-batcher-benchmark.js +296 -0
  26. package/dist/micro-batcher-benchmark.js.map +1 -0
  27. package/dist/micro-batcher.d.ts +97 -0
  28. package/dist/micro-batcher.d.ts.map +1 -0
  29. package/dist/micro-batcher.js +77 -0
  30. package/dist/micro-batcher.js.map +1 -0
  31. package/dist/native.d.ts +71 -0
  32. package/dist/native.d.ts.map +1 -1
  33. package/dist/native.js +6 -1
  34. package/dist/native.js.map +1 -1
  35. package/dist/phase-387-reproducibility-audit.d.ts +3 -0
  36. package/dist/phase-387-reproducibility-audit.d.ts.map +1 -0
  37. package/dist/phase-387-reproducibility-audit.js +236 -0
  38. package/dist/phase-387-reproducibility-audit.js.map +1 -0
  39. package/dist/phase-390-baseline-multiseed.d.ts +3 -0
  40. package/dist/phase-390-baseline-multiseed.d.ts.map +1 -0
  41. package/dist/phase-390-baseline-multiseed.js +241 -0
  42. package/dist/phase-390-baseline-multiseed.js.map +1 -0
  43. package/dist/phase-390-t2-mb-grid-sweep.d.ts +3 -0
  44. package/dist/phase-390-t2-mb-grid-sweep.d.ts.map +1 -0
  45. package/dist/phase-390-t2-mb-grid-sweep.js +291 -0
  46. package/dist/phase-390-t2-mb-grid-sweep.js.map +1 -0
  47. package/dist/read-profiler-verify.js +236 -1
  48. package/dist/read-profiler-verify.js.map +1 -1
  49. package/dist/remember-many-spawn-benchmark.d.ts +3 -0
  50. package/dist/remember-many-spawn-benchmark.d.ts.map +1 -0
  51. package/dist/remember-many-spawn-benchmark.js +163 -0
  52. package/dist/remember-many-spawn-benchmark.js.map +1 -0
  53. package/dist/remember-spawn-benchmark.d.ts +3 -0
  54. package/dist/remember-spawn-benchmark.d.ts.map +1 -0
  55. package/dist/remember-spawn-benchmark.js +230 -0
  56. package/dist/remember-spawn-benchmark.js.map +1 -0
  57. package/dist/remember-spawn-receipt-benchmark.d.ts +3 -0
  58. package/dist/remember-spawn-receipt-benchmark.d.ts.map +1 -0
  59. package/dist/remember-spawn-receipt-benchmark.js +266 -0
  60. package/dist/remember-spawn-receipt-benchmark.js.map +1 -0
  61. package/dist/sgv2-async-verify.d.ts +17 -0
  62. package/dist/sgv2-async-verify.d.ts.map +1 -0
  63. package/dist/sgv2-async-verify.js +217 -0
  64. package/dist/sgv2-async-verify.js.map +1 -0
  65. package/dist/social-graph-v2-read-benchmark.d.ts +11 -2
  66. package/dist/social-graph-v2-read-benchmark.d.ts.map +1 -1
  67. package/dist/social-graph-v2-read-benchmark.js +145 -3
  68. package/dist/social-graph-v2-read-benchmark.js.map +1 -1
  69. package/dist/social-graph-v2.d.ts +65 -4
  70. package/dist/social-graph-v2.d.ts.map +1 -1
  71. package/dist/social-graph-v2.js +72 -6
  72. package/dist/social-graph-v2.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ /**
38
+ * phase-390/T390.0 — CHARACTERIZE baseline at the new m=32 default.
39
+ *
40
+ * NO pre-registered gate. This is data collection (like phase-389/T389.1).
41
+ * Goal: measure mean ± std across N=10 seeds for a small set of call
42
+ * shapes so the next step (T390.1) can pre-register gates based on
43
+ * actual evidence rather than intuition.
44
+ *
45
+ * Configs swept (informational, all at m=32 ef=200 ef_search=50 dim=128 n=30K):
46
+ * - raw rememberSpawn c=16 (the path historically called "raw c=16")
47
+ * - raw rememberSpawn c=32
48
+ * - raw rememberSpawn c=48
49
+ * - raw rememberSpawn c=64
50
+ * - MicroBatcher fire-and-forget c=16 win=1ms max=128 (phase-385 declared best)
51
+ *
52
+ * Output: research/T390_0_baseline_multiseed.tsv with seed-level rows + summary stats.
53
+ *
54
+ * Usage:
55
+ * npx tsx packages/node/ts/phase-390-baseline-multiseed.ts
56
+ * npx tsx packages/node/ts/phase-390-baseline-multiseed.ts --total 30000 --seeds 11,23,37,53,71,89,103,113,127,139
57
+ */
58
+ const path = __importStar(require("path"));
59
+ const os = __importStar(require("os"));
60
+ const fs = __importStar(require("fs"));
61
+ const micro_batcher_1 = require("./micro-batcher");
62
+ const args = new Map();
63
+ process.argv.slice(2).forEach((arg, i, arr) => {
64
+ if (arg.startsWith('--')) {
65
+ const key = arg.slice(2);
66
+ if (i + 1 < arr.length && !arr[i + 1].startsWith('--')) {
67
+ args.set(key, arr[i + 1]);
68
+ }
69
+ else {
70
+ args.set(key, 'true');
71
+ }
72
+ }
73
+ });
74
+ const DIM = parseInt(args.get('dim') ?? '128', 10);
75
+ const TOTAL = parseInt(args.get('total') ?? '30000', 10);
76
+ const SEEDS = (args.get('seeds') ?? '11,23,37,53,71,89,103,113,127,139')
77
+ .split(',')
78
+ .map((s) => parseInt(s, 10));
79
+ const EF_CONSTRUCTION = parseInt(args.get('ef') ?? '200', 10);
80
+ const EF_SEARCH = 50;
81
+ const M = parseInt(args.get('m') ?? '32', 10);
82
+ const MAX_ELEMENTS = 1000000;
83
+ const ROOT = path.resolve(__dirname, '..', '..', '..');
84
+ const tmpRoot = path.join(os.tmpdir(), `aidb-t390-0-baseline-${process.pid}`);
85
+ fs.mkdirSync(tmpRoot, { recursive: true });
86
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
87
+ const { AiFastDb } = require(path.join(ROOT, 'packages', 'node'));
88
+ function vectorOf(seed, dim) {
89
+ const v = new Array(dim);
90
+ for (let i = 0; i < dim; i++) {
91
+ v[i] = Math.sin(seed * 2654435761 + i * 374761393);
92
+ }
93
+ return v;
94
+ }
95
+ function makeInput(id, dim, seed) {
96
+ return {
97
+ content: `t390 doc seed=${seed} id=${id}`,
98
+ embedding: vectorOf((seed << 16) ^ id, dim),
99
+ tags: ['t390'],
100
+ metadata: { id_num: id, seed_num: seed },
101
+ importance: 0.5,
102
+ };
103
+ }
104
+ function makeDb(dbPath, dim) {
105
+ fs.mkdirSync(dbPath, { recursive: true });
106
+ return new AiFastDb({
107
+ path: dbPath,
108
+ dimension: dim,
109
+ hnsw: {
110
+ m: M,
111
+ efConstruction: EF_CONSTRUCTION,
112
+ efSearch: EF_SEARCH,
113
+ dimension: dim,
114
+ maxElements: MAX_ELEMENTS,
115
+ },
116
+ });
117
+ }
118
+ function configLabel(c) {
119
+ switch (c.kind) {
120
+ case 'raw_spawn':
121
+ return `raw_spawn_c${c.c}`;
122
+ case 'mb_faf':
123
+ return `mb_faf_c${c.c}_w${c.windowMs}_m${c.maxBatch}`;
124
+ }
125
+ }
126
+ async function runOnce(cfg, total, dim, seed) {
127
+ const dbPath = path.join(tmpRoot, `${configLabel(cfg)}-s${seed}-${Date.now()}`);
128
+ const db = makeDb(dbPath, dim);
129
+ const inputs = Array.from({ length: total }, (_, i) => makeInput(i, dim, seed));
130
+ const start = process.hrtime.bigint();
131
+ if (cfg.kind === 'raw_spawn') {
132
+ let next = 0;
133
+ const workers = [];
134
+ for (let w = 0; w < cfg.c; w++) {
135
+ workers.push((async () => {
136
+ while (true) {
137
+ const idx = next++;
138
+ if (idx >= total)
139
+ return;
140
+ await db.rememberSpawn(inputs[idx]);
141
+ }
142
+ })());
143
+ }
144
+ await Promise.all(workers);
145
+ }
146
+ else if (cfg.kind === 'mb_faf') {
147
+ const batcher = new micro_batcher_1.MicroBatcher(async (batch) => {
148
+ const results = await db.rememberManySpawn(batch);
149
+ return results;
150
+ }, { windowMs: cfg.windowMs, maxBatch: cfg.maxBatch });
151
+ // fire-and-forget: queue all inputs, then await final flush
152
+ const promises = inputs.map((inp) => batcher.call(inp));
153
+ await Promise.all(promises);
154
+ await batcher.flush();
155
+ }
156
+ const elapsed = Number(process.hrtime.bigint() - start) / 1e9;
157
+ return total / elapsed;
158
+ }
159
+ function summarise(label, values) {
160
+ const n = values.length;
161
+ const mean = values.reduce((a, b) => a + b, 0) / n;
162
+ const var_ = values.reduce((a, b) => a + (b - mean) ** 2, 0) / n;
163
+ const std = Math.sqrt(var_);
164
+ const tCrit = 2.262; // n=10
165
+ const ci95 = (tCrit * std) / Math.sqrt(n);
166
+ const min = Math.min(...values);
167
+ const max = Math.max(...values);
168
+ return { label, n, mean, std, ci95, min, max, values };
169
+ }
170
+ async function main() {
171
+ console.log('[t390-0] phase-390/T390.0 baseline characterisation at m=32 default');
172
+ console.log(`[t390-0] dim=${DIM} total=${TOTAL} ef=${EF_CONSTRUCTION} m=${M}`);
173
+ console.log(`[t390-0] seeds=${SEEDS.join(',')} (${SEEDS.length} seeds)`);
174
+ console.log('');
175
+ const configs = [
176
+ { kind: 'raw_spawn', c: 16 },
177
+ { kind: 'raw_spawn', c: 32 },
178
+ { kind: 'raw_spawn', c: 48 },
179
+ { kind: 'raw_spawn', c: 64 },
180
+ { kind: 'mb_faf', c: 16, windowMs: 1, maxBatch: 128 },
181
+ ];
182
+ // results[label] = ops[]
183
+ const results = {};
184
+ for (const cfg of configs) {
185
+ results[configLabel(cfg)] = [];
186
+ }
187
+ // Interleave configs across seeds so any system load drift
188
+ // is spread evenly rather than biasing one config.
189
+ for (const seed of SEEDS) {
190
+ for (const cfg of configs) {
191
+ const ops = await runOnce(cfg, TOTAL, DIM, seed);
192
+ results[configLabel(cfg)].push(ops);
193
+ console.log(`[t390-0] seed=${seed.toString().padStart(3)} ${configLabel(cfg).padEnd(28)} ops/s=${ops.toFixed(0).padStart(7)}`);
194
+ }
195
+ }
196
+ console.log('');
197
+ console.log(`[t390-0] === per-config summary (N=${SEEDS.length} seeds) ===`);
198
+ const stats = configs.map((c) => summarise(configLabel(c), results[configLabel(c)]));
199
+ for (const s of stats) {
200
+ console.log(`[t390-0] ${s.label.padEnd(28)} mean=${s.mean.toFixed(0).padStart(7)} std=${s.std.toFixed(0).padStart(6)} 95%CI=±${s.ci95.toFixed(0).padStart(5)} min=${s.min.toFixed(0).padStart(7)} max=${s.max.toFixed(0).padStart(7)} 2sigma=${(2 * s.std).toFixed(0).padStart(6)}`);
201
+ }
202
+ // Distance to M3 = 100K and to phase-385's reported 81.5K.
203
+ console.log('');
204
+ console.log(`[t390-0] === distance to milestones (per config best mean) ===`);
205
+ const best = stats.reduce((a, b) => (a.mean > b.mean ? a : b));
206
+ console.log(`[t390-0] best config: ${best.label} mean=${best.mean.toFixed(0)} ops/s`);
207
+ console.log(`[t390-0] gap to M3 (100,000): ${(100000 - best.mean).toFixed(0)} ops/s (${((100000 / best.mean - 1) * 100).toFixed(1)}% lift needed)`);
208
+ console.log(`[t390-0] vs phase-385 81.5K provisional: ${best.mean >= 81500 ? '+' : ''}${((best.mean / 81500 - 1) * 100).toFixed(1)}% (note: phase-385 was ef=50 m=16; this is ef=200 m=32)`);
209
+ // Persist
210
+ const outFile = path.join(ROOT, 'research', 'T390_0_baseline_multiseed.tsv');
211
+ const lines = [];
212
+ lines.push(`# phase-390/T390.0 baseline characterisation`);
213
+ lines.push(`# dim=${DIM} total=${TOTAL} ef=${EF_CONSTRUCTION} m=${M} seeds=${SEEDS.join(',')}`);
214
+ lines.push(`seed\tconfig\tops_per_s`);
215
+ for (let i = 0; i < SEEDS.length; i++) {
216
+ for (const cfg of configs) {
217
+ const label = configLabel(cfg);
218
+ lines.push(`${SEEDS[i]}\t${label}\t${results[label][i].toFixed(2)}`);
219
+ }
220
+ }
221
+ lines.push('');
222
+ lines.push(`# summary`);
223
+ lines.push(`config\tn\tmean\tstd\tci95\tmin\tmax\ttwo_sigma`);
224
+ for (const s of stats) {
225
+ lines.push(`${s.label}\t${s.n}\t${s.mean.toFixed(2)}\t${s.std.toFixed(2)}\t${s.ci95.toFixed(2)}\t${s.min.toFixed(2)}\t${s.max.toFixed(2)}\t${(2 * s.std).toFixed(2)}`);
226
+ }
227
+ fs.writeFileSync(outFile, lines.join('\n'), 'utf8');
228
+ console.log('');
229
+ console.log(`[t390-0] raw measurements written to ${outFile}`);
230
+ try {
231
+ fs.rmSync(tmpRoot, { recursive: true, force: true });
232
+ }
233
+ catch (_) {
234
+ // best-effort
235
+ }
236
+ }
237
+ main().catch((err) => {
238
+ console.error(err);
239
+ process.exit(1);
240
+ });
241
+ //# sourceMappingURL=phase-390-baseline-multiseed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-390-baseline-multiseed.js","sourceRoot":"","sources":["../ts/phase-390-baseline-multiseed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=phase-390-t2-mb-grid-sweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-390-t2-mb-grid-sweep.d.ts","sourceRoot":"","sources":["../ts/phase-390-t2-mb-grid-sweep.ts"],"names":[],"mappings":""}
@@ -0,0 +1,291 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ /**
38
+ * phase-390/T390.2-V2 — H_B-only sweep on MicroBatcher fire-and-forget.
39
+ *
40
+ * V1 of this script used a sequential pull-based caller loop and produced
41
+ * 1,029 ops/s on the control cell vs T390.0 baseline 45,014 (44× regression),
42
+ * triggering the non-regression gate. phase-385/micro-batcher-benchmark.ts:
43
+ * 206-212 explicitly flags that pattern as anti-pattern that BREAKS micro-
44
+ * batching. Pre-registration was amended (research/program.md "T390.1
45
+ * amendment 2026-05-03") to remove H_C and run H_B alone in fire-and-
46
+ * forget push-all mode (inputs.map(inp => batcher.call(inp))), which is
47
+ * the same shape as T390.0's mb_faf baseline.
48
+ *
49
+ * Pre-registered eval cell (amended T390.1, frozen 2026-05-03 18:00 UTC+8
50
+ * BEFORE this run): (maxBatch=256, windowMs=1, fire-and-forget push-all).
51
+ * Gate decided ONLY at this cell. Other 4 cells in the grid are informational.
52
+ *
53
+ * T390.0 baseline: M_base = 45,014, σ_base = 7,510, min_base = 32,766.
54
+ * Tier 1: M_eval - M_base >= 2*max(σ_eval, σ_base) AND min(eval) >= 32,766.
55
+ * Tier 2: M_eval - M_base >= 1*max(σ_eval, σ_base) AND min(eval) >= 32,766.
56
+ * Non-regression: 30,000 <= M_ctrl <= 60,000 where ctrl = (maxBatch=128, win=1).
57
+ *
58
+ * Sweep: maxBatch ∈ {64, 128, 256, 512, 1024} = 5 cells.
59
+ * Seeds: [11, 23, 37, 53, 71, 89, 103, 113, 127, 139] (paired with T390.0).
60
+ *
61
+ * Usage:
62
+ * npx tsx packages/node/ts/phase-390-t2-mb-grid-sweep.ts
63
+ */
64
+ const path = __importStar(require("path"));
65
+ const os = __importStar(require("os"));
66
+ const fs = __importStar(require("fs"));
67
+ const micro_batcher_1 = require("./micro-batcher");
68
+ const args = new Map();
69
+ process.argv.slice(2).forEach((arg, i, arr) => {
70
+ if (arg.startsWith('--')) {
71
+ const key = arg.slice(2);
72
+ if (i + 1 < arr.length && !arr[i + 1].startsWith('--')) {
73
+ args.set(key, arr[i + 1]);
74
+ }
75
+ else {
76
+ args.set(key, 'true');
77
+ }
78
+ }
79
+ });
80
+ const DIM = parseInt(args.get('dim') ?? '128', 10);
81
+ const TOTAL = parseInt(args.get('total') ?? '30000', 10);
82
+ const SEEDS = (args.get('seeds') ?? '11,23,37,53,71,89,103,113,127,139')
83
+ .split(',')
84
+ .map((s) => parseInt(s, 10));
85
+ const EF_CONSTRUCTION = parseInt(args.get('ef') ?? '200', 10);
86
+ const EF_SEARCH = 50;
87
+ const M = parseInt(args.get('m') ?? '32', 10);
88
+ const MAX_ELEMENTS = 1000000;
89
+ // Pre-registered T390.0 baseline anchors (frozen).
90
+ const M_BASE = 45014;
91
+ const SIGMA_BASE = 7510;
92
+ const MIN_BASE = 32766;
93
+ // Amended T390.1 sweep grid (H_B only).
94
+ const MAX_BATCH_GRID = [64, 128, 256, 512, 1024];
95
+ const WINDOW_MS = 1;
96
+ // Pre-registered single eval cell (amended T390.1, frozen).
97
+ const EVAL_MAX = 256;
98
+ // Pre-registered non-regression control cell (frozen, == T390.0 baseline cell).
99
+ const CTRL_MAX = 128;
100
+ const ROOT = path.resolve(__dirname, '..', '..', '..');
101
+ const tmpRoot = path.join(os.tmpdir(), `aidb-t390-2v2-mb-${process.pid}`);
102
+ fs.mkdirSync(tmpRoot, { recursive: true });
103
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
104
+ const { AiFastDb } = require(path.join(ROOT, 'packages', 'node'));
105
+ function vectorOf(seed, dim) {
106
+ const v = new Array(dim);
107
+ for (let i = 0; i < dim; i++) {
108
+ v[i] = Math.sin(seed * 2654435761 + i * 374761393);
109
+ }
110
+ return v;
111
+ }
112
+ function makeInput(id, dim, seed) {
113
+ return {
114
+ content: `t390-2v2 doc seed=${seed} id=${id}`,
115
+ embedding: vectorOf((seed << 16) ^ id, dim),
116
+ tags: ['t390-2v2'],
117
+ metadata: { id_num: id, seed_num: seed },
118
+ importance: 0.5,
119
+ };
120
+ }
121
+ function makeDb(dbPath, dim) {
122
+ fs.mkdirSync(dbPath, { recursive: true });
123
+ return new AiFastDb({
124
+ path: dbPath,
125
+ dimension: dim,
126
+ hnsw: {
127
+ m: M,
128
+ efConstruction: EF_CONSTRUCTION,
129
+ efSearch: EF_SEARCH,
130
+ dimension: dim,
131
+ maxElements: MAX_ELEMENTS,
132
+ },
133
+ });
134
+ }
135
+ function cellLabel(c) {
136
+ return `mb_faf_w${c.windowMs}_m${c.maxBatch}`;
137
+ }
138
+ async function runOnce(cell, total, dim, seed) {
139
+ const dbPath = path.join(tmpRoot, `${cellLabel(cell)}-s${seed}-${Date.now()}`);
140
+ const db = makeDb(dbPath, dim);
141
+ const inputs = Array.from({ length: total }, (_, i) => makeInput(i, dim, seed));
142
+ const batcher = new micro_batcher_1.MicroBatcher(async (batch) => {
143
+ const results = await db.rememberManySpawn(batch);
144
+ return results;
145
+ }, { windowMs: cell.windowMs, maxBatch: cell.maxBatch });
146
+ // Fire-and-forget push-all — the phase-385 declared-best pattern,
147
+ // also the shape used by the T390.0 mb_faf baseline. The queue
148
+ // length is bounded by maxBatch (NOT by callerCount), so larger
149
+ // maxBatch means fewer NAPI handshakes.
150
+ const start = process.hrtime.bigint();
151
+ const promises = inputs.map((inp) => batcher.call(inp));
152
+ await Promise.all(promises);
153
+ await batcher.flush();
154
+ const elapsed = Number(process.hrtime.bigint() - start) / 1e9;
155
+ return total / elapsed;
156
+ }
157
+ function summarise(label, values) {
158
+ const n = values.length;
159
+ const mean = values.reduce((a, b) => a + b, 0) / n;
160
+ const var_ = values.reduce((a, b) => a + (b - mean) ** 2, 0) / n;
161
+ const std = Math.sqrt(var_);
162
+ const tCrit = 2.262;
163
+ const ci95 = (tCrit * std) / Math.sqrt(n);
164
+ const min = Math.min(...values);
165
+ const max = Math.max(...values);
166
+ return { label, n, mean, std, ci95, min, max, values };
167
+ }
168
+ async function main() {
169
+ console.log('[t390-2v2] phase-390/T390.2-V2 mb_faf H_B-only fire-and-forget sweep');
170
+ console.log(`[t390-2v2] dim=${DIM} total=${TOTAL} ef=${EF_CONSTRUCTION} m=${M} windowMs=${WINDOW_MS}`);
171
+ console.log(`[t390-2v2] seeds=${SEEDS.join(',')} (${SEEDS.length} seeds)`);
172
+ console.log(`[t390-2v2] grid: maxBatch ∈ ${JSON.stringify(MAX_BATCH_GRID)} = ${MAX_BATCH_GRID.length} cells`);
173
+ console.log(`[t390-2v2] PRE-REGISTERED eval cell: maxBatch=${EVAL_MAX} win=${WINDOW_MS}`);
174
+ console.log(`[t390-2v2] PRE-REGISTERED ctrl cell: maxBatch=${CTRL_MAX} win=${WINDOW_MS}`);
175
+ console.log(`[t390-2v2] PRE-REGISTERED T390.0 baseline: M_base=${M_BASE} σ_base=${SIGMA_BASE} min_base=${MIN_BASE}`);
176
+ console.log(`[t390-2v2] PRE-REGISTERED Tier 1 floor: ≥${(M_BASE + 2 * SIGMA_BASE).toFixed(0)} ops/s (lift > 2σ_base)`);
177
+ console.log(`[t390-2v2] PRE-REGISTERED Tier 2 floor: ≥${(M_BASE + 1 * SIGMA_BASE).toFixed(0)} ops/s (lift > 1σ_base)`);
178
+ console.log('');
179
+ const cells = MAX_BATCH_GRID.map((m) => ({ maxBatch: m, windowMs: WINDOW_MS }));
180
+ const results = {};
181
+ for (const cell of cells) {
182
+ results[cellLabel(cell)] = [];
183
+ }
184
+ for (const seed of SEEDS) {
185
+ for (const cell of cells) {
186
+ const ops = await runOnce(cell, TOTAL, DIM, seed);
187
+ results[cellLabel(cell)].push(ops);
188
+ console.log(`[t390-2v2] seed=${seed.toString().padStart(3)} ${cellLabel(cell).padEnd(24)} ops/s=${ops.toFixed(0).padStart(7)}`);
189
+ }
190
+ }
191
+ console.log('');
192
+ console.log(`[t390-2v2] === per-cell summary (N=${SEEDS.length} seeds) ===`);
193
+ const stats = cells.map((c) => summarise(cellLabel(c), results[cellLabel(c)]));
194
+ for (const s of stats) {
195
+ console.log(`[t390-2v2] ${s.label.padEnd(24)} mean=${s.mean.toFixed(0).padStart(7)} std=${s.std.toFixed(0).padStart(6)} 95%CI=±${s.ci95.toFixed(0).padStart(5)} min=${s.min.toFixed(0).padStart(7)} max=${s.max.toFixed(0).padStart(7)} 2sigma=${(2 * s.std).toFixed(0).padStart(6)}`);
196
+ }
197
+ const evalLabel = `mb_faf_w${WINDOW_MS}_m${EVAL_MAX}`;
198
+ const ctrlLabel = `mb_faf_w${WINDOW_MS}_m${CTRL_MAX}`;
199
+ const evalStats = stats.find((s) => s.label === evalLabel);
200
+ const ctrlStats = stats.find((s) => s.label === ctrlLabel);
201
+ const lift = evalStats.mean - M_BASE;
202
+ const sigmaCap = Math.max(evalStats.std, SIGMA_BASE);
203
+ const tier1Threshold = 2 * sigmaCap;
204
+ const tier2Threshold = 1 * sigmaCap;
205
+ const tier1Mean = lift >= tier1Threshold;
206
+ const tier1MinSeed = evalStats.min >= MIN_BASE;
207
+ const tier1 = tier1Mean && tier1MinSeed;
208
+ const tier2Mean = lift >= tier2Threshold;
209
+ const tier2 = tier2Mean && tier1MinSeed;
210
+ const ctrlInBand = ctrlStats.mean >= 30000 && ctrlStats.mean <= 60000;
211
+ console.log('');
212
+ console.log('[t390-2v2] === pre-registered gate evaluation (T390.1 amended 2026-05-03) ===');
213
+ console.log(`[t390-2v2] eval cell: ${evalLabel} M_eval=${evalStats.mean.toFixed(0)} σ_eval=${evalStats.std.toFixed(0)} min_eval=${evalStats.min.toFixed(0)}`);
214
+ console.log(`[t390-2v2] lift = M_eval - M_base = ${lift.toFixed(0)} ops/s (max(σ_eval, σ_base) = ${sigmaCap.toFixed(0)})`);
215
+ console.log(`[t390-2v2] Tier 1: lift >= 2*max(σ_eval, σ_base) = ${tier1Threshold.toFixed(0)} ? ${tier1Mean ? 'YES' : 'NO'}`);
216
+ console.log(`[t390-2v2] AND min(eval) >= ${MIN_BASE} ? ${tier1MinSeed ? 'YES' : 'NO'}`);
217
+ console.log(`[t390-2v2] => Tier 1 ${tier1 ? '*** PASS ***' : 'FAIL'}`);
218
+ console.log(`[t390-2v2] Tier 2: lift >= 1*max(σ_eval, σ_base) = ${tier2Threshold.toFixed(0)} ? ${tier2Mean ? 'YES' : 'NO'}`);
219
+ console.log(`[t390-2v2] AND min(eval) >= ${MIN_BASE} ? ${tier1MinSeed ? 'YES' : 'NO'}`);
220
+ console.log(`[t390-2v2] => Tier 2 ${tier2 ? '*** PASS ***' : 'FAIL'}`);
221
+ console.log('');
222
+ console.log(`[t390-2v2] non-regression ctrl cell: ${ctrlLabel} M_ctrl=${ctrlStats.mean.toFixed(0)}`);
223
+ console.log(`[t390-2v2] band: 30,000 <= M_ctrl <= 60,000 ? ${ctrlInBand ? '*** OK ***' : 'OUT-OF-BAND — sweep invalid'}`);
224
+ console.log('');
225
+ const bestStat = stats.reduce((a, b) => (a.mean > b.mean ? a : b));
226
+ console.log(`[t390-2v2] best-of-grid (informational only, NOT the gate cell): ${bestStat.label} mean=${bestStat.mean.toFixed(0)} std=${bestStat.std.toFixed(0)}`);
227
+ console.log(`[t390-2v2] gap to M3 (100,000) at best-of-grid: ${(100000 - bestStat.mean).toFixed(0)} ops/s`);
228
+ console.log('');
229
+ console.log('[t390-2v2] === decision per pre-registered T390.4 rule ===');
230
+ if (!ctrlInBand) {
231
+ console.log('[t390-2v2] DECISION: control cell out of T390.0 ±2σ band -> sweep INVALID. Re-run at quieter machine state. Do NOT relax the gate.');
232
+ }
233
+ else if (tier1) {
234
+ console.log('[t390-2v2] DECISION: Tier 1 PASS + control valid -> ADVANCE TO T390.3 multi-seed replication on disjoint seeds [151,163,173,181,193,197,199,211,223,227]. Default change requires T390.3 to PASS Tier 1 again.');
235
+ }
236
+ else if (tier2) {
237
+ console.log('[t390-2v2] DECISION: Tier 2 PASS only -> JSDoc-only update to micro-batcher.ts recommended params; NO default change; NO T390.3 replication required.');
238
+ }
239
+ else {
240
+ console.log('[t390-2v2] DECISION: both Tier 1 and Tier 2 FAIL -> keep MicroBatcher recommended config at phase-385 (maxBatch=128, windowMs=1) for m=32 default. Document lessons in T390.5 wrap-up.');
241
+ }
242
+ const outFile = path.join(ROOT, 'research', 'T390_2_mb_grid_sweep.tsv');
243
+ const lines = [];
244
+ lines.push(`# phase-390/T390.2-V2 H_B-only fire-and-forget mb_faf grid sweep`);
245
+ lines.push(`# dim=${DIM} total=${TOTAL} ef=${EF_CONSTRUCTION} m=${M} windowMs=${WINDOW_MS} seeds=${SEEDS.join(',')}`);
246
+ lines.push(`seed\tcell\tops_per_s`);
247
+ for (let i = 0; i < SEEDS.length; i++) {
248
+ for (const cell of cells) {
249
+ lines.push(`${SEEDS[i]}\t${cellLabel(cell)}\t${results[cellLabel(cell)][i].toFixed(2)}`);
250
+ }
251
+ }
252
+ lines.push('');
253
+ lines.push(`# summary`);
254
+ lines.push(`cell\tn\tmean\tstd\tci95\tmin\tmax\ttwo_sigma`);
255
+ for (const s of stats) {
256
+ lines.push(`${s.label}\t${s.n}\t${s.mean.toFixed(2)}\t${s.std.toFixed(2)}\t${s.ci95.toFixed(2)}\t${s.min.toFixed(2)}\t${s.max.toFixed(2)}\t${(2 * s.std).toFixed(2)}`);
257
+ }
258
+ lines.push('');
259
+ lines.push(`# gate evaluation (pre-registered T390.1, amended 2026-05-03)`);
260
+ lines.push(`field\tvalue`);
261
+ lines.push(`eval_cell\t${evalLabel}`);
262
+ lines.push(`eval_mean\t${evalStats.mean.toFixed(2)}`);
263
+ lines.push(`eval_std\t${evalStats.std.toFixed(2)}`);
264
+ lines.push(`eval_min\t${evalStats.min.toFixed(2)}`);
265
+ lines.push(`baseline_mean_T390_0\t${M_BASE}`);
266
+ lines.push(`baseline_sigma_T390_0\t${SIGMA_BASE}`);
267
+ lines.push(`baseline_min_T390_0\t${MIN_BASE}`);
268
+ lines.push(`lift\t${lift.toFixed(2)}`);
269
+ lines.push(`tier1_threshold\t${tier1Threshold.toFixed(2)}`);
270
+ lines.push(`tier1_pass\t${tier1 ? 'PASS' : 'FAIL'}`);
271
+ lines.push(`tier2_threshold\t${tier2Threshold.toFixed(2)}`);
272
+ lines.push(`tier2_pass\t${tier2 ? 'PASS' : 'FAIL'}`);
273
+ lines.push(`ctrl_cell\t${ctrlLabel}`);
274
+ lines.push(`ctrl_mean\t${ctrlStats.mean.toFixed(2)}`);
275
+ lines.push(`ctrl_in_band\t${ctrlInBand ? 'OK' : 'OUT_OF_BAND'}`);
276
+ lines.push(`best_of_grid\t${bestStat.label}\t${bestStat.mean.toFixed(2)}`);
277
+ fs.writeFileSync(outFile, lines.join('\n'), 'utf8');
278
+ console.log('');
279
+ console.log(`[t390-2v2] raw measurements + gate eval written to ${outFile}`);
280
+ try {
281
+ fs.rmSync(tmpRoot, { recursive: true, force: true });
282
+ }
283
+ catch (_) {
284
+ // best-effort
285
+ }
286
+ }
287
+ main().catch((err) => {
288
+ console.error(err);
289
+ process.exit(1);
290
+ });
291
+ //# sourceMappingURL=phase-390-t2-mb-grid-sweep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-390-t2-mb-grid-sweep.js","sourceRoot":"","sources":["../ts/phase-390-t2-mb-grid-sweep.ts"],"names":[],"mappings":"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"}