omp-fabric 1.25.26 → 1.25.28

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.25.28
4
+
5
+ ### Fixed
6
+
7
+ - The `/fabric` ledger migration path now runs `LcmLedger.runStartupChecks()` after it opens a ledger. 1.25.27 moved migrations, the FTS backfill and the integrity check out of the constructor into that method, but `src/storage/lcm-migration.ts` opens a ledger and writes through `ledger.db` directly, so a migration would have written into an un-migrated, unverified ledger. The two dev benchmarks (`scripts/benchmark-lcm.mjs`, `benchmark-lcm-contender.mjs`) construct ledgers without the checks as well; they measure raw ledger mechanics, so they stay as they are.
8
+
9
+ ### Changed
10
+
11
+ - Correction to the 1.25.26 entry: it called the 30000ms handler overrun a tail risk and said the single sample above it came from the old bundle. The host log for 2026-10-15 says otherwise: `Extension handler timed out` with `event: "session_start"` on 17 separate session starts between 08:01 and 11:12, so the overrun was systematic and no bundle in that window was immune.
12
+ - Real-host confirmation of 1.25.27 from the host logs after this session's restart: a session that booted 12:27:04 on 1.25.26 logged its `session_start` timeout at 12:27:40, 36s after boot; five sessions that booted after the 12:36:25 install of 1.25.27, three of them concurrent, logged none.
13
+
14
+ ## 1.25.27
15
+
16
+ ### Fixed
17
+
18
+ - Correction to the 1.25.26 entry: it says its host pins moved from 18.10.1, but the working tree was already on 18.10.4 (shipped in 1.25.25). The range was 18.10.4 to 18.11.0.
19
+ - **Session start no longer blocks on the LCM ledger's size.** `LcmLedger` construction ran `migrateSchema()` and `PRAGMA integrity_check` — both O(file size) — inline, so every `session_start` handler paid them: 5929ms, 9210ms, 17393ms and 22245ms across measured runs against this project's 611MB ledger (the ledger directory holds several 1.5-2.4GB files), inside the host's 30000ms per-handler budget. The host log has the receipts: `Extension handler timed out` for `event: "session_start"`, 17 times on 2026-10-15 alone, including one at 11:12:57 with 1.25.26 already installed. The FTS table and trigger DDL stays synchronous, because it is cheap and `searchRaw` needs those objects to exist; migrations, their backfill and the integrity check moved to `LcmLedger.runStartupChecks()`, which the detached session warmup runs after a macrotask yield. Compaction is unaffected: the compaction hook's `getEngine()` reports `omp` until the runtime is `ready`, so a cold session hands compaction to the host core instead of summarising through an unverified ledger.
20
+ - Same phase marks before and after: `session_start` returned after 5929-22245ms before and 672ms after (compat 155ms, bootstrap 3ms, LCM prepare 513ms, activation 0ms). The deferred migrations and integrity check still cost about 2s on the 611MB ledger, now on a background macrotask outside the handler.
21
+ - `tests/storage/lcm-ledger.test.ts` now drives `runStartupChecks()` explicitly for the five migration cases (orphan quarantine, FTS backfill, fts5-less fallback, index re-sync, purge counts). The contracts are unchanged; only their timing moved.
22
+
3
23
  ## 1.25.26
4
24
 
5
25
  ### Changed
