Skip to content

Release v1.9.9: explain the process table's wait instead of rendering it blank - #71

Merged
binlecode merged 2 commits into
mainfrom
fix-process-table-loading-state
Aug 13, 2026
Merged

binlecode merged 2 commits into
mainfrom
fix-process-table-loading-state

Conversation

@binlecode

Copy link
Copy Markdown
Owner

Behavior change

Toggling the process table on with p cannot produce rows for up to two intervals (~4s at the default --interval 2): the sample already in flight was started with the process walk off, so the first snapshot back carries no processes. The bordered panel rendered empty for that whole window, which reads as a broken or hung table.

The table now renders a placeholder row that says why it is empty:

State Row
waiting for the first process walk after p collecting process samples…
polling paused (no sample is coming at all) paused — press space to resume
collection running, filter matched nothing no processes match filter (previously also blank)

MetricsUpdated gained a processes_included flag: snapshot.processes == [] means both "collection was off this tick" and "the filter matched nothing", and the flag is what separates the two.

Release

Patch bump 1.9.8 → 1.9.9; [Unreleased] moved into a dated [1.9.9] section. User-visible fix, so it warrants a release per CLAUDE.md → When to cut a release.

Validation

Tested on macOS (Darwin 25.5.0) + Apple M4 Max (4E+12P+40GPU).

.venv/bin/python -m ruff check --fix . && .venv/bin/python -m ruff format .
.venv/bin/python -m actop.actop --help
.venv/bin/pytest -q          # 151 passed

Live run under tmux (.venv/bin/python -m actop.actop --interval 2), all four states confirmed by hand:

 PID    Command                      *CPU%  GPU%  PWR  MEM (MiB)  Threads
        collecting process samples…

…replaced ~2 intervals later by real rows:

 PID    Command          *CPU%  GPU%  PWR    MEM (MiB)  Threads
 81405  Zed              16.9   92.1  0.30W  3918.3     4
 66572  claude           10.7   0.0   0.09W  592.4      3

Test

One functional test added, test_process_table_says_it_is_collecting_until_the_first_walk_lands: drives the real poll worker and the real p key press (pilot.press), asserts the placeholder row is there on that frame and that real PID rows replace it once a walk lands. No mocks, no private attrs, no shape-only assertions.

🤖 Generated with Claude Code

binlecode and others added 2 commits August 13, 2026 10:04
Toggling the table on with `p` cannot produce rows for up to two intervals
(~4s at the default): the sample already in flight was started with the
process walk off, so the first snapshot back carries none. The bordered
panel rendered empty for that whole window and read as a broken table.

The table now renders a placeholder row saying why it is empty:
`collecting process samples…` until the first walk lands,
`paused — press space to resume` when polling is paused (no sample is
coming at all), and `no processes match filter` once collection is
running but nothing matched — previously also a blank panel.

MetricsUpdated carries a `processes_included` flag because
`snapshot.processes == []` means both "collection was off" and "the
filter matched nothing"; the flag is what separates the two.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@binlecode
binlecode merged commit 1b23167 into main Aug 13, 2026
5 checks passed
@binlecode
binlecode deleted the fix-process-table-loading-state branch August 13, 2026 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant