panel-boards.png |
The Boards panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-boundary.png |
The Boundary panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-budget.png |
The Budget panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-companion-bench.png |
The Companion bench panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-compare.png |
The Compare panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-configuration.png |
The Configuration panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-console.png |
The Console panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-energy.png |
The Energy panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-events.png |
The Events panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-experiment-log.png |
The Experiment log panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-firmware.png |
The Firmware panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-fleet.png |
The Fleet panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-import.png |
The Import panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-inspector.png |
The Inspector panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-licences.png |
The Licences panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-link.png |
The Link panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-live-feed.png |
The Live feed panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-logs.png |
The Logs panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-map.png |
The Map panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-matrix.png |
The Matrix panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-nodes.png |
The Nodes panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-nodes-running.png |
The Nodes running panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-packet.png |
The Packet panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-packet-timeline.png |
The Packet timeline panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-planning.png |
The Planning panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-provisioning.png |
The Provisioning panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-resources.png |
The Resources panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-results.png |
The Results panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-runs.png |
The Runs panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-schedule.png |
The Schedule panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-scoreboard.png |
The Scoreboard panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-setup.png |
The Setup panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-sweep.png |
The Sweep panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-timelines.png |
The Timelines panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-validate.png |
The Validate panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
panel-waterfall.png |
The Waterfall panel, filling the window |
the panel draws its own content, with no empty region and no placeholder text |
popout-boards.png |
The Boards panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-boundary.png |
The Boundary panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-budget.png |
The Budget panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-companion-bench.png |
The Companion bench panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-compare.png |
The Compare panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-configuration.png |
The Configuration panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-console.png |
The Console panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-energy.png |
The Energy panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-events.png |
The Events panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-experiment-log.png |
The Experiment log panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-firmware.png |
The Firmware panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-fleet.png |
The Fleet panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-import.png |
The Import panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-inspector.png |
The Inspector panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-licences.png |
The Licences panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-link.png |
The Link panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-live-feed.png |
The Live feed panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-logs.png |
The Logs panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-map.png |
The Map panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-matrix.png |
The Matrix panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-nodes.png |
The Nodes panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-nodes-running.png |
The Nodes running panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-packet.png |
The Packet panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-packet-timeline.png |
The Packet timeline panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-planning.png |
The Planning panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-provisioning.png |
The Provisioning panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-resources.png |
The Resources panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-results.png |
The Results panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-runs.png |
The Runs panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-schedule.png |
The Schedule panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-scoreboard.png |
The Scoreboard panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-setup.png |
The Setup panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-sweep.png |
The Sweep panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-timelines.png |
The Timelines panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-validate.png |
The Validate panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
popout-waterfall.png |
The Waterfall panel popped out |
a window of its own with a title bar, draggable, and the same content as the docked panel |
A human pass over everything, before the first release. Each scenario has steps and an expected result; tick what holds, and leave a comment on this issue for anything that does not, with the scenario number.
Docs for reference while testing: https://meshbench.github.io/docs/
1. Install and first launch
chmod +x, run it.MESHBENCH_CARTO_KEYset in the environment (yours is set in fish): expect the CARTO dark basemap by default, no "API KEY REQUIRED" watermark anywhere while panning and zooming.2. Your first simulation (the docs path)
Follow https://meshbench.github.io/docs/first-simulation.html literally, as if new.
fixture-fife-strict.advert.3. Debugging a missed packet
4. Waveform mode
5. SDR observer
6. Importing a real network
Follow https://meshbench.github.io/docs/importing.html with the ScotMesh CoreScope URL, GUI tab only.
7. Firmware development loop
meshbench dev -from <your MeshCore checkout>; expect the build to land in the firmware library named after the branch and assigned to repeaters.delivered,redundant,rx_spread,at_risk_2db; the control arms identical; the run log readable while it goes.8. A companion app against the mesh
meshcore-clior your own client; expect real protocol bytes,infosanswered.9. One emulated board
Generic_E22_sx1262published image to a single node (one board at a time; they are heavy).get name.10. Scripting and the clients
meshbench test -fixture fixtures/fixture-fife-strict.json -junit out.xml: expect assertions checked, JUnit written, exit code 0.11. Determinism spot-check
12. Docs site and READMEs, as a reader
Part two: every window, one picture each
The twelve scenarios above are the journeys. This part is the inventory: every panel, window, tab, section and menu the application has, so the pass can say it covered all of them rather than the ones somebody thought of.
Run the sweep, which drives the binary once per step and writes one picture per step:
internal/ui/workbench/shotsteps_test.gochecks the manifest against the application's own panel table, so a panel added without a step is a red build rather than a picture nobody took. Tick a bucket when every picture in it holds; comment with the step name for any that does not.Views (6)
Each view is its own arrangement. The switcher should mark the current one.
view-plan.pngview-run.pngview-debug.pngview-validate.pngview-bench.pngview-app.pngPanels (72)
Each panel twice: filling the window, and popped out into a window of its own. A panel that draws docked and not in its own window is a fault this window set has had.
panel-boards.pngpanel-boundary.pngpanel-budget.pngpanel-companion-bench.pngpanel-compare.pngpanel-configuration.pngpanel-console.pngpanel-energy.pngpanel-events.pngpanel-experiment-log.pngpanel-firmware.pngpanel-fleet.pngpanel-import.pngpanel-inspector.pngpanel-licences.pngpanel-link.pngpanel-live-feed.pngpanel-logs.pngpanel-map.pngpanel-matrix.pngpanel-nodes.pngpanel-nodes-running.pngpanel-packet.pngpanel-packet-timeline.pngpanel-planning.pngpanel-provisioning.pngpanel-resources.pngpanel-results.pngpanel-runs.pngpanel-schedule.pngpanel-scoreboard.pngpanel-setup.pngpanel-sweep.pngpanel-timelines.pngpanel-validate.pngpanel-waterfall.pngpopout-boards.pngpopout-boundary.pngpopout-budget.pngpopout-companion-bench.pngpopout-compare.pngpopout-configuration.pngpopout-console.pngpopout-energy.pngpopout-events.pngpopout-experiment-log.pngpopout-firmware.pngpopout-fleet.pngpopout-import.pngpopout-inspector.pngpopout-licences.pngpopout-link.pngpopout-live-feed.pngpopout-logs.pngpopout-map.pngpopout-matrix.pngpopout-nodes.pngpopout-nodes-running.pngpopout-packet.pngpopout-packet-timeline.pngpopout-planning.pngpopout-provisioning.pngpopout-resources.pngpopout-results.pngpopout-runs.pngpopout-schedule.pngpopout-scoreboard.pngpopout-setup.pngpopout-sweep.pngpopout-timelines.pngpopout-validate.pngpopout-waterfall.pngThe node window (10)
One capture per tab.
node-console.pngnode-companion.pngnode-sdr.pngnode-settings.pngnode-radio.pngnode-stats.pngnode-activity.pngnode-connect.pngnode-hardware.pngnode-output.pngThe board view (3)
Both tables, and the console with its frames decoded.
board-radio.pngboard-wiring.pngboard-decoded.pngConfiguration (6)
One capture per section.
config-general.pngconfig-rf.pngconfig-terrain.pngconfig-traffic.pngconfig-provisioning.pngconfig-resources.pngLicences (5)
One capture per section.
licences-forks.pnglicences-bundled.pnglicences-golibs.pnglicences-runtime.pnglicences-data.pngMenus (7)
Every dropdown. One entry lives in one menu.
menu-file.pngmenu-view.pngmenu-simulation.pngmenu-mesh.pngmenu-analysis.pngmenu-window.pngmenu-help.pngPart three: the documentation, as a reader
The manual is part of the change, so a release is not tested until the pages have been walked against the build. A page describing a view the application no longer has is worse than no page, because somebody will follow it.
Published at https://meshbench.github.io/docs/. Walk them with:
It opens each page in turn and prints what the page is held to. Capture anything that disagrees with the application and comment with the step name.
shotsteps_test.goreads the site's own navigation table, so a page published without a step here is a red build.Follow the guides literally, in order, as if new. That is the only way a missing step shows up: somebody who knows the application fills the gap without noticing it is there.
indexconceptsgetting-startedfirst-simulationresultsfixturesimportingdebuggingfirmware-libraryfirmware-developmentboard-viewtesting-repeatersapp-developmenttestingexperimentsstudiessdr-observerarchitecturenative-vs-emulatedrf-simulationrf-chainwaveformtiminggolden-vectorsemulationfirmware-integrationwhat-it-does-not-doscriptingcookbookagent-skillsreference-clireference-controlreference-pythonreference-goreference-jssettingsresourcestoolsquality-gatesrepositoriesAnything that fails: comment with the scenario number, what you did, what you expected, and what happened. Screenshots welcome.