@@ -91,6 +91,8 @@ export declare class LcmRuntime {
91
91
  private persistedSessionId;
92
92
  private lastReconciliation;
93
93
  constructor(context: ExtensionContext, options?: LcmRuntimeOptions | (() => LcmRuntimeOptions));
94
+ get ready(): boolean;
95
+ open(): void;
94
96
  private get options();
95
97
  get projectKey(): string;
96
98
  get signal(): AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"lcm-runtime.d.ts","sourceRoot":"","sources":["../../src/compaction/lcm-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lcm-runtime.d.ts","sourceRoot":"","sources":["../../src/compaction/lcm-runtime.ts"],"names":[],"mappings":"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"}
@@ -259,6 +259,7 @@ var LcmLedger = class {
259
259
  transactionDepth = 0;
260
260
  closed = false;
261
261
  fts = false;
262
+ startupChecksRun = false;
262
263
  migrations = [];
263
264
  constructor(options = {}) {
264
265
  this.now = options.now ?? Date.now;
@@ -283,16 +284,29 @@ var LcmLedger = class {
283
284
  this.db.exec("ALTER TABLE raw_entries ADD COLUMN payload_json TEXT NOT NULL DEFAULT ''");
284
285
  }
285
286
  this.fts = probeFts5(this.db);
286
- this.migrateSchema();
287
+ this.ensureFtsObjects();
287
288
  this.db.exec("PRAGMA foreign_keys=ON");
288
- const result = this.db.prepare("PRAGMA integrity_check").get();
289
- if (result.integrity_check !== "ok") throw new Error(String(result.integrity_check));
290
289
  this.registerProject(this.project);
291
290
  } catch (error) {
292
291
  this.degraded = true;
293
292
  throw new LedgerDegradedError("ledger startup failed", error);
294
293
  }
295
294
  }
295
+ get startupChecksComplete() {
296
+ return this.startupChecksRun;
297
+ }
298
+ runStartupChecks() {
299
+ if (this.startupChecksRun) return;
300
+ try {
301
+ this.migrateSchema();
302
+ const result = this.db.prepare("PRAGMA integrity_check").get();
303
+ if (result.integrity_check !== "ok") throw new Error(String(result.integrity_check));
304
+ } catch (error) {
305
+ this.degraded = true;
306
+ throw new LedgerDegradedError("ledger startup checks failed", error);
307
+ }
308
+ this.startupChecksRun = true;
309
+ }
296
310
  readRepairLadder(projectKey = this.project.key) {
297
311
  return this.readOnly((db) => new Map(db.prepare("SELECT fault,attempts,next_at,detail,updated_at FROM repair_ladder WHERE project_key=?").all(projectKey).map((row) => [row.fault, { attempts: Number(row.attempts), nextAt: Number(row.next_at), detail: row.detail, updatedAt: Number(row.updated_at) }])));
298
312
  }
@@ -361,6 +375,11 @@ var LcmLedger = class {
361
375
  if (version < 3 || this.db.prepare("PRAGMA foreign_key_list(summary_edges)").all().length === 0) this.migrations.push(this.migrateDerivedForeignKeys());
362
376
  if (version !== LEDGER_SCHEMA_VERSION) this.db.prepare("INSERT INTO schema_metadata(key,value) VALUES('version',?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(String(LEDGER_SCHEMA_VERSION));
363
377
  }
378
+ ensureFtsObjects() {
379
+ if (!this.fts) return;
380
+ this.db.exec("CREATE VIRTUAL TABLE IF NOT EXISTS raw_entries_fts USING fts5(content, project_key UNINDEXED, session_id UNINDEXED, entry_id UNINDEXED, revision UNINDEXED)");
381
+ this.db.exec("CREATE TRIGGER IF NOT EXISTS raw_entries_fts_insert AFTER INSERT ON raw_entries BEGIN INSERT INTO raw_entries_fts(content,project_key,session_id,entry_id,revision) VALUES(new.content,new.project_key,new.session_id,new.entry_id,new.revision); END");
382
+ }
364
383
  migrateFullTextIndex() {
365
384
  if (!this.fts) {
366
385
  this.db.exec("DROP TRIGGER IF EXISTS raw_entries_fts_insert");
@@ -368,8 +387,7 @@ var LcmLedger = class {
368
387
  }
369
388
  let indexed = 0;
370
389
  this.transaction((db) => {
371
- db.exec("CREATE VIRTUAL TABLE IF NOT EXISTS raw_entries_fts USING fts5(content, project_key UNINDEXED, session_id UNINDEXED, entry_id UNINDEXED, revision UNINDEXED)");
372
- db.exec("CREATE TRIGGER IF NOT EXISTS raw_entries_fts_insert AFTER INSERT ON raw_entries BEGIN INSERT INTO raw_entries_fts(content,project_key,session_id,entry_id,revision) VALUES(new.content,new.project_key,new.session_id,new.entry_id,new.revision); END");
390
+ this.ensureFtsObjects();
373
391
  indexed = Number(db.prepare("SELECT count(*) n FROM raw_entries").get().n);
374
392
  if (Number(db.prepare("SELECT count(*) n FROM raw_entries_fts").get().n) === indexed) return;
375
393
  db.exec("DELETE FROM raw_entries_fts");
@@ -978,6 +996,7 @@ function migrateSessions(options) {
978
996
  if (options.ledger) ledger = options.ledger;
979
997
  else if (options.ledgerRoot) ledger = new LcmLedger({ rootDir: options.ledgerRoot, project: { recordedCwd: cwd } });
980
998
  else ledger = new LcmLedger({ project: { recordedCwd: cwd } });
999
+ ledger.runStartupChecks();
981
1000
  database = ledger.db;
982
1001
  database.exec(CHECKPOINT_SCHEMA);
983
1002
  } else if (options.ledger) database = options.ledger.db;
@@ -1804,6 +1823,12 @@ var LcmRuntime = class {
1804
1823
  }
1805
1824
  });
1806
1825
  }
1826
+ get ready() {
1827
+ return this.ledger.startupChecksComplete;
1828
+ }
1829
+ open() {
1830
+ this.ledger.runStartupChecks();
1831
+ }
1807
1832
  get options() {
1808
1833
  return this.resolveOptions();
1809
1834
  }