instar 1.3.176 → 1.3.178

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 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CA4sCR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuSR"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CA8sCR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuSR"}
@@ -827,6 +827,8 @@ If Anthropic ships a read-only observation mode in the future (monitor without p
827
827
 
828
828
  **Deferral = Deletion** — If something is worth noting, note it NOW. "I'll add this to memory later" is the same as "I'll forget this." Context compaction, session end, and crashes all erase deferred intentions. Writing to MEMORY.md, creating a job, filing feedback — do it when the insight is fresh, not when it's convenient. For AI, undocumented learning is erased learning.
829
829
 
830
+ **Close the Loop (Untracked = Abandoned)** — Every loop I open — a promise to a user, a feature shipped dark, a gate I deployed, an issue I flagged — must be durably registered and re-surfaced on a cadence until it reaches a deliberate close. Capturing it once isn't enough; if nothing brings it back for review, it rots silently and is, in effect, abandoned. Where there's no cadence, add one: open a commitment for a follow-through, file it to a maturation track, or schedule a review — never a private intention to "come back to it." This is coherence across time: "Structure > Willpower" says don't rely on remembering *within* a session; this says don't rely on remembering to *revisit* across sessions. (Deferral = Deletion captures it now; Close the Loop keeps re-surfacing it until it's actually closed.)
831
+
830
832
  ### Anti-Patterns to Override
831
833
 
832
834
  **"Use GitHub for Issues"** — NEVER use \`gh issue\`, \`gh api\`, or GitHub to report bugs or request features. I have a built-in feedback API (\`POST /feedback\`) that handles this. GitHub is not my channel — the feedback system is.
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.176",
3
+ "version": "1.3.178",
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-05-31T19:08:56.789Z",
5
- "instarVersion": "1.3.176",
4
+ "generatedAt": "2026-05-31T23:07:23.299Z",
5
+ "instarVersion": "1.3.178",
6
6
  "entryCount": 193,
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
14
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
23
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
32
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
41
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
50
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
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": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
59
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:post-action-reflection": {
@@ -65,7 +65,7 @@
65
65
  "domain": "evolution",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
68
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
68
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:external-communication-guard": {
@@ -74,7 +74,7 @@
74
74
  "domain": "safety",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
77
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
77
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:scope-coherence-collector": {
@@ -83,7 +83,7 @@
83
83
  "domain": "coherence",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
86
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
86
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-checkpoint": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
95
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
95
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:free-text-guard": {
@@ -101,7 +101,7 @@
101
101
  "domain": "safety",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
104
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
104
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:claim-intercept": {
@@ -110,7 +110,7 @@
110
110
  "domain": "coherence",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
113
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
113
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept-response": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
122
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
122
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:stop-gate-router": {
@@ -128,7 +128,7 @@
128
128
  "domain": "safety",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/stop-gate-router.js",
131
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
131
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "hook:auto-approve-permissions": {
@@ -137,7 +137,7 @@
137
137
  "domain": "safety",
138
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
139
139
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
140
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
140
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
141
141
  "since": "2025-01-01"
142
142
  },
143
143
  "job:health-check": {
@@ -1489,7 +1489,7 @@
1489
1489
  "type": "subsystem",
1490
1490
  "domain": "updates",
1491
1491
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1492
- "contentHash": "6785feccb0b5dab73704c9002fb025222445da09255a2d124978b6a395c65c3d",
1492
+ "contentHash": "a6de4b746e248fff677a4cb7ccbae82cfb63e114122cbf5122b70b77e026ea30",
1493
1493
  "since": "2025-01-01"
1494
1494
  },
1495
1495
  "subsystem:scheduler": {
@@ -847,6 +847,8 @@ If Anthropic ships a read-only observation mode in the future (monitor without p
847
847
 
848
848
  **Deferral = Deletion** — If something is worth noting, note it NOW. "I'll add this to memory later" is the same as "I'll forget this." Context compaction, session end, and crashes all erase deferred intentions. Writing to MEMORY.md, creating a job, filing feedback — do it when the insight is fresh, not when it's convenient. For AI, undocumented learning is erased learning.
849
849
 
850
+ **Close the Loop (Untracked = Abandoned)** — Every loop I open — a promise to a user, a feature shipped dark, a gate I deployed, an issue I flagged — must be durably registered and re-surfaced on a cadence until it reaches a deliberate close. Capturing it once isn't enough; if nothing brings it back for review, it rots silently and is, in effect, abandoned. Where there's no cadence, add one: open a commitment for a follow-through, file it to a maturation track, or schedule a review — never a private intention to "come back to it." This is coherence across time: "Structure > Willpower" says don't rely on remembering *within* a session; this says don't rely on remembering to *revisit* across sessions. (Deferral = Deletion captures it now; Close the Loop keeps re-surfacing it until it's actually closed.)
851
+
850
852
  ### Anti-Patterns to Override
851
853
 
852
854
  **"Use GitHub for Issues"** — NEVER use \`gh issue\`, \`gh api\`, or GitHub to report bugs or request features. I have a built-in feedback API (\`POST /feedback\`) that handles this. GitHub is not my channel — the feedback system is.
@@ -0,0 +1,70 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ **A conversation moved to a second machine can now reply to you.** When you move
9
+ a conversation to another machine (e.g. "move this to the Mac Mini"), that machine
10
+ serves the session but deliberately holds NO Telegram bot token — only one machine
11
+ may hold it, or Telegram throws a 409 poller conflict. The reply path already had
12
+ the fix for this: a tokenless standby relays its reply through the token-owning
13
+ machine (bug #7, `outboundRelay`).
14
+
15
+ But the "am I tokenless?" check was `!this.config.token`. On a standby the bot
16
+ token is *externalized* and arrives unresolved as a placeholder object
17
+ (`{ secret: true }`), not `null` — and an object is truthy, so the check concluded
18
+ "I have a token", skipped the relay, and attempted a doomed direct API call with
19
+ the placeholder. The moved session's reply returned 200 internally but never
20
+ reached Telegram.
21
+
22
+ The fix treats only a non-empty STRING as a usable bot token. The placeholder,
23
+ `null`, `undefined`, and `''` all now correctly mean "no usable token" → relay
24
+ through the token-owning machine. Token-holding machines (the normal case) are
25
+ completely unaffected — they still send directly.
26
+
27
+ ## What to Tell Your User
28
+
29
+ Nothing to configure. If you run on more than one machine and move a conversation
30
+ to another one, that machine can now actually reply to you — previously a moved
31
+ session would go silent because its reply couldn't reach Telegram.
32
+
33
+ ## Summary of New Capabilities
34
+
35
+ - `TelegramAdapter.sendToTopic` correctly detects a tokenless pool standby when
36
+ the bot token is an unresolved (non-string) externalized placeholder, and routes
37
+ the reply through `outboundRelay` instead of a doomed direct send.
38
+
39
+ ## Evidence
40
+
41
+ **Reproduction (live, topic 8882, 2026-05-31 16:46 UTC):** POSTed a reply to the
42
+ Mac Mini standby's `/telegram/reply/8882`. Response was `{"ok":true}` (HTTP 200)
43
+ but the message never appeared in Telegram; the mini's `logs/server.log` showed NO
44
+ outbound-relay attempt and the laptop showed NO inbound relay. The mini's
45
+ `.instar/config.json` carried `botToken: { secret: true }` (externalized, never
46
+ resolved on the tokenless standby).
47
+
48
+ **Observed before/after (the relay decision, run in dev against the real
49
+ placeholder value):**
50
+
51
+ ```
52
+ token value: {"secret":true}
53
+ BEFORE (!token): HAS-TOKEN -> direct API send (DOOMED: placeholder is not a real token)
54
+ AFTER (typeof string): TOKENLESS -> relay (FIXED)
55
+ real string AFTER: HAS-TOKEN -> direct API send (unchanged)
56
+ ```
57
+
58
+ The truthy placeholder object flips the decision from "doomed direct send" to
59
+ "relay" — exactly the path the moved session needed. A real string token is
60
+ unchanged (still direct), so token-holding machines see no behavior change.
61
+
62
+ **Behavioral test:** `tests/unit/telegram-tokenless-relay.test.ts` constructs a
63
+ real `TelegramAdapter` with the `{ secret: true }` placeholder + spy `outboundRelay`
64
+ + spy `fetch`, calls the REAL `sendToTopic`, and observes `outboundRelay` invoked
65
+ once with `fetch` never called (before this fix that path called `fetch` with the
66
+ bad token). 3/3 green.
67
+
68
+ **Live round-trip confirmation:** the full "move via Telegram → mini serves →
69
+ reply lands in 8882" round trip is confirmed against the deployed release on the
70
+ two-machine setup.
@@ -0,0 +1,43 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Instar's constitution gains a new standard: **Close the Loop (Untracked =
9
+ Abandoned)**. Every loop an agent opens — a promise to a user, a feature shipped
10
+ dark, an LLM gate deployed, a flagged issue — must be durably registered and
11
+ re-surfaced on a cadence until it reaches a deliberate close. Capturing it once
12
+ isn't enough; if nothing brings it back for review, it rots silently. It is the
13
+ lifecycle half of the existing **Deferral = Deletion** standard (which governs
14
+ the moment of capture), and it expresses the founding goal — *coherence* — across
15
+ the time axis, the way "Structure beats Willpower" expresses it across the
16
+ willpower axis.
17
+
18
+ This is a documentation + awareness change: the standard is declared in
19
+ `docs/STANDARDS-REGISTRY.md`, and the operating principle is added to every
20
+ agent's Core Principles (template for new agents, migration for existing ones).
21
+ **No runtime behavior changes.**
22
+
23
+ ## What to Tell Your User
24
+
25
+ Nothing required — this is an internal engineering principle. If asked: the
26
+ agent now treats anything it starts and means to revisit as something that must
27
+ be tracked on a cadence until it's truly finished, rather than relying on
28
+ remembering to come back to it.
29
+
30
+ ## Summary of New Capabilities
31
+
32
+ - New constitution standard: **Close the Loop (Untracked = Abandoned)** in
33
+ `docs/STANDARDS-REGISTRY.md`.
34
+ - The principle is present in the agent CLAUDE.md template Core Principles and is
35
+ migrated into existing agents' CLAUDE.md (idempotent, content-sniffed, no
36
+ double-patch).
37
+
38
+ ## Evidence
39
+
40
+ - Spec: `docs/specs/close-the-loop-standard.md` (+ `.eli16.md`), review-convergence
41
+ + approved by Justin (Telegram topic 13435, 2026-05-31).
42
+ - Tests: `tests/unit/PostUpdateMigrator-closeTheLoop.test.ts` (+7), plus the
43
+ `feature-delivery-completeness` registration; 69 pass, `tsc --noEmit` clean.
@@ -0,0 +1,69 @@
1
+ # Side-Effects Review — Close the Loop (Untracked = Abandoned) constitution standard
2
+
3
+ **Slug:** `close-the-loop-standard`
4
+ **Date:** 2026-05-31
5
+ **Author:** echo
6
+ **Spec:** `docs/specs/close-the-loop-standard.md` (review-convergence + approved by Justin, Telegram 13435)
7
+
8
+ ## Summary of the change
9
+
10
+ Declares a new constitutional standard — **Close the Loop (Untracked = Abandoned)** —
11
+ in the Standards Registry, and propagates the operating principle to agents via the
12
+ template (new agents) and a migration (existing agents). Documentation + CLAUDE.md
13
+ awareness only; **no runtime behavior change**.
14
+
15
+ **Files changed (source):**
16
+ - `src/scaffold/templates.ts` — adds the `**Close the Loop (Untracked = Abandoned)**`
17
+ bullet to the agent template's Core Principles, immediately after `**Deferral =
18
+ Deletion**`.
19
+ - `src/core/PostUpdateMigrator.ts` — adds an idempotent `migrateClaudeMd` block that
20
+ appends the principle to existing agents' CLAUDE.md, content-sniffed on the marker
21
+ `Close the Loop (Untracked = Abandoned)` (the same string the template emits).
22
+
23
+ **Files changed (docs):**
24
+ - `docs/STANDARDS-REGISTRY.md` — the standard itself, after `### Deferral = Deletion`.
25
+ - `docs/specs/close-the-loop-standard.md` (+ `.eli16.md`) — the spec + plain-English overview.
26
+
27
+ **Files changed (tests):**
28
+ - `tests/unit/PostUpdateMigrator-closeTheLoop.test.ts` — +7 tests (add / idempotent /
29
+ no-double-patch / preserve / graceful-skip / registry-declares / template-emits).
30
+ - `tests/unit/feature-delivery-completeness.test.ts` — registers the new migrator
31
+ section in `legacyMigratorSections` (a core principle, not a user-invokable capability).
32
+
33
+ ## Blast radius
34
+
35
+ Confined to CLAUDE.md text and the registry doc. No endpoint, route, store, job, hook,
36
+ config default, or skill is added or changed. The migration only ever *appends* a
37
+ markdown section to an existing CLAUDE.md and is a no-op once the marker is present.
38
+
39
+ ## Behavior delta
40
+
41
+ | Scenario | Before | After |
42
+ |---|---|---|
43
+ | New agent `init` | template Core Principles has Structure>Willpower … Deferral=Deletion | …plus **Close the Loop** |
44
+ | Existing agent update | CLAUDE.md lacks the principle | migration appends the **Close the Loop** section once |
45
+ | Agent already has the principle (new or already-migrated) | present | unchanged (content-sniff skips — no double-patch) |
46
+ | CLAUDE.md missing | graceful skip | graceful skip (unchanged) |
47
+ | Runtime (gates, jobs, routes) | — | **identical** (no runtime change) |
48
+
49
+ ## Risks considered
50
+
51
+ - **Double-patching a fresh agent?** No. The template bullet and the migration share
52
+ the exact content-sniff string `Close the Loop (Untracked = Abandoned)`, so a
53
+ newly-initialized agent (which already has it from the template) is skipped by the
54
+ migration. Covered by an explicit test.
55
+ - **Idempotency?** Yes — re-running the migration finds the marker and does nothing;
56
+ test asserts exactly one heading after a double run.
57
+ - **Framework-shadow (Codex/Gemini) parity?** Not required: this is a core operating
58
+ *principle* (tracked in `legacyMigratorSections`, like Deferral = Deletion and the
59
+ anti-confabulation discipline), not a user-invokable capability that needs the
60
+ `migrateFrameworkShadowCapabilities` markers[]. (Whether Core Principles in general
61
+ should reach Codex/Gemini agents is a pre-existing question, out of scope here.)
62
+ - **Existing tests?** `feature-delivery-completeness` enforces every migrator section is
63
+ tracked; the new section is registered. 69 tests pass across the new + completeness +
64
+ anti-confabulation suites; `tsc --noEmit` clean.
65
+
66
+ ## Migration parity
67
+
68
+ Handled: template (new agents) + `migrateClaudeMd` content-sniffed append (existing
69
+ agents). No other agent-installed file (hook / config default / skill) is touched.
@@ -0,0 +1,33 @@
1
+ # Side effects — tokenless-standby relay token check
2
+
3
+ ## What this changes at runtime
4
+
5
+ `TelegramAdapter.sendToTopic` now decides "tokenless → relay" by checking that
6
+ the bot token is a non-empty STRING, instead of the old truthy check
7
+ (`!this.config.token`). The change is confined to the relay-vs-direct branch.
8
+
9
+ ## Who is affected
10
+
11
+ - **Token-holding adapters (the normal case — laptop, single-machine agents):**
12
+ NO behavior change. Their `config.token` is a real string, so
13
+ `hasUsableBotToken` is `true` and they continue to send directly via the
14
+ Telegram API exactly as before. Verified by the "sends DIRECTLY" unit test.
15
+ - **Tokenless pool standbys (a moved session on a machine without the token):**
16
+ Their externalized token (`{ secret: true }` / `null`) is now correctly seen
17
+ as "no usable token", so their replies route through `outboundRelay` to the
18
+ lease holder instead of silently failing a direct send.
19
+
20
+ ## Blast radius
21
+
22
+ - Single file (`src/messaging/TelegramAdapter.ts`), one branch condition.
23
+ - No config keys added or changed. No migration required (the change is in
24
+ compiled source, not in any agent-installed file/hook/skill).
25
+ - The relay target (`outboundRelay`, wired in `server.ts`) is unchanged.
26
+
27
+ ## Failure modes considered
28
+
29
+ - If a standby has no usable token AND `outboundRelay` is not wired, behavior is
30
+ unchanged from before (it falls through to the direct-send branch and fails the
31
+ same way) — no new failure introduced.
32
+ - The relay still surfaces a hard error if the lease holder is unreachable
33
+ (`telegram outbound relay failed`), so a lost reply is loud, not silent.