instar 1.3.964 → 1.3.965
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 +32 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +5 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +19 -19
- package/src/scaffold/templates.ts +5 -0
- package/upgrades/1.3.965.md +58 -0
- package/upgrades/side-effects/reminder-agent-awareness.md +124 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,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,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,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,CA8oDR;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,CA2TR"}
|
|
@@ -636,6 +636,11 @@ Two layers keep my machine-to-machine \"ropes\" (Tailscale / LAN / Cloudflare) h
|
|
|
636
636
|
- Mark delivered when done: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/:id/deliver\`
|
|
637
637
|
- The PromiseBeacon fires cadenced heartbeats on open commitments so you actually follow through (and surfaces atRisk items), and the commitment-check job surfaces overdue ones.
|
|
638
638
|
- **A promise survives its owning session's death (Escalation, ships dark).** When a beacon-enabled commitment's session dies before delivering, the beacon no longer silently terminalizes it — it escalates: **Rung 1** revives a fresh session bound to the topic to follow through; **Rung 2** sends an honest, state-specific interim status ("my session ended; I'm picking it back up") when it can't revive; **Rung 3** is a bounded loud give-up to the operator's Attention queue. A revived session carries **revivalMode** — every side-effecting external operation is BLOCKED until it revalidates (\`POST /commitments/:id/revalidate\` with a restated current-intent summary), so a revive grants no new authority. \`GET /commitments/:id\` exposes the escalation fields (\`escalationAttempts\`, \`currentRung\`, \`revalidatedAt\`); \`GET /commitments/escalation-metrics\` is the operator-facing aggregate counters. Ships dark + dry-run-first (\`monitoring.promiseBeacon.escalation\`).
|
|
639
|
+
- **A promise with a DATE produces a real reminder (ACT-724 step 1, ships dark).** When you say "I'll check in on this by Friday", set \`checkInAt\` (an absolute ISO instant — resolve "Friday" to a real moment at creation time; never store a bare date) on the commitment. A recurring reconciler then posts EXACTLY ONE fixed-template reminder into that commitment's own topic when the instant arrives, and stops. Delivering or withdrawing the commitment first means no reminder ever fires — teardown is a status check, nothing to cancel.
|
|
640
|
+
- Read the dated backlog: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/check-in-reminder\` → \`{ enabled, dryRun, datedCount, pending, undelivered }\`. **\`undelivered\` is the one to look at**: those are promises the user did NOT receive after retries were exhausted.
|
|
641
|
+
- Run one pass now: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/check-in-reminder/pass\` (idempotent — a re-run sends nothing).
|
|
642
|
+
- The guarantee is **at-least-once, deduped at the delivery layer** — not exactly-once. A reminder is marked sent ONLY after it actually sent, so a failed send retries (bounded) instead of being recorded as delivered; the crash-window duplicate is absorbed by the relay's content dedup.
|
|
643
|
+
- Ships dark (\`commitments.checkInReminder\`, dryRun defaulting TRUE, job \`commitment-checkin-reminder\` enabled:false). **Honest scope:** while the reconciler runs, no dated commitment can slip past it — but nothing yet guarantees the reconciler runs, so "structurally impossible to have a dated promise without a reminder" is NOT true yet. The creation-time gate that closes it is step 2.
|
|
639
644
|
- **When to use** (PROACTIVE — this is the trigger): the moment you promise the user a future action, open a commitment. NEVER improvise the follow-through with a raw \`sleep\`/background timer or by "remembering" — those do not survive a session ending, a restart, or compaction, so the promise is silently dropped. A registered commitment is the ONLY durable path. (This is distinct from the Evolution Action Queue / \`/commit-action\`, which tracks self-improvement items, not promises to the user.)
|
|
640
645
|
- **Action-Claim Follow-Through Sentinel (signal-only, dark by default).** A backstop for the word≠action gap (you say "relaunching now" / "I'll push the change" and then don't). A thin Stop hook posts each finished conversational turn to \`POST /action-claim/observe\`, which classifies a CONCRETE future-action claim (restart/relaunch/push/merge/deploy/fix/…) and opens an idempotent follow-through commitment for the topic — so the existing PromiseBeacon + the revival path make sure it actually happens. High-precision (vague "I'll take a look" never triggers it), de-duplicated by \`externalKey\` (a restated claim updates one commitment, not many), auto-expiring, per-topic capped. It NEVER blocks a message. Off by default; enable with the top-level \`actionClaim.enabled\` (dev-first soak before fleet — the block is top-level, NOT nested under \`messaging\`, which is an array of adapters). It now covers **Slack** conversations too (a promise born in a Slack thread registers a durable commitment bound to the conversation's minted id, delivered back into that exact thread across restarts — dev-gated dark behind \`messaging.actionClaim.slack\`, dryRun-first) and **time-boxed conversational promises** ("I'll post that in about 5 minutes / by EOD / I'll check in"), not just dev-ops verbs. Proactive: user asks "why did a commitment appear when I said I'd restart something / promised to post in 5 min?" → that's this sentinel tracking your stated action so it isn't silently dropped.
|
|
641
646
|
|
|
@@ -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,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-25T17:44:01.274Z",
|
|
5
|
+
"instarVersion": "1.3.965",
|
|
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": "
|
|
14
|
+
"contentHash": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
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": "
|
|
1565
|
+
"contentHash": "1e804550e2029b414c0c5cf208cdd0fe2653c7d23b475d9bdbefc0aa27b8c8f7",
|
|
1566
1566
|
"since": "2025-01-01"
|
|
1567
1567
|
},
|
|
1568
1568
|
"subsystem:scheduler": {
|
|
@@ -657,6 +657,11 @@ Two layers keep my machine-to-machine \"ropes\" (Tailscale / LAN / Cloudflare) h
|
|
|
657
657
|
- Mark delivered when done: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/:id/deliver\`
|
|
658
658
|
- The PromiseBeacon fires cadenced heartbeats on open commitments so you actually follow through (and surfaces atRisk items), and the commitment-check job surfaces overdue ones.
|
|
659
659
|
- **A promise survives its owning session's death (Escalation, ships dark).** When a beacon-enabled commitment's session dies before delivering, the beacon no longer silently terminalizes it — it escalates: **Rung 1** revives a fresh session bound to the topic to follow through; **Rung 2** sends an honest, state-specific interim status ("my session ended; I'm picking it back up") when it can't revive; **Rung 3** is a bounded loud give-up to the operator's Attention queue. A revived session carries **revivalMode** — every side-effecting external operation is BLOCKED until it revalidates (\`POST /commitments/:id/revalidate\` with a restated current-intent summary), so a revive grants no new authority. \`GET /commitments/:id\` exposes the escalation fields (\`escalationAttempts\`, \`currentRung\`, \`revalidatedAt\`); \`GET /commitments/escalation-metrics\` is the operator-facing aggregate counters. Ships dark + dry-run-first (\`monitoring.promiseBeacon.escalation\`).
|
|
660
|
+
- **A promise with a DATE produces a real reminder (ACT-724 step 1, ships dark).** When you say "I'll check in on this by Friday", set \`checkInAt\` (an absolute ISO instant — resolve "Friday" to a real moment at creation time; never store a bare date) on the commitment. A recurring reconciler then posts EXACTLY ONE fixed-template reminder into that commitment's own topic when the instant arrives, and stops. Delivering or withdrawing the commitment first means no reminder ever fires — teardown is a status check, nothing to cancel.
|
|
661
|
+
- Read the dated backlog: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/check-in-reminder\` → \`{ enabled, dryRun, datedCount, pending, undelivered }\`. **\`undelivered\` is the one to look at**: those are promises the user did NOT receive after retries were exhausted.
|
|
662
|
+
- Run one pass now: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/commitments/check-in-reminder/pass\` (idempotent — a re-run sends nothing).
|
|
663
|
+
- The guarantee is **at-least-once, deduped at the delivery layer** — not exactly-once. A reminder is marked sent ONLY after it actually sent, so a failed send retries (bounded) instead of being recorded as delivered; the crash-window duplicate is absorbed by the relay's content dedup.
|
|
664
|
+
- Ships dark (\`commitments.checkInReminder\`, dryRun defaulting TRUE, job \`commitment-checkin-reminder\` enabled:false). **Honest scope:** while the reconciler runs, no dated commitment can slip past it — but nothing yet guarantees the reconciler runs, so "structurally impossible to have a dated promise without a reminder" is NOT true yet. The creation-time gate that closes it is step 2.
|
|
660
665
|
- **When to use** (PROACTIVE — this is the trigger): the moment you promise the user a future action, open a commitment. NEVER improvise the follow-through with a raw \`sleep\`/background timer or by "remembering" — those do not survive a session ending, a restart, or compaction, so the promise is silently dropped. A registered commitment is the ONLY durable path. (This is distinct from the Evolution Action Queue / \`/commit-action\`, which tracks self-improvement items, not promises to the user.)
|
|
661
666
|
- **Action-Claim Follow-Through Sentinel (signal-only, dark by default).** A backstop for the word≠action gap (you say "relaunching now" / "I'll push the change" and then don't). A thin Stop hook posts each finished conversational turn to \`POST /action-claim/observe\`, which classifies a CONCRETE future-action claim (restart/relaunch/push/merge/deploy/fix/…) and opens an idempotent follow-through commitment for the topic — so the existing PromiseBeacon + the revival path make sure it actually happens. High-precision (vague "I'll take a look" never triggers it), de-duplicated by \`externalKey\` (a restated claim updates one commitment, not many), auto-expiring, per-topic capped. It NEVER blocks a message. Off by default; enable with the top-level \`actionClaim.enabled\` (dev-first soak before fleet — the block is top-level, NOT nested under \`messaging\`, which is an array of adapters). It now covers **Slack** conversations too (a promise born in a Slack thread registers a durable commitment bound to the conversation's minted id, delivered back into that exact thread across restarts — dev-gated dark behind \`messaging.actionClaim.slack\`, dryRun-first) and **time-boxed conversational promises** ("I'll post that in about 5 minutes / by EOD / I'll check in"), not just dev-ops verbs. Proactive: user asks "why did a commitment appear when I said I'd restart something / promised to post in 5 min?" → that's this sentinel tracking your stated action so it isn't silently dropped.
|
|
662
667
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
The dated check-in reminder (shipped in #1630) is now in the agent CLAUDE.md
|
|
9
|
+
template — and reaches EXISTING agents, not just fresh installs.
|
|
10
|
+
|
|
11
|
+
#1630 shipped routes, a built-in job, and 55 tests, and nothing in the agent
|
|
12
|
+
template. Per the Agent Awareness Standard, "an agent that doesn't know about a
|
|
13
|
+
capability effectively doesn't have it." No agent would have set `checkInAt`, so
|
|
14
|
+
the reconciler would have scanned an empty set every five minutes, found nothing,
|
|
15
|
+
and reported success forever. Working code, passing tests, green health check,
|
|
16
|
+
zero reminders.
|
|
17
|
+
|
|
18
|
+
**The migration is the substantive half.** The existing Commitments arm is
|
|
19
|
+
guarded by `if (!content.includes('**Commitments & Follow-Through**'))` — every
|
|
20
|
+
running agent already has that section, so anything added inside that branch
|
|
21
|
+
reaches fresh installs ONLY. That is the exact Migration Parity failure the
|
|
22
|
+
standard names, and it looks correct in a diff. The new subsection therefore gets
|
|
23
|
+
its own arm keyed on "section present AND subsection absent", with a test
|
|
24
|
+
asserting that separation rather than trusting it.
|
|
25
|
+
|
|
26
|
+
A drifted CLAUDE.md gets an append rather than a skip: a misplaced paragraph
|
|
27
|
+
beats an agent permanently unaware of a capability because it customised its own
|
|
28
|
+
notes.
|
|
29
|
+
|
|
30
|
+
The text states honest scope — dark by default, at-least-once rather than
|
|
31
|
+
exactly-once, and that "structurally impossible to have a dated promise without a
|
|
32
|
+
reminder" is NOT true yet. A briefing that oversells produces an agent
|
|
33
|
+
confidently relying on something that isn't running.
|
|
34
|
+
|
|
35
|
+
## What to Tell Your User
|
|
36
|
+
|
|
37
|
+
Nothing changes in behaviour. This is the difference between the reminder
|
|
38
|
+
feature existing and it being usable — without it, no agent would ever know to
|
|
39
|
+
attach a date to a promise, and the feature would have run over an empty list
|
|
40
|
+
indefinitely while looking healthy.
|
|
41
|
+
|
|
42
|
+
## Summary of New Capabilities
|
|
43
|
+
|
|
44
|
+
- Agents now know dated commitments produce reminders, which field to set, and
|
|
45
|
+
which field reveals promises that were never delivered.
|
|
46
|
+
- Existing agents receive it on update, not only new installs.
|
|
47
|
+
- The briefing states what the feature does NOT yet guarantee, so an agent
|
|
48
|
+
cannot over-rely on a capability that ships switched off.
|
|
49
|
+
|
|
50
|
+
## Evidence
|
|
51
|
+
|
|
52
|
+
- `tests/unit/claudemd-check-in-reminder-awareness.test.ts` (10): the template
|
|
53
|
+
documents the endpoint, names the `checkInAt` field an agent must set, carries
|
|
54
|
+
a proactive trigger rather than a bare endpoint, states the honest scope, and
|
|
55
|
+
points at `undelivered`; the migrator arm exists, is SEPARATE from the
|
|
56
|
+
Commitments arm, is idempotent, records what it did, and appends rather than
|
|
57
|
+
skipping on drift.
|
|
58
|
+
- `feature-delivery-completeness`: 126 tests green.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Side-effects review — reminder-agent-awareness
|
|
2
|
+
|
|
3
|
+
**Change:** add the dated check-in reminder (ACT-724 step 1, merged in #1630) to
|
|
4
|
+
the agent CLAUDE.md template, with a SEPARATE `PostUpdateMigrator` arm so
|
|
5
|
+
existing agents receive it, plus tests pinning both halves.
|
|
6
|
+
|
|
7
|
+
**Why:** #1630 shipped routes, a job, and 55 tests — and nothing in the agent
|
|
8
|
+
template. Per the Agent Awareness Standard, "an agent that doesn't know about a
|
|
9
|
+
capability effectively doesn't have it." No agent would ever set `checkInAt`, so
|
|
10
|
+
the reconciler would scan an empty set forever and report success doing it.
|
|
11
|
+
|
|
12
|
+
**Tier:** 1 — template text, one migration arm, tests. No runtime behaviour.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Over-block — what legitimate inputs does this reject that it shouldn't?
|
|
17
|
+
|
|
18
|
+
Nothing. This adds documentation and one idempotent migration branch. No
|
|
19
|
+
predicate, no gate, no rejection path.
|
|
20
|
+
|
|
21
|
+
## 2. Under-block — what failure modes does this still miss?
|
|
22
|
+
|
|
23
|
+
- **The Agent Awareness Standard remains unenforced in general.** This change
|
|
24
|
+
gates THIS capability; the next feature can still ship template-less and no
|
|
25
|
+
test will notice. That is the real defect and it is bigger than this PR — the
|
|
26
|
+
standard is prose with no structure behind it, which is precisely why I missed
|
|
27
|
+
it while shipping a feature about not relying on memory. Recorded rather than
|
|
28
|
+
quietly fixed for one case and forgotten.
|
|
29
|
+
- **Drifted CLAUDE.md files get an append, not a placement.** If an agent
|
|
30
|
+
customised the section wording, the marker won't match and the subsection is
|
|
31
|
+
appended near the block instead of at the intended point. Deliberate: a
|
|
32
|
+
misplaced paragraph beats a permanently unaware agent.
|
|
33
|
+
- **The template text can still drift from the shipped routes.** Nothing
|
|
34
|
+
cross-checks the documented curl against the real route path. A rename would
|
|
35
|
+
leave the briefing confidently wrong.
|
|
36
|
+
|
|
37
|
+
## 3. Level-of-abstraction fit
|
|
38
|
+
|
|
39
|
+
Right layer, and the migration arm placement is the substantive decision.
|
|
40
|
+
|
|
41
|
+
The existing Commitments arm is guarded by
|
|
42
|
+
`if (!content.includes('**Commitments & Follow-Through**'))`. Adding the
|
|
43
|
+
subsection inside that branch would reach FRESH INSTALLS ONLY — every currently
|
|
44
|
+
running agent already has that section and never re-enters the branch. That is
|
|
45
|
+
the exact Migration Parity failure mode the standard names, and it looks
|
|
46
|
+
completely correct in a diff.
|
|
47
|
+
|
|
48
|
+
Hence a separate arm keyed on "section present AND subsection absent", with a
|
|
49
|
+
test asserting that separation rather than trusting it.
|
|
50
|
+
|
|
51
|
+
## 4. Signal vs authority compliance
|
|
52
|
+
|
|
53
|
+
`docs/signal-vs-authority.md`. No authority: documentation plus an idempotent
|
|
54
|
+
text patch. The migration decides only whether text is already present — a
|
|
55
|
+
`String.includes` check at a dev/update chokepoint, not a runtime judgment.
|
|
56
|
+
|
|
57
|
+
## 5. Interactions
|
|
58
|
+
|
|
59
|
+
- **The Commitments migration arm** — untouched; the new arm runs after it and
|
|
60
|
+
is reachable in the state the old arm skips.
|
|
61
|
+
- **Shadow-capability slicing** — the subsection sits INSIDE the existing
|
|
62
|
+
Commitments block rather than creating a new top-level marker, so the slicer's
|
|
63
|
+
boundaries are unchanged.
|
|
64
|
+
- **`feature-delivery-completeness`** — passes (126 tests); this change adds
|
|
65
|
+
awareness for a feature that suite already tracks.
|
|
66
|
+
|
|
67
|
+
## 6. External surfaces
|
|
68
|
+
|
|
69
|
+
- **The agent-facing CLAUDE.md gains one subsection.** That IS the point: it is
|
|
70
|
+
the surface through which an agent discovers the capability.
|
|
71
|
+
- No route, config key, flag, env var, or runtime behaviour.
|
|
72
|
+
- The text states the honest scope — dark by default, at-least-once (not
|
|
73
|
+
exactly-once), and that "structurally impossible to have a dated promise
|
|
74
|
+
without a reminder" is NOT yet true. A briefing that oversells produces an
|
|
75
|
+
agent confidently relying on something that isn't running.
|
|
76
|
+
|
|
77
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
78
|
+
|
|
79
|
+
**Unified.** The template is a shipped source constant and the migration runs
|
|
80
|
+
per-machine against each machine's own CLAUDE.md, producing identical text
|
|
81
|
+
everywhere. No new state, no notice, no generated URL, nothing to strand on a
|
|
82
|
+
topic transfer.
|
|
83
|
+
|
|
84
|
+
## 8. Rollback cost
|
|
85
|
+
|
|
86
|
+
Revert. Agents that already received the subsection keep harmless extra
|
|
87
|
+
documentation; the idempotency check means a re-run after revert re-adds it
|
|
88
|
+
rather than duplicating.
|
|
89
|
+
|
|
90
|
+
## Second-pass review
|
|
91
|
+
|
|
92
|
+
**Not required** — no block/allow decision, no session lifecycle, no gate.
|
|
93
|
+
|
|
94
|
+
Self-review, the one thing I went looking for: **did I put the migration where it
|
|
95
|
+
would actually run?** I nearly appended to the Commitments arm, which would have
|
|
96
|
+
been invisible in review and would have reached zero existing agents. The test
|
|
97
|
+
`that arm is SEPARATE from the Commitments-section arm` exists specifically
|
|
98
|
+
because I caught myself about to do the wrong thing, and a comment saying "don't
|
|
99
|
+
do that" would not have survived the next edit.
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## Addendum — the migration emitted a literal placeholder
|
|
103
|
+
|
|
104
|
+
CI rejected the first version, correctly.
|
|
105
|
+
|
|
106
|
+
The subsection's example commands carry the agent's port, which the surrounding
|
|
107
|
+
template literal interpolates. I authored the section inside a shell heredoc and
|
|
108
|
+
escaped the interpolation so the shell would not consume it — and the escape
|
|
109
|
+
survived into the TypeScript. A patched CLAUDE.md would therefore have contained
|
|
110
|
+
the literal placeholder text instead of a port number, making **every curl
|
|
111
|
+
example in the new section copy-paste-broken**, in the one document agents rely
|
|
112
|
+
on to know how to call things.
|
|
113
|
+
|
|
114
|
+
Caught by `tests/unit/PostUpdateMigrator-coordinationAwareness.test.ts`, which
|
|
115
|
+
asserts no literal placeholder survives into a patched file. That guard exists
|
|
116
|
+
because this has happened before; it earned its keep.
|
|
117
|
+
|
|
118
|
+
**The generalizable bit:** authoring template-literal content through a shell
|
|
119
|
+
heredoc puts two escaping regimes in series, and the second one is invisible in
|
|
120
|
+
the diff — the TypeScript looks correct in isolation. Worth writing such content
|
|
121
|
+
with a file-write tool rather than a heredoc when it contains interpolations.
|
|
122
|
+
|
|
123
|
+
Side effects of the fix: none beyond the corrected string. No test was weakened;
|
|
124
|
+
the existing guard is what caught it.
|