instar 1.3.968 → 1.3.970

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-07-25T18:43:56.892Z",
5
- "instarVersion": "1.3.968",
4
+ "generatedAt": "2026-07-25T21:42:13.777Z",
5
+ "instarVersion": "1.3.970",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -154,7 +154,7 @@
154
154
  "type": "job",
155
155
  "domain": "monitoring",
156
156
  "sourcePath": "src/commands/init.ts",
157
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
157
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
158
158
  "since": "2025-01-01"
159
159
  },
160
160
  "job:reflection-trigger": {
@@ -162,7 +162,7 @@
162
162
  "type": "job",
163
163
  "domain": "evolution",
164
164
  "sourcePath": "src/commands/init.ts",
165
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
165
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
166
166
  "since": "2025-01-01"
167
167
  },
168
168
  "job:relationship-maintenance": {
@@ -170,7 +170,7 @@
170
170
  "type": "job",
171
171
  "domain": "relationships",
172
172
  "sourcePath": "src/commands/init.ts",
173
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
173
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
174
174
  "since": "2025-01-01"
175
175
  },
176
176
  "job:feedback-retry": {
@@ -178,7 +178,7 @@
178
178
  "type": "job",
179
179
  "domain": "feedback",
180
180
  "sourcePath": "src/commands/init.ts",
181
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
181
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
182
182
  "since": "2025-01-01"
183
183
  },
184
184
  "job:insight-harvest": {
@@ -186,7 +186,7 @@
186
186
  "type": "job",
187
187
  "domain": "evolution",
188
188
  "sourcePath": "src/commands/init.ts",
189
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
189
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
190
190
  "since": "2025-01-01"
191
191
  },
192
192
  "job:evolution-overdue-check": {
@@ -194,7 +194,7 @@
194
194
  "type": "job",
195
195
  "domain": "general",
196
196
  "sourcePath": "src/commands/init.ts",
197
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
197
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
198
198
  "since": "2025-01-01"
199
199
  },
200
200
  "job:project-map-refresh": {
@@ -202,7 +202,7 @@
202
202
  "type": "job",
203
203
  "domain": "mapping",
204
204
  "sourcePath": "src/commands/init.ts",
205
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
205
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
206
206
  "since": "2025-01-01"
207
207
  },
208
208
  "job:coherence-audit": {
@@ -210,7 +210,7 @@
210
210
  "type": "job",
211
211
  "domain": "coherence",
212
212
  "sourcePath": "src/commands/init.ts",
213
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
213
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
214
214
  "since": "2025-01-01"
215
215
  },
216
216
  "job:templates-drift-verifier": {
@@ -218,7 +218,7 @@
218
218
  "type": "job",
219
219
  "domain": "general",
220
220
  "sourcePath": "src/commands/init.ts",
221
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
221
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
222
222
  "since": "2025-01-01"
223
223
  },
224
224
  "job:degradation-digest": {
@@ -226,7 +226,7 @@
226
226
  "type": "job",
227
227
  "domain": "monitoring",
228
228
  "sourcePath": "src/commands/init.ts",
229
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
229
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
230
230
  "since": "2025-01-01"
231
231
  },
232
232
  "job:state-integrity-check": {
@@ -234,7 +234,7 @@
234
234
  "type": "job",
235
235
  "domain": "monitoring",
236
236
  "sourcePath": "src/commands/init.ts",
237
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
237
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
238
238
  "since": "2025-01-01"
239
239
  },
240
240
  "job:memory-hygiene": {
@@ -242,7 +242,7 @@
242
242
  "type": "job",
243
243
  "domain": "memory",
244
244
  "sourcePath": "src/commands/init.ts",
245
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
245
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
246
246
  "since": "2025-01-01"
247
247
  },
248
248
  "job:guardian-pulse": {
@@ -250,7 +250,7 @@
250
250
  "type": "job",
251
251
  "domain": "monitoring",
252
252
  "sourcePath": "src/commands/init.ts",
253
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
253
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
254
254
  "since": "2025-01-01"
255
255
  },
