@inerrata-corporation/errata 2.0.2-dev.346 → 2.0.2-dev.354

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.
@@ -15329,6 +15329,14 @@ var init_wire = __esm({
15329
15329
  * deployment a self-corroboration). Optional + additive: absent leaves the
15330
15330
  * gate fail-open for that node, exactly today's behaviour. */
15331
15331
  originSession: external_exports.string().min(3).max(64).optional(),
15332
+ /** Epoch ms of the ORIGINATING local node's creation — when the knowledge was
15333
+ * actually captured, as opposed to when its public twin reached the cloud.
15334
+ * Stored as `observedAt`; the network board's chronological view orders on
15335
+ * it. Without this the wire carried NO timestamp at all, so a node captured
15336
+ * days ago surfaced as "new" the moment it was generalized and published —
15337
+ * the board showed ingest order wearing a chronology's clothes. Optional +
15338
+ * additive: absent keeps ingest-time ordering for that node. */
15339
+ originCreatedAtMs: external_exports.number().int().positive().optional(),
15332
15340
  extractionSource: external_exports.enum(INGEST_EXTRACTION_SOURCES),
15333
15341
  validationSource: external_exports.enum(VALIDATION_SOURCES).optional(),
15334
15342
  /** Org-membrane (M2): the daemon's anchor tag — it owns the lockfile, so it
package/errata.mjs CHANGED
@@ -15630,6 +15630,14 @@ var init_wire = __esm({
15630
15630
  * deployment a self-corroboration). Optional + additive: absent leaves the
15631
15631
  * gate fail-open for that node, exactly today's behaviour. */
15632
15632
  originSession: external_exports.string().min(3).max(64).optional(),
15633
+ /** Epoch ms of the ORIGINATING local node's creation — when the knowledge was
15634
+ * actually captured, as opposed to when its public twin reached the cloud.
15635
+ * Stored as `observedAt`; the network board's chronological view orders on
15636
+ * it. Without this the wire carried NO timestamp at all, so a node captured
15637
+ * days ago surfaced as "new" the moment it was generalized and published —
15638
+ * the board showed ingest order wearing a chronology's clothes. Optional +
15639
+ * additive: absent keeps ingest-time ordering for that node. */
15640
+ originCreatedAtMs: external_exports.number().int().positive().optional(),
15633
15641
  extractionSource: external_exports.enum(INGEST_EXTRACTION_SOURCES),
15634
15642
  validationSource: external_exports.enum(VALIDATION_SOURCES).optional(),
15635
15643
  /** Org-membrane (M2): the daemon's anchor tag — it owns the lockfile, so it
@@ -21405,6 +21413,7 @@ function buildSnapshot(opts) {
21405
21413
  recentResolved,
21406
21414
  recentConstraints,
21407
21415
  ...causalNudge ? { causalNudge } : {},
21416
+ ...opts.selfCiteSkips && opts.selfCiteSkips > 0 ? { selfCiteSkips: opts.selfCiteSkips } : {},
21408
21417
  ...domainNudge ? { domainNudge } : {},
21409
21418
  motifs,
21410
21419
  reviewCount: opts.reviewCount,
@@ -21552,6 +21561,12 @@ function renderSnapshot(s) {
21552
21561
  lines.push("");
21553
21562
  }
21554
21563
  const tagOf = (n) => s.edgeElicitation ? ` \`[${priorHandle(n)}]\`` : "";
21564
+ if (s.selfCiteSkips) {
21565
+ lines.push(
21566
+ `_**${s.selfCiteSkips} of your citations last turn were dropped** \u2014 they named priors this same session captured, and corroboration counts independent sessions, so citing your own capture is void by construction. It still records the link; it just cannot corroborate. To corroborate, cite a prior you were SHOWN (the collective block, or a problem from an earlier session) \u2014 that is the evidence the graph is short of._`
21567
+ );
21568
+ lines.push("");
21569
+ }
21555
21570
  lines.push("### Recently observed problems in this workspace");
21556
21571
  if (s.recentProblems.length === 0 && s.recentResolved.length === 0 && s.recentConstraints.length === 0) {
21557
21572
  lines.push("- _none yet \u2014 errata is still building its model_");
@@ -22101,6 +22116,19 @@ function toWirePayload(batch, runId) {
22101
22116
  // attrs travel; node-level bookkeeping (embedding, momentum counters,
22102
22117
  // bi-temporal fields) is local-stratum and never crosses.
22103
22118
  attrs: n.attrs ?? {},
22119
+ // The SESSION independence key. The daemon's shareable() projection has
22120
+ // stamped this since the session-unit fix — and this map silently dropped
22121
+ // it, so `authoringSession` landed null on every cloud node and the
22122
+ // server-side self-corroboration gate was permanently fail-open. The
22123
+ // client-side gate caught this session's own nodes; nothing caught a
22124
+ // later session on the SAME machine citing them.
22125
+ ...n.originSession ? { originSession: n.originSession } : {},
22126
+ // When the knowledge was CAPTURED locally (epoch ms). Deliberately an
22127
+ // exception to "temporal fields never cross": cloud `createdAt` is ingest
22128
+ // time, and the network board's chronological view was ordering on it —
22129
+ // ingest order wearing a chronology's clothes. One scalar, no bi-temporal
22130
+ // machinery crosses with it.
22131
+ ...n.createdAt ? { originCreatedAtMs: n.createdAt } : {},
22104
22132
  extractionSource: n.extractionSource,
22105
22133
  // Org-membrane anchor tag (OM-anchor-tag): the batch builders set these
22106
22134
  // on wire-bound projections only; the door re-validates the claim on the
@@ -53236,7 +53264,7 @@ function startLoopLagMonitor(thresholdMs = 1e3) {
53236
53264
  }
53237
53265
 
53238
53266
  // src/engine.ts
53239
- var DAEMON_VERSION = true ? "2.0.2-dev.346" : "2.0.0-alpha.0";
53267
+ var DAEMON_VERSION = true ? "2.0.2-dev.354" : "2.0.0-alpha.0";
53240
53268
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
53241
53269
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
53242
53270
  var GIT_OP_MUTE_MS = 4e3;
@@ -53549,6 +53577,7 @@ function createWorkspaceEngine(opts) {
53549
53577
  const REMOTE_REFRESH_MS = 5 * 6e4;
53550
53578
  let ctxRefreshInFlight = false;
53551
53579
  let ctxRefreshQueued = false;
53580
+ let lastSelfCiteSkips = 0;
53552
53581
  const refreshContextNow = () => {
53553
53582
  void refreshContextAsync().catch((err2) => {
53554
53583
  console.warn("[errata] context refresh failed:", err2 instanceof Error ? err2.message : err2);
@@ -53578,7 +53607,8 @@ function createWorkspaceEngine(opts) {
53578
53607
  reviewCount: pendingCount(paths),
53579
53608
  reviewUiUrl: opts.reviewUrl(),
53580
53609
  workingFile: workingFiles.mostRecent() ?? void 0,
53581
- skills: readSkillManifest(paths.skillsManifest)
53610
+ skills: readSkillManifest(paths.skillsManifest),
53611
+ ...lastSelfCiteSkips > 0 ? { selfCiteSkips: lastSelfCiteSkips } : {}
53582
53612
  };
53583
53613
  const prebuilt = passWorker ? await passWorker.snapshot(snapOpts).catch(() => null) : null;
53584
53614
  const doneRender = prebuilt ? null : markPass(`context-render-inline:${profile.name}`);
@@ -54285,6 +54315,8 @@ function createWorkspaceEngine(opts) {
54285
54315
  if (skipped > 0) {
54286
54316
  console.log(`[errata] corroborate: ${skipped} skipped (this session authored the node)`);
54287
54317
  appendWitnessLedger(paths.configDir, { ts: Date.now(), channel: "corroborate", clientSelfSkipped: skipped });
54318
+ lastSelfCiteSkips = skipped;
54319
+ refreshContextNow();
54288
54320
  }
54289
54321
  await sendWitnesses(
54290
54322
  "corroborate",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.2-dev.346",
3
+ "version": "2.0.2-dev.354",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
package/pass-worker.mjs CHANGED
@@ -15184,6 +15184,14 @@ var init_wire = __esm({
15184
15184
  * deployment a self-corroboration). Optional + additive: absent leaves the
15185
15185
  * gate fail-open for that node, exactly today's behaviour. */
15186
15186
  originSession: external_exports.string().min(3).max(64).optional(),
15187
+ /** Epoch ms of the ORIGINATING local node's creation — when the knowledge was
15188
+ * actually captured, as opposed to when its public twin reached the cloud.
15189
+ * Stored as `observedAt`; the network board's chronological view orders on
15190
+ * it. Without this the wire carried NO timestamp at all, so a node captured
15191
+ * days ago surfaced as "new" the moment it was generalized and published —
15192
+ * the board showed ingest order wearing a chronology's clothes. Optional +
15193
+ * additive: absent keeps ingest-time ordering for that node. */
15194
+ originCreatedAtMs: external_exports.number().int().positive().optional(),
15187
15195
  extractionSource: external_exports.enum(INGEST_EXTRACTION_SOURCES),
15188
15196
  validationSource: external_exports.enum(VALIDATION_SOURCES).optional(),
15189
15197
  /** Org-membrane (M2): the daemon's anchor tag — it owns the lockfile, so it
@@ -26396,6 +26404,7 @@ function buildSnapshot(opts) {
26396
26404
  recentResolved,
26397
26405
  recentConstraints,
26398
26406
  ...causalNudge ? { causalNudge } : {},
26407
+ ...opts.selfCiteSkips && opts.selfCiteSkips > 0 ? { selfCiteSkips: opts.selfCiteSkips } : {},
26399
26408
  ...domainNudge ? { domainNudge } : {},
26400
26409
  motifs,
26401
26410
  reviewCount: opts.reviewCount,