instar 1.3.1236 → 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 +12 -0
- 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/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +1 -0
- 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 +1 -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
|
@@ -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.
|