Repository navigation
crowdsim 1.38.0
Milestone v1.17.0, closed. The two commands that read the archive rather than one run had no drawn
form, so the two claims this tool is most confident about could not be attached to anything.
Added
-
crowdsim history --html(#87): the knee over
time. Does the knee move is the only question this subcommand exists to answer, and it answered it as
a table — the GUI plotted it,report --htmldraws exactly one run, and there was nothing to hand over.
The trend is the only claim here that survives its own caveat about absolutes being optimistic, and it
was the one thing that could not go in a ticket.One line per experiment. Runs at a different profile, target, shape or fan-out are separated rather
than averaged, because they are not points on one line; the fan-out rule iscomparableFanOutfrom
k6/lib/delivery.jsand not a second copy. A discard never joins a line and is listed under Left out,
and why, with its run id. A run whose knee was refused is a gap, not a zero — a knee of 0 req/s
would be a claim about the system. And one run is not a trend: the page says so instead of drawing a
line through a single point, which is the same refusal that stops a knee being read off one step.The records go through the same
--jsonview the table is built from, so the page and the terminal
cannot disagree about what a run was. -
crowdsim compare a b --html(#88): the delta,
drawn as a delta — the bar is the change, centred on zero, left better and right worse. Two absolute
bars would leave the reader subtracting by eye, and that subtraction is the one number this tool is
confident about: the absolutes come from a synthetic pool of cold URLs and travel badly.It is drawn from what
compare --jsonprints, which is what makes it allowable at all.report --html
declines to draw two runs and is right for the reason it gives — two runs on one pair of axes without
compare's refusals is a picture of two different experiments — and this page has those refusals
because it has no second opinion to have: a refusal stops the drawing, and adding one tocompare
cannot leave the picture behind. That refusal message now points here instead of implying no drawn
comparison exists. -
Both pages reuse the run report's shell, stylesheet and geometry (
page(),W/H/PAD, now
exported), so a second page cannot drift from the first on what self-contained means. And
tests/image/smoke.shasserts both load inside the image: they import across directories, which is the
shape that broke 1.20.0.
Fixed
-
No image published for 1.36.0 or 1.37.0: the UI build stage lacked the one file the UI imports from
outside itself.gui/ui/src/lib/summary-blocks.jsimportsoutcomeBandsfromk6/lib/failure.js,
so the page and the drawn report share one band arithmetic rather than two that can disagree — the
right call, and it costs a line in the Dockerfile that was not there. Theuistage copied only
gui/ui/, sovite buildinside the image failed with:Could not resolve "../../../../k6/lib/failure.js" from "src/lib/summary-blocks.js"A checkout has the whole repository, so
make lint,make testand the UI tests all passed. The only
thing that could catch it was building the image — and the image build is not part ofmake test, so
the image workflow went red on a release, twice, while everything local was green. -
A guard inside
make test:tests/gui/ui-build-inputs.test.jsreads the UI's imports that resolve
outsidegui/ui/and the paths the Dockerfile'suistage copies, and asserts they agree. It cannot
prove the image builds —make image-smokedoes that, and it is the gate this change skipped — but it
fails in a second on the mistake that actually happened. A second assertion keeps the list of escaping
imports explicit, so reaching out of the UI stays a deliberate decision.The same class of mistake on the server side is already covered:
gui/serverimports
lib/validate.mjs, the runtime stage copieslib/, and the smoke test asserts it loads. The
difference is that the UI is bundled at build time and the server runs from source at runtime, so
they need their imports in two different stages.
Container image
docker pull ghcr.io/hiway-media/crowdsim:1.38.0
Install and usage: docs/docker.md