256
256
  "job:session-continuity-check": {
@@ -258,7 +258,7 @@
258
258
  "type": "job",
259
259
  "domain": "sessions",
260
260
  "sourcePath": "src/commands/init.ts",
261
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
261
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
262
262
  "since": "2025-01-01"
263
263
  },
264
264
  "job:memory-export": {
@@ -266,7 +266,7 @@
266
266
  "type": "job",
267
267
  "domain": "memory",
268
268
  "sourcePath": "src/commands/init.ts",
269
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
269
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
270
270
  "since": "2025-01-01"
271
271
  },
272
272
  "job:git-sync": {
@@ -274,7 +274,7 @@
274
274
  "type": "job",
275
275
  "domain": "coordination",
276
276
  "sourcePath": "src/commands/init.ts",
277
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
277
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
278
278
  "since": "2025-01-01"
279
279
  },
280
280
  "job:capability-audit": {
@@ -282,7 +282,7 @@
282
282
  "type": "job",
283
283
  "domain": "general",
284
284
  "sourcePath": "src/commands/init.ts",
285
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
285
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
286
286
  "since": "2025-01-01"
287
287
  },
288
288
  "job:identity-review": {
@@ -290,7 +290,7 @@
290
290
  "type": "job",
291
291
  "domain": "general",
292
292
  "sourcePath": "src/commands/init.ts",
293
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
293
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
294
294
  "since": "2025-01-01"
295
295
  },
296
296
  "job:evolution-proposal-evaluate": {
@@ -298,7 +298,7 @@
298
298
  "type": "job",
299
299
  "domain": "general",
300
300
  "sourcePath": "src/commands/init.ts",
301
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
301
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
302
302
  "since": "2025-01-01"
303
303
  },
304
304
  "job:evolution-proposal-implement": {
@@ -306,7 +306,7 @@
306
306
  "type": "job",
307
307
  "domain": "general",
308
308
  "sourcePath": "src/commands/init.ts",
309
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
309
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
310
310
  "since": "2025-01-01"
311
311
  },
312
312
  "job:commitment-detection": {
@@ -314,7 +314,7 @@
314
314
  "type": "job",
315
315
  "domain": "general",
316
316
  "sourcePath": "src/commands/init.ts",
317
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
317
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
318
318
  "since": "2025-01-01"
319
319
  },
320
320
  "job:dashboard-link-refresh": {
@@ -322,7 +322,7 @@
322
322
  "type": "job",
323
323
  "domain": "general",
324
324
  "sourcePath": "src/commands/init.ts",
325
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
325
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
326
326
  "since": "2025-01-01"
327
327
  },
328
328
  "job:overseer-guardian": {
@@ -330,7 +330,7 @@
330
330
  "type": "job",
331
331
  "domain": "general",
332
332
  "sourcePath": "src/commands/init.ts",
333
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
333
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
334
334
  "since": "2025-01-01"
335
335
  },
336
336
  "job:overseer-learning": {
@@ -338,7 +338,7 @@
338
338
  "type": "job",
339
339
  "domain": "general",
340
340
  "sourcePath": "src/commands/init.ts",
341
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
341
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
342
342
  "since": "2025-01-01"
343
343
  },
344
344
  "job:overseer-maintenance": {
@@ -346,7 +346,7 @@
346
346
  "type": "job",
347
347
  "domain": "general",
348
348
  "sourcePath": "src/commands/init.ts",
349
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
349
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
350
350
  "since": "2025-01-01"
351
351
  },
352
352
  "job:overseer-infrastructure": {
@@ -354,7 +354,7 @@
354
354
  "type": "job",
355
355
  "domain": "general",
356
356
  "sourcePath": "src/commands/init.ts",
357
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
357
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
358
358
  "since": "2025-01-01"
359
359
  },
