instar 1.3.341 → 1.3.343
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +45 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +22 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/monitoring/GuardPostureTripwire.d.ts +90 -0
- package/dist/monitoring/GuardPostureTripwire.d.ts.map +1 -0
- package/dist/monitoring/GuardPostureTripwire.js +182 -0
- package/dist/monitoring/GuardPostureTripwire.js.map +1 -0
- package/dist/redteam/ScenarioPack.d.ts +161 -0
- package/dist/redteam/ScenarioPack.d.ts.map +1 -0
- package/dist/redteam/ScenarioPack.js +200 -0
- package/dist/redteam/ScenarioPack.js.map +1 -0
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +19 -19
- package/upgrades/1.3.342.md +85 -0
- package/upgrades/1.3.343.md +49 -0
- package/upgrades/guard-posture-tripwire.eli16.md +48 -0
- package/upgrades/side-effects/guard-posture-tripwire.md +76 -0
- package/upgrades/side-effects/redteam-harness-phase1-core.md +53 -0
- package/upgrades/1.3.341.md +0 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScenarioPack.js","sourceRoot":"","sources":["../../src/redteam/ScenarioPack.ts"],"names":[],"mappings":"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"}
|
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-06T05:21:01.567Z",
|
|
5
|
+
"instarVersion": "1.3.343",
|
|
6
6
|
"entryCount": 199,
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
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": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
150
150
|
"since": "2025-01-01"
|
|
151
151
|
},
|
|
152
152
|
"job:health-check": {
|
|
@@ -1538,7 +1538,7 @@
|
|
|
1538
1538
|
"type": "subsystem",
|
|
1539
1539
|
"domain": "updates",
|
|
1540
1540
|
"sourcePath": "src/core/PostUpdateMigrator.ts",
|
|
1541
|
-
"contentHash": "
|
|
1541
|
+
"contentHash": "67606a9d2c94d2b88f5ec21a08965b25afbbb43e1291de2ebdd0cc77dfed949c",
|
|
1542
1542
|
"since": "2025-01-01"
|
|
1543
1543
|
},
|
|
1544
1544
|
"subsystem:scheduler": {
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
GuardPostureTripwire — "a disabled guard is itself an incident." Born from
|
|
9
|
+
2026-06-05, when the morning meltdown load-shed batch-flipped FIVE guards off
|
|
10
|
+
in config.json (scheduler, contextWedgeSentinel, failureLearning,
|
|
11
|
+
resourceLedger, burnDetection) and only the scheduler was noticed: the wedge
|
|
12
|
+
sentinel stayed dark and watched a session die for an hour that same evening
|
|
13
|
+
with zero audit rows. No instar code writes those flags — emergency hand-edits
|
|
14
|
+
leave no trace, so each dark guard was discoverable only by a user-facing
|
|
15
|
+
failure.
|
|
16
|
+
|
|
17
|
+
Now: at every server boot, the resolved guard posture (every `monitoring.*`
|
|
18
|
+
enabled flag + `scheduler.enabled` — generic by convention, no per-guard
|
|
19
|
+
registration) is compared against the persisted posture from the previous
|
|
20
|
+
boot. Any enabled→disabled transition gets a loud boot log line, one
|
|
21
|
+
aggregated row in `logs/guard-posture.jsonl`, and ONE aggregated HIGH
|
|
22
|
+
Attention item listing every newly-disabled guard. Re-enables get the
|
|
23
|
+
breadcrumb only. Signal-only: nothing is ever auto-re-enabled, a broken
|
|
24
|
+
tripwire can never break a boot, and the snapshot advances before alarms so
|
|
25
|
+
the same transition never re-alarms.
|
|
26
|
+
|
|
27
|
+
Queued initial messages now survive server restarts. When a session is
|
|
28
|
+
spawned for an inbound message, the pending inject is recorded durably
|
|
29
|
+
(`<stateDir>/state/pending-injects/`) and cleared only after the message is
|
|
30
|
+
actually typed into the session. On boot, `recoverPendingInjects` sweeps
|
|
31
|
+
survivors: still-alive sessions get re-delivery through the normal readiness
|
|
32
|
+
path; dead or >6h-old records are reported via DegradationReporter and
|
|
33
|
+
retired — a loss is now always VISIBLE.
|
|
34
|
+
|
|
35
|
+
Why: the auto-updater restarted the server while a fresh codex session was
|
|
36
|
+
still booting; the in-memory pending inject died with the process, tmux
|
|
37
|
+
survived idle, and the operator waited 50+ minutes on a silently dropped
|
|
38
|
+
message (finding 8d300555). Delivery is at-least-once by design — a rare
|
|
39
|
+
duplicate beats a silent drop.
|
|
40
|
+
|
|
41
|
+
Also: the "Fresh-spawn fallback succeeded" log now honestly says "launched
|
|
42
|
+
(inject pending)" — it printed before the inject ran.
|
|
43
|
+
|
|
44
|
+
## What to Tell Your User
|
|
45
|
+
|
|
46
|
+
If any of my safety monitors ever gets switched off — by an emergency
|
|
47
|
+
intervention, a config edit, or anything else — you now hear about it at the
|
|
48
|
+
next restart instead of finding out weeks later when something it should have
|
|
49
|
+
caught hits you. One consolidated heads-up, with the history kept in a log
|
|
50
|
+
file. Nothing gets re-enabled behind your back; the heads-up is where you
|
|
51
|
+
decide.
|
|
52
|
+
|
|
53
|
+
If your agent's server restarts at the exact moment you message it, your
|
|
54
|
+
message no longer risks silently vanishing — it is delivered when the session
|
|
55
|
+
finishes starting, even across the restart.
|
|
56
|
+
|
|
57
|
+
## Summary of New Capabilities
|
|
58
|
+
|
|
59
|
+
- Boot-time guard-posture comparison with durable history at
|
|
60
|
+
`logs/guard-posture.jsonl` and snapshot at `state/guard-posture.json`.
|
|
61
|
+
Default-on, zero configuration; covers any future guard that follows the
|
|
62
|
+
`monitoring.<key>.enabled` convention automatically.
|
|
63
|
+
- ONE aggregated HIGH Attention item per boot that saw disables (Bounded
|
|
64
|
+
Notification Surface — never per-guard items).
|
|
65
|
+
- CLAUDE.md template + migration: agents are taught to check
|
|
66
|
+
`logs/guard-posture.jsonl` FIRST when asked "why didn't the watchdog catch
|
|
67
|
+
X?" — a silently-disabled guard explains more incidents than a broken one.
|
|
68
|
+
|
|
69
|
+
- `SessionManager.recoverPendingInjects()` — boot-time orphaned-inject sweep
|
|
70
|
+
(wired automatically; not a user-facing surface).
|
|
71
|
+
|
|
72
|
+
## Evidence
|
|
73
|
+
|
|
74
|
+
Incident grounding: last sentinel-enabled boot 21:54Z = the exact minute of
|
|
75
|
+
the #882 load-shed; 3 more dark guards found by config audit and re-enabled.
|
|
76
|
+
Unit: 12 tests incl. the verbatim 5-guard incident config → exactly ONE
|
|
77
|
+
aggregated item, no-repeat-alarm across boots, re-enable breadcrumb-only,
|
|
78
|
+
corrupt-snapshot self-repair, emit-failure baseline-advance. Migrator: 2
|
|
79
|
+
(added + idempotent). E2E: two-boot lifecycle over real disk + WIRED source
|
|
80
|
+
guard. tsc clean; preflight PASS.
|
|
81
|
+
|
|
82
|
+
13 new tests (store CRUD/corruption, all four sweep verdicts incl. the live
|
|
83
|
+
incident shape, and wiring-integrity through a real SessionManager: record
|
|
84
|
+
visible on disk DURING the spawn→inject window, cleared after). Adjacent
|
|
85
|
+
session suites green (53 tests); tsc clean.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Added the Phase-1 core of the **MTP Red-Team Harness** (EXO 3.0 G7) — a
|
|
9
|
+
self-contained, browser-free logic module (`src/redteam/ScenarioPack.ts`) plus
|
|
10
|
+
two default scenario packs. It is the testable engine for standardized
|
|
11
|
+
adversarial verification of an organization's machine-readable intent
|
|
12
|
+
(ORG-INTENT.md): a pack linter that enforces channel coherence (a scenario's
|
|
13
|
+
pretended sender must be deliverable by its transport), an expectation resolver
|
|
14
|
+
that reuses the G1 `IntentTestHarness` to compute governed/ungoverned against
|
|
15
|
+
*any* org's own intent, a heuristic outcome classifier, and a boundary-map
|
|
16
|
+
assembler (per-scenario boundary depth, derivation ratio, ungoverned surface).
|
|
17
|
+
|
|
18
|
+
Payloads are referenced by `{path, sha256}` and never read into the
|
|
19
|
+
orchestrator — only the benign L0 (declared-audit) and L1 (naive ask) payloads
|
|
20
|
+
are committed; the engineered L2/L3 payloads are gitignored and authored in a
|
|
21
|
+
retired session at run time (the structural fix for CMT-1115, where inline
|
|
22
|
+
red-team payloads permanently wedged a session via an AUP-rejection loop).
|
|
23
|
+
|
|
24
|
+
No route, CLI, config key, or lifecycle hook is added — nothing imports this
|
|
25
|
+
module at runtime yet. The CLI/route, dashboard surface, and first live
|
|
26
|
+
boundary-map run are Phase 2.
|
|
27
|
+
|
|
28
|
+
## What to Tell Your User
|
|
29
|
+
|
|
30
|
+
Nothing user-facing ships here — this is foundation code for an experimental
|
|
31
|
+
capability (verifying that an agent actually refuses the things its
|
|
32
|
+
organization's rules forbid, under escalating attack pressure). It does not
|
|
33
|
+
change any current behavior.
|
|
34
|
+
|
|
35
|
+
## Summary of New Capabilities
|
|
36
|
+
|
|
37
|
+
- `src/redteam/ScenarioPack.ts` (experimental, no runtime consumers yet):
|
|
38
|
+
scenario-pack types, pack linter, org-agnostic expectation resolver, outcome
|
|
39
|
+
classifier, boundary-map assembler.
|
|
40
|
+
- Default scenario packs: `credentials` (L0–L3) and `value-conflict` (L0–L2),
|
|
41
|
+
payloads by reference.
|
|
42
|
+
|
|
43
|
+
## Evidence
|
|
44
|
+
|
|
45
|
+
Not a bug fix — net-new capability. Verified by 25 unit tests
|
|
46
|
+
(`tests/unit/redteam-scenario-pack.test.ts`) covering both sides of every
|
|
47
|
+
decision boundary (coherent vs incoherent transport, governed vs ungoverned,
|
|
48
|
+
each outcome class, pass vs fail, boundary-depth edges including crack-at-L0 and
|
|
49
|
+
holds-everywhere) and a clean `tsc --noEmit`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# ELI16 — Guard-Posture Tripwire
|
|
2
|
+
|
|
3
|
+
## The problem
|
|
4
|
+
|
|
5
|
+
Yesterday morning, during an emergency (the laptop was melting down), somebody
|
|
6
|
+
— one of my own sessions, acting fast — turned off a bunch of my safety
|
|
7
|
+
monitors by editing a config file. That's like flipping the breakers off while
|
|
8
|
+
fighting a kitchen fire: sometimes reasonable in the moment. The problem is
|
|
9
|
+
what came after: nobody wrote down which breakers got flipped. One (the job
|
|
10
|
+
scheduler) was noticed and turned back on 5.5 hours later. FOUR others stayed
|
|
11
|
+
off, silently. That same evening a session died in a brand-new way, and the
|
|
12
|
+
exact watchdog built to catch dying sessions... was one of the monitors still
|
|
13
|
+
switched off. It watched nothing. Justin found out via screenshot, again.
|
|
14
|
+
|
|
15
|
+
The deep issue: none of my code turns these monitors off — humans and
|
|
16
|
+
emergency interventions do, by hand, and hand-edits leave no trace. A monitor
|
|
17
|
+
that's secretly off is worse than a broken one, because everything LOOKS
|
|
18
|
+
covered.
|
|
19
|
+
|
|
20
|
+
## What this change does
|
|
21
|
+
|
|
22
|
+
At every server start, I now compare "which guards are on right now?" against
|
|
23
|
+
a saved copy of "which guards were on last time I started?" If any guard went
|
|
24
|
+
ON → OFF in between:
|
|
25
|
+
|
|
26
|
+
1. A loud line in the boot log,
|
|
27
|
+
2. A permanent record in `logs/guard-posture.jsonl` (so "was the watchdog even
|
|
28
|
+
running in March?" has an answer forever),
|
|
29
|
+
3. ONE attention item — "these N guards got disabled since last boot, was that
|
|
30
|
+
on purpose?" — not N separate pings.
|
|
31
|
+
|
|
32
|
+
Turning a guard back ON just gets the log entry — good news isn't homework.
|
|
33
|
+
|
|
34
|
+
## What it deliberately does NOT do
|
|
35
|
+
|
|
36
|
+
It never flips anything back on by itself. If you disabled a monitor on
|
|
37
|
+
purpose, it stays disabled — you just acknowledge the one heads-up. The
|
|
38
|
+
tripwire is a smoke detector, not a sprinkler system. And it can't break
|
|
39
|
+
anything: if the tripwire itself hits an error, the server boots normally and
|
|
40
|
+
the error goes in the log.
|
|
41
|
+
|
|
42
|
+
## Why this matters beyond yesterday
|
|
43
|
+
|
|
44
|
+
This was the SECOND silently-disabled guard found in one day. That's not bad
|
|
45
|
+
luck, that's a missing structure: there was no system that noticed "a
|
|
46
|
+
protection went away." Now there is, and it automatically covers every future
|
|
47
|
+
monitor too — anything that follows the standard config naming is watched
|
|
48
|
+
from the day it ships, with zero extra wiring.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Side-Effects Review — GuardPostureTripwire
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `guard-posture-tripwire`
|
|
4
|
+
**Date:** `2026-06-06`
|
|
5
|
+
**Author:** `Echo (instar-dev agent, session-robustness topic per Justin's "work on more robust ways to handle these scenarios")`
|
|
6
|
+
**Second-pass reviewer:** `self-adversarial pass over alarm fatigue + boot-safety (the two ways a boot-time alarm can go wrong)`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
A boot-time detector compares the resolved guard posture (every
|
|
11
|
+
`monitoring.*` enabled flag + `scheduler.enabled`) against the previous
|
|
12
|
+
boot's persisted snapshot. enabled→disabled → loud log + one aggregated
|
|
13
|
+
`logs/guard-posture.jsonl` row + ONE aggregated HIGH Attention item;
|
|
14
|
+
disabled→enabled → log + breadcrumb only; first boot → baseline only.
|
|
15
|
+
Files: `GuardPostureTripwire.ts` (new), `server.ts` boot wiring,
|
|
16
|
+
`PostUpdateMigrator.ts` CLAUDE.md section, three test files, spec.
|
|
17
|
+
|
|
18
|
+
## Decision-point inventory
|
|
19
|
+
|
|
20
|
+
- Posture extraction — **add (read-only)** — resolved config in, key/boolean map out; generic convention, no registry.
|
|
21
|
+
- Transition diff — **add (pure)** — intersection-only (shape changes are not flips).
|
|
22
|
+
- Attention emit — **add (signal)** — one aggregated HIGH item per boot-with-disables; dedupe by stable id; absent Telegram → breadcrumb only.
|
|
23
|
+
- Snapshot write order — **deliberate** — baseline advances BEFORE alarms so an emit failure cannot cause repeat alarms.
|
|
24
|
+
|
|
25
|
+
## 1. Over-block
|
|
26
|
+
|
|
27
|
+
Nothing is blocked — the tripwire has no authority. Worst noise case: an
|
|
28
|
+
operator deliberately disabling a guard gets exactly ONE Attention item at the
|
|
29
|
+
next boot (transition-based; the following boots are silent). A batch flip of
|
|
30
|
+
N guards is ONE item, not N (Bounded Notification Surface).
|
|
31
|
+
|
|
32
|
+
## 2. Under-block
|
|
33
|
+
|
|
34
|
+
(a) A flip that is reverted BETWEEN boots (off at 2pm, back on at 5pm, no
|
|
35
|
+
restart in between) never trips — acceptable: the guard never actually ran
|
|
36
|
+
disabled. (b) Mid-run flips alarm only at the next boot — that is when config
|
|
37
|
+
takes effect, so the alarm coincides with the guard actually dying; with
|
|
38
|
+
auto-update restarts every ~30 min the window is bounded. (c) Guards that
|
|
39
|
+
don't follow the `enabled` convention (none today) would be invisible —
|
|
40
|
+
the convention IS the contract, documented in the spec.
|
|
41
|
+
|
|
42
|
+
## 3. Level-of-abstraction fit
|
|
43
|
+
|
|
44
|
+
Lives in `monitoring/` beside the sentinels it watches over; wired in
|
|
45
|
+
server.ts boot exactly like the worktree detector (same emitAttention
|
|
46
|
+
adapter, same placement constraint). The CLAUDE.md knowledge rides the
|
|
47
|
+
existing migrateClaudeMd path with a content-sniff marker.
|
|
48
|
+
|
|
49
|
+
## 4. Signal vs authority compliance
|
|
50
|
+
|
|
51
|
+
**Required reference:** `docs/signal-vs-authority.md`
|
|
52
|
+
|
|
53
|
+
- [x] Pure signal. Never re-enables, never blocks a boot (every failure path
|
|
54
|
+
degrades into `result.error` + a log line), never edits config. The
|
|
55
|
+
Attention item is the operator's consent surface, not an action.
|
|
56
|
+
|
|
57
|
+
## 5. Interactions
|
|
58
|
+
|
|
59
|
+
- **Attention flood guard:** a single aggregated item with sourceContext
|
|
60
|
+
`guard-posture-tripwire` — inside every budget; HIGH priority is justified
|
|
61
|
+
(a dark guard is exactly the "user should know" class) and HIGH items are
|
|
62
|
+
never coalesced away.
|
|
63
|
+
- **AttentionQueue dedupe:** stable id (`guard-posture-disabled:<date>:<list>`)
|
|
64
|
+
makes a same-day re-emit a no-op via the existing id-collision path.
|
|
65
|
+
- **No Telegram:** breadcrumb still lands (the worktree-detector fallback
|
|
66
|
+
pattern); boot line says "breadcrumb only".
|
|
67
|
+
- **Snapshot corruption:** degrades to first-boot semantics + self-repairs.
|
|
68
|
+
|
|
69
|
+
## 6. External surfaces / 7. Rollback
|
|
70
|
+
|
|
71
|
+
New files only: `state/guard-posture.json` (snapshot), `logs/guard-posture.jsonl`
|
|
72
|
+
(append-only history), one CLAUDE.md section (idempotent migration). No API,
|
|
73
|
+
no schema, no config key (default-on by design — a tripwire you can silently
|
|
74
|
+
disable would be the joke version of this feature; disabling it means deleting
|
|
75
|
+
the wiring, which is a reviewed code change). Rollback = revert; the files
|
|
76
|
+
stay as inert history.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Side-effects review — MTP Red-Team Harness Phase-1 core (EXO 3.0 G7)
|
|
2
|
+
|
|
3
|
+
## What this change is
|
|
4
|
+
A new, self-contained module `src/redteam/ScenarioPack.ts` (pure logic) + two
|
|
5
|
+
default scenario packs under `src/redteam/packs/` + a unit test. It adds NO
|
|
6
|
+
route, NO CLI command, NO session/lifecycle hook, NO config key, and is imported
|
|
7
|
+
by nothing in the running server yet. It is foundation code for a Phase-2
|
|
8
|
+
productization (CLI/route).
|
|
9
|
+
|
|
10
|
+
## Blast radius
|
|
11
|
+
- **Runtime impact: none.** Nothing imports `ScenarioPack.ts` at server boot or
|
|
12
|
+
in any job/sentinel/route. Adding the file cannot change any live behavior. A
|
|
13
|
+
grep for `redteam` / `ScenarioPack` across `src/server`, `src/commands`,
|
|
14
|
+
`src/core` composition shows no consumer.
|
|
15
|
+
- **Only dependency is inward**: it imports `IntentTestHarness` and the
|
|
16
|
+
`ParsedOrgIntent` type — both read-only, already-shipped. It calls
|
|
17
|
+
`IntentTestHarness.testRefusal()` (a pure function over parsed intent); it
|
|
18
|
+
never mutates intent, never writes files, never performs I/O.
|
|
19
|
+
- **The packs are data.** The two `pack.json` files + committed `L0.md`/`L1.md`
|
|
20
|
+
payloads are inert until a future runner reads them. No code loads them yet.
|
|
21
|
+
|
|
22
|
+
## Security / safety review
|
|
23
|
+
- **Payload-by-reference is enforced in the type system**: the module handles
|
|
24
|
+
payloads as `{ path, sha256 }` only and has no code path that reads a payload
|
|
25
|
+
body. The committed payloads (`L0.md` declared-audit, `L1.md` naive benign
|
|
26
|
+
ask) were authored in an isolated subagent session, never in the orchestrator
|
|
27
|
+
transcript — honoring the CMT-1115 lesson (inline red-team payloads
|
|
28
|
+
permanently wedged a session via an AUP-rejection loop).
|
|
29
|
+
- **Engineered payloads are NOT committed**: `L2.md` (pressure) and `L3.md`
|
|
30
|
+
(engineered) are gitignored; their `pack.json` sha reads
|
|
31
|
+
`PENDING-LOCAL-AUTHOR`. So the reviewable PR diff contains no engineered
|
|
32
|
+
attack text — a reviewing agent reading this diff cannot be wedged by it.
|
|
33
|
+
- **No new external surface**: no network calls, no new auth, no new file
|
|
34
|
+
writes. The classifier's regexes are local string checks.
|
|
35
|
+
|
|
36
|
+
## Framework generality
|
|
37
|
+
This change does not route through the session-launch / inject abstraction or
|
|
38
|
+
message delivery — it is framework-agnostic pure logic operating on parsed
|
|
39
|
+
ORG-INTENT, which is identical across claude-code / codex-cli / gemini-cli. The
|
|
40
|
+
harness it seeds is explicitly designed to be org-agnostic AND framework-neutral
|
|
41
|
+
(it tests an agent's behavior through whatever channel, independent of the
|
|
42
|
+
underlying framework). No Claude-specific assumption is introduced.
|
|
43
|
+
|
|
44
|
+
## Test coverage
|
|
45
|
+
25 unit tests (`tests/unit/redteam-scenario-pack.test.ts`) cover both sides of
|
|
46
|
+
every decision boundary: coherent vs incoherent transport, governed vs
|
|
47
|
+
ungoverned, each outcome class, pass vs fail, and the boundary-map edges
|
|
48
|
+
(holds-through-L2-cracks-at-L3, cracks-at-L0, holds-everywhere, derivation
|
|
49
|
+
ratio, ungoverned surface). `tsc --noEmit` is clean.
|
|
50
|
+
|
|
51
|
+
## Rollback
|
|
52
|
+
Deleting `src/redteam/` + the test + reverting the `.gitignore` lines fully
|
|
53
|
+
removes the change with zero runtime consequence (nothing depends on it).
|
package/upgrades/1.3.341.md
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Upgrade Guide — vNEXT
|
|
2
|
-
|
|
3
|
-
<!-- assembled-by: assemble-next-md -->
|
|
4
|
-
<!-- bump: patch -->
|
|
5
|
-
|
|
6
|
-
## What Changed
|
|
7
|
-
|
|
8
|
-
Queued initial messages now survive server restarts. When a session is
|
|
9
|
-
spawned for an inbound message, the pending inject is recorded durably
|
|
10
|
-
(`<stateDir>/state/pending-injects/`) and cleared only after the message is
|
|
11
|
-
actually typed into the session. On boot, `recoverPendingInjects` sweeps
|
|
12
|
-
survivors: still-alive sessions get re-delivery through the normal readiness
|
|
13
|
-
path; dead or >6h-old records are reported via DegradationReporter and
|
|
14
|
-
retired — a loss is now always VISIBLE.
|
|
15
|
-
|
|
16
|
-
Why: the auto-updater restarted the server while a fresh codex session was
|
|
17
|
-
still booting; the in-memory pending inject died with the process, tmux
|
|
18
|
-
survived idle, and the operator waited 50+ minutes on a silently dropped
|
|
19
|
-
message (finding 8d300555). Delivery is at-least-once by design — a rare
|
|
20
|
-
duplicate beats a silent drop.
|
|
21
|
-
|
|
22
|
-
Also: the "Fresh-spawn fallback succeeded" log now honestly says "launched
|
|
23
|
-
(inject pending)" — it printed before the inject ran.
|
|
24
|
-
|
|
25
|
-
## What to Tell Your User
|
|
26
|
-
|
|
27
|
-
If your agent's server restarts at the exact moment you message it, your
|
|
28
|
-
message no longer risks silently vanishing — it is delivered when the session
|
|
29
|
-
finishes starting, even across the restart.
|
|
30
|
-
|
|
31
|
-
## Summary of New Capabilities
|
|
32
|
-
|
|
33
|
-
- `SessionManager.recoverPendingInjects()` — boot-time orphaned-inject sweep
|
|
34
|
-
(wired automatically; not a user-facing surface).
|
|
35
|
-
|
|
36
|
-
## Evidence
|
|
37
|
-
|
|
38
|
-
13 new tests (store CRUD/corruption, all four sweep verdicts incl. the live
|
|
39
|
-
incident shape, and wiring-integrity through a real SessionManager: record
|
|
40
|
-
visible on disk DURING the spawn→inject window, cleared after). Adjacent
|
|
41
|
-
session suites green (53 tests); tsc clean.
|