instar 1.3.641 → 1.3.642

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.641",
3
+ "version": "1.3.642",
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-06-22T03:53:34.493Z",
5
- "instarVersion": "1.3.641",
4
+ "generatedAt": "2026-06-22T07:19:14.502Z",
5
+ "instarVersion": "1.3.642",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -11,7 +11,7 @@
11
11
  "domain": "identity",
12
12
  "sourcePath": "src/core/PostUpdateMigrator.ts",
13
13
  "installedPath": ".instar/hooks/instar/session-start.sh",
14
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
14
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
15
15
  "since": "2025-01-01"
16
16
  },
17
17
  "hook:dangerous-command-guard": {
@@ -20,7 +20,7 @@
20
20
  "domain": "safety",
21
21
  "sourcePath": "src/core/PostUpdateMigrator.ts",
22
22
  "installedPath": ".instar/hooks/instar/dangerous-command-guard.sh",
23
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
23
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
24
24
  "since": "2025-01-01"
25
25
  },
26
26
  "hook:grounding-before-messaging": {
@@ -29,7 +29,7 @@
29
29
  "domain": "safety",
30
30
  "sourcePath": "src/core/PostUpdateMigrator.ts",
31
31
  "installedPath": ".instar/hooks/instar/grounding-before-messaging.sh",
32
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
32
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
33
33
  "since": "2025-01-01"
34
34
  },
35
35
  "hook:compaction-recovery": {
@@ -38,7 +38,7 @@
38
38
  "domain": "identity",
39
39
  "sourcePath": "src/core/PostUpdateMigrator.ts",
40
40
  "installedPath": ".instar/hooks/instar/compaction-recovery.sh",
41
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
41
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
42
42
  "since": "2025-01-01"
43
43
  },
44
44
  "hook:external-operation-gate": {
@@ -47,7 +47,7 @@
47
47
  "domain": "safety",
48
48
  "sourcePath": "src/core/PostUpdateMigrator.ts",
49
49
  "installedPath": ".instar/hooks/instar/external-operation-gate.js",
50
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
50
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
51
51
  "since": "2025-01-01"
52
52
  },