360
360
  "job:overseer-development": {
@@ -362,7 +362,7 @@
362
362
  "type": "job",
363
363
  "domain": "general",
364
364
  "sourcePath": "src/commands/init.ts",
365
- "contentHash": "7d9f15a3af92fd19211fc184aeb433369a89be42367e1ee1688bb4a1dabda245",
365
+ "contentHash": "bd7066e7558b197e3bc8b3dd75794bd3799c6fc0b3438dcb58d1a38086ea575f",
366
366
  "since": "2025-01-01"
367
367
  },
368
368
  "skill:autonomous": {
@@ -16,14 +16,18 @@ toolAllowlist: "*"
16
16
  unrestrictedTools: true
17
17
  mcpAccess: none
18
18
  ---
19
- Check for overdue commitments: curl -s http://localhost:${INSTAR_PORT:-4042}/evolution/actions/overdue
19
+ AUTH="${INSTAR_AUTH_TOKEN:-$(python3 -c "import json; v=json.load(open('.instar/config.json')).get('authToken',''); print(v if isinstance(v, str) else '')" 2>/dev/null)}"
20
+ AGENT_ID="${INSTAR_AGENT_ID:-$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('projectName',''))" 2>/dev/null)}"
21
+ PORT="${INSTAR_PORT:-4042}"
22
+
23
+ Check for overdue commitments: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/actions/overdue
20
24
 
21
25
  For each overdue action:
22
26
  1. Assess: Can this be completed now? Is it still relevant?
23
27
  2. If actionable, attempt to complete it or advance it
24
- 3. If no longer relevant, cancel it: curl -s -X PATCH http://localhost:${INSTAR_PORT:-4042}/evolution/actions/ACT-XXX -H 'Content-Type: application/json' -d '{"status":"cancelled","resolution":"No longer relevant because..."}'
28
+ 3. If no longer relevant, cancel it: curl -s -X PATCH -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/actions/ACT-XXX -H 'Content-Type: application/json' -d '{"status":"cancelled","resolution":"No longer relevant because..."}'
25
29
  4. If blocked, escalate to the user via Telegram (if configured)
26
30
 
27
- Also check pending actions (curl -s http://localhost:${INSTAR_PORT:-4042}/evolution/actions?status=pending) for items that have been pending more than 48 hours without a due date — these are forgotten commitments.
31
+ Also check pending actions (curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" "http://localhost:$PORT/evolution/actions?status=pending") for items that have been pending more than 48 hours without a due date — these are forgotten commitments.
28
32
 
29
33
  If no overdue or stale items, exit silently.
@@ -16,16 +16,20 @@ toolAllowlist: "*"
16
16
  unrestrictedTools: true
17
17
  mcpAccess: none
18
18
  ---
19
- Review pending evolution proposals: curl -s http://localhost:${INSTAR_PORT:-4042}/evolution/proposals?status=proposed
19
+ AUTH="${INSTAR_AUTH_TOKEN:-$(python3 -c "import json; v=json.load(open('.instar/config.json')).get('authToken',''); print(v if isinstance(v, str) else '')" 2>/dev/null)}"
20
+ AGENT_ID="${INSTAR_AGENT_ID:-$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('projectName',''))" 2>/dev/null)}"
21
+ PORT="${INSTAR_PORT:-4042}"
22
+
23
+ Review pending evolution proposals: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" "http://localhost:$PORT/evolution/proposals?status=proposed"
20
24
 
21
25
  For each proposal:
22
26
  1. Read the title, description, type, and source
23
27
  2. Evaluate: Is this a genuine improvement? Is the effort worth the impact? Does it align with our goals?
24
- 3. If approved, update status: curl -s -X PATCH http://localhost:${INSTAR_PORT:-4042}/evolution/proposals/EVO-XXX -H 'Content-Type: application/json' -d '{"status":"approved"}'
28
+ 3. If approved, update status: curl -s -X PATCH -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/proposals/EVO-XXX -H 'Content-Type: application/json' -d '{"status":"approved"}'
25
29
  4. If rejected or deferred, update with reason.
