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.
- package/dashboard/subscriptions.js +87 -8
- package/dist/coordination/AccountFollowMeMandateDelivery.d.ts +6 -0
- package/dist/coordination/AccountFollowMeMandateDelivery.d.ts.map +1 -1
- package/dist/coordination/AccountFollowMeMandateDelivery.js +16 -2
- package/dist/coordination/AccountFollowMeMandateDelivery.js.map +1 -1
- package/dist/coordination/DeliveredMandateStore.d.ts +4 -0
- package/dist/coordination/DeliveredMandateStore.d.ts.map +1 -1
- package/dist/coordination/DeliveredMandateStore.js +16 -2
- package/dist/coordination/DeliveredMandateStore.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +19 -1
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +25 -7
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/TelegramEditRejection.d.ts +17 -0
- package/dist/messaging/TelegramEditRejection.d.ts.map +1 -0
- package/dist/messaging/TelegramEditRejection.js +44 -0
- package/dist/messaging/TelegramEditRejection.js.map +1 -0
- package/dist/messaging/telegram-origin/OriginAwareness.d.ts +1 -0
- package/dist/messaging/telegram-origin/OriginAwareness.d.ts.map +1 -1
- package/dist/messaging/telegram-origin/OriginAwareness.js +3 -0
- package/dist/messaging/telegram-origin/OriginAwareness.js.map +1 -1
- package/dist/messaging/telegram-origin/TelegramOriginService.d.ts.map +1 -1
- package/dist/messaging/telegram-origin/TelegramOriginService.js +8 -2
- package/dist/messaging/telegram-origin/TelegramOriginService.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +3 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +12 -1
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +2 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +5 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +240 -7
- package/dist/server/routes.js.map +1 -1
- package/package.json +2 -1
- package/src/data/builtin-manifest.json +64 -64
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +3 -1
- package/upgrades/1.3.1236.md +35 -0
- package/upgrades/1.3.1237.md +27 -0
- package/upgrades/relogin-pool-one-click.eli16.md +9 -0
- package/upgrades/side-effects/relogin-pool-one-click.md +86 -0
- 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.
|