instar 1.3.1235 → 1.3.1237

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.
Files changed (53) hide show
  1. package/dashboard/subscriptions.js +87 -8
  2. package/dist/coordination/AccountFollowMeMandateDelivery.d.ts +6 -0
  3. package/dist/coordination/AccountFollowMeMandateDelivery.d.ts.map +1 -1
  4. package/dist/coordination/AccountFollowMeMandateDelivery.js +16 -2
  5. package/dist/coordination/AccountFollowMeMandateDelivery.js.map +1 -1
  6. package/dist/coordination/DeliveredMandateStore.d.ts +4 -0
  7. package/dist/coordination/DeliveredMandateStore.d.ts.map +1 -1
  8. package/dist/coordination/DeliveredMandateStore.js +16 -2
  9. package/dist/coordination/DeliveredMandateStore.js.map +1 -1
  10. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  11. package/dist/core/PostUpdateMigrator.js +19 -1
  12. package/dist/core/PostUpdateMigrator.js.map +1 -1
  13. package/dist/data/standards-guard-index.json +1 -1
  14. package/dist/data/standards-guard-index.meta.json +2 -2
  15. package/dist/data/standards-registry.meta.json +1 -1
  16. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  17. package/dist/messaging/TelegramAdapter.js +25 -7
  18. package/dist/messaging/TelegramAdapter.js.map +1 -1
  19. package/dist/messaging/TelegramEditRejection.d.ts +17 -0
  20. package/dist/messaging/TelegramEditRejection.d.ts.map +1 -0
  21. package/dist/messaging/TelegramEditRejection.js +44 -0
  22. package/dist/messaging/TelegramEditRejection.js.map +1 -0
  23. package/dist/messaging/telegram-origin/OriginAwareness.d.ts +1 -0
  24. package/dist/messaging/telegram-origin/OriginAwareness.d.ts.map +1 -1
  25. package/dist/messaging/telegram-origin/OriginAwareness.js +3 -0
  26. package/dist/messaging/telegram-origin/OriginAwareness.js.map +1 -1
  27. package/dist/messaging/telegram-origin/TelegramOriginService.d.ts.map +1 -1
  28. package/dist/messaging/telegram-origin/TelegramOriginService.js +8 -2
  29. package/dist/messaging/telegram-origin/TelegramOriginService.js.map +1 -1
  30. package/dist/scaffold/templates.d.ts.map +1 -1
  31. package/dist/scaffold/templates.js +3 -1
  32. package/dist/scaffold/templates.js.map +1 -1
  33. package/dist/server/AgentServer.d.ts.map +1 -1
  34. package/dist/server/AgentServer.js +12 -1
  35. package/dist/server/AgentServer.js.map +1 -1
  36. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  37. package/dist/server/CapabilityIndex.js +2 -0
  38. package/dist/server/CapabilityIndex.js.map +1 -1
  39. package/dist/server/routes.d.ts +5 -0
  40. package/dist/server/routes.d.ts.map +1 -1
  41. package/dist/server/routes.js +240 -7
  42. package/dist/server/routes.js.map +1 -1
  43. package/package.json +2 -1
  44. package/src/data/builtin-manifest.json +64 -64
  45. package/src/data/standards-guard-index.json +1 -1
  46. package/src/data/standards-guard-index.meta.json +2 -2
  47. package/src/data/standards-registry.meta.json +1 -1
  48. package/src/scaffold/templates.ts +3 -1
  49. package/upgrades/1.3.1236.md +35 -0
  50. package/upgrades/1.3.1237.md +27 -0
  51. package/upgrades/relogin-pool-one-click.eli16.md +9 -0
  52. package/upgrades/side-effects/relogin-pool-one-click.md +86 -0
  53. package/upgrades/side-effects/telegram-dashboard-edit-rejection.md +192 -0