26
30
 
27
31
  Do NOT implement approved proposals — that's handled by the paired evolution-proposal-implement job.
28
32
 
29
- Also check the dashboard: curl -s http://localhost:${INSTAR_PORT:-4042}/evolution — report any highlights to the user if they seem important.
33
+ Also check the dashboard: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution — report any highlights to the user if they seem important.
30
34
 
31
35
  If no proposals need attention, exit silently.
@@ -15,11 +15,15 @@ gate: "curl -sf -H \"Authorization: Bearer $INSTAR_AUTH_TOKEN\" -H \"X-Instar-Ag
15
15
  toolAllowlist: "*"
16
16
  unrestrictedTools: true
17
17
  ---
18
- Implement approved evolution proposals: curl -s http://localhost:${INSTAR_PORT:-4042}/evolution/proposals?status=approved
18
+ AUTH="${INSTAR_AUTH_TOKEN:-$(python3 -c "import json; v=json.load(open('.instar/config.json')).get('authToken',''); print(v if isinstance(v, str) else '')" 2>/dev/null)}"
19
+ AGENT_ID="${INSTAR_AGENT_ID:-$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('projectName',''))" 2>/dev/null)}"
20
+ PORT="${INSTAR_PORT:-4042}"
21
+
22
+ Implement approved evolution proposals: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" "http://localhost:$PORT/evolution/proposals?status=approved"
19
23
 
20
24
  For each approved proposal:
21
25
  1. Read the full description and understand what needs to be built
22
26
  2. Implement it: create the skill/hook/job/config change described
23
- 3. After implementation, mark complete: curl -s -X PATCH http://localhost:${INSTAR_PORT:-4042}/evolution/proposals/EVO-XXX -H 'Content-Type: application/json' -d '{"status":"implemented","resolution":"What was done"}'
27
+ 3. After implementation, mark complete: curl -s -X PATCH -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/proposals/EVO-XXX -H 'Content-Type: application/json' -d '{"status":"implemented","resolution":"What was done"}'
24
28
 
25
29
  If no approved proposals exist, exit silently.
@@ -17,7 +17,7 @@ mcpAccess: none
17
17
  ---
18
18
  Identity review — check your identity coherence and growth.
19
19
 
20
- AUTH=$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('authToken',''))" 2>/dev/null)
20
+ AUTH="${INSTAR_AUTH_TOKEN:-$(python3 -c "import json; v=json.load(open('.instar/config.json')).get('authToken',''); print(v if isinstance(v, str) else '')" 2>/dev/null)}"
21
21
  AGENT_ID="${INSTAR_AGENT_ID:-$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('projectName',''))" 2>/dev/null)}"
22
22
 
23
23
  1. **Check soul.md drift**: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:${INSTAR_PORT:-4042}/identity/soul/drift
@@ -14,7 +14,11 @@ toolAllowlist: "*"
14
14
  unrestrictedTools: true
15
15
  mcpAccess: none
16
16
  ---
17
- Harvest and synthesize learnings: curl -s http://localhost:${INSTAR_PORT:-4042}/evolution/learnings?applied=false
17
+ AUTH="${INSTAR_AUTH_TOKEN:-$(python3 -c "import json; v=json.load(open('.instar/config.json')).get('authToken',''); print(v if isinstance(v, str) else '')" 2>/dev/null)}"
18
+ AGENT_ID="${INSTAR_AGENT_ID:-$(python3 -c "import json; print(json.load(open('.instar/config.json')).get('projectName',''))" 2>/dev/null)}"
19
+ PORT="${INSTAR_PORT:-4042}"
20
+
21
+ Harvest and synthesize learnings: curl -s -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" "http://localhost:$PORT/evolution/learnings?applied=false"
18
22
 
19
23
  Review unapplied learnings and look for:
