Skip to content

The viewer tells its treatment windows apart, and hands a visitor a recording - #85

Merged
syncytium2 merged 2 commits into
mainfrom
viewer-simulates-and-colors
Aug 17, 2026
Merged

The viewer tells its treatment windows apart, and hands a visitor a recording#85
syncytium2 merged 2 commits into
mainfrom
viewer-simulates-and-colors

Conversation

@syncytium2

Copy link
Copy Markdown
Owner

Three things Tony asked for after looking at the import page, plus one finding that fell out of building them.

Treatment regions blended together

Every window drew in the same grey wash, so baseline abutting drug abutting washout was one block with three names floating over it. Each label now takes a hue from a fixed categorical palette, assigned to the label rather than the position — so TTX is the same colour in every recording of the folder and comparing two of them is a comparison. The slot order is the one validated for colour-vision deficiency (adjacent pairs clear ΔE 8 under protanopia and deuteranopia in both light and dark); a ninth distinct label gets a neutral rather than a ninth hue that would collide with one of the eight.

No text is ever painted in the window colour. The wash stays pale enough that a mark over it is still a mark, a saturated rail along the top of the band carries identity, and the name sits in ink beside a colour chip — on the raster and in the legend.

Simulated data, for a visitor with no folder

The page will now invent one: recordings emitted as the CSV text the import contract describes and handed to the same loader, which is not told where they came from. An explorer drives the real reading path — same parser, same folder check, same raster — and the NA row for an ROI that fired nothing is exercised rather than described.

It opens at the measured settings, and that is the load-bearing part. Rate, ROI count, participation and jitter come off untreated slices: about six of thirty-three ROIs per event with a third of a second of spread. Shipping the old guesses as the public default would have published the arrangement that scored every detector at F1 0.9–1.0 and cost two weeks; they are on the switches instead, beside the flat background, because the difference is the thing worth looking at.

Three refusals, said on the page: it does not match Python's numbers (same model, different generator — a seed reproduces in this browser), it does not simulate a treatment (the windows are labels over identical statistics), and none of it is evidence — which the page says on the picture, not only beside the controls.

Accordion sidebar

Three sections — a folder you have, a folder that does not exist, and the recordings either produced — one open at a time, because the list wants the height and the controls want attention while they are being set. The folder check's verdict rides on the Recordings header, since that section can be shut and a check nobody sees is a check nobody ran.

One bug, one finding

all: unset on the list rows took box-sizing with it, so width: 100% went content-box and every row ran its event count past the panel edge, where the sidebar clipped it to a bare number.

And: the fitted background's quiet tail does not survive the events planted on top of it — 28.8% of ROIs with no event becomes 0.5% once the fifteen coordinated events go in, because participants are drawn uniformly. A third face of the mechanism PR #50 documents twice, and one neither section states, since it needs nothing switched on. Written up in docs/todo/, with tools/quiet_tail_vs_events.py to re-take the table rather than quote it. Two implementations agree.

Checks

pytest green (481 passed, 1 skipped), sapper clear, tools/build_site.py builds — including its refusal to publish a viewer that can reach the network, which tests/test_site_viewer.py also proves.

defazio2 and others added 2 commits August 17, 2026 18:55
Three things about the import page, from Tony looking at it.

**The windows were one colour.** Baseline abutting drug abutting washout drew as
one grey block with three names floating over it: you could see that periods
existed and not which was which. Each label now takes a hue from a fixed
categorical palette — assigned to the LABEL and not the position, so `TTX` is the
same colour in every recording of the folder and comparing two of them is a
comparison. The order is the one validated for colour-vision deficiency, adjacent
pairs clearing ΔE 8 under protanopia and deuteranopia in both modes, and a ninth
distinct label gets a neutral rather than a ninth hue that would collide. No text
is ever painted in it: the wash stays pale enough that a mark over it is still a
mark, a saturated rail along the top of the band carries identity, and the name
sits in ink beside a colour chip.

**Most people who open this page have no folder to point it at**, and a viewer
with nothing in it is a screenshot of a promise. So the page will write one:
invented recordings, emitted as the CSV text the import contract describes and
handed to the same loader, which is not told where they came from. What an
explorer drives is the real reading path — same parser, same folder check, same
raster — and the NA row for an ROI that fired nothing is exercised rather than
described.

The settings it opens at are the measured ones, and that is the load-bearing
part. Rate, ROI count, participation and jitter come off untreated slices: about
six of thirty-three ROIs per event with a third of a second of spread, not half
the field firing together. Shipping the old guesses as the public default would
have published the arrangement that scored every detector at F1 0.9-1.0 and cost
two weeks. They are on the switches instead, next to the flat background, because
the difference is the thing worth looking at. Three things it refuses to do:
match Python's numbers (same model, different generator — a seed reproduces in
this browser), simulate a treatment (the windows are labels over identical
statistics; simulating the effect spends the one the experiment exists to
measure), and let any of it read as evidence — which the page says on the
picture, not only beside the controls.

**The sidebar is three accordion sections** — a folder you have, a folder that
does not exist, and the recordings either produced — one open at a time, because
the list wants the height and the controls want attention while they are being
set. The folder check's verdict rides on the Recordings header, since that
section can be shut and a check nobody sees is a check nobody ran.

One bug found on the way: `all: unset` on the list rows took `box-sizing` with
it, so `width: 100%` went content-box and every row ran its event count past the
panel edge, where the sidebar clipped it to a bare number.

The page still reaches nothing, and `tests/test_site_viewer.py` still proves it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`bg_rate_shape` was fitted to reproduce one fact: 35% of ROIs record no event at
all in a real baseline window. It does — 28.8% at bench structure. Plant the
fifteen coordinated events on top at the measured participation and it falls to
0.5%, because participants are drawn uniformly and an ROI escapes all fifteen
draws about 4% of the time.

So the two features fitted off real recordings cannot both be true of the same
simulated one. A recording matching the real silent fraction has almost no
coordination in it; a recording with realistic coordination has a background
nothing like a real field's.

This is a third face of the mechanism PR #50 documents twice, and neither section
states it: §1's version needs the promiscuity probe switched on and is explicitly
about a test construct, §2's is about the uniform draw as an unchosen assertion.
This one needs nothing switched on and is about the data every bench run would
produce the day the fitted background is adopted — which sharpens §2's ask rather
than answering it, since whether busy cells coordinate more is the lab's question
and not this repo's.

`tools/quiet_tail_vs_events.py` prints the table, so it can be re-taken when the
generator moves instead of quoted from a note. Two implementations agree: the
browser port that ships with the viewer gives 28.2% and 1.1%.

Found by building the viewer's simulator, which needed defaults a stranger could
trust and so had to be pointed at the measured values.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@syncytium2
syncytium2 merged commit 2810ea9 into main Aug 17, 2026
3 checks passed
@syncytium2
syncytium2 deleted the viewer-simulates-and-colors branch August 20, 2026 16:08
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.

2 participants