@@ -0,0 +1,35 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ When a pinned dashboard-link edit is held or its delivery is uncertain, Instar now
9
+ keeps the original message ID and reports the failed refresh. It no longer turns
10
+ that failure into a brand-new dashboard post. This reduces the extra sends that
11
+ can accumulate during repeated tunnel restarts.
12
+
13
+ A confirmed missing pinned message can still be replaced, and an unchanged link
14
+ remains a quiet no-op. Origin recording, ownership, capacity limits and recovery
15
+ budgets remain in force. This patch does not fix false wake detection or guarantee
16
+ delivery of a held message.
17
+
18
+ ## What to Tell Your User
19
+
20
+ A held or uncertain pinned-link edit no longer falls back to creating a new
21
+ dashboard post. A held refresh can still leave the existing pinned link stale
22
+ until delivery recovers.
23
+
24
+ Existing agents receive the correction through their normal update and server
25
+ restart. No configuration change or queue reset is required.
26
+
27
+ ## Summary of New Capabilities
28
+
29
+ - Dashboard edits preserve the existing message on held or uncertain outcomes.
30
+ - A confirmed missing message can still be replaced; unchanged content stays quiet.
31
+
32
+ ## Evidence
33
+
34
+ The focused unit, HTTP integration, production-Boot lifecycle and migration tests
35
+ pass. Full-suite validation and CI are required before release.
@@ -0,0 +1,27 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: minor -->
5
+
6
+ ## What Changed
7
+
8
+ - The Subscriptions grid now loads assisted re-login episodes from every reachable machine and binds each repair to the exact account×machine cell.
9
+ - One **Repair sign-in** click after dashboard unlock issues a signed, exact-bounds re-mint mandate and starts the autonomous flow on the machine that owns the broken credential.
10
+ - The target machine independently re-verifies the account, machine, episode, and mandate before acting. Ordinary API access remains insufficient.
11
+
12
+ ## What to Tell Your User
13
+
14
+ When a Claude account needs authentication on a machine, unlock the dashboard and click **Repair sign-in** on that exact grid cell. Instar handles the routine login autonomously on the target machine. It asks for help only when the provider presents a genuine security challenge it is not allowed to bypass.
15
+
16
+ ## Summary of New Capabilities
17
+
18
+ - Central, phone-friendly one-click repair across the machine fleet.
19
+ - Machine-tagged repair progress and typed peer failures in one dashboard.
20
+ - Signed cross-machine authorization with target-local point-of-use verification.
21
+ - Single-use, 15-minute repair permissions with durable replay refusal.
22
+
23
+ ## Evidence
24
+
25
+ - Focused dashboard, route, rendering, authority, and write-domain tests cover the one-click request, exact binding, remote episode aggregation, and deny/allow boundaries.
26
+ - Target-side tests cover expiry, first-use consumption, replay refusal, and redelivery tombstones.
27
+ - TypeScript build passes; full repository and remote CI remain release gates.
@@ -0,0 +1,9 @@
1
+ # One-click Claude sign-in repair across your machines
2
+
3
+ Today, a Claude account can be signed out on the Laptop while the dashboard you opened lives on the Mac Studio. The old repair feature could do the hard login work, but its approval lived on the machine with the broken account. That left an awkward gap: you could see the problem centrally without being able to fix that exact machine centrally.
4
+
5
+ This change closes that gap. In the Subscriptions grid, the broken account's exact machine cell shows **Repair sign-in**. Once you have unlocked the dashboard, one click sends a short-lived, signed permission slip to that machine and starts the existing bounded repair flow there. The permission slip names the exact account, machine, repair episode, evidence snapshot, and action, so it cannot be reused for another account or for ordinary account setup.
6
+
7
+ The cell continues to be useful after the first click. A safely failed repair offers **Try repair again**. Work in progress offers **Cancel repair**. If the repair feature is intentionally unavailable, or if a repair is refused for safety, the normal manual sign-in option remains available. If the machine's status cannot be trusted because it is offline or unreachable, competing actions are hidden until the dashboard can see the truth again.
8
+
9
+ The target machine still owns all credentials and browser state. The central dashboard never receives passwords, cookies, codes, or login profiles. CAPTCHA, phone verification, unexpected sites, identity ambiguity, permission changes, and billing/security changes continue to stop safely for operator help instead of being bypassed.
@@ -0,0 +1,86 @@
1
+ # Side-Effects Review — one-click fleet re-login
2
+
3
+ **Version / slug:** `relogin-pool-one-click`
4
+ **Date:** `2026-08-29`
5
+ **Author:** Echo
6
+ **Second-pass reviewer:** `/root/relogin_side_effects_review`
7
+ **ELI16:** `upgrades/relogin-pool-one-click.eli16.md`
8
+
9
+ ## Summary of the change
10
+
11
+ Closes the fleet seam in assisted re-login. The central dashboard reads machine-tagged episodes, renders the state-appropriate action on the exact account×machine cell, and converts one recent dashboard unlock into an exact, signed re-mint mandate. The target machine re-verifies the account, machine, episode, input digest, and requested approve/retry/cancel action at point of use.
12
+
13
+ ## Decision-point inventory
14
+
15
+ - Pool episode aggregation — add — read-only, bounded peer fan-out with typed failures.
16
+ - Fronting repair authorization — add — recent operator-session proof plus exact account, machine, and episode.
17
+ - Target execution — add — local or asymmetrically verified delivered mandate must match account, target machine, episode, input digest, and action.
18
+
19
+ ## 1. Over-block
20
+
21
+ An unreachable peer, expired dashboard session, missing mesh-delivery seam, stale episode, or mismatched identity refuses the click. The operator can retry after reachability or dashboard unlock is restored; no account state is changed by the refusal.
22
+
23
+ ## 2. Under-block
24
+
25
+ Bearer-only callers cannot use the fronting route. The target does not trust the fronting request alone: it re-evaluates a local mandate or re-verifies the delivered asymmetric mandate and exact bounds. Residual risk is compromise of the trusted operator machine or its signing key, already inside the coordination-mandate threat boundary.
26
+
27
+ ## 3. Level-of-abstraction fit
28
+
29
+ The dashboard selects no identity and grants no authority. It carries server-issued episode/account/machine identifiers. Deterministic route gates bind recent human proof to the existing signed re-mint authority; provider decisions remain inside the existing bounded repair worker.
30
+
31
+ ## 4. Signal vs authority compliance
32
+
33
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
34
+
35
+ - [x] No brittle signal becomes authority.
36
+
37
+ Peer episode rows are status signals. Recent dashboard proof plus an exact signed mandate is the authority. The target's independent point-of-use verification remains the final gate.
38
+
39
+ ## 4b. Judgment-point check
40
+
41
+ No semantic judgment is added. Account id, machine id, episode id, signature validity, expiry, and mandate bounds are enumerable invariants.
42
+
43
+ ## 5. Interactions
44
+
45
+ - **Shadowing:** remote episodes are filtered out of machine-local account cards and rendered only on their exact matrix cells.
46
+ - **Double-fire:** the durable episode state rejects an action once it is no longer valid; mandates are exact, action-bound, single-use, and expire after 15 minutes.
47
+ - **Races:** peer disappearance yields a typed retryable failure. Target state is re-read before approval.
48
+ - **Feedback loops:** the route starts one existing bounded repair episode; it creates no new poller or retry loop.
49
+
50
+ ## 6. External surfaces
51
+
52
+ `GET /subscription-relogin?scope=pool` adds machine-tagged rows, typed truth failures, and separately typed feature-dark machines. `POST /subscription-relogin/repair-cell` is the dashboard entry point. `approve-with-mandate` is target-local service plumbing. The visible action is **Repair sign-in**, **Try repair again**, or **Cancel repair** according to durable state. A peer truth failure suppresses unsafe competing flows; an explicitly feature-dark target and a safely refused episode retain the manual sign-in fallback.
53
+
54
+ ## 6b. Operator-surface quality
55
+
56
+ The primary action is one plain-language button on the exact cell. It exposes no paths, hashes, mandates, tokens, or JSON and requires no host access. A stale dashboard unlock produces one direct instruction to unlock and tap again.
57
+
58
+ ## 7. Multi-machine posture
59
+
60
+ Status is aggregated, authority is delivered, but execution and credentials remain target-local. The fronting machine never receives provider secrets or browser state. The target accepts episode-bound mandates under the assisted-relogin rollout gate (independent of generic Account Follow-Me) and only when signed by its registered operator machine and pinned to itself.
61
+
62
+ ## 8. Rollback cost
63
+
64
+ Pure route/dashboard change. Revert and publish; no migration or data repair. Existing local assisted repair and the older manual sign-in path remain intact.
65
+
66
+ ## Conclusion
67
+
68
+ The change closes the phone-to-target seam without broadening ordinary API authority or moving credential state across machines. Ship requires focused three-tier evidence, independent review concurrence, full CI, deployment, and the two real canaries.
69
+
70
+ ## Second-pass review (required)
71
+
72
+ The reviewer found three material gaps on the first pass: manual fallback was incorrectly suppressed for explicitly feature-dark machines, failed/waiting episodes had no recovery actions, and cross-machine delivery depended on the generic Account Follow-Me rollout gate. The implementation now separates `failed` from `unavailable`, exposes signed approve/retry/cancel actions, restores safe manual fallback after refusal or feature-dark status, and accepts only fully episode-bound mandates under the assisted-relogin gate. A later pass found and closed cross-surface authority bleed: repair-only mandates are refused by generic Account Follow-Me enrollment. The post-rebase pass then found that repair mandates were issued for an hour and not consumed. The correction clamps them to 15 minutes, rejects expiry at delivery and use, revokes local mandates before action, and durably tombstones delivered mandates before action so replay or redelivery cannot revive them. Replay, redelivery, and expiry regressions are test-pinned. The independent post-fix re-review concurred: exact bounds remain ahead of consumption, the two-server replay test passes, and no release blocker remains.
73
+
74
+ ## Evidence pointers
75
+
76
+ - `tests/integration/subscription-relogin-routes.test.ts`
77
+ - `tests/integration/subscriptions-tab.test.ts`
78
+ - `tests/unit/subscriptions-render.test.ts`
79
+ - `tests/unit/account-follow-me-mandate-delivery.test.ts`
80
+ - `tests/e2e/subscription-relogin-lifecycle.test.ts`
81
+
82
+ ## Class-Closure Declaration (display-only mirror)
83
+
84
+ **Defect class:** `unbounded-self-action`
85
+ **Closure:** `n/a`
86
+ **Reason:** this adds a one-shot operator-triggered dispatch into the already-registered, already-bounded subscription re-login controller; it adds no self-triggered loop.
@@ -0,0 +1,192 @@
1
+ # Side-effects review: dashboard edit rejection
2
+
3
+ **Author:** Echo
4
+ **Independent reviewer:** Hooke; design, implementation and corrected boundaries concurred.
5
+
6
+ ## Scope and governing contract
7
+
8
+ Justin's report from Scout identifies a dashboard amplifier still present in
9
+ v1.3.1235. A rejected pinned-message edit fell through to a new send regardless
10
+ of whether Telegram had received the edit. This repair preserves the approved
11
+ [Telegram message-origin contract](../../docs/specs/telegram-message-origin.md):
12
+ a hold or uncertain outcome does not authorize a new operation.
13
+
14
+ The report's false-wake and daily-send counts were supplied by Justin, not
15
+ independently verified on b2lead-insights. Echo's own log contains repeated wake,
16
+ tunnel restart and edit-fallback entries; that confirms the path exists locally,
17
+ not that every wake is false or that this explains every capacity refusal.
18
+
19
+ ## Decision-point inventory
20
+
21
+ - TelegramAdapter.broadcastDashboardUrl: replace catch-all fresh sends and error
22
+ substring no-ops with narrow evidence from the platform response boundary.
23
+ - TelegramAdapter.apiCall: bind parsed Telegram rejection evidence to the original
24
+ error and the actual edit target; preserve typed holds through existing catches.
25
+ - TelegramOriginService.executePreparedBot: retain the same known-failed hold and
26
+ bind edit evidence only after recordOutcome reports recorded:true.
27
+ - TelegramEditRejection: private, one-use error-object evidence for matching bot
28
+ account, chat, message and method. No serialized error field grants authority.
29
+
30
+ ## 1. Over-block
31
+
32
+ Only HTTP400 with ok:false, error_code:400 and the exact Telegram missing-edit
33
+ description permits replacement. A future changed description, cannot-edit,
34
+ authorization rejection, malformed response or lost evidence remains an explicit
35
+ refresh failure, preserving the pinned ID. This may leave a stale dashboard link
36
+ until the underlying fault is resolved. It never invents a successful refresh.
37
+ Exact authoritative unchanged content remains a no-op. First-run sends remain.
38
+
39
+ ## 2. Under-block
40
+
41
+ Corrupt or unreadable saved-ID state is still treated as absent by the existing
42
+ loader. Existing save failures and simultaneous legitimate missing-message
43
+ refreshes are separate adjacent risks, not repaired here. If a genuinely missing
44
+ message's replacement is held or unknown, a later broadcast against the still-saved
45
+ old ID can receive another genuine missing-message rejection and prepare another
46
+ replacement. This repair fences held edits within a broadcast; it does not add
47
+ durable replacement custody across distinct broadcast calls. That boundary is
48
+ tracked for the subsequent delivery work in topic69507. The broader false-wake
49
+ classifier, unconditional tunnel recovery and opaque admission errors remain
50
+ follow-ups in topic69507. No generic class-convergence claim is made.
51
+ <!-- tracked: topic-69507 -->
52
+
53
+ ## 3. Level-of-abstraction fit
54
+
55
+ The replacement decision belongs inside broadcastDashboardUrl, before sendToTopic,
56
+ so it covers startup, wake and HTTP callers even when an outer caller catches the
57
+ failure. Managed Telegram4xx responses are consumed inside the origin service;
58
+ evidence must therefore be carried through its original typed hold rather than
59
+ reconstructed from adapter error text. Legacy library use classifies the actual
60
+ raw response at apiCall. These are the only production evidence producers.
61
+
62
+ ## 4. Signal versus authority
63
+
64
+ This is a constrained transport-outcome invariant, not a semantic message filter.
65
+ HTTP status alone and exception substrings cannot choose a new send. The narrowly
66
+ enumerated platform error, actual target and successful durable outcome write
67
+ provide the required evidence. Existing ownership, content and send-policy
68
+ authorities still decide every replacement. See
69
+ [signal versus authority](../../docs/signal-vs-authority.md).
70
+
71
+ ## 4b. Judgment points
72
+
73
+ No new static heuristic at a competing-signals decision point, LLM call, timer,
74
+ recovery budget or policy bypass. Wake classification is deliberately separate.
75
+
76
+ ## 5. Interactions
77
+
78
+ Held/unknown edits never reach replacement, unpin or pin calls. Their original
79
+ operation IDs and saved ID bytes remain intact. A successful missing-message
80
+ replacement saves its new ID and the next refresh edits it. Failed replacement
81
+ sends also preserve their original error identity. Managed outcome-write failure
82
+ cannot mint evidence, even when Telegram's raw response says the message is gone.
83
+ Known-failed edit operations retain the existing recovery rules; this repair does
84
+ not reset attempts, deadlines, content reservations or the fifteen-minute brake.
85
+ No additional retry loop is introduced. Existing raw429 retry behavior remains.
86
+
87
+ ## 6. External surfaces and migration
88
+
89
+ No new API, config or durable schema. The existing dashboard-refresh route returns
90
+ 502 when refresh fails. New-install awareness and idempotent PostUpdateMigrator
91
+ guidance explain original-operation custody and the remaining wake limitation.
92
+ The explicit shadow migration updates AGENTS.md and GEMINI.md even when the new
93
+ paragraph already exists in CLAUDE.md; custom framework text remains.
94
+ Normal package update and server activation install the runtime correction.
95
+
96
+ ## 6b. Operator surface
97
+
98
+ No new control or approval. A held update is a failure to refresh the pinned link;
99
+ it must not be reported as delivered or worked around by deleting the saved ID.
100
+
101
+ ## 7. Multi-machine posture
102
+
103
+ Evidence is process-local and target-bound. A serialized remote error cannot
104
+ authorize replacement. Standby and revoked lease refusals remain fenced; no
105
+ session credential is forwarded and no peer is granted a new send budget.
106
+ This repair precedes the pending standby-routing release to stop its relay from
107
+ carrying catch-all fallback dashboard posts.
108
+
109
+ ## 8. Rollback
110
+
111
+ Revert the repair and publish a patch; no queue clearing or data migration needed.
112
+ Rollback restores the reproduced dashboard amplification defect.
113
+
114
+ ## Evidence
115
+
116
+ Nine regression tests failed against the released code for the intended reasons.
117
+ The correction passed twenty-two unit cases, three actual HTTP route cases, seven
118
+ production-Boot lifecycle cases and three awareness migration cases. E2E fixture
119
+ repairs used a short Unix-socket path and the actual audit record/outer-service
120
+ error contract. They did not change production to accommodate the fixture.
121
+ Initial build and lint passed; the reviewed build passed. Independent review
122
+ required preserving original errors on null/undefined-token adapters, managed
123
+ unchanged-response coverage and explicit documentation of repeated replacement
124
+ custody. These corrections passed their focused tests. Expanded shadow tests
125
+ exposed missing standalone guidance on existing framework files; the explicit
126
+ migration tuple corrected it and all three migration cases passed. Final commit
127
+ checks, full test:all and CI remain required before release.
128
+
129
+ The first full run on 9ffb202636d7 found two release-completeness failures:
130
+ the new awareness marker was absent from the feature-addenda parity registry,
131
+ and the release fragment lacked the required sections. The parent deliberately
132
+ cancelled its own run after confirming these failures; all 5,579 frozen inputs
133
+ were unchanged. That run is incomplete, not passing. The correction adds the
134
+ marker to the existing real parity assertions and organizes the release note
135
+ under the required headings. It changes no production behavior and removes no
136
+ assertion or release requirement. A fresh full run is required on the correction.
137
+ The corrected completeness suite and dashboard unit/migration tests passed all
138
+ 179 cases across three files.
139
+ Independent correction review confirmed the added assertions preserve the gate;
140
+ its wording concern narrowed the user-facing claim to held or uncertain pinned
141
+ edits, preserving the documented cross-invocation replacement limitation.
142
+
143
+ Class closure: unbounded-self-action is n/a for this bounded change. It removes
144
+ an exception-driven extra send from one invocation and adds no autonomous retry
145
+ controller. It does not claim to close the broader wake loop or cross-invocation
146
+ replacement-custody class.
147
+
148
+ The full run on d9d9dfa92a65 completed with exit 1: 3 failed and 51,883 passed tests (3
149
+ failed/3,349 passed files); subsequent standalone integration and E2E stages did not
150
+ run. All 5,579 frozen inputs were unchanged. Two token-redaction tests depended on the
151
+ source spelling `throw new Error`; the runtime now assigns that error before attaching
152
+ private rejection evidence. Replacements exercise actual JSON and non-JSON rejection
153
+ paths, assert the sanitized request URL and absent fixture token, and independently
154
+ verify one wire request carries the correct token URL. This covers request-URL
155
+ redaction, not arbitrary response-body redaction.
156
+
157
+ The third failure's final stack identifies prepareBot at production-Boot test 104,
158
+ inside runWithSessionToken after its awaited observer refresh. The two recovery fixtures
159
+ previously checked authorization earlier, before issuing the token. They now also
160
+ observe the actual display authority immediately before their first preparation using
161
+ the existing bounded helper. No preparation, admission, review, or delivery is retried;
162
+ no production permission, timeout, or budget changes. The specific source of
163
+ configuration invalidation remains unproved, and the fixture does not claim atomic
164
+ readiness.
165
+
166
+ Independent Boot reviews concurred with this exact setup correction conditional on the
167
+ final preparation stack, now confirmed. Hooke concurred with both runtime-redaction
168
+ replacements and recommended always restoring global stubs/temp files even if
169
+ adapter.stop throws; that cleanup improvement is included. Focused validation and a
170
+ fresh complete full run remain required on the correction.
171
+
172
+ The corrected three-file run passed all 24 tests on the dashboard worktree, including
173
+ the real production-Boot restart cases. Runtime source is unchanged from its passing
174
+ build; full-suite validation and CI are still required.
175
+
176
+ The fresh full run on 1523f656a99c completed normally with exit 1: exactly two
177
+ failed and 51,886 passed tests (one failed/3,351 passed files). The only failing
178
+ file was guards-route.test.ts. Standalone integration/E2E stages did not run
179
+ after the aggregate failure. All 5,579 frozen source/test/config inputs were
180
+ verified unchanged after completion.
181
+
182
+ The receiver fixture used 1781300000000 (2026-06-12T21:33:20Z), which crossed the
183
+ durable store's real-clock 90-day retention threshold at 2026-09-10T21:33:20Z.
184
+ The preceding full run exercised that fixture before the threshold. Three
185
+ receiver-clock initializations now start at Date.now(), retaining their existing
186
+ relative advances and every persistence/age assertion. The sender timestamp
187
+ remains fixed, so receiver-versus-sender semantics are still tested. Production
188
+ retention policy and dashboard runtime behavior are unchanged.
189
+
190
+ Hooke independently concurred with this exact clock correction. All 20 tests
191
+ passed in both the isolated preparation and the dashboard candidate after the
192
+ patch was applied. The next full run must validate the resulting commit.