instar 1.3.815 → 1.3.816
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 +11 -3
- 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.816.md +23 -0
- package/upgrades/side-effects/external-operation-unknown-verbs.md +85 -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-07-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-11T05:06:27.692Z",
|
|
5
|
+
"instarVersion": "1.3.816",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
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": "9eaf18f016eee4b02c4ec3e946c783be1ef91e9425d747171e00bf2c0f1847e0",
|
|
1566
1566
|
"since": "2025-01-01"
|
|
1567
1567
|
},
|
|
1568
1568
|
"subsystem:scheduler": {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
The external-operation PreToolUse hook now fast-paths only explicitly read-only MCP actions. Unrecognized action verbs are classified as `modify` and sent to the existing gate for the authoritative decision instead of silently bypassing evaluation.
|
|
9
|
+
|
|
10
|
+
## What to Tell Your User
|
|
11
|
+
|
|
12
|
+
Novel or unusually named external-service actions now receive the same safety evaluation as recognized writes and modifications. Familiar read-only actions remain fast and unchanged.
|
|
13
|
+
|
|
14
|
+
## Summary of New Capabilities
|
|
15
|
+
|
|
16
|
+
- Explicit read-only verb allowlist for MCP action classification.
|
|
17
|
+
- Unknown verbs route to the gate as `modify` rather than inheriting read safety.
|
|
18
|
+
- Existing delete, write, and modify prefixes retain their established classifications.
|
|
19
|
+
- Fresh installs, upgrades, and Codex hook installs share the corrected canonical hook source.
|
|
20
|
+
|
|
21
|
+
## Evidence
|
|
22
|
+
|
|
23
|
+
Real generated-hook tests prove seven bypass-class verbs attempt a gate call as `modify`, four representative read verbs make zero gate calls, and delete/send/update retain their original classifications. Adjacent installer, Codex wiring, and server-side fail-safe tests pass.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Side-Effects Review — Unknown external-operation verbs reach the gate
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `external-operation-unknown-verbs`
|
|
4
|
+
**Date:** `2026-07-10`
|
|
5
|
+
**Author:** `instar-codey`
|
|
6
|
+
**Second-pass reviewer:** `framework_guard_review`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
`PostUpdateMigrator.getExternalOperationGateHook()` now defaults unmatched MCP action verbs to `modify` and grants the zero-round-trip read fast path only to an explicit, narrow allowlist. The same generated source reaches fresh installs, always-overwrite migrations, and Codex hook installs. Runtime tests execute the generated hook against a real gate endpoint and lock both sides of the boundary.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
- Hook mutability detector — modify — unknown verbs emit `modify`; explicit reads emit `read`; known destructive prefixes retain their categories.
|
|
15
|
+
- Read fast path — constrain — only the explicit read vocabulary exits before the API.
|
|
16
|
+
- External Operation Gate authority — pass-through — continues to decide allow, plan, alternative, or block for every non-read classification.
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
A novel but genuinely read-only MCP action whose first verb is absent from the allowlist incurs one gate round-trip and may receive the gate's normal approval workflow. The hook itself does not block it. This conservative cost is intentional: adding an ambiguous verb to the read fast path would recreate the safety bypass.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block
|
|
23
|
+
|
|
24
|
+
The hook still relies on action-name vocabulary; a deliberately misleading connector action could avoid every known mutation token. Connector naming is not a semantic proof system. Compound names that begin with a read verb but contain a known mutating token are explicitly routed to the gate. The gate-unreachable and malformed-input fail-open postures remain byte-unchanged per task scope; this change closes classification bypass while preserving availability policy.
|
|
25
|
+
|
|
26
|
+
## 3. Level-of-abstraction fit
|
|
27
|
+
|
|
28
|
+
The hook remains a low-context detector. It classifies obvious verbs and routes uncertainty toward `ExternalOperationGate`, the existing context-rich authority. It does not add a second blocking decision. The inline vocabulary is necessary because the deployed hook is standalone; a lockstep comment points future editors at the server-side `computeRiskLevel` twin.
|
|
29
|
+
|
|
30
|
+
## 4. Signal vs authority compliance
|
|
31
|
+
|
|
32
|
+
Required reference: [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
33
|
+
|
|
34
|
+
- [x] The hook produces a conservative mutability signal consumed by the existing External Operation Gate authority.
|
|
35
|
+
|
|
36
|
+
Unknown verbs are not hard-failed. They become `modify`, reach `/operations/evaluate`, and receive the gate's normal policy/LLM decision. The only local bypass is the enumerated unambiguous-read fast path.
|
|
37
|
+
|
|
38
|
+
## 5. Interactions
|
|
39
|
+
|
|
40
|
+
- **Shadowing:** explicit reads still exit before gate evaluation; all other actions reach the same existing gate.
|
|
41
|
+
- **Double-fire:** each hook invocation makes at most one evaluation request; no new retry or secondary authority exists.
|
|
42
|
+
- **Races:** classification is pure per invocation and introduces zero shared state.
|
|
43
|
+
- **Feedback loops:** the change adds zero scheduling, retries, or self-triggered actions.
|
|
44
|
+
- **Deployment:** `migrateHooks()` always overwrites the built-in hook and init consumes `getHookContent`; Codex registration points at that same deployed file. The repository's local `.instar/hooks` runtime copy remains machinery-owned and is not hand-synchronized.
|
|
45
|
+
|
|
46
|
+
## 6. External surfaces
|
|
47
|
+
|
|
48
|
+
Unrecognized external-service action names now become visible to the operation gate and its existing audit/approval surfaces. Explicit reads and gate response formats remain unchanged. The change adds zero routes, configuration keys, credentials, persistent schemas, or operator forms.
|
|
49
|
+
|
|
50
|
+
## 6b. Operator-surface quality
|
|
51
|
+
|
|
52
|
+
Operator surface unchanged; this criterion is not applicable.
|
|
53
|
+
|
|
54
|
+
## 7. Multi-machine posture
|
|
55
|
+
|
|
56
|
+
**Machine-local by design:** each machine evaluates its local session's external tool call against its local gate and trust state. Deployment is fleet-wide through the normal update path, but runtime decisions remain machine-local security events. The change emits zero direct user notices, holds zero new durable state, leaves topic transfer unchanged, and generates zero URLs.
|
|
57
|
+
|
|
58
|
+
## 8. Rollback cost
|
|
59
|
+
|
|
60
|
+
Pure generated-hook and test rollback: revert and ship a patch. The next migration re-stamps the prior hook. There is no data migration or state repair; rollback would restore the unknown-verb bypass until the subsequent fix deploys.
|
|
61
|
+
|
|
62
|
+
## Conclusion
|
|
63
|
+
|
|
64
|
+
The hook now fails toward the authority rather than pre-judging unfamiliar vocabulary as safe. Independent review caught and corrected two boundary defects before commit: `purge` remains an existing delete classification, and compound read-prefixed mutators are excluded from the fast path by full-token inspection. The gate-unreachable posture is untouched and all three deployment consumers remain single-sourced. Clear to ship after revised concurrence and CI.
|
|
65
|
+
|
|
66
|
+
## Second-pass review
|
|
67
|
+
|
|
68
|
+
**Reviewer:** framework_guard_review
|
|
69
|
+
**Independent read of the artifact:** concur
|
|
70
|
+
|
|
71
|
+
The first review raised two boundary concerns: preserve `purge` as delete, and prevent read-prefixed compound mutators from bypassing evaluation. Both were corrected. Revised review confirms explicit read-leading verbs bypass only when every tail token is non-mutating; unknown standalone and adversarial compound verbs reach the authority, deployment stays single-sourced, and the reviewer's focused suite passed 14/14.
|
|
72
|
+
|
|
73
|
+
## Evidence pointers
|
|
74
|
+
|
|
75
|
+
- `tests/unit/hook-installation.test.ts`
|
|
76
|
+
- `tests/unit/ExternalOperationGate.test.ts`
|
|
77
|
+
- `tests/unit/installCodexHooks.test.ts`
|
|
78
|
+
- `tests/unit/codex-hooks-wiring.test.ts`
|
|
79
|
+
|
|
80
|
+
## Class-Closure Declaration
|
|
81
|
+
|
|
82
|
+
- `defectClass`: `novel` — proposed registry id `unknown-classification-fail-open`.
|
|
83
|
+
- `closure`: `gap`.
|
|
84
|
+
- `gap`: `ACT-001` tracks operator confirmation/refinement and class-wide recurrence standardization.
|
|
85
|
+
- `novelClass`: nearest existing class is `prompt-parser-contract-drift`; that class covers rendered prompt/parser contract mismatch, while this class covers unmatched runtime classifier input inheriting privileged-safe authority.
|