20
24
  1. **Patterns**: Multiple learnings pointing to the same conclusion
@@ -22,10 +26,10 @@ Review unapplied learnings and look for:
22
26
  3. **Cross-domain connections**: Insights from one area that apply to another
23
27
 
24
28
  For each actionable pattern found, create an evolution proposal:
25
- curl -s -X POST http://localhost:${INSTAR_PORT:-4042}/evolution/proposals -H 'Content-Type: application/json' -d '{"title":"...","source":"insight-harvest from LRN-XXX","description":"...","type":"...","impact":"...","effort":"..."}'
29
+ curl -s -X POST -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/proposals -H 'Content-Type: application/json' -d '{"title":"...","source":"insight-harvest from LRN-XXX","description":"...","type":"...","impact":"...","effort":"..."}'
26
30
 
27
31
  Then mark the relevant learnings as applied:
28
- curl -s -X PATCH http://localhost:${INSTAR_PORT:-4042}/evolution/learnings/LRN-XXX/apply -H 'Content-Type: application/json' -d '{"appliedTo":"EVO-XXX"}'
32
+ curl -s -X PATCH -H "Authorization: Bearer $AUTH" -H "X-Instar-AgentId: $AGENT_ID" http://localhost:$PORT/evolution/learnings/LRN-XXX/apply -H 'Content-Type: application/json' -d '{"appliedTo":"EVO-XXX"}'
29
33
 
30
34
  Also update MEMORY.md with any patterns worth preserving long-term.
31
35
 
@@ -22,7 +22,9 @@ fi
22
22
 
23
23
  # Extract recent session activity and key events (filter out noise, keep significant events)
24
24
  echo "=== RECENT ACTIVITY (Last 4 Hours) ==="
25
- tail -500 "$RECENT_LOGS" 2>/dev/null | jq -r 'select(.type != "job-start" and .type != "job-queued") | "(.timestamp) [(.type)] (.message // .title // .session_name // .slug // "")"' 2>/dev/null | tail -100
25
+ tail -500 "$RECENT_LOGS" 2>/dev/null | jq -r 'select(.type | IN("job_triggered","job_gate_skip","job_skipped") | not) | "\(.timestamp) [\(.type)] \(.summary // .metadata.slug // "")"' | tail -100
26
+ echo "--- volume summary (noise types excluded above) ---"
27
+ tail -500 "$RECENT_LOGS" 2>/dev/null | jq -r '.type' 2>/dev/null | sort | uniq -c | sort -rn
26
28
 
27
29
  echo ""
28
30
  echo "=== YOUR TASK ==="
@@ -36,6 +38,6 @@ echo ""
36
38
  echo "If you find genuine learnings:"
37
39
  echo "1. Update .instar/MEMORY.md with the insight (append to the file)"
38
40
  echo "2. Be specific: include what was learned, why it matters, and how it should guide future work"
39
- echo "3. Signal completion: curl -s -X POST http://localhost:${INSTAR_PORT:-4042}/reflection/record -H 'Content-Type: application/json' -d '{"type":"quick"}'"
41
+ echo "3. Signal completion: curl -s -X POST -H \"Authorization: Bearer \$INSTAR_AUTH_TOKEN\" -H \"X-Instar-AgentId: \$INSTAR_AGENT_ID\" http://localhost:${INSTAR_PORT:-4042}/reflection/record -H 'Content-Type: application/json' -d '{\"type\":\"quick\"}'"
40
42
  echo ""
41
43
  echo "If nothing significant, do nothing. Silence means continuity is working as expected."
