instar 1.3.83 → 1.3.84

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.
@@ -20,7 +20,8 @@ export interface ReapLogEntry {
20
20
  tmuxSession: string;
21
21
  /** The reason the killer requested (e.g. 'idle-zombie', 'age-limit'). */
22
22
  reason: string;
23
- disposition?: 'terminal' | 'recovery-bounce';
23
+ /** What actually happened: terminal/recovery-bounce, or skipped:<authority-reason>. */
24
+ disposition: 'terminal' | 'recovery-bounce' | `skipped:${string}`;
24
25
  origin?: 'operator' | 'autonomous';
25
26
  /** For 'skipped': why the authority refused (protected / not-lease-holder / a KEEP / in-flight). */
26
27
  skipped?: string;
@@ -47,5 +48,6 @@ export declare class ReapLog {
47
48
  private append;
48
49
  /** Read the most-recent `limit` entries (newest last), tolerating partial/corrupt lines. */
49
50
  read(limit?: number): ReapLogEntry[];
51
+ private normalizeEntry;
50
52
  }
51
53
  //# sourceMappingURL=ReapLog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReapLog.d.ts","sourceRoot":"","sources":["../../src/monitoring/ReapLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACnC,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA2B;gBAE1C,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS;IAKlE,YAAY,CAAC,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;QAC7C,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;KACpC,GAAG,IAAI;IAaR,aAAa,CAAC,CAAC,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;KACpC,GAAG,IAAI;IAaR,OAAO,CAAC,MAAM;IASd,4FAA4F;IAC5F,IAAI,CAAC,KAAK,SAAM,GAAG,YAAY,EAAE;CAqBlC"}
1
+ {"version":3,"file":"ReapLog.d.ts","sourceRoot":"","sources":["../../src/monitoring/ReapLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,WAAW,EAAE,UAAU,GAAG,iBAAiB,GAAG,WAAW,MAAM,EAAE,CAAC;IAClE,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACnC,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA2B;gBAE1C,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS;IAKlE,YAAY,CAAC,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;QAC7C,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;KACpC,GAAG,IAAI;IAaR,aAAa,CAAC,CAAC,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;KACpC,GAAG,IAAI;IAcR,OAAO,CAAC,MAAM;IASd,4FAA4F;IAC5F,IAAI,CAAC,KAAK,SAAM,GAAG,YAAY,EAAE;IAsBjC,OAAO,CAAC,cAAc;CAsBvB"}
@@ -28,7 +28,7 @@ export class ReapLog {
28
28
  session: e.session,
29
29
  tmuxSession: e.tmuxSession,
30
30
  reason: e.reason,
31
- disposition: e.disposition,
31
+ disposition: e.disposition ?? 'terminal',
32
32
  origin: e.origin,
33
33
  machine: this.machineId?.(),
34
34
  });
@@ -40,6 +40,7 @@ export class ReapLog {
40
40
  session: e.session,
41
41
  tmuxSession: e.tmuxSession,
42
42
  reason: e.reason,
43
+ disposition: `skipped:${e.skipped}`,
43
44
  skipped: e.skipped,
44
45
  origin: e.origin,
45
46
  machine: this.machineId?.(),
@@ -70,7 +71,7 @@ export class ReapLog {
70
71
  const out = [];
71
72
  for (const line of tail) {
72
73
  try {
73
- out.push(JSON.parse(line));
74
+ out.push(this.normalizeEntry(JSON.parse(line)));
74
75
  }
75
76
  catch {
76
77
  // skip a corrupt/partial line rather than failing the whole read
@@ -78,5 +79,26 @@ export class ReapLog {
78
79
  }
79
80
  return out;
80
81
  }
82
+ normalizeEntry(entry) {
83
+ const type = entry.type === 'skipped' ? 'skipped' : 'reaped';
84
+ const skipped = typeof entry.skipped === 'string' ? entry.skipped : undefined;
85
+ let disposition = entry.disposition;
86
+ if (!disposition) {
87
+ disposition = type === 'skipped'
88
+ ? `skipped:${skipped ?? 'unknown'}`
89
+ : 'terminal';
90
+ }
91
+ return {
92
+ ts: typeof entry.ts === 'string' ? entry.ts : new Date(0).toISOString(),
93
+ type,
94
+ session: typeof entry.session === 'string' ? entry.session : 'unknown',
95
+ tmuxSession: typeof entry.tmuxSession === 'string' ? entry.tmuxSession : 'unknown',
96
+ reason: typeof entry.reason === 'string' ? entry.reason : 'unknown',
97
+ disposition,
98
+ origin: entry.origin,
99
+ skipped,
100
+ machine: entry.machine,
101
+ };
102
+ }
81
103
  }
82
104
  //# sourceMappingURL=ReapLog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReapLog.js","sourceRoot":"","sources":["../../src/monitoring/ReapLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAiB7B,MAAM,OAAO,OAAO;IACD,OAAO,CAAS;IAChB,SAAS,CAA4B;IAEtD,YAAY,QAAgB,EAAE,SAAoC;QAChE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,CAMZ;QACC,IAAI,CAAC,MAAM,CAAC;YACV,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,CAMb;QACC,IAAI,CAAC,MAAM,CAAC;YACV,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAmB;QAChC,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,4FAA4F;IAC5F,IAAI,CAAC,KAAK,GAAG,GAAG;QACd,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,kDAAkD;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
1
+ {"version":3,"file":"ReapLog.js","sourceRoot":"","sources":["../../src/monitoring/ReapLog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.83",
3
+ "version": "1.3.84",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-29T11:31:57.082Z",
5
- "instarVersion": "1.3.83",
4
+ "generatedAt": "2026-05-29T11:46:36.721Z",
5
+ "instarVersion": "1.3.84",
6
6
  "entryCount": 193,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -0,0 +1,25 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ Reap Log entries now include a consistent disposition field for skipped rows as well as reaped rows. This fixes a dogfood issue where skipped rows explained the authority refusal in a separate field but did not populate the common outcome field, making "where did my session go?" tooling harder to consume.
8
+
9
+ ## What to Tell Your User
10
+
11
+ The session reap log is easier to read now: every row has a clear outcome, including attempts that were safely skipped.
12
+
13
+ ## Summary of New Capabilities
14
+
15
+ | Area | Capability |
16
+ | --- | --- |
17
+ | Reap Log | Skipped rows now include a normalized outcome like skipped:protected or skipped:not-lease-holder. |
18
+ | Observability | Older skipped log lines are normalized when read, so existing logs become easier to interpret immediately. |
19
+ | Compatibility | The existing skipped detail field remains available for clients that already use it. |
20
+
21
+ ## Evidence
22
+
23
+ - Unit coverage: `tests/unit/reap-log.test.ts` verifies new skipped entries and legacy skipped rows include a normalized disposition.
24
+ - Integration coverage: `tests/integration/reap-log-route.test.ts` verifies the route surfaces skipped dispositions.
25
+ - E2E coverage: `tests/e2e/reap-log-lifecycle.test.ts` verifies the live server path returns the normalized skipped disposition.
@@ -0,0 +1,86 @@
1
+ # Side-Effects Review — Reap Log Skipped Disposition
2
+
3
+ **Version / slug:** `reap-log-skipped-disposition`
4
+ **Date:** `2026-05-29`
5
+ **Author:** `instar-codey`
6
+ **Second-pass reviewer:** `not required by tooling`
7
+
8
+ ## Summary of the change
9
+
10
+ This change normalizes Reap Log entries so both reaped and skipped rows expose `disposition`. Skipped rows keep their existing `skipped` detail and add `disposition: skipped:<reason>`. The reader also backfills this field for old skipped log lines.
11
+
12
+ ## Decision-point inventory
13
+
14
+ - `ReapLog.recordSkipped()` — add an outcome disposition when writing skipped rows.
15
+ - `ReapLog.read()` — normalize legacy rows in memory.
16
+ - Reap Log route tests — assert skipped rows include the normalized disposition.
17
+
18
+ ---
19
+
20
+ ## 1. Over-block
21
+
22
+ No blocking behavior changes. This is read-only audit normalization.
23
+
24
+ ---
25
+
26
+ ## 2. Under-block
27
+
28
+ No reap authority behavior changes. Protected-session, lease-holder, KEEP-guard, and in-flight decisions are untouched.
29
+
30
+ ---
31
+
32
+ ## 3. Level-of-abstraction fit
33
+
34
+ The Reap Log audit sink owns the durable row shape, so it is the right layer to normalize old and new entries. Route handlers continue to read through the existing sink.
35
+
36
+ ---
37
+
38
+ ## 4. Signal vs authority compliance
39
+
40
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
41
+
42
+ - [x] No — this change has no conversational block/allow surface.
43
+
44
+ This output is explanatory observability only.
45
+
46
+ ---
47
+
48
+ ## 5. Interactions
49
+
50
+ - **Shadowing:** None. Session termination authority remains in `SessionManager`.
51
+ - **Double-fire:** None. One terminate attempt still creates at most one Reap Log row.
52
+ - **Races:** None added. Reads normalize returned objects without rewriting the JSONL file.
53
+ - **Feedback loops:** Positive loop: agents and dashboards can answer "what happened?" without special-casing skipped rows.
54
+
55
+ ---
56
+
57
+ ## 6. External surfaces
58
+
59
+ The `GET /sessions/reap-log` response now includes `disposition` on skipped rows. Existing clients using `skipped` continue to work.
60
+
61
+ ---
62
+
63
+ ## 7. Rollback cost
64
+
65
+ Rollback is a normal code revert. Newer log rows contain an extra JSON field that older readers ignore.
66
+
67
+ ---
68
+
69
+ ## Conclusion
70
+
71
+ The change is clear to ship. It fixes a real schema inconsistency found during Reap Log dogfooding without changing reap behavior.
72
+
73
+ ---
74
+
75
+ ## Second-pass review (if required)
76
+
77
+ **Reviewer:** `not required by tooling`
78
+ **Independent read of the artifact:** `not required`
79
+
80
+ ---
81
+
82
+ ## Evidence pointers
83
+
84
+ - `tests/unit/reap-log.test.ts`
85
+ - `tests/integration/reap-log-route.test.ts`
86
+ - `tests/e2e/reap-log-lifecycle.test.ts`