@quolu/lattice 0.42.1 → 0.44.0

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 (113) hide show
  1. package/package.json +4 -2
  2. package/sensor/dist/bin/lattice-sensor.js +14 -0
  3. package/sensor/dist/db/index.d.ts +114 -0
  4. package/sensor/dist/db/index.d.ts.map +1 -1
  5. package/sensor/dist/db/index.js +235 -7
  6. package/sensor/dist/db/index.js.map +1 -1
  7. package/sensor/dist/db/queries.d.ts +26 -4
  8. package/sensor/dist/db/queries.d.ts.map +1 -1
  9. package/sensor/dist/db/queries.js +72 -10
  10. package/sensor/dist/db/queries.js.map +1 -1
  11. package/sensor/dist/db/wal-valve.d.ts +15 -2
  12. package/sensor/dist/db/wal-valve.d.ts.map +1 -1
  13. package/sensor/dist/db/wal-valve.js +88 -6
  14. package/sensor/dist/db/wal-valve.js.map +1 -1
  15. package/sensor/dist/extraction/extraction-version.d.ts +1 -1
  16. package/sensor/dist/extraction/extraction-version.d.ts.map +1 -1
  17. package/sensor/dist/extraction/extraction-version.js +5 -1
  18. package/sensor/dist/extraction/extraction-version.js.map +1 -1
  19. package/sensor/dist/extraction/function-ref.d.ts.map +1 -1
  20. package/sensor/dist/extraction/function-ref.js +6 -0
  21. package/sensor/dist/extraction/function-ref.js.map +1 -1
  22. package/sensor/dist/extraction/grammars.d.ts.map +1 -1
  23. package/sensor/dist/extraction/grammars.js +46 -0
  24. package/sensor/dist/extraction/grammars.js.map +1 -1
  25. package/sensor/dist/extraction/index.d.ts +11 -1
  26. package/sensor/dist/extraction/index.d.ts.map +1 -1
  27. package/sensor/dist/extraction/index.js +50 -11
  28. package/sensor/dist/extraction/index.js.map +1 -1
  29. package/sensor/dist/extraction/kernel/decode.d.ts.map +1 -1
  30. package/sensor/dist/extraction/kernel/decode.js +13 -3
  31. package/sensor/dist/extraction/kernel/decode.js.map +1 -1
  32. package/sensor/dist/extraction/kernel/index.d.ts +2 -0
  33. package/sensor/dist/extraction/kernel/index.d.ts.map +1 -1
  34. package/sensor/dist/extraction/kernel/index.js +122 -8
  35. package/sensor/dist/extraction/kernel/index.js.map +1 -1
  36. package/sensor/dist/extraction/kernel/layout.d.ts +12 -2
  37. package/sensor/dist/extraction/kernel/layout.d.ts.map +1 -1
  38. package/sensor/dist/extraction/kernel/layout.js +13 -3
  39. package/sensor/dist/extraction/kernel/layout.js.map +1 -1
  40. package/sensor/dist/extraction/kernel/loader.d.ts +42 -0
  41. package/sensor/dist/extraction/kernel/loader.d.ts.map +1 -1
  42. package/sensor/dist/extraction/kernel/loader.js.map +1 -1
  43. package/sensor/dist/extraction/languages/c-cpp.d.ts +13 -0
  44. package/sensor/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  45. package/sensor/dist/extraction/languages/c-cpp.js +809 -13
  46. package/sensor/dist/extraction/languages/c-cpp.js.map +1 -1
  47. package/sensor/dist/extraction/store-worker.js +29 -0
  48. package/sensor/dist/extraction/store-worker.js.map +1 -1
  49. package/sensor/dist/extraction/tree-sitter.d.ts +4 -1
  50. package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
  51. package/sensor/dist/extraction/tree-sitter.js +20 -4
  52. package/sensor/dist/extraction/tree-sitter.js.map +1 -1
  53. package/sensor/dist/extraction/wasm/tree-sitter-c.wasm +0 -0
  54. package/sensor/dist/extraction/wasm/tree-sitter-cpp.wasm +0 -0
  55. package/sensor/dist/extraction/wasm/tree-sitter-dart.wasm +0 -0
  56. package/sensor/dist/extraction/wasm/tree-sitter-kotlin.wasm +0 -0
  57. package/sensor/dist/extraction/wasm/tree-sitter-php.wasm +0 -0
  58. package/sensor/dist/extraction/wasm/tree-sitter-ruby.wasm +0 -0
  59. package/sensor/dist/extraction/wasm/tree-sitter-rust.wasm +0 -0
  60. package/sensor/dist/extraction/wasm/tree-sitter-swift.wasm +0 -0
  61. package/sensor/dist/index.d.ts +3 -1
  62. package/sensor/dist/index.d.ts.map +1 -1
  63. package/sensor/dist/index.js +31 -7
  64. package/sensor/dist/index.js.map +1 -1
  65. package/sensor/dist/mcp/index.d.ts +24 -0
  66. package/sensor/dist/mcp/index.d.ts.map +1 -1
  67. package/sensor/dist/mcp/index.js +51 -2
  68. package/sensor/dist/mcp/index.js.map +1 -1
  69. package/sensor/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  70. package/sensor/dist/mcp/liveness-watchdog.js +3 -1
  71. package/sensor/dist/mcp/liveness-watchdog.js.map +1 -1
  72. package/sensor/dist/mcp/server-instructions.d.ts +1 -1
  73. package/sensor/dist/mcp/server-instructions.d.ts.map +1 -1
  74. package/sensor/dist/mcp/server-instructions.js +1 -0
  75. package/sensor/dist/mcp/server-instructions.js.map +1 -1
  76. package/sensor/dist/mcp/tools.d.ts +48 -0
  77. package/sensor/dist/mcp/tools.d.ts.map +1 -1
  78. package/sensor/dist/mcp/tools.js +231 -4
  79. package/sensor/dist/mcp/tools.js.map +1 -1
  80. package/sensor/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  81. package/sensor/dist/resolution/c-fnptr-synthesizer.js +561 -127
  82. package/sensor/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  83. package/sensor/dist/resolution/callback-synthesizer.d.ts +1 -1
  84. package/sensor/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  85. package/sensor/dist/resolution/callback-synthesizer.js +80 -11
  86. package/sensor/dist/resolution/callback-synthesizer.js.map +1 -1
  87. package/sensor/dist/resolution/import-resolver.d.ts.map +1 -1
  88. package/sensor/dist/resolution/import-resolver.js +34 -2
  89. package/sensor/dist/resolution/import-resolver.js.map +1 -1
  90. package/sensor/dist/resolution/index.d.ts +34 -0
  91. package/sensor/dist/resolution/index.d.ts.map +1 -1
  92. package/sensor/dist/resolution/index.js +393 -51
  93. package/sensor/dist/resolution/index.js.map +1 -1
  94. package/sensor/dist/resolution/memory-budget.d.ts +48 -0
  95. package/sensor/dist/resolution/memory-budget.d.ts.map +1 -0
  96. package/sensor/dist/resolution/memory-budget.js +162 -0
  97. package/sensor/dist/resolution/memory-budget.js.map +1 -0
  98. package/sensor/dist/resolution/name-matcher.d.ts +4 -7
  99. package/sensor/dist/resolution/name-matcher.d.ts.map +1 -1
  100. package/sensor/dist/resolution/name-matcher.js +256 -91
  101. package/sensor/dist/resolution/name-matcher.js.map +1 -1
  102. package/sensor/dist/resolution/resolver-pool.d.ts +41 -1
  103. package/sensor/dist/resolution/resolver-pool.d.ts.map +1 -1
  104. package/sensor/dist/resolution/resolver-pool.js +103 -3
  105. package/sensor/dist/resolution/resolver-pool.js.map +1 -1
  106. package/sensor/dist/resolution/resolver-worker.js +27 -0
  107. package/sensor/dist/resolution/resolver-worker.js.map +1 -1
  108. package/sensor/dist/sync/watcher.d.ts +8 -1
  109. package/sensor/dist/sync/watcher.d.ts.map +1 -1
  110. package/sensor/dist/sync/watcher.js +44 -2
  111. package/sensor/dist/sync/watcher.js.map +1 -1
  112. package/sensor/dist/types.d.ts +3 -0
  113. package/sensor/dist/types.d.ts.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quolu/lattice",
3
- "version": "0.42.1",
3
+ "version": "0.44.0",
4
4
  "description": "Schedulability compiler for multi-agent development: observe real code boundaries, refactor the conflicting seam, recompile the plan for parallel execution",
5
5
  "author": {
6
6
  "name": "Quo / クオ at kitepon.dev",
@@ -74,7 +74,9 @@
74
74
  "verify:todo-store": "node bin/lattice.mjs todo verify --json",
75
75
  "check:cli-surface": "node scripts/verify-cli-surface.mjs",
76
76
  "check:open-questions": "node scripts/verify-open-questions.mjs",
77
- "check:reachability": "node scripts/verify-product-reachability.mjs"
77
+ "check:reachability": "node scripts/verify-product-reachability.mjs",
78
+ "upstream:check": "node scripts/upstream-check.mjs",
79
+ "upstream:sync": "node scripts/upstream-sync.mjs"
78
80
  },
79
81
  "homepage": "https://github.com/kitepon-rgb/Lattice#readme",
80
82
  "bugs": {
@@ -878,6 +878,7 @@ function main() {
878
878
  nodeCount: stats.nodeCount,
879
879
  edgeCount: stats.edgeCount,
880
880
  dbSizeBytes: stats.dbSizeBytes,
881
+ walSizeBytes: stats.walSizeBytes,
881
882
  backend,
882
883
  journalMode,
883
884
  nodesByKind: stats.nodesByKind,
@@ -933,6 +934,19 @@ function main() {
933
934
  console.log(` Nodes: ${formatNumber(stats.nodeCount)}`);
934
935
  console.log(` Edges: ${formatNumber(stats.edgeCount)}`);
935
936
  console.log(` DB Size: ${(stats.dbSizeBytes / 1024 / 1024).toFixed(2)} MB`);
937
+ // Surface the WAL sidecar (#1431): a WAL that dwarfs the DB at rest is
938
+ // the killed-session leak — invisible before this line, it only showed
939
+ // up as a mysteriously full disk. open() above already kicked off the
940
+ // automatic heal for the oversized case.
941
+ if (stats.walSizeBytes > 0) {
942
+ const { WAL_HEAL_THRESHOLD_BYTES } = await Promise.resolve().then(() => __importStar(require('../db/index')));
943
+ const oversized = stats.walSizeBytes > Math.max(WAL_HEAL_THRESHOLD_BYTES, stats.dbSizeBytes);
944
+ const walLabel = `${(stats.walSizeBytes / 1024 / 1024).toFixed(2)} MB`;
945
+ console.log(` WAL Size: ${oversized ? chalk.yellow(walLabel) : walLabel}`);
946
+ if (oversized) {
947
+ warn('The write-ahead log is larger than the database — killed sessions left it behind. It is reclaimed automatically on open; if it persists across runs, another live LatticeSensor process is holding it.');
948
+ }
949
+ }
936
950
  // Surface the active SQLite backend (node:sqlite — Node's built-in real
937
951
  // SQLite, full WAL + FTS5, no native build).
938
952
  const backendLabel = chalk.green(`node:sqlite ${(0, glyphs_1.getGlyphs)().dash} built-in (full WAL)`);
@@ -6,6 +6,20 @@
6
6
  import { SqliteDatabase, SqliteBackend } from './sqlite-adapter';
7
7
  import { SchemaVersion } from '../types';
8
8
  export { SqliteDatabase, SqliteBackend } from './sqlite-adapter';
9
+ /**
10
+ * WAL size past which `healOversizedWal` (run at every `open`) checkpoints and
11
+ * truncates the file, and to which `journal_size_limit` clips the WAL after any
12
+ * resetting checkpoint. A SIGKILL'd process (the #850 liveness watchdog, OOM,
13
+ * crash) can leave an arbitrarily large WAL behind — a whole deferred-sync
14
+ * run's worth (#1248) — and before #1431 no later session ever shrank it: the
15
+ * file just grew, killed session after killed session, until the disk filled
16
+ * (25.6 GB observed). 64 MB is far above anything a healthy open ever sees
17
+ * (a clean close deletes the WAL) yet small enough to cap the leak.
18
+ * Override with `LATTICE_SENSOR_WAL_HEAL_MB` (also feeds `journal_size_limit`).
19
+ */
20
+ export declare const WAL_HEAL_THRESHOLD_BYTES: number;
21
+ /** Resolve the heal threshold from the env override (MB); invalid ⇒ 64 MB. */
22
+ export declare function resolveWalHealBytes(envVal: string | undefined): number;
9
23
  /**
10
24
  * Database connection wrapper with lifecycle management
11
25
  */
@@ -52,6 +66,64 @@ export declare class DatabaseConnection {
52
66
  * IF NOT EXISTS).
53
67
  */
54
68
  endBulkNodeLoad(): void;
69
+ /**
70
+ * NON-UNIQUE secondary indexes maintained per-row during the parse phase's
71
+ * bulk inserts — the store-architecture arc's first lever (plan §4d: dubbo's
72
+ * parse-loop wall is 94% store-writer busy, and the #1320 post-mortem showed
73
+ * statement batching and sorted inserts are ~zero on this path because
74
+ * B-TREE MAINTENANCE is the floor). A fresh init writes every row of
75
+ * nodes/unresolved_refs/files exactly once and reads none of them until
76
+ * resolution, so the parse window can drop all of these and rebuild each in
77
+ * one table scan afterwards — the same measured trade as the resolution
78
+ * phase's edge-index window (2.8s → 1.1s inserting, ~0.3s recreating).
79
+ * Primary keys and UNIQUE constraints stay (upserts and OR-IGNORE dedup
80
+ * conflict on them).
81
+ */
82
+ private static readonly BULK_PARSE_INDEX_NAMES;
83
+ /**
84
+ * Enter bulk-parse-load mode (FRESH-INIT ONLY — the caller gates on a fresh
85
+ * DB, because an incremental index deletes per-file rows mid-phase and needs
86
+ * the file_path indexes): drop every parse-lane secondary index, including
87
+ * the four non-unique edge indexes (parse inserts contains-edges too; the
88
+ * UNIQUE identity index stays for INSERT OR IGNORE dedup, and its `source`
89
+ * prefix keeps source-keyed reads indexed, as in the edge window). MUST be
90
+ * paired with endBulkParseLoad(); a crash inside the window is healed on the
91
+ * next DatabaseConnection open (schema.sql re-applies CREATE INDEX IF NOT
92
+ * EXISTS).
93
+ */
94
+ beginBulkParseLoad(): void;
95
+ /**
96
+ * Leave bulk-parse-load mode: recreate everything the window dropped, one
97
+ * table scan per index, with a yield between statements (same
98
+ * liveness-watchdog rationale as endBulkEdgeLoad — at kernel scale each
99
+ * build is a long synchronous scan). The edge indexes are rebuilt here too,
100
+ * so paths that never enter the resolution phase's own bulk-edge window
101
+ * (small runs) are left with a complete schema; the batched resolver's
102
+ * beginBulkEdgeLoad simply re-drops them (DROP IF EXISTS — idempotent).
103
+ */
104
+ endBulkParseLoad(): Promise<void>;
105
+ /**
106
+ * unresolved_refs secondary indexes NOT read by the batched resolution
107
+ * loop. The loop pages pending refs by keyset (`status='pending' AND id>?`
108
+ * — the status index + PK), deletes resolved rows by id, and parks failures
109
+ * with a status UPDATE; every other ref index serves SYNC-time paths
110
+ * (per-file re-index deletes, name-keyed retry, failed-tail heal). Each
111
+ * per-batch DELETE maintains all of them — the biggest single main-thread
112
+ * stage on the dubbo profile (deletes 1.2s of a 5.4s resolution phase) —
113
+ * so the batched loop drops them and rebuilds at the end, where the table
114
+ * holds only the surviving FAILED refs (resolved rows are gone), making
115
+ * the recreate near-free.
116
+ */
117
+ private static readonly BULK_REF_INDEX_NAMES;
118
+ /**
119
+ * Enter bulk-ref mode for the batched resolution loop — see
120
+ * BULK_REF_INDEX_NAMES. MUST be paired with endBulkRefLoad(); a crash
121
+ * inside the window heals on the next open (schema.sql re-applies
122
+ * CREATE INDEX IF NOT EXISTS).
123
+ */
124
+ beginBulkRefLoad(): void;
125
+ /** Leave bulk-ref mode: recreate each index in one scan (yield between). */
126
+ endBulkRefLoad(): Promise<void>;
55
127
  /**
56
128
  * Names of the NON-UNIQUE edge indexes dropped for a bulk edge load.
57
129
  * idx_edges_identity deliberately stays: INSERT OR IGNORE's dedup conflicts
@@ -136,6 +208,9 @@ export declare class DatabaseConnection {
136
208
  * journal mode, in-memory DB, or no write since the last checkpoint+reset).
137
209
  */
138
210
  getWalSizeBytes(): number;
211
+ /** Size of the main DB file in bytes (0 for in-memory/unknown) — the WAL
212
+ * valve scales its fold caps with it (resolveWalValveMb). */
213
+ getDbFileSizeBytes(): number;
139
214
  /** Current `wal_autocheckpoint` interval in pages (0 = disabled). */
140
215
  getWalAutocheckpoint(): number;
141
216
  /**
@@ -169,6 +244,45 @@ export declare class DatabaseConnection {
169
244
  log: number;
170
245
  checkpointed: number;
171
246
  } | null>;
247
+ /**
248
+ * `PRAGMA wal_checkpoint(TRUNCATE)` — same off-thread pattern as PASSIVE,
249
+ * but on success the WAL FILE is chopped to zero. A completed passive
250
+ * backfill bounds the un-checkpointed backlog, yet the FILE only stops
251
+ * growing when a commit finds ZERO readers holding WAL marks — rare while
252
+ * pool workers cycle, so at kernel scale a fully-backfilled WAL still
253
+ * accreted the phase's whole write volume on disk (§7a.1: 22GB). The valve
254
+ * calls this exactly at a parked barrier (writer parked, pool drained,
255
+ * backfill complete) where the no-reader condition is guaranteed rather
256
+ * than lucky. The worker sets a short busy_timeout so a racing reader
257
+ * degrades this to a no-op (busy=1) instead of a stall.
258
+ */
259
+ checkpointWalTruncate(): Promise<{
260
+ busy: number;
261
+ log: number;
262
+ checkpointed: number;
263
+ } | null>;
264
+ /**
265
+ * Shrink a leftover oversized WAL (#1431). A SIGKILL'd session — the #850
266
+ * liveness watchdog, OOM, a crash — leaves its WAL on disk, the next session
267
+ * appends to the same file, and (pre-#1431) nothing ever truncated it:
268
+ * PASSIVE checkpoints fold frames but keep the file at its high-water mark,
269
+ * and the one shrinking path (a clean last-connection close) is exactly what
270
+ * the killed world never takes. Unbounded growth until the disk fills.
271
+ *
272
+ * Called fire-and-forget from every `open()`: cost is one statSync when the
273
+ * WAL is small (the overwhelmingly common case). Past the threshold it runs
274
+ * the off-thread PASSIVE fold then TRUNCATE — both on worker connections
275
+ * with a busy_timeout, so a racing writer degrades this to a no-op that the
276
+ * next open retries rather than a stall.
277
+ */
278
+ healOversizedWal(): Promise<{
279
+ healed: boolean;
280
+ beforeBytes: number;
281
+ afterBytes: number;
282
+ }>;
283
+ private walHeal;
284
+ private runWalHeal;
285
+ private checkpointWal;
172
286
  /**
173
287
  * Optimize database (vacuum and analyze)
174
288
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA0BjE;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IA4BrD;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAyB/C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiD;IAE1F;;;;;;;OAOG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IAKvB;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAKlC;IAEX;;;;;;;OAOG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;;;;;;;;;OAYG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC,8EAA8E;IAC9E,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,KAAK,IAAI,cAAc;IAIvB;;;;OAIG;IACH,UAAU,IAAI,aAAa;IAI3B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;;;;;;;;OASG;IACH,cAAc,IAAI,MAAM;IASxB;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAcxC;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B;;OAEG;IACH,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACH,eAAe,IAAI,MAAM;IASzB,qEAAqE;IACrE,oBAAoB,IAAI,MAAM;IAM9B;;;;;;;OAOG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;;;;;;;;;;;OAgBG;IACG,oBAAoB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA2CjG;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrC;;;;;;;OAOG;YACW,mBAAmB;IAkCjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;;;;;;;OAUG;IACH,gBAAgB,IAAI,OAAO;CAK5B;AAmBD;;GAEG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAS7C;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,8 @@ var __importStar = (this && this.__importStar) || (function () {
38
38
  };
39
39
  })();
40
40
  Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.DATABASE_FILENAME = exports.DatabaseConnection = void 0;
41
+ exports.DATABASE_FILENAME = exports.DatabaseConnection = exports.WAL_HEAL_THRESHOLD_BYTES = void 0;
42
+ exports.resolveWalHealBytes = resolveWalHealBytes;
42
43
  exports.getDatabasePath = getDatabasePath;
43
44
  exports.removeDatabaseFiles = removeDatabaseFiles;
44
45
  const sqlite_adapter_1 = require("./sqlite-adapter");
@@ -68,6 +69,34 @@ function configureConnection(db) {
68
69
  db.pragma('cache_size = -64000'); // 64 MB page cache
69
70
  db.pragma('temp_store = MEMORY'); // temp tables in memory
70
71
  db.pragma('mmap_size = 268435456'); // 256 MB memory-mapped I/O
72
+ // Without a journal_size_limit the -wal file never shrinks below its
73
+ // high-water mark while a connection lives: checkpoints fold frames back but
74
+ // leave the file at full size, so one giant deferred-sync WAL stays giant
75
+ // forever. With the limit set, any checkpoint that resets the WAL truncates
76
+ // the file back down. Killed-process leftovers are handled separately by
77
+ // healOversizedWal() at open. (#1431)
78
+ db.pragma(`journal_size_limit = ${exports.WAL_HEAL_THRESHOLD_BYTES}`);
79
+ }
80
+ /**
81
+ * WAL size past which `healOversizedWal` (run at every `open`) checkpoints and
82
+ * truncates the file, and to which `journal_size_limit` clips the WAL after any
83
+ * resetting checkpoint. A SIGKILL'd process (the #850 liveness watchdog, OOM,
84
+ * crash) can leave an arbitrarily large WAL behind — a whole deferred-sync
85
+ * run's worth (#1248) — and before #1431 no later session ever shrank it: the
86
+ * file just grew, killed session after killed session, until the disk filled
87
+ * (25.6 GB observed). 64 MB is far above anything a healthy open ever sees
88
+ * (a clean close deletes the WAL) yet small enough to cap the leak.
89
+ * Override with `LATTICE_SENSOR_WAL_HEAL_MB` (also feeds `journal_size_limit`).
90
+ */
91
+ exports.WAL_HEAL_THRESHOLD_BYTES = resolveWalHealBytes(process.env.LATTICE_SENSOR_WAL_HEAL_MB);
92
+ /** Resolve the heal threshold from the env override (MB); invalid ⇒ 64 MB. */
93
+ function resolveWalHealBytes(envVal) {
94
+ if (envVal !== undefined && envVal !== '') {
95
+ const n = Number(envVal);
96
+ if (Number.isFinite(n) && n > 0)
97
+ return Math.floor(n * 1024 * 1024);
98
+ }
99
+ return 64 * 1024 * 1024;
71
100
  }
72
101
  /**
73
102
  * Database connection wrapper with lifecycle management
@@ -133,6 +162,9 @@ class DatabaseConnection {
133
162
  // beginBulkNodeLoad and endBulkNodeLoad): the FTS triggers are missing and
134
163
  // nodes_fts is stale. Rebuild + recreate so search stays in sync.
135
164
  conn.healBulkNodeLoad();
165
+ // Self-heal a killed session's leftover oversized WAL (#1431) — one
166
+ // statSync when healthy, off-thread checkpoint+truncate when not.
167
+ void conn.healOversizedWal();
136
168
  return conn;
137
169
  }
138
170
  /**
@@ -163,6 +195,116 @@ class DatabaseConnection {
163
195
  this.db.exec(`INSERT INTO nodes_fts(nodes_fts) VALUES('rebuild')`);
164
196
  this.recreateFtsTriggers();
165
197
  }
198
+ /**
199
+ * NON-UNIQUE secondary indexes maintained per-row during the parse phase's
200
+ * bulk inserts — the store-architecture arc's first lever (plan §4d: dubbo's
201
+ * parse-loop wall is 94% store-writer busy, and the #1320 post-mortem showed
202
+ * statement batching and sorted inserts are ~zero on this path because
203
+ * B-TREE MAINTENANCE is the floor). A fresh init writes every row of
204
+ * nodes/unresolved_refs/files exactly once and reads none of them until
205
+ * resolution, so the parse window can drop all of these and rebuild each in
206
+ * one table scan afterwards — the same measured trade as the resolution
207
+ * phase's edge-index window (2.8s → 1.1s inserting, ~0.3s recreating).
208
+ * Primary keys and UNIQUE constraints stay (upserts and OR-IGNORE dedup
209
+ * conflict on them).
210
+ */
211
+ static BULK_PARSE_INDEX_NAMES = [
212
+ 'idx_nodes_kind',
213
+ 'idx_nodes_name',
214
+ 'idx_nodes_qualified_name',
215
+ 'idx_nodes_file_path',
216
+ 'idx_nodes_language',
217
+ 'idx_nodes_file_line',
218
+ 'idx_nodes_lower_name',
219
+ 'idx_unresolved_from_node',
220
+ 'idx_unresolved_name',
221
+ 'idx_unresolved_file_path',
222
+ 'idx_unresolved_from_name',
223
+ 'idx_unresolved_status',
224
+ 'idx_unresolved_failed_tail',
225
+ 'idx_files_language',
226
+ 'idx_files_modified_at',
227
+ ];
228
+ /**
229
+ * Enter bulk-parse-load mode (FRESH-INIT ONLY — the caller gates on a fresh
230
+ * DB, because an incremental index deletes per-file rows mid-phase and needs
231
+ * the file_path indexes): drop every parse-lane secondary index, including
232
+ * the four non-unique edge indexes (parse inserts contains-edges too; the
233
+ * UNIQUE identity index stays for INSERT OR IGNORE dedup, and its `source`
234
+ * prefix keeps source-keyed reads indexed, as in the edge window). MUST be
235
+ * paired with endBulkParseLoad(); a crash inside the window is healed on the
236
+ * next DatabaseConnection open (schema.sql re-applies CREATE INDEX IF NOT
237
+ * EXISTS).
238
+ */
239
+ beginBulkParseLoad() {
240
+ for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
241
+ this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
242
+ }
243
+ this.beginBulkEdgeLoad();
244
+ }
245
+ /**
246
+ * Leave bulk-parse-load mode: recreate everything the window dropped, one
247
+ * table scan per index, with a yield between statements (same
248
+ * liveness-watchdog rationale as endBulkEdgeLoad — at kernel scale each
249
+ * build is a long synchronous scan). The edge indexes are rebuilt here too,
250
+ * so paths that never enter the resolution phase's own bulk-edge window
251
+ * (small runs) are left with a complete schema; the batched resolver's
252
+ * beginBulkEdgeLoad simply re-drops them (DROP IF EXISTS — idempotent).
253
+ */
254
+ async endBulkParseLoad() {
255
+ const schemaPath = path.join(__dirname, 'schema.sql');
256
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
257
+ for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
258
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
259
+ if (!m)
260
+ throw new Error(`schema.sql: parse index ${idx} not found for bulk-load recreation`);
261
+ this.db.exec(m[0]);
262
+ await new Promise((resolve) => setImmediate(resolve));
263
+ }
264
+ await this.endBulkEdgeLoad();
265
+ }
266
+ /**
267
+ * unresolved_refs secondary indexes NOT read by the batched resolution
268
+ * loop. The loop pages pending refs by keyset (`status='pending' AND id>?`
269
+ * — the status index + PK), deletes resolved rows by id, and parks failures
270
+ * with a status UPDATE; every other ref index serves SYNC-time paths
271
+ * (per-file re-index deletes, name-keyed retry, failed-tail heal). Each
272
+ * per-batch DELETE maintains all of them — the biggest single main-thread
273
+ * stage on the dubbo profile (deletes 1.2s of a 5.4s resolution phase) —
274
+ * so the batched loop drops them and rebuilds at the end, where the table
275
+ * holds only the surviving FAILED refs (resolved rows are gone), making
276
+ * the recreate near-free.
277
+ */
278
+ static BULK_REF_INDEX_NAMES = [
279
+ 'idx_unresolved_from_node',
280
+ 'idx_unresolved_name',
281
+ 'idx_unresolved_file_path',
282
+ 'idx_unresolved_from_name',
283
+ 'idx_unresolved_failed_tail',
284
+ ];
285
+ /**
286
+ * Enter bulk-ref mode for the batched resolution loop — see
287
+ * BULK_REF_INDEX_NAMES. MUST be paired with endBulkRefLoad(); a crash
288
+ * inside the window heals on the next open (schema.sql re-applies
289
+ * CREATE INDEX IF NOT EXISTS).
290
+ */
291
+ beginBulkRefLoad() {
292
+ for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
293
+ this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
294
+ }
295
+ }
296
+ /** Leave bulk-ref mode: recreate each index in one scan (yield between). */
297
+ async endBulkRefLoad() {
298
+ const schemaPath = path.join(__dirname, 'schema.sql');
299
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
300
+ for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
301
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
302
+ if (!m)
303
+ throw new Error(`schema.sql: ref index ${idx} not found for bulk-load recreation`);
304
+ this.db.exec(m[0]);
305
+ await new Promise((resolve) => setImmediate(resolve));
306
+ }
307
+ }
166
308
  /**
167
309
  * Names of the NON-UNIQUE edge indexes dropped for a bulk edge load.
168
310
  * idx_edges_identity deliberately stays: INSERT OR IGNORE's dedup conflicts
@@ -321,6 +463,18 @@ class DatabaseConnection {
321
463
  return 0;
322
464
  }
323
465
  }
466
+ /** Size of the main DB file in bytes (0 for in-memory/unknown) — the WAL
467
+ * valve scales its fold caps with it (resolveWalValveMb). */
468
+ getDbFileSizeBytes() {
469
+ if (!this.dbPath || this.dbPath === ':memory:')
470
+ return 0;
471
+ try {
472
+ return fs.statSync(this.dbPath).size;
473
+ }
474
+ catch {
475
+ return 0;
476
+ }
477
+ }
324
478
  /** Current `wal_autocheckpoint` interval in pages (0 = disabled). */
325
479
  getWalAutocheckpoint() {
326
480
  const v = this.db.pragma('wal_autocheckpoint', { simple: true });
@@ -356,9 +510,72 @@ class DatabaseConnection {
356
510
  * never run inline on the main thread).
357
511
  */
358
512
  async checkpointWalPassive() {
513
+ return this.checkpointWal('PASSIVE');
514
+ }
515
+ /**
516
+ * `PRAGMA wal_checkpoint(TRUNCATE)` — same off-thread pattern as PASSIVE,
517
+ * but on success the WAL FILE is chopped to zero. A completed passive
518
+ * backfill bounds the un-checkpointed backlog, yet the FILE only stops
519
+ * growing when a commit finds ZERO readers holding WAL marks — rare while
520
+ * pool workers cycle, so at kernel scale a fully-backfilled WAL still
521
+ * accreted the phase's whole write volume on disk (§7a.1: 22GB). The valve
522
+ * calls this exactly at a parked barrier (writer parked, pool drained,
523
+ * backfill complete) where the no-reader condition is guaranteed rather
524
+ * than lucky. The worker sets a short busy_timeout so a racing reader
525
+ * degrades this to a no-op (busy=1) instead of a stall.
526
+ */
527
+ async checkpointWalTruncate() {
528
+ return this.checkpointWal('TRUNCATE');
529
+ }
530
+ /**
531
+ * Shrink a leftover oversized WAL (#1431). A SIGKILL'd session — the #850
532
+ * liveness watchdog, OOM, a crash — leaves its WAL on disk, the next session
533
+ * appends to the same file, and (pre-#1431) nothing ever truncated it:
534
+ * PASSIVE checkpoints fold frames but keep the file at its high-water mark,
535
+ * and the one shrinking path (a clean last-connection close) is exactly what
536
+ * the killed world never takes. Unbounded growth until the disk fills.
537
+ *
538
+ * Called fire-and-forget from every `open()`: cost is one statSync when the
539
+ * WAL is small (the overwhelmingly common case). Past the threshold it runs
540
+ * the off-thread PASSIVE fold then TRUNCATE — both on worker connections
541
+ * with a busy_timeout, so a racing writer degrades this to a no-op that the
542
+ * next open retries rather than a stall.
543
+ */
544
+ async healOversizedWal() {
545
+ const beforeBytes = this.getWalSizeBytes();
546
+ if (beforeBytes <= exports.WAL_HEAL_THRESHOLD_BYTES) {
547
+ return { healed: false, beforeBytes, afterBytes: beforeBytes };
548
+ }
549
+ // Single-flight: open() fires this fire-and-forget and callers may also
550
+ // invoke it explicitly. Two concurrent passes DEFEAT each other — each
551
+ // checkpoint worker sees the other as a busy reader and no-ops — so share
552
+ // one in-flight pass instead of racing.
553
+ this.walHeal ??= this.runWalHeal(beforeBytes).finally(() => { this.walHeal = null; });
554
+ return this.walHeal;
555
+ }
556
+ walHeal = null;
557
+ async runWalHeal(beforeBytes) {
558
+ // A racing reader/writer (another session healing the same file, a query
559
+ // pool warming up) degrades a checkpoint pass to a busy no-op — retry a
560
+ // few times before leaving the rest to the next open.
561
+ for (let attempt = 0; attempt < 3; attempt++) {
562
+ if (attempt > 0)
563
+ await new Promise((r) => setTimeout(r, 300));
564
+ await this.checkpointWalPassive();
565
+ await this.checkpointWalTruncate();
566
+ if (this.getWalSizeBytes() <= exports.WAL_HEAL_THRESHOLD_BYTES)
567
+ break;
568
+ }
569
+ const afterBytes = this.getWalSizeBytes();
570
+ if (process.env.LATTICE_SENSOR_WAL_VALVE_DEBUG) {
571
+ console.error(`[wal-heal] oversized WAL at open: ${Math.round(beforeBytes / (1024 * 1024))}MB -> ${Math.round(afterBytes / (1024 * 1024))}MB`);
572
+ }
573
+ return { healed: afterBytes < beforeBytes, beforeBytes, afterBytes };
574
+ }
575
+ async checkpointWal(mode) {
359
576
  if (!this.dbPath || this.dbPath === ':memory:') {
360
577
  try {
361
- const row = this.db.prepare('PRAGMA wal_checkpoint(PASSIVE)').get();
578
+ const row = this.db.prepare(`PRAGMA wal_checkpoint(${mode})`).get();
362
579
  return row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null;
363
580
  }
364
581
  catch {
@@ -370,13 +587,18 @@ class DatabaseConnection {
370
587
  const workerSource = `
371
588
  const { workerData, parentPort } = require('node:worker_threads');
372
589
  let row = null;
590
+ let err = null;
373
591
  try {
374
592
  const { DatabaseSync } = require('node:sqlite');
375
593
  const db = new DatabaseSync(workerData.dbPath);
376
- try { row = db.prepare('PRAGMA wal_checkpoint(PASSIVE)').get(); } catch {}
594
+ const mode = workerData.mode === 'TRUNCATE' ? 'TRUNCATE' : 'PASSIVE';
595
+ try {
596
+ if (mode === 'TRUNCATE') db.exec('PRAGMA busy_timeout = 2000');
597
+ row = db.prepare('PRAGMA wal_checkpoint(' + mode + ')').get();
598
+ } catch (e) { err = String(e && e.message || e); }
377
599
  try { db.close(); } catch {}
378
- } catch {}
379
- parentPort.postMessage({ row });
600
+ } catch (e) { err = err || String(e && e.message || e); }
601
+ parentPort.postMessage({ row, err });
380
602
  `;
381
603
  return await new Promise((resolve) => {
382
604
  let settled = false;
@@ -387,8 +609,14 @@ class DatabaseConnection {
387
609
  resolve(row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null);
388
610
  };
389
611
  try {
390
- const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath } });
391
- worker.once('message', (m) => { void worker.terminate(); finish(m?.row ?? null); });
612
+ const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath, mode } });
613
+ worker.once('message', (m) => {
614
+ if (m?.err && process.env.LATTICE_SENSOR_WAL_VALVE_DEBUG) {
615
+ console.error(`[wal-valve] checkpoint worker (${mode}): ${m.err}`);
616
+ }
617
+ void worker.terminate();
618
+ finish(m?.row ?? null);
619
+ });
392
620
  worker.once('error', () => { void worker.terminate(); finish(null); });
393
621
  worker.once('exit', () => finish(null));
394
622
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,19 @@ export declare class QueryBuilder {
24
24
  */
25
25
  private runBatched;
26
26
  constructor(db: SqliteDatabase);
27
+ /**
28
+ * Swap the underlying connection in place. Used by pool workers'
29
+ * connection recycling (plan §7a.6, writes-under-readers): a long-lived
30
+ * read connection pins WAL checkpoint progress, and the deep WAL that
31
+ * accumulates behind it taxes every main-thread B-tree page operation
32
+ * (deletes measured 42.6s → 118.8s from 0 to 4 attached readers on
33
+ * identical hardware). Workers therefore close and reopen their read-only
34
+ * connection at the pool-idle boundary; everything above the connection —
35
+ * this QueryBuilder, the resolver and its warm caches — survives, and only
36
+ * connection-derived state (prepared statements) resets, re-preparing
37
+ * lazily on next use.
38
+ */
39
+ rebind(db: SqliteDatabase): void;
27
40
  /** Set the normalized project-name tokens used to down-weight non-discriminative
28
41
  * query words in path scoring (#720). Called once when the project opens. */
29
42
  setProjectNameTokens(tokens: Set<string>): void;
@@ -449,6 +462,15 @@ export declare class QueryBuilder {
449
462
  * has been attempted.
450
463
  */
451
464
  getUnresolvedReferencesBatch(offset: number, limit: number): UnresolvedReference[];
465
+ /**
466
+ * Keyset variant of {@link getUnresolvedReferencesBatch} for the batched
467
+ * resolution loop: seek past the last-seen row id instead of OFFSET-walking.
468
+ * OFFSET reads re-scan the accumulated failed-row prefix on every batch —
469
+ * O(failed rows) per read, measured at 54.6s of the kernel-scale batch loop
470
+ * (§7a.2) — while the seek is O(batch) forever. `id` is the rowid alias, so
471
+ * the enumeration order is identical to the OFFSET reader's.
472
+ */
473
+ getUnresolvedReferencesBatchAfter(afterRowId: number, limit: number): UnresolvedReference[];
452
474
  /**
453
475
  * Get all tracked file paths (lightweight — no full FileRecord objects)
454
476
  */
@@ -495,7 +517,7 @@ export declare class QueryBuilder {
495
517
  fromNodeId: string;
496
518
  referenceName: string;
497
519
  referenceKind: string;
498
- }>): void;
520
+ }>): number;
499
521
  /**
500
522
  * Delete unresolved-ref rows by row id — the precise cleanup for refs a
501
523
  * resolution pass actually processed. The key-tuple variant above also
@@ -504,7 +526,7 @@ export declare class QueryBuilder {
504
526
  * caller's same-named call sites, the later sites' edges were silently never
505
527
  * created (#1269).
506
528
  */
507
- deleteReferencesByRowIds(rowIds: number[]): void;
529
+ deleteReferencesByRowIds(rowIds: number[]): number;
508
530
  /**
509
531
  * Mark refs a completed resolution pass could not resolve as status='failed'
510
532
  * instead of deleting them (#1240). Failed rows are invisible to the pending
@@ -518,7 +540,7 @@ export declare class QueryBuilder {
518
540
  fromNodeId: string;
519
541
  referenceName: string;
520
542
  referenceKind: string;
521
- }>): void;
543
+ }>): number;
522
544
  /**
523
545
  * Park refs as status='failed' by row id — the precise counterpart of
524
546
  * markReferencesFailed, for the same reason as deleteReferencesByRowIds:
@@ -530,7 +552,7 @@ export declare class QueryBuilder {
530
552
  markReferencesFailedByRowIds(refs: Array<{
531
553
  rowId: number;
532
554
  referenceName: string;
533
- }>): void;
555
+ }>): number;
534
556
  /**
535
557
  * Failed refs whose name tail matches one of the given symbol names — the
536
558
  * candidates a sync should retry after files carrying those names changed