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/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +35 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +19 -19
- package/upgrades/1.3.642.md +46 -0
- package/upgrades/side-effects/false-excuse-deferral-stop-guard.md +75 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"instarVersion": "1.3.
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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.
|