53
53
  "hook:deferral-detector": {
@@ -56,7 +56,7 @@
56
56
  "domain": "safety",
57
57
  "sourcePath": "src/core/PostUpdateMigrator.ts",
58
58
  "installedPath": ".instar/hooks/instar/deferral-detector.js",
59
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
59
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:self-stop-guard": {
@@ -65,7 +65,7 @@
65
65
  "domain": "coherence",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/self-stop-guard.js",
68
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
68
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:post-action-reflection": {
@@ -74,7 +74,7 @@
74
74
  "domain": "evolution",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
77
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
77
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:external-communication-guard": {
@@ -83,7 +83,7 @@
83
83
  "domain": "safety",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
86
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
86
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-collector": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
95
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
95
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:scope-coherence-checkpoint": {
@@ -101,7 +101,7 @@
101
101
  "domain": "coherence",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
104
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
104
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:free-text-guard": {
@@ -110,7 +110,7 @@
110
110
  "domain": "safety",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
113
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
113
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
122
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
122
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:claim-intercept-response": {
@@ -128,7 +128,7 @@
128
128
  "domain": "coherence",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
131
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
131
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "hook:stop-gate-router": {
@@ -137,7 +137,7 @@
137
137
  "domain": "safety",
138
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
139
139
  "installedPath": ".instar/hooks/instar/stop-gate-router.js",
140
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
140
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
141
141
  "since": "2025-01-01"
142
142
  },
143
143
  "hook:auto-approve-permissions": {
@@ -146,7 +146,7 @@
146
146
  "domain": "safety",
147
147
  "sourcePath": "src/core/PostUpdateMigrator.ts",
148
148
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
149
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
149
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
150
150
  "since": "2025-01-01"
151
151
  },
152
152
  "job:health-check": {
@@ -1562,7 +1562,7 @@
1562
1562
  "type": "subsystem",
1563
1563
  "domain": "updates",
1564
1564
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1565
- "contentHash": "b8cabbf22cdb28187bc70a5337a9e340996eb8eace88790b9bf8ba2d9a2b5630",
1565
+ "contentHash": "80fdbcd7e2b0c600a1766e7ebc736aa394e0eb8ccf73417a10a9643903d7a7b4",
1566
1566
  "since": "2025-01-01"
1567
1567
  },
1568
1568
  "subsystem:scheduler": {
@@ -0,0 +1,46 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: minor -->
5
+
6
+ ## What Changed
7
+
8
+ A new guard in the agent's Stop hook catches a specific, recurring self-sabotage: the agent names
9
+ clear work it knows how to do next, then stops anyway with a self-protective excuse — "this session
10
+ is too long," "it's late," "I made mistakes so I'll be careful," "I don't want to rush," "it's
11
+ tracked so it won't slip," "I'll do it next session." Those are false reasons to stop. The guard
12
+ detects the pattern (a named next action plus one of those rationalizations) and blocks the stop
13
+ once, re-feeding a reminder that the excuse is false and to proceed now. It can never trap the agent
14
+ in a loop, and it leaves a genuine stop alone (a real external blocker, work actually finished, or a
15
+ decision only the user can make).
16
+
17
+ ## What to Tell Your User
18
+
19
+ Your agent should stop wasting your time by quitting partway through work it clearly knows how to
20
+ finish. If it tries to stop with an excuse like "it's late" or "let's do this next session" while
21
+ there's an obvious next step, it now gets caught and nudged to just do the thing — so you no longer
22
+ have to come back and say "okay, do the thing you just said you'd do."
23
+
24
+ ## Summary of New Capabilities
25
+
26
+ - `stop-gate-router` hook gains a mode-independent `falseExcuseDeferralGuard`: when the final message
27
+ contains BOTH a named piece of remaining work AND a self-protective deferral rationalization
28
+ (session-length, time-of-day, made-mistakes, don't-rush, tracked-so-it-won't-slip, next-session),
29
+ it blocks the stop once and re-feeds a "this is false — proceed now" directive.
30
+ - Pure substring matching, fires once per stop (the `stop_hook_active` loop guard prevents traps),
31
+ and requires the AND of both signals so a genuine completion or a no-work time reference is not
32
+ blocked.
33
+ - Ships to every agent automatically via the always-overwrite hook update path (no per-agent
34
+ migration needed).
35
+
36
+ ## Evidence
37
+
38
+ **Before:** the Stop gate only caught "stated-continuation" (the agent saying "I'll do X now" then
39
+ not). It did NOT catch the inverse — the agent explicitly justifying NOT doing the clear next thing
40
+ ("after a long session I won't rush this; it's tracked"). That pattern repeatedly ended sessions
41
+ early and forced the operator to re-issue "do the thing you just said." **After:** the new guard
42
+ catches it. Reproduced by `tests/unit/stop-gate-false-excuse-deferral.test.ts` (6 cases): it renders
43
+ valid JS, blocks the real-world excuse-stop and a session-length/next-session deferral, does NOT
44
+ block a genuine completion or a time reference with no pending work, and does NOT re-block under
45
+ `stop_hook_active`. The existing `stop-gate-stated-continuation` + `generated-hooks-parse` suites
46
+ stay green.
@@ -0,0 +1,75 @@
1
+ # Side-Effects Review — False-Excuse Deferral Stop-Guard
2
+
3
+ **Slug:** `false-excuse-deferral-stop-guard` · **Tier:** 1 (small, low-risk hook behavior addition;
4
+ operator-requested direct fix, no spec). Touches `PostUpdateMigrator.getStopGateRouterHook()` (a
5
+ hook template), so the tier signal flags `belowFloor` (a PostUpdateMigrator touch raises the floor) —
6
+ accepted: the change is a self-contained substring guard, fully reversible, no external surface.
7
+
8
+ ## Summary of the change
9
+
10
+ `stop-gate-router` hook gains `falseExcuseDeferralGuard`, mirroring the existing
11
+ `statedContinuationGuard`: a mode-independent IIFE that, on a Stop, blocks ONCE when the final
12
+ assistant message contains BOTH (a) a named piece of remaining work AND (b) a self-protective
13
+ deferral rationalization (session-length / time-of-day / made-mistakes / don't-rush /
14
+ tracked-so-it-won't-slip / next-session), re-feeding a "this excuse is false — proceed" directive.
15
+ Same change in the deployed copy is overwritten from this source on the next update (Migration
16
+ Parity — always-overwrite built-in hooks), so it reaches every agent.
17
+
18
+ ## 1. Over-block / false positive
19
+
20
+ The AND-of-both-signals requirement is the false-positive control: a self-protective phrase alone
21
+ (e.g. "it's late, but everything is done") does NOT block — `knownWork` must also match. Tested:
22
+ a genuine completion and a time-reference-with-no-pending-work both pass through (no block). Cost of
23
+ any residual false positive is bounded to ONE extra turn (the agent re-affirms and re-stops), because
24
+ the guard fires once.
25
+
26
+ ## 2. Under-block
27
+
28
+ If the agent stops with an excuse but uses wording outside the phrase lists, it slips through (a
29
+ false negative) — acceptable: the guard is a high-precision catch for the documented recurring
30
+ phrasings, not a complete classifier. The lists cover the operator-cited forms and the agent's actual
31
+ observed messages. Tunable by extending the arrays.
32
+
33
+ ## 4. Signal vs authority
34
+
35
+ The guard is a one-shot re-feed (block decision with a reminder), exactly like the
36
+ stated-continuation guard. It never silences or rewrites a message and takes no destructive action.
37
+ The `stop_hook_active` loop guard guarantees the agent is never trapped — a legitimate stop (real
38
+ external blocker / work complete / a user-only decision) re-stops cleanly on the next attempt.
39
+
40
+ ## 5. Interactions
41
+
42
+ Sits directly after `statedContinuationGuard` in the same hook, before the server round-trip — so it
43
+ works even when the server-side stop-gate is in shadow/off mode (which is exactly when these stalls
44
+ slip through). No new dependency, no network call, no state. Pure substring matching. Cannot recurse
45
+ or grow unbounded.
46
+
47
+ ## 6. External surfaces
48
+
49
+ None. No route, no egress, no spend (no LLM call — deterministic substring matching in the hook
50
+ subprocess).
51
+
52
+ ## 7. Multi-machine posture
53
+
54
+ Machine-local: the hook runs per-session on whichever machine hosts the session. No replicated state.
55
+ Each agent on each machine gets the guard via the standard hook update.
56
+
57
+ ## 8. Rollback cost
58
+
59
+ Trivial: delete the `falseExcuseDeferralGuard` IIFE from `getStopGateRouterHook()`; the next update
60
+ overwrites the deployed copy back to guard-free. No data, no migration to unwind.
61
+
62
+ ## Evidence pointers
63
+
64
+ - `tests/unit/stop-gate-false-excuse-deferral.test.ts` (6): renders valid JS containing the guard;
65
+ blocks the real-world excuse-stop (named work + self-protective excuse); blocks a
66
+ session-length/next-session deferral; does NOT block a genuine completion; does NOT block a time
67
+ reference with no deferred work (false-positive control); does NOT re-block under `stop_hook_active`.
68
+ - `tests/unit/stop-gate-stated-continuation.test.ts` + `tests/unit/generated-hooks-parse.test.ts`
69
+ stay green (the template literal still renders valid JS). Full `tsc` clean.
70
+
71
+ ## Conclusion
72
+
73
+ Delivers the operator-requested structural catch for the recurring false-excuse early-stop, as an
74
+ instar feature that ships to every agent. High-precision, loop-safe, reversible, no external surface.
75
+ Ship.