The fixture answered /decoders with an empty list, which hid most of the application from the only test that runs it in a browser. The decoder sub-tabs, their panels, the decode toggles and the bookmark decoder checkboxes are all built from that registry, so the run exercised three of thirteen sub-tabs and none of the decoder UI.
I only found this by intercepting the route from a throwaway probe — nothing in the suite could see it.
Effect
before
after
Digital modes sub-tabs rendered
3
13
Bookmark decoder checkboxes built
0
11
Those checkboxes matter: their construction was changed in the bookmark host-contract fix (bmOptionalEl, because the strict lookup threw on registry-built elements) and no test reached them. They are now built on every browser run.
Eleven decoders, covering the modes the real registry spans. The run still reports no runtime errors, so the decoder UI constructs cleanly against it.
What it exposes
At 1100px the decoder sub-tab bar hides 195px of itself — no scrollbar, no fade, roughly two decoders unreachable. The same silent truncation the top strip had, one level down:
No assertion for that here, deliberately — it would fail until the truncation is fixed. This PR is the fixture change alone, so the fix lands separately against a test that can actually see it.
Correction
I earlier described Digital modes as a two-level nav anomaly. That was wrong: three pages use .sub-tab-bar — Digital modes (13), Settings (4), About (2). It is a consistent pattern, and the problem is the count, not the structure.
## The blind spot
The fixture answered `/decoders` with an empty list, which hid most of the application from the only test that runs it in a browser. The decoder sub-tabs, their panels, the decode toggles and the bookmark decoder checkboxes are **all built from that registry**, so the run exercised three of thirteen sub-tabs and none of the decoder UI.
I only found this by intercepting the route from a throwaway probe — nothing in the suite could see it.
## Effect
| | before | after |
| --- | --- | --- |
| Digital modes sub-tabs rendered | 3 | **13** |
| Bookmark decoder checkboxes built | 0 | **11** |
Those checkboxes matter: their construction was changed in the bookmark host-contract fix (`bmOptionalEl`, because the strict lookup threw on registry-built elements) and **no test reached them**. They are now built on every browser run.
Eleven decoders, covering the modes the real registry spans. The run still reports no runtime errors, so the decoder UI constructs cleanly against it.
## What it exposes
At 1100px the decoder sub-tab bar hides **195px of itself** — no scrollbar, no fade, roughly two decoders unreachable. The same silent truncation the top strip had, one level down:
```
1440px 13 tabs, nothing hidden
1100px 13 tabs, 195px hidden
900px 13 tabs, 80px hidden
```
**No assertion for that here**, deliberately — it would fail until the truncation is fixed. This PR is the fixture change alone, so the fix lands separately against a test that can actually see it.
## Correction
I earlier described Digital modes as a two-level nav anomaly. That was wrong: three pages use `.sub-tab-bar` — Digital modes (13), Settings (4), About (2). It is a consistent pattern, and the problem is the count, not the structure.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01GdyUjuXejCEfiub675z6cz
The fixture answered /decoders with an empty list, which hid most of the
application from the only test that runs it in a browser. The decoder
sub-tabs, their panels, the decode toggles and the bookmark decoder
checkboxes are all built from that registry, so the run exercised three
of thirteen sub-tabs and none of the decoder UI. Finding this needed
route interception, because nothing in the suite could see it.
Serve eleven decoders covering the modes the real registry spans. The
run now builds 13 sub-tabs and 11 bookmark decoder checkboxes — the same
checkboxes whose construction a recent fix changed without any test
reaching them — and still reports no runtime errors.
It also makes an existing fault observable: at 1100px the decoder
sub-tab bar hides 195px of itself with no scrollbar or fade, the same
silent truncation the top strip had. No assertion for it here, since
that would fail until the truncation is fixed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GdyUjuXejCEfiub675z6cz
Signed-off-by: Stan Grams <sjg@haxx.space>
sjg
merged commit b252717f6b into main2026-08-03 17:58:14 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The blind spot
The fixture answered
/decoderswith an empty list, which hid most of the application from the only test that runs it in a browser. The decoder sub-tabs, their panels, the decode toggles and the bookmark decoder checkboxes are all built from that registry, so the run exercised three of thirteen sub-tabs and none of the decoder UI.I only found this by intercepting the route from a throwaway probe — nothing in the suite could see it.
Effect
Those checkboxes matter: their construction was changed in the bookmark host-contract fix (
bmOptionalEl, because the strict lookup threw on registry-built elements) and no test reached them. They are now built on every browser run.Eleven decoders, covering the modes the real registry spans. The run still reports no runtime errors, so the decoder UI constructs cleanly against it.
What it exposes
At 1100px the decoder sub-tab bar hides 195px of itself — no scrollbar, no fade, roughly two decoders unreachable. The same silent truncation the top strip had, one level down:
No assertion for that here, deliberately — it would fail until the truncation is fixed. This PR is the fixture change alone, so the fix lands separately against a test that can actually see it.
Correction
I earlier described Digital modes as a two-level nav anomaly. That was wrong: three pages use
.sub-tab-bar— Digital modes (13), Settings (4), About (2). It is a consistent pattern, and the problem is the count, not the structure.🤖 Generated with Claude Code
https://claude.ai/code/session_01GdyUjuXejCEfiub675z6cz