@@ -0,0 +1,35 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Five built-in job templates authenticated their `gate:` line but not their prompt bodies, so all 12 body calls to authenticated endpoints returned `401 Missing or invalid Authorization header` at runtime. The affected jobs — `evolution-proposal-evaluate`, `evolution-proposal-implement`, `evolution-overdue-check`, `insight-harvest`, `reflection-trigger` — woke on schedule, passed their gate, read nothing, and exited "silently". A silently-failing job and a healthy quiet job are indistinguishable, which is why this survived.
9
+
10
+ Each body now resolves the canonical env-first `AUTH` / `AGENT_ID` / `PORT` block and passes `Authorization: Bearer $AUTH` + `X-Instar-AgentId: $AGENT_ID` on every non-public call.
11
+
12
+ Two same-class defects found while in the files were fixed in the same change:
13
+
14
+ - `identity-review.md` defined `AUTH` by reading `.instar/config.json` only. On an agent whose stored token has drifted from the live server token, that read is rejected — confirmed on the dev agent, where the 16-char config value returns `Invalid auth token` and the 36-char `$INSTAR_AUTH_TOKEN` succeeds. It now prefers the environment value.
15
+ - `reflection-trigger.md` emitted its instruction through a double-quoted `echo` whose inner double quotes were consumed by the shell, rendering `-d '{type:quick}'` — invalid JSON — in addition to carrying no auth. Both fixed; the token name is left unexpanded so no secret enters the transcript.
16
+
17
+ A new CI lint (`tests/unit/job-template-auth-lint.test.ts`) scans every shipped template for curl calls to non-public endpoints missing an `Authorization` header, and for templates that use `$AUTH` without defining it. Its public-endpoint exemptions mirror `authMiddleware()` and a drift guard asserts each exempted path still appears there.
18
+
19
+ The fix is applied to the **source** templates, not deployed copies: `installBuiltinJobs()` unconditionally overwrites every deployed template on each update run (`InstallBuiltinJobs.ts:127`, reached from `PostUpdateMigrator.ts:4046`), so a hand-patched deployed copy would have been silently reverted at the next update. No separate migration is required — existing agents receive the fix through the normal update path.
20
+
21
+ ## What to Tell Your User
22
+
23
+ Some scheduled jobs that have always been silent will start producing output — that is the repair working, not a new fault. If a user asks why their proposal-review or insight-harvest job has suddenly become active after months of quiet, the honest answer is that it was never running its body successfully; it was being refused at the door and exiting without saying so.
24
+
25
+ ## Summary of New Capabilities
26
+
27
+ No new user-facing capability. Five existing scheduled jobs go from silently non-functional to functional, and a build-time lint prevents the class from returning.
28
+
29
+ ## Evidence
30
+
31
+ - Run against the six pre-fix files extracted from `HEAD`, the lint reports exactly 12 unauthenticated calls — `evolution-overdue-check` 3, `evolution-proposal-evaluate` 3, `evolution-proposal-implement` 2, `insight-harvest` 3, `reflection-trigger` 1 — matching an independently-derived census. Against the fixed files: 0.
32
+ - Live: an unauthenticated call to `/evolution/proposals?status=approved` returns `{"error":"Missing or invalid Authorization header"}`; the fixed template's resolved command returns the real proposal list. Same confirmed for `/evolution/learnings?applied=false` and `/evolution/actions/overdue`.
33
+ - Executing the original `reflection-trigger.md` echo renders `-d '{type:quick}'`; the fixed line renders `-d '{"type":"quick"}'`.
34
+ - The lint's first draft falsely flagged three healthy templates (`initiative-digest-review`, `mentor-onboarding`, `org-intent-drift-audit`) that define `AUTH` inside backticks; the detector was corrected and the false positive pinned by a regression test.
35
+ - `tests/unit/job-template-auth-lint.test.ts` (9 tests) green; template-family tests (`refresh-jobs`, `default-jobs-valid`, `PostUpdateMigrator-templateResolution`) green.
@@ -0,0 +1,33 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Follow-up to the built-in job-template auth fix. That change repaired the shipped `.md` templates; this repairs the **canonical source that generates them**. `src/scaffold/templates/jobs/instar/*.md` are produced from `getDefaultJobs()` in `src/commands/init.ts` via `scripts/regen-default-job-templates.mjs`, so the earlier fix was applied to generated output while the generator's input stayed broken — a regen would have silently reverted it (confirmed with the generator's `--dry-run`, which lists all five previously-fixed templates as regeneration targets).
9
+
10
+ - **13 unauthenticated calls** in canonical job definitions now carry `Authorization: Bearer $AUTH` + `X-Instar-AgentId`. Twelve mirror the prior fix; the thirteenth — `feedback-retry` → `POST /feedback/retry` — was found by the new guard and confirmed live as a 401.
11
+ - **12 config-only token reads** (`AUTH=$(python3 … config.json …)`) replaced with the env-first `${INSTAR_AUTH_TOKEN:-…}` form, across `reflection-trigger`, `memory-export`, `capability-audit`, `identity-review`, `commitment-detection`, and six CLAUDE.md-template instruction blocks. A config-only read is rejected outright on an agent whose stored token has drifted from the running server's.
12
+ - **The reflection activity digest** (ACT-620) fixed in both callsites, and it was worse than reported: in the `.md` the jq program is a **compile error** (interpolation backslashes lost), silenced by `2>/dev/null`, so every reflection ran on an empty digest. The filter excluded `job-start`/`job-queued`, which never occur — real types are `job_triggered` / `job_gate_skip` / `job_skipped` — and the text slot read `.message`/`.title`/`.session_name`/`.slug`, none of which exist; the real keys are `.summary` and `.metadata.slug`. Now filters the real noise types, reads the real keys, and prints a type-count summary so job volume is visible without consuming the 100-line budget.
13
+ - **The auth lint now covers the canonical source**, by resolving `getDefaultJobs(4042)` and linting the real `gate` + `execute.value` strings rather than regexing file text.
14
+
15
+ ## What to Tell Your User
16
+
17
+ Reflection runs have been producing an empty activity digest — every reflection was working from a blank page, and the failure was silenced. Reflections will now see real recent activity. As with the prior fix, jobs that were quiet because they were failing will start producing output; that is the repair, not a new fault.
18
+
19
+ ## Summary of New Capabilities
20
+
21
+ No new user-facing capability. Thirteen job bodies go from silently 401-ing to functional, reflection digests go from empty to populated, and the build-time guard now covers the source that generates the shipped templates.
22
+
23
+ ## Evidence
24
+
25
+ - Guard proven to bite: with `init.ts` reverted to `origin/main`, the canonical-source test fails listing 13 unauthenticated calls (`reflection-trigger`, `feedback-retry`, `insight-harvest`, `evolution-overdue-check`, `evolution-proposal-evaluate`, `evolution-proposal-implement`); the config-only-token test fails with 12. Both pass on the fixed tree.
26
+ - The guard's own first version passed **vacuously** — it regexed raw `init.ts`, whose bodies carry `localhost:\${INSTAR_PORT:-${port}}`, which its pattern never matched. Rewritten to lint resolved job objects, with a sample-size assertion so an empty resolution can never read as clean. The rewrite then found the `feedback-retry` defect.
27
+ - Live: unauthenticated `POST /feedback/retry` returns `{"error":"Missing or invalid Authorization header"}`; authenticated returns `{"ok":true,"retried":0,"succeeded":0}`.
28
+ - Shipped jq confirmed a compile error against a real activity log; corrected jq emits real `scheduler_start`/`scheduler_stop` rows with summaries plus `462 job_triggered / 33 job_gate_skip / 3 scheduler_start / 2 scheduler_stop`.
29
+ - Real log census: keys are `type`, `timestamp`, `summary`, `metadata`, `sessionId`; types are `job_triggered`, `job_gate_skip`, `job_skipped`, `scheduler_start`, `scheduler_stop`.
30
+ - Generated bash for the reflection echo extracted from the resolved job object and executed: renders `-d '{"type":"quick"}'` with `$INSTAR_AUTH_TOKEN` left unexpanded.
31
+ - `tsc --noEmit` clean; auth lint (11 tests), `default-jobs-valid`, `refresh-jobs` green.
32
+
33
+ Remaining general byte-parity between generated templates and their generator source is tracked as ACT-1263 <!-- tracked: ACT-1263 --> rather than folded in — reconciling all 14 generated templates is a distinct change with its own review surface.
@@ -0,0 +1,47 @@
1
+ # Fixing the thing that generates the job instructions — Plain-English Overview
2
+
3
+ > The one-line version: last change fixed the printout; this one fixes the printer, because the printer would have re-printed the broken version.
4
+
5
+ ## The problem in one breath
6
+
7
+ The previous fix repaired six job instruction files. It turns out those files are **generated** from a master list elsewhere in the code — and that master list was never fixed. Anyone regenerating the files would have quietly undone the repair, and everything would still *look* fine.
8
+
9
+ That is the same trap this whole family of bugs keeps setting: a change that looks exactly like a real fix until something routine wipes it.
10
+
11
+ ## What already exists
12
+
13
+ - **The master list** — one place in the code that defines every built-in scheduled job: when it runs, what it checks, and the instructions it follows.
14
+ - **The generator** — a small script that turns that master list into the individual instruction files that ship to your agent.
15
+ - **The build-time check from last time** — scans the *generated* files for jobs that call a locked door without a key.
16
+
17
+ ## What this adds
18
+
19
+ **The check now also reads the master list**, not just the files it produces. That's the actual fix: the previous check guarded the output while the input stayed broken.
20
+
21
+ Along with that:
22
+
23
+ - **Thirteen jobs** in the master list now carry the key. Twelve were already known. The thirteenth — a job that retries failed feedback delivery — was found *by the new check*, not by me, and confirmed broken.
24
+ - **Twelve places** were reading the key from a stored copy on disk instead of the live one. On a machine where the stored copy has gone out of date, that copy is rejected. They now prefer the live one.
25
+ - **The reflection job's activity summary was completely empty** — and worse than reported. Its filter looked for two event types that never occur, and it read four field names that don't exist. On top of that, the version in the shipped file had lost some punctuation, which made it not just wrong but a **syntax error** — silenced, so it failed invisibly. Every reflection has been running on a blank page. Now it filters the event types that actually occur, reads the fields that actually exist, and adds a short count summary so the reflection can see how busy things were.
26
+
27
+ ## The safeguards
28
+
29
+ **The check was caught lying, and fixed.** Its first version passed cleanly against the broken master list — not because the list was fine, but because its pattern didn't match the way text is written there. A check that passes for the wrong reason is worse than no check, because it hands you confidence you didn't earn. It now reads the *actual resolved jobs* rather than pattern-matching source text, and it refuses to report "clean" if it somehow finds no jobs to inspect.
30
+
31
+ **It immediately proved itself.** The rewritten check found a broken job I didn't know about. That's the difference between a check that describes a fix and one that does work.
32
+
33
+ **It was proven against the broken version first.** Turn the fix off, and the check reports all thirteen problems. Turn it on, and it reports none.
34
+
35
+ **Documentation examples aren't punished.** The master list file also contains example commands written for humans to read. Those are deliberately not treated as real jobs, so the check doesn't flag prose.
36
+
37
+ ## What ships when
38
+
39
+ All together — the master-list fixes, the reflection digest repair, and the widened check.
40
+
41
+ ## What's deliberately left for later
42
+
43
+ The generated files and the master list have drifted apart over time in other, harmless-looking ways. The **key-and-lock** problem is now closed on both sides, but a full reconciliation of all fourteen generated files is a separate job with its own review. It's written down and tracked rather than quietly forgotten.
44
+
45
+ ## If it goes wrong
46
+
47
+ Undo the change and ship a patch. Nothing is stored, nothing is migrated. Worst case is a return to quiet jobs that don't do anything — the same benign fallback as before.