@inerrata-corporation/errata 2.0.22-dev.4180 → 2.0.22-dev.4277

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.
@@ -15630,7 +15630,7 @@ function installHistoryAttrSlim(db) {
15630
15630
  }
15631
15631
 
15632
15632
  // ../../packages/local-graph/src/text-index.ts
15633
- var TEXT_INDEX_KEY = "text-index-trigram-1";
15633
+ var TEXT_INDEX_KEY = "text-index-trigram-2";
15634
15634
  var TEXT_INDEX_MIN_TERM = 3;
15635
15635
  function installTextIndex(db) {
15636
15636
  if (db.prepare("SELECT value FROM store_meta WHERE key = ?").get(TEXT_INDEX_KEY)) return;
@@ -15643,17 +15643,23 @@ function installTextIndex(db) {
15643
15643
  db.transaction(() => {
15644
15644
  db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS nodes_text
15645
15645
  USING fts5(description, content='nodes', content_rowid='rowid', tokenize='trigram')`);
15646
+ db.exec(`DROP TRIGGER IF EXISTS nodes_text_update_out; DROP TRIGGER IF EXISTS nodes_text_update_in;
15647
+ DROP TRIGGER IF EXISTS nodes_text_update`);
15646
15648
  db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_insert AFTER INSERT ON nodes WHEN NEW.valid_to IS NULL
15647
15649
  BEGIN INSERT INTO nodes_text(rowid, description) VALUES (NEW.rowid, NEW.description); END;`);
15648
- db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_update_out AFTER UPDATE OF description, valid_to ON nodes
15649
- WHEN OLD.valid_to IS NULL
15650
- BEGIN INSERT INTO nodes_text(nodes_text, rowid, description) VALUES ('delete', OLD.rowid, OLD.description); END;`);
15651
- db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_update_in AFTER UPDATE OF description, valid_to ON nodes
15652
- WHEN NEW.valid_to IS NULL
15653
- BEGIN INSERT INTO nodes_text(rowid, description) VALUES (NEW.rowid, NEW.description); END;`);
15650
+ db.exec(`CREATE TRIGGER nodes_text_update AFTER UPDATE OF description, valid_to ON nodes
15651
+ WHEN OLD.description IS NOT NEW.description OR OLD.valid_to IS NOT NEW.valid_to
15652
+ BEGIN
15653
+ INSERT INTO nodes_text(nodes_text, rowid, description)
15654
+ SELECT 'delete', OLD.rowid, OLD.description WHERE OLD.valid_to IS NULL;
15655
+ INSERT INTO nodes_text(rowid, description)
15656
+ SELECT NEW.rowid, NEW.description WHERE NEW.valid_to IS NULL;
15657
+ END;`);
15654
15658
  db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_delete AFTER DELETE ON nodes WHEN OLD.valid_to IS NULL
15655
15659
  BEGIN INSERT INTO nodes_text(nodes_text, rowid, description) VALUES ('delete', OLD.rowid, OLD.description); END;`);
15660
+ db.exec(`INSERT INTO nodes_text(nodes_text) VALUES ('delete-all')`);
15656
15661
  db.exec(`INSERT INTO nodes_text(rowid, description) SELECT rowid, description FROM nodes WHERE valid_to IS NULL`);
15662
+ db.prepare("INSERT OR REPLACE INTO store_meta(key,value) VALUES (?,?)").run("text-index-trigram-1", "installed");
15657
15663
  db.prepare("INSERT INTO store_meta(key,value) VALUES (?,?)").run(TEXT_INDEX_KEY, "installed");
15658
15664
  });
15659
15665
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.22-dev.4180",
3
+ "version": "2.0.22-dev.4277",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
package/pass-worker.mjs CHANGED
@@ -26062,7 +26062,7 @@ function installHistoryAttrSlim(db) {
26062
26062
  }
26063
26063
 
26064
26064
  // ../../packages/local-graph/src/text-index.ts
26065
- var TEXT_INDEX_KEY = "text-index-trigram-1";
26065
+ var TEXT_INDEX_KEY = "text-index-trigram-2";
26066
26066
  var TEXT_INDEX_MIN_TERM = 3;
26067
26067
  function installTextIndex(db) {
26068
26068
  if (db.prepare("SELECT value FROM store_meta WHERE key = ?").get(TEXT_INDEX_KEY)) return;
@@ -26075,17 +26075,23 @@ function installTextIndex(db) {
26075
26075
  db.transaction(() => {
26076
26076
  db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS nodes_text
26077
26077
  USING fts5(description, content='nodes', content_rowid='rowid', tokenize='trigram')`);
26078
+ db.exec(`DROP TRIGGER IF EXISTS nodes_text_update_out; DROP TRIGGER IF EXISTS nodes_text_update_in;
26079
+ DROP TRIGGER IF EXISTS nodes_text_update`);
26078
26080
  db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_insert AFTER INSERT ON nodes WHEN NEW.valid_to IS NULL
26079
26081
  BEGIN INSERT INTO nodes_text(rowid, description) VALUES (NEW.rowid, NEW.description); END;`);
26080
- db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_update_out AFTER UPDATE OF description, valid_to ON nodes
26081
- WHEN OLD.valid_to IS NULL
26082
- BEGIN INSERT INTO nodes_text(nodes_text, rowid, description) VALUES ('delete', OLD.rowid, OLD.description); END;`);
26083
- db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_update_in AFTER UPDATE OF description, valid_to ON nodes
26084
- WHEN NEW.valid_to IS NULL
26085
- BEGIN INSERT INTO nodes_text(rowid, description) VALUES (NEW.rowid, NEW.description); END;`);
26082
+ db.exec(`CREATE TRIGGER nodes_text_update AFTER UPDATE OF description, valid_to ON nodes
26083
+ WHEN OLD.description IS NOT NEW.description OR OLD.valid_to IS NOT NEW.valid_to
26084
+ BEGIN
26085
+ INSERT INTO nodes_text(nodes_text, rowid, description)
26086
+ SELECT 'delete', OLD.rowid, OLD.description WHERE OLD.valid_to IS NULL;
26087
+ INSERT INTO nodes_text(rowid, description)
26088
+ SELECT NEW.rowid, NEW.description WHERE NEW.valid_to IS NULL;
26089
+ END;`);
26086
26090
  db.exec(`CREATE TRIGGER IF NOT EXISTS nodes_text_delete AFTER DELETE ON nodes WHEN OLD.valid_to IS NULL
