Repository navigation
crowdsim 1.39.0
The page could hand over one run drawn, and neither the trend nor the delta
(#90). history --html and compare a b --html
shipped in 1.38.0; gui/server/lib/app.js built exactly one drawn-page argv, ['report', runId, '--html']. So the GUI plotted the archive, knew which runs were comparable, and could hand over neither
of the two pages that say what the archive means.
That was the fourth recurrence of one shape: #53 was two flags the CLI had and the page did not, #78 was
six summary blocks, #79 was six flags. Every one of them was the page tracking the CLI by hand, and the
two that stopped recurring are the two that got a test.
Added
- The archive hands over the trend:
GET /api/history/trend, and a Trend over time (drawn) button
above the run list. The filtershistoryitself accepts (last,target,profile) are forwarded, so
the page and the table cannot become two answers to one question. - A comparison hands over the delta:
GET /api/compare/page?a=&b=, and a Delta, drawn button. When
comparerefuses the pair the endpoint answers 422 withcompare's own text rather than drawing two
different experiments on one pair of axes. - Both are spawned, not re-rendered — the CLI draws the page and the server sends the bytes, exactly
as the run report already worked. A renderer here would be a second opinion about what a run means, and
the first time the two disagreed the wrong one would be on screen while somebody decided something. - Both open in a new tab rather than downloading. The run report is a file because it goes into a
ticket; does the knee move is a question somebody asks on screen while deciding. - Neither is offered when there is nothing to draw, and the page says why rather than hiding a control
(gui/ui/src/lib/drawn.js): one run is not a trend — through a single point it is a straight line,
which is the knee's own refusal from one completed step — and a comparisoncomparerefused gets no
drawing. - A fourth drawn page cannot appear unnoticed.
gui/server/lib/drawn-pages.jsdeclares the set
exhaustively, with a reason for anything deliberately not offered, and
tests/gui/drawn-pages.test.jsasksbin/crowdsimwhich subcommands declare--html. A page in
neither table fails the suite; so does a declared route the server does not serve, and a declared page
the CLI no longer draws.
Changed
- The two argv builders live in
gui/server/lib/args.jswith the others, because the filters arrive from
a URL and end up in an argv:lastis an integer in range,targetandprofileare matched against a
charset and refused if they start with a dash — a value that starts with one becomes a flag rather than
an argument.latestandpreviousare refused for the delta: the page is showing the archive and
already knows which two runs it means, so a selector there could let the page and the file it hands over
name different runs. tests/cli/flags.batsattributes each flag inargs.jsto the subcommand whose builder emits it.
It used to assume they all belonged toload, with--limithand-excepted as discover's — a claim
about the code's shape that held whileargs.jsbuilt one argv and broke the moment it built five. It
now reads the subcommand each builder starts its array with, and the hand-coded exception is gone.
Container image
docker pull ghcr.io/hiway-media/crowdsim:1.39.0
Install and usage: docs/docker.md