Skip to content

Full-width rail targets; drop the idle pill and the edited marker - #177

Merged
gbradham merged 1 commit into
mainfrom
fix/rail-hit-targets-and-strip-noise
Sep 10, 2026
Merged

gbradham merged 1 commit into
mainfrom
fix/rail-hit-targets-and-strip-noise

Conversation

@gbradham

@gbradham gbradham commented Sep 9, 2026

Copy link
Copy Markdown
Member

Three fixes from using the app, all reported together.

Rail entries are the full width of the rail

A QToolButton sizes itself to its label, so every entry on the Experiment
rail was a different width — Metadata 111px, Mice 85px, Zones 92px — and most
of the rail looked clickable while being inert. Reported as "they are
inconsistent and I find myself missing them"
, which is exactly what a target
that stops with the word produces.

— edited is gone from beside the experiment name

A strip that appends it the moment you type in the name is telling you what you
just did.

It was also the shell's only unsaved-work indicator — the tests said so in
a comment — so removing the text without replacing the signal would have left
none at all. setWindowModified takes it over: the dot in the close button on
macOS, an asterisk elsewhere, and the platform's own convention rather than an
invention of ours. Set on the window rather than the strip, so it also works
in runner mode, where there is no strip to carry it.

The run-state pill is hidden while idle

Idle is the state GLIDER is in almost all of the time, and an indicator that is
always on screen stops being read — which is the one failure this pill cannot
afford, since its whole job is to be noticed when a run starts or a board drops
out of one at 3am. Everything that is not idle appears exactly as before.

The pill and the dirty label are kept as widgets rather than deleted: both are
still driven by callers carrying real information, and the pill has to come
back the instant the state stops being idle.

Notes for review

  • Tests were repointed, not relaxed. The claims they made are still true,
    they just live somewhere else — isWindowModified() instead of
    dirty_label().isVisible(). The toggle-placement test additionally had to
    start ignoring hidden widgets: a hidden one has no position, so its collapsed
    span would have failed that test for a reason unrelated to where the toggles
    sit.
  • Docs updated with the code. The strip's contents table, its "what it
    carries" list, and the pill's own section all described what was just
    removed.
  • If you'd rather the pill were gone outright, say so — hiding it only while
    idle was my reading of "the Idle can go", chosen because the strip is
    documented as the thing that must stay visible during an unattended run.

Testing

QT_QPA_PLATFORM=offscreen uv run --no-sync pytest -q -m "not slow" —
5124 passed, 3 skipped. ruff clean. Checked on screen: rail targets uniform
and full width, no pill, no — edited.

…tself

**The rail entries were as wide as their labels.** A QToolButton sizes itself
to its text, so each row was a different width -- Metadata 111px, Mice 85px --
and most of the rail looked clickable while being inert. Reported as missing
them, which is exactly what a target that stops with the word produces. They
span the rail now.

**"- edited" is gone from beside the experiment name.** A strip that appends it
the moment you type in the name is telling you what you just did. But it was
also the shell's *only* unsaved-work indicator -- the tests said so in a comment
-- so removing the text without replacing the signal would have left none.
setWindowModified takes it over: the dot in the close button on macOS, an
asterisk elsewhere, and the platform convention rather than an invention of
ours. It is set on the window, not the strip, so it also works in runner mode,
where there is no strip to carry it.

**The run-state pill is hidden while idle.** Idle is the state GLIDER is in
almost all of the time, and an indicator that is always on screen stops being
read -- which is the one failure this pill cannot afford, since its whole job is
to be noticed when a run starts or a board drops out of one at 3am. Everything
that is not idle still appears, unchanged.

The dirty label and the pill are kept as widgets rather than deleted: both are
still driven by callers that carry real information, and the pill needs to come
back the instant the state stops being idle.

Tests repointed rather than relaxed -- the claims they were making are still
true, they just live somewhere else now. The toggle-placement test additionally
had to start ignoring hidden widgets: a hidden one has no position, and its
collapsed span would have failed that test for a reason unrelated to where the
toggles are.

Docs updated with them: the strip's contents table, the "what it carries" list
and the pill's own section all described what was just removed.
@gbradham
gbradham merged commit 6a35afb into main Sep 10, 2026
4 checks passed
@gbradham
gbradham deleted the fix/rail-hit-targets-and-strip-noise branch September 10, 2026 15:25
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