instar 1.3.299 → 1.3.301
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 +8 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/feedback-factory/cutoverReadiness.d.ts +11 -0
- package/dist/feedback-factory/cutoverReadiness.d.ts.map +1 -1
- package/dist/feedback-factory/cutoverReadiness.js +25 -0
- package/dist/feedback-factory/cutoverReadiness.js.map +1 -1
- package/dist/monitoring/mcpProcessReaperDeps.d.ts.map +1 -1
- package/dist/monitoring/mcpProcessReaperDeps.js +15 -6
- package/dist/monitoring/mcpProcessReaperDeps.js.map +1 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +7 -1
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/middleware.d.ts +17 -1
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +21 -3
- package/dist/server/middleware.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +20 -20
- package/upgrades/1.3.300.md +41 -0
- package/upgrades/1.3.301.md +44 -0
- package/upgrades/side-effects/parity-pass-inflight-guard.md +54 -0
- package/upgrades/side-effects/test-debt-rearm.md +61 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-05T14:
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-06-05T14:40:29.461Z",
|
|
5
|
+
"instarVersion": "1.3.301",
|
|
6
6
|
"entryCount": 198,
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
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": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
150
150
|
"since": "2025-01-01"
|
|
151
151
|
},
|
|
152
152
|
"job:health-check": {
|
|
@@ -1498,7 +1498,7 @@
|
|
|
1498
1498
|
"type": "subsystem",
|
|
1499
1499
|
"domain": "server",
|
|
1500
1500
|
"sourcePath": "src/server/AgentServer.ts",
|
|
1501
|
-
"contentHash": "
|
|
1501
|
+
"contentHash": "9723a92c2d4d70ff496e1e7ffe5922afc81b918c5b4fc07d66cd840e7209c7fc",
|
|
1502
1502
|
"since": "2025-01-01"
|
|
1503
1503
|
},
|
|
1504
1504
|
"subsystem:session-manager": {
|
|
@@ -1530,7 +1530,7 @@
|
|
|
1530
1530
|
"type": "subsystem",
|
|
1531
1531
|
"domain": "updates",
|
|
1532
1532
|
"sourcePath": "src/core/PostUpdateMigrator.ts",
|
|
1533
|
-
"contentHash": "
|
|
1533
|
+
"contentHash": "b52da3c14379f20c8200730995dcb3303b5a55b9a5e50cb84b9307b8b5250a36",
|
|
1534
1534
|
"since": "2025-01-01"
|
|
1535
1535
|
},
|
|
1536
1536
|
"subsystem:scheduler": {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
The migration readiness checker's two "go check the live source" triggers (the
|
|
9
|
+
parity pass and the import rehearsal) now enforce ONE live fetch at a time. A
|
|
10
|
+
second trigger while one is running gets an immediate, clearly-worded refusal
|
|
11
|
+
instead of silently starting another full download next to the first. And when
|
|
12
|
+
an operator widens the fetch budgets for a slow source, the HTTP response
|
|
13
|
+
window now widens with them instead of cutting out at a fixed 6 minutes.
|
|
14
|
+
|
|
15
|
+
## What to Tell Your User
|
|
16
|
+
|
|
17
|
+
Nothing user-visible changes by default. If your agent drives a data-migration
|
|
18
|
+
readiness check against a slow source, its checks are now polite under
|
|
19
|
+
pressure: one live check at a time, and patient response windows that match the
|
|
20
|
+
budgets you configured.
|
|
21
|
+
|
|
22
|
+
## Summary of New Capabilities
|
|
23
|
+
|
|
24
|
+
- `POST /cutover-readiness/parity-pass` and `POST /cutover-readiness/import-dryrun`
|
|
25
|
+
refuse a concurrent trigger with 409 `live source fetch already in flight
|
|
26
|
+
(<op> started <time>)` — one live source fetch at a time, shared across both.
|
|
27
|
+
- The two routes' response budgets track `feedbackMigration.paritySource.totalTimeoutMs`
|
|
28
|
+
(+60s slack) when configured; the previous 360s constant remains the floor.
|
|
29
|
+
- Maturity: stable (behavioral hardening of existing routes; no new surface).
|
|
30
|
+
|
|
31
|
+
## Evidence
|
|
32
|
+
|
|
33
|
+
Found live (2026-06-05): while feeding the migration parity window against a
|
|
34
|
+
degraded source, a sequential caller turned into FOUR concurrent full fetches —
|
|
35
|
+
each trigger's response died at the fixed route budget while its work kept
|
|
36
|
+
running, so the caller retried, and every retry stacked another fetch onto the
|
|
37
|
+
struggling source. Both halves are now under test: 10 new unit tests (guard
|
|
38
|
+
refuses concurrent triggers, releases after success AND failure, is shared
|
|
39
|
+
across both trigger types; route budgets derive from config, never below the
|
|
40
|
+
old floor, bogus values fall back), plus a full-pipeline integration test
|
|
41
|
+
proving the second concurrent POST gets a 409 and exactly one pass records.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Two of the project's own CI guards — the no-shell-exec security check and the
|
|
9
|
+
"every capability reaches every agent" delivery-completeness check — had been
|
|
10
|
+
parked in a skip-list and quietly stopped guarding. Both are fixed and turned
|
|
11
|
+
back on. While parked, they missed two real issues, now also fixed: one
|
|
12
|
+
internal monitor used a shell pipeline where a no-shell call belongs, and the
|
|
13
|
+
coordination-mandate capability family (mandate gate, ReviewExchange, Cutover
|
|
14
|
+
Readiness) was never mirrored to Codex/Gemini agents' awareness files.
|
|
15
|
+
|
|
16
|
+
## What to Tell Your User
|
|
17
|
+
|
|
18
|
+
Nothing user-visible on Claude-based agents. If you run Codex or Gemini
|
|
19
|
+
framework agents: on their next update they gain awareness of the
|
|
20
|
+
coordination-mandate capabilities (how to check a mandate before acting,
|
|
21
|
+
the structured review-sign-off flow, and the migration-readiness read
|
|
22
|
+
surface) — previously these were Claude-only knowledge.
|
|
23
|
+
|
|
24
|
+
## Summary of New Capabilities
|
|
25
|
+
|
|
26
|
+
- AGENTS.md / GEMINI.md shadows now receive the **Coordination Mandate**,
|
|
27
|
+
**ReviewExchange**, and **Cutover Readiness** sections on migration (the
|
|
28
|
+
existing idempotent mirroring mechanism; append-only).
|
|
29
|
+
- The security gate (no bare `execSync` outside the audited funnels) and the
|
|
30
|
+
feature-delivery-completeness gate (template ↔ migrator ↔ shadow parity) run
|
|
31
|
+
in CI again.
|
|
32
|
+
- Two unit suites no longer fail on machines whose shell exports a real
|
|
33
|
+
`INSTAR_AUTH_TOKEN` (test sandboxes strip ambient credentials).
|
|
34
|
+
- Maturity: stable (guard re-arms + behavior-preserving refactor; the only
|
|
35
|
+
agent-visible delta is additive shadow-file content).
|
|
36
|
+
|
|
37
|
+
## Evidence
|
|
38
|
+
|
|
39
|
+
2026-06-05 full-suite triage: 37 local failures enumerated; classification
|
|
40
|
+
separated quarantined-guard rot (these fixes), ambient-credential env leaks
|
|
41
|
+
(these fixes), one incomplete local node_modules, and box-load flakes. The
|
|
42
|
+
re-armed guards pass 84/84 deterministically; the migrator + shadow surface is
|
|
43
|
+
green at 49 files / 324 tests; touched suites re-run green WITH the real token
|
|
44
|
+
exported, proving the hygiene fix.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Side-effects review — parity-pass single-flight guard + budget-derived route timeout
|
|
2
|
+
|
|
3
|
+
Live incident (2026-06-05 ~12:16Z, while feeding the migration parity window
|
|
4
|
+
against a degraded source): a sequential feeder fired 4 parity passes; every
|
|
5
|
+
POST died at the route's constant 360s budget while its handler KEPT RUNNING
|
|
6
|
+
(the always-logged-outcome contract from #807) — so 4 CONCURRENT full live
|
|
7
|
+
fetches piled onto an already ~16×-degraded Portal read path, each slowing the
|
|
8
|
+
others. Two distinct gaps, both closed here.
|
|
9
|
+
|
|
10
|
+
## 1. The change
|
|
11
|
+
|
|
12
|
+
- `CutoverReadiness`: a **single-flight guard over the live source fetch**,
|
|
13
|
+
shared by `runParityPass()` and `runImportDryRunPass()` (both page the full
|
|
14
|
+
live source). A concurrent trigger is refused IMMEDIATELY with
|
|
15
|
+
`live source fetch already in flight (<op> started <ISO>)` — surfaced as the
|
|
16
|
+
routes' existing 409-records-nothing contract. The guard is released in
|
|
17
|
+
`finally` (a failed check can never wedge future passes).
|
|
18
|
+
- `buildRequestTimeoutOverrides()`: the parity-pass/import-dryrun route budgets
|
|
19
|
+
now **derive from the configured source budget**
|
|
20
|
+
(`feedbackMigration.paritySource.totalTimeoutMs` + 60s slack), never below
|
|
21
|
+
the existing 360s floor. Widening the source budgets for a degraded source
|
|
22
|
+
(the #820 knobs) now widens the response window with them — previously the
|
|
23
|
+
route 408'd at the constant regardless, which is what turned a sequential
|
|
24
|
+
caller into a concurrent pile-up.
|
|
25
|
+
- `AgentServer`: passes the configured `totalTimeoutMs` into the builder
|
|
26
|
+
(single-source-of-truth map unchanged otherwise).
|
|
27
|
+
|
|
28
|
+
## 2. Blast radius
|
|
29
|
+
|
|
30
|
+
Small and behavioral-only at the two cutover-readiness trigger routes:
|
|
31
|
+
- A concurrent trigger that previously started a hidden second fetch now gets
|
|
32
|
+
an immediate 409. No caller could ever OBSERVE two concurrent passes succeed
|
|
33
|
+
(the second response was always a 408), so no working flow breaks.
|
|
34
|
+
- Route timeouts for the two routes grow ONLY when an operator has explicitly
|
|
35
|
+
widened `totalTimeoutMs` in config; with no config the constant floor holds,
|
|
36
|
+
so default installs see zero change. Unrelated routes unaffected (asserted).
|
|
37
|
+
- No new config keys, no migrations, no durable-state shape changes, no new
|
|
38
|
+
routes. The refusal reason string is new (additive).
|
|
39
|
+
|
|
40
|
+
## 3. Test coverage
|
|
41
|
+
|
|
42
|
+
- Unit (5 new, cutover-readiness.test.ts → 20): concurrent parity pass refused
|
|
43
|
+
+ records nothing; guard releases after success; guard releases after a
|
|
44
|
+
FAILED check (no wedge); guard shared dry-run↔parity in both directions,
|
|
45
|
+
refusal names the holding op and persists nothing.
|
|
46
|
+
- Unit (5 new, AgentServer-outbound-timeout.test.ts → 20): derived budget =
|
|
47
|
+
total+slack for both routes (the live 4200s case); below-floor configs stay
|
|
48
|
+
at the floor; zero/NaN/Infinity/negative fall back to the floor; unrelated
|
|
49
|
+
routes undisturbed; AgentServer wiring regex updated to the config-fed call.
|
|
50
|
+
- Integration (1 new, cutover-readiness-routes.test.ts → 10): full-pipeline
|
|
51
|
+
concurrency — slow in-flight pass, second POST 409 'already in flight',
|
|
52
|
+
cross-op dry-run 409 names 'parity-pass', release → first completes 200 with
|
|
53
|
+
exactly one recorded pass.
|
|
54
|
+
- E2E: existing cutover-readiness lifecycle suite re-run green (no new routes).
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Side-effects review — re-arm two quarantined CI gates + ambient-credential test hygiene
|
|
2
|
+
|
|
3
|
+
Found during the 2026-06-05 full-suite triage (37 local failures enumerated and
|
|
4
|
+
classified to root cause). Two of the repo's own source-content GUARDS had
|
|
5
|
+
rotted while parked in the vitest.push.config.ts quarantine list — CI never ran
|
|
6
|
+
them, so the exact bug classes they exist to catch reached main unnoticed.
|
|
7
|
+
|
|
8
|
+
## 1. The change
|
|
9
|
+
|
|
10
|
+
- **`src/monitoring/mcpProcessReaperDeps.ts`** — the `ps | egrep | grep -v`
|
|
11
|
+
shell pipeline (bare `execSync`) becomes `execFileSync` with argv arrays (no
|
|
12
|
+
shell, no interpolation surface); the coarse egrep pre-filter moves into JS
|
|
13
|
+
(`new RegExp(mcpGrepAlternation(), 'i')`) ahead of the existing precise
|
|
14
|
+
`matchMcpSignature` second stage. Behavior-preserving: same ps fields, same
|
|
15
|
+
two-stage filtering, same empty-string-on-failure contract.
|
|
16
|
+
- **`src/core/PostUpdateMigrator.ts`** — `migrateFrameworkShadowCapabilities`
|
|
17
|
+
markers[] gains the coordination-mandate capability family
|
|
18
|
+
(`**Coordination Mandate**`, `**ReviewExchange (autonomous code review)**`,
|
|
19
|
+
`**Cutover Readiness**`). These are framework-agnostic HTTP capabilities in
|
|
20
|
+
BOTH templates.ts and the migrator, but were never mirrored to AGENTS.md /
|
|
21
|
+
GEMINI.md — a Codex/Gemini agent under a future mandate would never learn
|
|
22
|
+
`/mandate/evaluate` and would improvise around the gate (the Secret Drop
|
|
23
|
+
lesson). Mirroring is the existing idempotent slice-and-append mechanism;
|
|
24
|
+
no new mechanism.
|
|
25
|
+
- **`tests/unit/feature-delivery-completeness.test.ts`** — tracks the mandate
|
|
26
|
+
family as featureSections (template ↔ migrator ↔ shadow-marker parity now
|
|
27
|
+
enforced) + the four content-sniff keys as alternate checks.
|
|
28
|
+
- **`tests/unit/watchdog-bind-probe.test.ts` /
|
|
29
|
+
`tests/unit/serendipity-capture.test.ts`** — ambient-credential hygiene: both
|
|
30
|
+
spread `...process.env` into child envs, and on agent boxes the REAL
|
|
31
|
+
`INSTAR_AUTH_TOKEN` preempted the fixture tokens (Authorization-header and
|
|
32
|
+
HMAC-key assertions failed locally while green in CI). The sandboxes now
|
|
33
|
+
strip the ambient token; a test that wants one sets it explicitly.
|
|
34
|
+
- **`vitest.push.config.ts`** — security.test.ts +
|
|
35
|
+
feature-delivery-completeness.test.ts REMOVED from the quarantine (re-armed;
|
|
36
|
+
both are deterministic source guards — the "environment-dependent" label was
|
|
37
|
+
wrong). TunnelManager.test.ts stays parked but its label now states the
|
|
38
|
+
truth: 22/29 tests fail because the suite predates the provider/tier rewrite
|
|
39
|
+
with the real reachability probe; rewrite tracked as a durable commitment.
|
|
40
|
+
|
|
41
|
+
## 2. Blast radius
|
|
42
|
+
|
|
43
|
+
- The reaper deps refactor is invisible to consumers (identical output
|
|
44
|
+
contract; the factory has no direct unit tests — covered by typecheck and
|
|
45
|
+
the McpProcessReaper suite, re-run green).
|
|
46
|
+
- The markers addition only ever APPENDS missing sections to existing
|
|
47
|
+
AGENTS.md/GEMINI.md shadows on the next migration run — idempotent,
|
|
48
|
+
no-op for Claude-only installs, copies content verbatim from the
|
|
49
|
+
just-migrated CLAUDE.md so the files cannot drift.
|
|
50
|
+
- Re-arming the two gates makes CI run 84 currently-green deterministic tests
|
|
51
|
+
it previously skipped. Risk is future-positive: regressions in these guards
|
|
52
|
+
now fail PRs instead of rotting.
|
|
53
|
+
|
|
54
|
+
## 3. Test coverage
|
|
55
|
+
|
|
56
|
+
- 5 directly-touched/affected files re-run green locally: 164 tests
|
|
57
|
+
(run WITH the real INSTAR_AUTH_TOKEN still exported — proving the hygiene
|
|
58
|
+
fix, since these exact assertions failed before it).
|
|
59
|
+
- Full PostUpdateMigrator + shadow-capability surface: 49 files / 324 tests
|
|
60
|
+
green after the markers change.
|
|
61
|
+
- `npx tsc --noEmit` clean.
|