26087
26091
  BEGIN INSERT INTO nodes_text(nodes_text, rowid, description) VALUES ('delete', OLD.rowid, OLD.description); END;`);
26092
+ db.exec(`INSERT INTO nodes_text(nodes_text) VALUES ('delete-all')`);
26088
26093
  db.exec(`INSERT INTO nodes_text(rowid, description) SELECT rowid, description FROM nodes WHERE valid_to IS NULL`);
26094
+ db.prepare("INSERT OR REPLACE INTO store_meta(key,value) VALUES (?,?)").run("text-index-trigram-1", "installed");
26089
26095
  db.prepare("INSERT INTO store_meta(key,value) VALUES (?,?)").run(TEXT_INDEX_KEY, "installed");
26090
26096
  });
26091
26097
  }
@@ -29767,6 +29773,28 @@ var MECHANISMS = [
29767
29773
  // climbs while `accepted` stays flat is the shape of a silently-closed door.
29768
29774
  backlogCounter: "candidates"
29769
29775
  },
29776
+ {
29777
+ id: "edge-park-replay",
29778
+ what: "parks causal/anchor edges the door refused as unresolvable, replays them when due, drops them with a disposition",
29779
+ pass: "ship",
29780
+ // FED = a source whose whole binding-edge family LANDED: the digest is
29781
+ // stamped only when every edge in it came back created/reinforced, so it is
29782
+ // the store-side proof that edges (not just nodes) cross. Live dev
29783
+ // 2026-10-12 sat with the same 241 refusals re-sent every drain and this
29784
+ // stamp frozen — nodes crossed, their causal wiring did not.
29785
+ fed: {
29786
+ labels: ["Problem", "RootCause"],
29787
+ attr: "semanticEdgesContributedDigest",
29788
+ minFraction: 0.01
29789
+ },
29790
+ // A parked edge that later LANDED — the replay doing its job.
29791
+ effectCounter: "edgesReplayLanded",
29792
+ // Outstanding parked edges (a level). Flat-and-nonzero while replays keep
29793
+ // re-parking is an endpoint that never resolves; it drains to tombstones
29794
+ // (`edgesDroppedExhausted`) instead of being resent forever.
29795
+ backlogCounter: "edgeParkSize",
29796
+ note: "edge-park.ts; quiet (no-effect) is healthy when nothing is refused \u2014 read edgesParked/edgesDropped* on the ship row"
29797
+ },
29770
29798
  {
29771
29799
  id: "orphan-reap",
29772
29800
  what: "closes File nodes whose path the indexer no longer covers",
@@ -29821,12 +29849,31 @@ var MECHANISMS = [
29821
29849
  // the bar is "the field is written at all", the revisit-sweep precedent.
29822
29850
  fed: { labels: ["Problem"], attr: "foldCandidate", minFraction: 0 },
29823
29851
  effectCounter: "folded",
29824
- // Standing nominations ARE the judge-less backlog — without the gauge a
29825
- // deployment with no judge configured reads as "nothing to fold".
29826
- backlogCounter: "standing",
29852
+ // The open-nomination POOL is the backlog. It used to be `standing`, which
29853
+ // only counts what the pass examined — capped at the per-run limit — so it
29854
+ // read a flat 8 for weeks while 824 nominations sat open (2026-10-12): the
29855
+ // gauge could not see past the slice it was meant to be measuring.
29856
+ backlogCounter: "pending",
29827
29857
  configCounter: "judgeConfigured",
29828
29858
  note: "the ambiguous band needs the opt-in judge: set ERRATA_FOLD_JUDGE=1 + a configured chat provider (azure env), or leave it off and the nominations stand"
29829
29859
  },
29860
+ {
29861
+ id: "fold-candidate-coverage",
29862
+ what: "rotates the fold-judge pass through every open nomination (never-examined first, standing ones re-examined on new evidence)",
29863
+ // Judge-INDEPENDENT on purpose — no configCounter. The embedding-certain
29864
+ // bands fold/reject with no judge at all, and the defect this watches is
29865
+ // the pass re-reading the same oldest 8 forever (101 runs, 8 distinct
29866
+ // nodes, 816 of 824 nominations never looked at). That starves those
29867
+ // bands on a judge-less daemon exactly as much as on a judged one, so an
29868
+ // opt-in being off must not excuse it.
29869
+ pass: "fold-judge",
29870
+ fed: { labels: ["Problem"], attr: "foldCandidate", minFraction: 0 },
29871
+ effectCounter: "firstExamined",
29872
+ // A LEVEL: open nominations never examined. Flat-and-positive with no
29873
+ // first examinations across the stall window = the rotation is stuck.
29874
+ backlogCounter: "neverExamined",
29875
+ note: "neverExamined must drain while the pass runs; flat means the selection is re-reading the same slice"
29876
+ },
29830
29877
  {
29831
29878
  id: "cite-anchor-accrual",
29832
29879
  what: "accrues cite-context anchor evidence on anchorless cited priors; two distinct sessions promote a cite-confirmed ANCHORED_AT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "errata-context",
3
- "version": "2.0.22-dev.4180",
3
+ "version": "2.0.22-dev.4277",
4
4
  "description": "A minimal 3D view of loaded Errata priors and recent graph bursts.",
5
5
  "author": {
6
6
  "name": "inErrata"
@@ -1,4 +1,4 @@
1
- 0c9796e3e98c9272c30341160a364914fc497a8084c25a937b6cc4d5af785721 .codex-plugin/plugin.json
1
+ aab4192882dd94674f8df9d0515c99855cf4eb522269d0d7c79e4f6e8063561e .codex-plugin/plugin.json
2
2
  a7bebae9fb01c838d6c75fc784129e28be571233fa66ff5ee8039b574f35ccf7 assets/icon.png
3
3
  fc38b64e4df1e0b72c35764bef6c4c05430d97c9009ad0ecc8a9e75b4deab232 configure-local.mjs
4
4
  73dc6028b3b070257c7c31f252d11e55a9e096f4aed0f187f10cb21716e1e6d7 dist/client.js