instar 1.3.1083 → 1.3.1084

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.
@@ -11392,8 +11392,8 @@ echo ""
11392
11392
 
11393
11393
  # On compaction, delegate to the dedicated recovery hook
11394
11394
  if [ "\$EVENT" = "compact" ]; then
11395
- if [ -x "$INSTAR_DIR/hooks/compaction-recovery.sh" ]; then
11396
- exec bash "$INSTAR_DIR/hooks/compaction-recovery.sh"
11395
+ if [ -x "$INSTAR_DIR/hooks/instar/compaction-recovery.sh" ]; then
11396
+ exec bash "$INSTAR_DIR/hooks/instar/compaction-recovery.sh"
11397
11397
  fi
11398
11398
  fi
11399
11399
 
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
5
- "packageVersion": "1.3.1083",
5
+ "packageVersion": "1.3.1084",
6
6
  "guards": [
7
7
  {
8
8
  "ref": "docs/canonical-migration-contracts.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha256": "f8e855ff379fad32f33e444521a960fe65ad8ba33d168f00cbf0321543578cff",
2
+ "sha256": "b84709592eab7a1daf94a9f7b8be48d74f444d82b67a49e64bd7cfec93a0f973",
3
3
  "registrySha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
4
- "packageVersion": "1.3.1083"
4
+ "packageVersion": "1.3.1084"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
3
3
  "articleCount": 82,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1083"
5
+ "packageVersion": "1.3.1084"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1083",
3
+ "version": "1.3.1084",
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-07-31T08:18:52.990Z",
5
- "instarVersion": "1.3.1083",
4
+ "generatedAt": "2026-07-31T13:28:38.423Z",
5
+ "instarVersion": "1.3.1084",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
14
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
23
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
32
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
41
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
50
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
59
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
68
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
77
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
86
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
95
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
104
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
113
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
122
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
131
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
140
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
149
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
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": "9d78071b585076c340d91a6ef024842b7b9d944bbd59c82fc21d44e883b30a1d",
1565
+ "contentHash": "4e7e883b4c2b36e783a90403115757a3dabffbd4eeabaed9b0a6ec46ccd53875",
1566
1566
  "since": "2025-01-01"
1567
1567
  },
1568
1568
  "subsystem:scheduler": {
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
5
- "packageVersion": "1.3.1083",
5
+ "packageVersion": "1.3.1084",
6
6
  "guards": [
7
7
  {
8
8
  "ref": "docs/canonical-migration-contracts.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha256": "f8e855ff379fad32f33e444521a960fe65ad8ba33d168f00cbf0321543578cff",
2
+ "sha256": "b84709592eab7a1daf94a9f7b8be48d74f444d82b67a49e64bd7cfec93a0f973",
3
3
  "registrySha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
4
- "packageVersion": "1.3.1083"
4
+ "packageVersion": "1.3.1084"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "f8a50d91b77caeaeef502ad348a966480db2d4026c42cee2d94d5e0c19438afd",
3
3
  "articleCount": 82,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1083"
5
+ "packageVersion": "1.3.1084"
6
6
  }
@@ -0,0 +1,26 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The generated session-start hook now checks and executes compaction recovery at
9
+ the same canonical built-in-hook path used by the update migrator. A regression
10
+ test runs the hook migration and proves both generated references resolve to the
11
+ executable recovery file that was actually installed.
12
+
13
+ ## What to Tell Your User
14
+
15
+ After an update, your agent can once again restore its identity and conversation context when a long session is compacted.
16
+
17
+ ## Summary of New Capabilities
18
+
19
+ No new capability was added; this restores the existing post-compaction recovery path.
20
+
21
+ ## Evidence
22
+
23
+ - `tests/unit/PostUpdateMigrator-loadAssess.test.ts`: 7 tests pass, including the
24
+ new installed-path consistency regression.
25
+ - The regression failed on the previous source with the exact observed mismatch
26
+ before passing after both session-start references were corrected.
@@ -0,0 +1,197 @@
1
+ # Side-Effects Review — compaction recovery path reachability
2
+
3
+ **Version / slug:** `compaction-recovery-path-reachability`
4
+ **Date:** `2026-07-31`
5
+ **Author:** `Instar Agent (instar-codey)`
6
+ **Second-pass reviewer:** `Codex subagent 1798_second_pass — concurred`
7
+
8
+ ## Summary of the change
9
+
10
+ `PostUpdateMigrator` already installs both built-in hooks under
11
+ `.instar/hooks/instar/`, but the generated session-start hook checked and
12
+ executed compaction recovery at the obsolete flat path
13
+ `.instar/hooks/compaction-recovery.sh`. The compact branch therefore skipped
14
+ identity and conversation recovery even after a successful migration. This
15
+ change aligns the session-start executable check and `exec` with the canonical
16
+ installer path and adds a migration-level regression that reads the generated
17
+ hook, extracts both references, and proves they resolve to the executable file
18
+ the same migration wrote. It also registers the broader generated-artifact
19
+ path-contract defect class and tracks its class-level lint as ACT-245.
20
+
21
+ ## Decision-point inventory
22
+
23
+ - `getSessionStartHook()` compact-event branch — **modified** — its existing
24
+ deterministic executable-presence check now names the canonical built-in-hook
25
+ directory. The branch's allow/skip semantics are unchanged.
26
+ - `migrateHooks()` built-in installation location — **passed through** — remains
27
+ the authoritative writer at `hooks/instar/compaction-recovery.sh`.
28
+ - Compaction recovery content and all recovery judgments — **passed through** —
29
+ no detection, retry, restart, or recovery policy changes.
30
+
31
+ ---
32
+
33
+ ## 1. Over-block
34
+
35
+ The change rejects no user input and adds no new refusal. A manually maintained
36
+ legacy recovery hook that exists only at `.instar/hooks/compaction-recovery.sh`
37
+ is no longer considered by the generated session-start hook, but that flat path
38
+ was already non-authoritative: every current migration writes and overwrites the
39
+ built-in hook under `.instar/hooks/instar/`. Custom hooks belong under
40
+ `.instar/hooks/custom/`, so preserving the stale flat lookup would reintroduce
41
+ layout ambiguity rather than legitimate compatibility.
42
+
43
+ ---
44
+
45
+ ## 2. Under-block
46
+
47
+ The regression closes this exact producer/consumer path mismatch for compaction
48
+ recovery. It does not yet scan every generated hook-to-helper reference in the
49
+ repository; that broader class guard is tracked as ACT-245, due 2026-09-14. A
50
+ file may still be absent after external deletion or an interrupted migration;
51
+ the existing executable check intentionally skips in that condition rather than
52
+ making session startup fail.
53
+
54
+ ---
55
+
56
+ ## 3. Level-of-abstraction fit
57
+
58
+ The fix sits at the generated caller that contained the wrong literal, while
59
+ the regression spans the actual migration boundary. Testing only the template
60
+ string would prove spelling but not installation reachability; testing only the
61
+ installed file would miss whether both the check and `exec` use the same path.
62
+ The migration-level test is therefore the smallest layer that proves the
63
+ end-to-end contract without introducing a second path resolver into shell.
64
+
65
+ ---
66
+
67
+ ## 4. Signal vs authority compliance
68
+
69
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
70
+
71
+ - [ ] No — this change produces a signal consumed by an existing smart gate.
72
+ - [x] No — this change has no new block/allow surface.
73
+ - [ ] Yes — but the logic is a smart gate with full conversational context.
74
+ - [ ] Yes, with brittle logic.
75
+
76
+ The pre-existing `-x` check is a deterministic filesystem invariant, not a
77
+ judgment over ambiguous evidence. This change corrects the invariant's operand;
78
+ it does not promote a detector into authority or alter the fail-soft startup
79
+ policy when the helper is truly missing.
80
+
81
+ ---
82
+
83
+ ## 4b. Judgment-point check
84
+
85
+ No new static heuristic or competing-signals decision point is added. “Does the
86
+ canonical executable installed by this migrator exist?” is an enumerable
87
+ structural invariant.
88
+
89
+ ---
90
+
91
+ ## 5. Interactions
92
+
93
+ - **Shadowing:** on compact events, the dedicated recovery script still replaces
94
+ the session-start process before ordinary startup output. The corrected path
95
+ makes the already-designed branch reachable.
96
+ - **Double-fire:** there remains exactly one compact delegate and one `exec`; the
97
+ path correction cannot invoke both legacy and canonical copies.
98
+ - **Races:** migration writes both files synchronously before returning. The test
99
+ exercises the completed migration state; no shared mutable runtime state is
100
+ introduced.
101
+ - **Feedback loops:** none. The helper runs once per compact lifecycle event and
102
+ this change adds no trigger, retry, or re-entry edge.
103
+ - **Adjacent migration behavior:** built-in hooks remain always-overwrite, so an
104
+ existing installation receives both corrected session-start content and the
105
+ canonical recovery helper on its next update.
106
+
107
+ ---
108
+
109
+ ## 6. External surfaces
110
+
111
+ Existing agents regain the intended post-compaction identity and conversation
112
+ context after update. There is no HTTP/API/schema change, no new message, no
113
+ database or ledger write, and no dependency on Telegram, Slack, GitHub, or
114
+ Cloudflare. The only timing dependency is the existing compact lifecycle event.
115
+ No operator-facing action is added.
116
+
117
+ ---
118
+
119
+ ## 6b. Operator-surface quality
120
+
121
+ No operator surface — not applicable.
122
+
123
+ ---
124
+
125
+ ## 7. Multi-machine posture
126
+
127
+ **machine-local BY DESIGN** — session hooks and compaction events belong to the
128
+ specific process and checkout on each machine. The source fix replicates through
129
+ the normal software update path, after which each machine's migrator installs its
130
+ own canonical hook pair. The change emits no user-facing notice, holds no durable
131
+ state, strands nothing on topic transfer, and generates no URL.
132
+
133
+ ---
134
+
135
+ ## 8. Rollback cost
136
+
137
+ Pure generated-hook source change plus test and governance artifacts. A hot-fix
138
+ can revert the two corrected literals; no data migration or agent-state repair is
139
+ required. Reverting would restore the silent post-compaction context loss on
140
+ agents after their next migration, which is why rollback is safe mechanically
141
+ but undesirable behaviorally.
142
+
143
+ ---
144
+
145
+ ## Conclusion
146
+
147
+ The implementation is narrow and complete for #1798: both authoritative source
148
+ references now match the authoritative writer, and a fail-first integration
149
+ regression proves the contract at migration output. Because compaction is a
150
+ session-lifecycle surface, an independent second-pass review checked the
151
+ migration, compact-event execution, authority posture, and release claim and
152
+ concurred. The broader defect-class guard is honestly tracked as ACT-245 rather
153
+ than overstating this one regression as repository-wide closure.
154
+
155
+ ---
156
+
157
+ ## Second-pass review
158
+
159
+ **Reviewer:** Codex subagent `1798_second_pass`
160
+ **Independent read of the artifact:** concur
161
+
162
+ The reviewer independently verified that both generated references match the
163
+ canonical writer, ran the focused 7-test suite, and executed a compact event
164
+ against migrated hooks to prove recovery replaces ordinary session-start flow.
165
+ They found no added authority, persistent-state mutation, security-boundary
166
+ change, or migration hazard, and agreed that the unconfirmed novel class is
167
+ honestly recorded as a gap under ACT-245.
168
+
169
+ ---
170
+
171
+ ## Evidence pointers
172
+
173
+ - `tests/unit/PostUpdateMigrator-loadAssess.test.ts` — fail-first result captured:
174
+ expected `hooks/instar/compaction-recovery.sh`, received
175
+ `hooks/compaction-recovery.sh`; then 7/7 tests passed after the source fix.
176
+ - `src/core/PostUpdateMigrator.ts#getSessionStartHook` — both the executable check
177
+ and `exec` now use the installed built-in-hook path.
178
+ - `src/core/PostUpdateMigrator.ts#migrateHooks` — authoritative writer remains
179
+ `hooks/instar/compaction-recovery.sh`.
180
+ - Independent compact-event execution reached the installed recovery hook and
181
+ replaced ordinary session-start flow.
182
+
183
+ ---
184
+
185
+ ## Class-Closure Declaration (display-only mirror)
186
+
187
+ - **`defectClass`** — `generated-artifact-path-contract-drift`, a novel class:
188
+ independently generated producer and consumer artifacts can each be locally
189
+ valid while naming different canonical paths for the same dependency. Its
190
+ nearest existing class is `prompt-parser-contract-drift`; both are contract
191
+ drift, but that class is restricted to prompt-output schemas rather than
192
+ generated filesystem reachability.
193
+ - **`closure`** — `gap`. The class enters unconfirmed, so this instance test
194
+ cannot honestly claim class-wide closure.
195
+ - **`guardEvidence`** — not applicable for gap closure.
196
+ - **`gap`** — ACT-245, “Add generated-artifact path-contract lint,” due
197
+ 2026-09-14. The regression in this change still guards the exact #1798 pair.