@inerrata-corporation/errata 2.0.2-dev.902 → 2.0.2-dev.906

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 (2) hide show
  1. package/errata.mjs +35 -9
  2. package/package.json +1 -1
package/errata.mjs CHANGED
@@ -56192,7 +56192,7 @@ function createLivenessWatch(deps) {
56192
56192
  }
56193
56193
 
56194
56194
  // src/engine.ts
56195
- var DAEMON_VERSION = true ? "2.0.2-dev.902" : "2.0.0-alpha.0";
56195
+ var DAEMON_VERSION = true ? "2.0.2-dev.906" : "2.0.0-alpha.0";
56196
56196
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
56197
56197
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
56198
56198
  var GIT_OP_MUTE_MS = 4e3;
@@ -58585,6 +58585,10 @@ function contributedWireId(n) {
58585
58585
  return isMembraneSaltedId(cloudId) ? cloudId : n.id;
58586
58586
  }
58587
58587
  var WIRE_CANONICAL_ID_MIN = 6;
58588
+ var SHIP_TERMINAL_REFUSALS = 3;
58589
+ function refusalFingerprint(reason, description) {
58590
+ return digest(`${reason}\0${description}`);
58591
+ }
58588
58592
  function unshippableReason(canonical, label) {
58589
58593
  void label;
58590
58594
  if (canonical.length < WIRE_CANONICAL_ID_MIN) {
@@ -58694,6 +58698,7 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
58694
58698
  notNovel: 0,
58695
58699
  unshippable: 0,
58696
58700
  heldOrphans: 0,
58701
+ terminalRefused: 0,
58697
58702
  privacyRewritten: 0,
58698
58703
  sidecarDropped: 0,
58699
58704
  sidecarDropReasons: {},
@@ -58733,6 +58738,13 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
58733
58738
  composition.autoMint++;
58734
58739
  continue;
58735
58740
  }
58741
+ if (typeof n.attrs["shipRefusedCount"] === "number" && n.attrs["shipRefusedCount"] >= SHIP_TERMINAL_REFUSALS && n.attrs["shipRefusedFingerprint"] === refusalFingerprint(
58742
+ String(n.attrs["shipRefusedReason"] ?? ""),
58743
+ n.description
58744
+ )) {
58745
+ composition.terminalRefused++;
58746
+ continue;
58747
+ }
58736
58748
  if (!noveltyAgainst(n, ref, noveltyOpts).ready) {
58737
58749
  composition.notNovel++;
58738
58750
  continue;
@@ -60520,24 +60532,38 @@ async function startMultiDaemon(opts = {}) {
60520
60532
  };
60521
60533
  let blockedRepeat = 0;
60522
60534
  let rejectedRepeat = 0;
60523
- const noteRefused = (id, repeat) => {
60535
+ const noteRefused = (id, reason, repeat) => {
60524
60536
  const owner = owningStore(id);
60525
60537
  if (!owner) return;
60538
+ const fp = refusalFingerprint(reason, owner.n.description);
60539
+ const same = owner.n.attrs["shipRefusedFingerprint"] === fp;
60540
+ const count = same ? Number(owner.n.attrs["shipRefusedCount"] ?? 0) + 1 : 1;
60526
60541
  if (owner.n.attrs["shipRefusedSinceSeq"] !== void 0) repeat();
60527
- else
60528
- owner.s.updateNode(id, {
60529
- attrs: { ...owner.n.attrs, shipRefusedSinceSeq: seq }
60530
- });
60542
+ owner.s.updateNode(id, {
60543
+ attrs: {
60544
+ ...owner.n.attrs,
60545
+ ...same && owner.n.attrs["shipRefusedSinceSeq"] !== void 0 ? {} : { shipRefusedSinceSeq: seq },
60546
+ shipRefusedCount: count,
60547
+ shipRefusedReason: reason,
60548
+ shipRefusedFingerprint: fp
60549
+ }
60550
+ });
60531
60551
  };
60532
- for (const id of blocked) noteRefused(id, () => blockedRepeat++);
60533
- for (const id of rejected.keys()) noteRefused(id, () => rejectedRepeat++);
60552
+ for (const id of blocked) noteRefused(id, "blocked", () => blockedRepeat++);
60553
+ for (const [id, why] of rejected) noteRefused(id, why, () => rejectedRepeat++);
60534
60554
  for (const n of instances.nodes) {
60535
60555
  const owner = owningStore(n.id);
60536
60556
  if (!owner || !["Problem", "Solution", "RootCause"].includes(owner.n.label)) continue;
60537
60557
  if (blocked.has(n.id)) continue;
60538
60558
  if (rejected.has(n.id)) continue;
60539
60559
  const cloudNodeId = cloudIdByLocal.get(n.id);
60540
- const { shipRefusedSinceSeq: _cleared, ...carried } = owner.n.attrs;
60560
+ const {
60561
+ shipRefusedSinceSeq: _clearedSeq,
60562
+ shipRefusedCount: _clearedCount,
60563
+ shipRefusedReason: _clearedReason,
60564
+ shipRefusedFingerprint: _clearedFp,
60565
+ ...carried
60566
+ } = owner.n.attrs;
60541
60567
  owner.s.updateNode(n.id, {
60542
60568
  attrs: {
60543
60569
  ...carried,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.2-dev.902",
3
+ "version": "2.0.2-dev.906",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {