instar 1.3.488 → 1.3.489
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/index.html
CHANGED
|
@@ -4493,7 +4493,13 @@
|
|
|
4493
4493
|
if (!r.ok) return;
|
|
4494
4494
|
const j = await r.json();
|
|
4495
4495
|
selfMachineNickname = (j.pool && j.pool.selfMachineNickname) || null;
|
|
4496
|
-
|
|
4496
|
+
// LIVE remote sessions only: a peer's plain /sessions returns its FULL
|
|
4497
|
+
// registry (completed/killed records included), while the local sidebar
|
|
4498
|
+
// is built from listRunningSessions(). Without this status filter,
|
|
4499
|
+
// long-dead peer sessions render as live "click to stream" tiles
|
|
4500
|
+
// (2026-06-11: five closed Mac Mini sessions reappeared on the laptop
|
|
4501
|
+
// dashboard hours after they were closed).
|
|
4502
|
+
remoteSessions = (j.sessions || []).filter(s => s.remote === true && (s.status === 'running' || s.status === 'starting'));
|
|
4497
4503
|
renderSessionList();
|
|
4498
4504
|
} catch { /* best-effort — peers may be offline; next tick retries */ }
|
|
4499
4505
|
};
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-06-12T05:13:07.681Z",
|
|
5
|
+
"instarVersion": "1.3.489",
|
|
6
6
|
"entryCount": 201,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
The dashboard's pool poll rendered EVERY record a peer's `GET /sessions` returned — including completed/killed registry records — as live "click to stream" tiles, while local tiles come from `listRunningSessions()` (2026-06-11: five closed Mac Mini sessions reappeared on the laptop dashboard hours after closure). The remote merge in `dashboard/index.html` now filters to `running`/`starting`, matching the local sidebar's definition of live. API unchanged (the pool response remains a faithful full-registry view). Complements the registry-side ghost-record supersession fix — together: records stop claiming to be running, and the dashboard only draws records that claim to be running.
|
|
9
|
+
|
|
10
|
+
## What to Tell Your User
|
|
11
|
+
|
|
12
|
+
- "The dashboard now only shows sessions that are actually running on each machine — closed sessions on another machine no longer reappear as clickable tiles."
|
|
13
|
+
|
|
14
|
+
## Summary of New Capabilities
|
|
15
|
+
|
|
16
|
+
| Capability | How to Use |
|
|
17
|
+
|-----------|-----------|
|
|
18
|
+
| Truthful remote session tiles | Automatic |
|
|
19
|
+
|
|
20
|
+
## Evidence
|
|
21
|
+
|
|
22
|
+
- New source-assert test `tests/unit/dashboard-poolTileStatusFilter.test.ts` (established at-rest inspection pattern), proven failing on the unfixed HTML first (2/2 fail → 2/2 pass).
|
|
23
|
+
- Side-effects artifact: `upgrades/side-effects/pool-tile-status-filter.md`.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Side-Effects Review — Pool dashboard tiles: filter remote sessions to live statuses
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `pool-tile-status-filter`
|
|
4
|
+
**Date:** `2026-06-11`
|
|
5
|
+
**Author:** `echo (instar-dev agent)`
|
|
6
|
+
**Second-pass reviewer:** `not required` (one-line client-side display filter; no lifecycle, no gates, no messaging surface)
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
The dashboard's pool poll fed `renderSessionList` every record a peer's plain `GET /sessions` returned — and that endpoint returns the peer's FULL registry, completed/killed records included — while local tiles are built from `listRunningSessions()` (running only). Result, observed live 2026-06-11 (topic 13481): five Mac Mini sessions closed hours earlier reappeared on the laptop dashboard as live "click to stream" tiles. One-line fix in `dashboard/index.html`: the remote merge now filters to `status === 'running' || status === 'starting'`, matching the local sidebar's definition of "live". New source-assert test (`tests/unit/dashboard-poolTileStatusFilter.test.ts`, following the established `dashboard-sessionMachineBadge.test.ts` at-rest inspection pattern) proven failing on the unfixed HTML first.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
No decision points. A client-side display filter; the API response is unchanged and remains faithful (full registry, accurate statuses).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
A peer session in a transient status other than running/starting would be hidden — the only other statuses are terminal (`completed`/`failed`/`killed`), which is exactly what should be hidden. No issue identified.
|
|
20
|
+
|
|
21
|
+
## 2. Under-block
|
|
22
|
+
A peer whose registry wrongly marks a dead session `running` still renders a tile — that is the upstream ghost-record problem, fixed separately at the registry funnel (PR #1067); the two fixes are complementary layers, not overlap.
|
|
23
|
+
|
|
24
|
+
## 3. Level-of-abstraction fit
|
|
25
|
+
Correct layer: the SERVER's pool response stays a faithful full-registry view (other consumers may legitimately want terminal records, e.g. forensics); "which records are live tiles" is a display decision, made where display happens, identically to how local tiles already decide it.
|
|
26
|
+
|
|
27
|
+
## 4. Signal vs authority compliance
|
|
28
|
+
- [x] No — this change has no block/allow surface. (Display filtering only.)
|
|
29
|
+
|
|
30
|
+
## 5. Interactions
|
|
31
|
+
The remote-tile click path, machine badges, row namespacing, and stream subscriptions all operate on the filtered set — strictly fewer dead tiles to mis-click. The 15s pool poll cadence is unchanged. No shadowing/double-fire/races (pure pure-function filter on a fetch result).
|
|
32
|
+
|
|
33
|
+
## 6. External surfaces
|
|
34
|
+
`dashboard/index.html` ships in the npm package and replaces wholesale on update; no API change, no config, no migration. Mixed-version: an updated dashboard against any peer version works (the filter only reads fields every version already returns).
|
|
35
|
+
|
|
36
|
+
## 7. Rollback cost
|
|
37
|
+
Revert the one line, ship a patch. No state, no migration. Symptom during rollback window: dead peer tiles reappear (cosmetic).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Conclusion
|
|
42
|
+
|
|
43
|
+
Minimal display-truthfulness fix; the registry-side ghost cleanup (PR #1067) and this filter together close both layers of the "dead sessions on the dashboard" symptom: records that should not say running, and tiles that should not render non-running records. Clear to ship.
|
|
44
|
+
|
|
45
|
+
**Phase 1 principle check (recorded):** no decision point — display filter.
|
|
46
|
+
**Phase 2 plan (recorded):** fresh worktree `.worktrees/fix-pool-tile-status-filter` off `JKHeadley/main` @ `e6c21fa8e` (v1.3.487), agent identity set, canonical remote verified. Rollback: revert (above).
|