Skip to content

Pre-release: the human test pass #318

Description

@A13xB0

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

  1. Download the latest release artefact for Linux, chmod +x, run it.
  2. Expect: the workbench opens with no other installation, warms the default fixture, and the status bar carries the best-case honesty line.
  3. With MESHBENCH_CARTO_KEY set 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.
  4. Unset the key and relaunch: expect OpenStreetMap tiles by default and nothing broken.
  • passes as described

2. Your first simulation (the docs path)

Follow https://meshbench.github.io/docs/first-simulation.html literally, as if new.

  1. File, Open a saved network, fixture-fife-strict.
  2. Simulation, Start firmware on every node; watch the count reach 58.
  3. Press play; double-click a repeater, and on its Console tab type advert.
  4. Expect: the flood spreads on the map, the Events panel fills with causes, nothing in the doc's wording disagrees with what the screen shows.
  • passes as described

3. Debugging a missed packet

  1. In the run from scenario 2, open the Debug view.
  2. Pick a failed reception in the Inspector; read its cause.
  3. Use the map's link tool on that pair; expect the terrain cut-through with both directions' margins, and the cause to be consistent with what the cut-through shows.
  • passes as described

4. Waveform mode

  1. Configuration, RF Simulation: switch to waveform. Expect the status bar to name the mode and the run to continue without cutting a frame.
  2. Let two nearby repeaters relay the same flood; in Debug, expect collision or capture verdicts that calculated mode would not produce.
  3. Switch back to calculated; expect the mode stamped correctly again.
  • passes as described

5. SDR observer

  1. Open the Glasgow SDR Observer node window, SDR pane, serve rtl_tcp.
  2. Connect SDR++ with the documented settings (https://meshbench.github.io/docs/sdr-observer.html).
  3. Expect chirp bursts at channel width while playing, the bare noise floor while paused, and the stream surviving a drag of the observer across the map.
  • passes as described

6. Importing a real network

Follow https://meshbench.github.io/docs/importing.html with the ScotMesh CoreScope URL, GUI tab only.

  1. Add areas, fetch, commit, read traffic, apply regions - the numbered buttons in order.
  2. Expect the counts reported at each step, regions applied to a sensible number of nodes, and a flood that actually relays afterwards.
  3. Deliberately skip "apply regions" on a fresh import and confirm the mesh transmits but does not relay - then check the page's "If nothing relays" checklist catches it.
  • passes as described

7. Firmware development loop

  1. meshbench dev -from <your MeshCore checkout>; expect the build to land in the firmware library named after the branch and assigned to repeaters.
  2. Bench view: define a two-arm sweep, your build against the release, three seeds, a control arm.
  3. Expect: per-arm results with delivered, redundant, rx_spread, at_risk_2db; the control arms identical; the run log readable while it goes.
  • passes as described

8. A companion app against the mesh

  1. App view, Companion bench: give me a mesh and an endpoint (TCP).
  2. Connect meshcore-cli or your own client; expect real protocol bytes, infos answered.
  3. Press "drop every client connection"; expect the client to see a dead socket, and reconnecting to work after serving again.
  • passes as described

9. One emulated board

  1. Assign the Generic_E22_sx1262 published image to a single node (one board at a time; they are heavy).
  2. Expect it to boot, advert on the air unprompted, and appear in the events as a transmitter; console reachable and answering get name.
  • passes as described

10. Scripting and the clients

  1. Run cookbook example 3 (small mesh with traffic) in Python: expect it to build the mesh, run, and print event counts.
  2. On the docs site, flip a ways block to Python; expect every page to remember the choice.
  3. meshbench test -fixture fixtures/fixture-fife-strict.json -junit out.xml: expect assertions checked, JUnit written, exit code 0.
  • passes as described

11. Determinism spot-check

  1. Run the same fixture and seed twice (native firmware), same duration.
  2. Expect identical event totals both times.
  • passes as described

12. Docs site and READMEs, as a reader

  1. Read the Learn path start to finish (Overview through Reading a result); note anything unclear or wrong as a comment here.
  2. Try search ("/"), the on-page rail, a phone-width window, and both light and dark themes; expect the white logo on its dark rail everywhere.
  3. Look at both repository READMEs on GitHub in dark and light themes; expect the card on the main repo, the theme-aware white logo on the docs repo, badges alive, no broken links.
  • passes as described


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:

go build -o meshbench ./cmd/meshbench
tools/shots/shots.py            # every step, into ./shots
tools/shots/shots.py panels     # or one bucket at a time
tools/shots/shots.py --list     # what it would run

internal/ui/workbench/shotsteps_test.go checks 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.

picture what it is expected
view-plan.png The Plan view the view's own panels are docked and drawn, and the view switcher marks Plan as current
view-run.png The Run view the view's own panels are docked and drawn, and the view switcher marks Run as current
view-debug.png The Debug view the view's own panels are docked and drawn, and the view switcher marks Debug as current
view-validate.png The Validate view the view's own panels are docked and drawn, and the view switcher marks Validate as current
view-bench.png The Bench view the view's own panels are docked and drawn, and the view switcher marks Bench as current
view-app.png The App view the view's own panels are docked and drawn, and the view switcher marks App as current
  • every picture in this bucket holds

Panels (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.

picture what it is expected
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
  • every picture in this bucket holds

The node window (10)

One capture per tab.

picture what it is expected
node-console.png A node's own window on its Console tab the window opens on Console with that tab's content drawn
node-companion.png A node's own window on its Companion tab the window opens on Companion with that tab's content drawn
node-sdr.png A node's own window on its SDR tab the window opens on SDR with that tab's content drawn
node-settings.png A node's own window on its Settings tab the window opens on Settings with that tab's content drawn
node-radio.png A node's own window on its Radio tab the window opens on Radio with that tab's content drawn
node-stats.png A node's own window on its Stats tab the window opens on Stats with that tab's content drawn
node-activity.png A node's own window on its Activity tab the window opens on Activity with that tab's content drawn
node-connect.png A node's own window on its Connect tab the window opens on Connect with that tab's content drawn
node-hardware.png A node's own window on its Hardware tab the window opens on Hardware with that tab's content drawn
node-output.png A node's own window on its Output tab the window opens on Output with that tab's content drawn
  • every picture in this bucket holds

The board view (3)

Both tables, and the console with its frames decoded.

picture what it is expected
board-radio.png The board view's Radio table the board's panel on the left, the Radio table with a verdict on every row, and the console along the bottom
board-wiring.png The board view's Wiring table the board's panel on the left, the Wiring table with a verdict on every row, and the console along the bottom
board-decoded.png The console with its frames decoded — then tick decode in the console strip the decode tick is on and framed traffic reads as prose, with the plain boot log still beside it
  • every picture in this bucket holds

Configuration (6)

One capture per section.

picture what it is expected
config-general.png Configuration: the general section the section opens with its own settings and each carries the caption that says why it matters
config-rf.png Configuration: the rf section the section opens with its own settings and each carries the caption that says why it matters
config-terrain.png Configuration: the terrain section the section opens with its own settings and each carries the caption that says why it matters
config-traffic.png Configuration: the traffic section the section opens with its own settings and each carries the caption that says why it matters
config-provisioning.png Configuration: the provisioning section the section opens with its own settings and each carries the caption that says why it matters
config-resources.png Configuration: the resources section the section opens with its own settings and each carries the caption that says why it matters
  • every picture in this bucket holds

Licences (5)

One capture per section.

picture what it is expected
licences-forks.png Licences: forks every row names a component, its licence and its origin
licences-bundled.png Licences: bundled every row names a component, its licence and its origin
licences-golibs.png Licences: golibs every row names a component, its licence and its origin
licences-runtime.png Licences: runtime every row names a component, its licence and its origin
licences-data.png Licences: data every row names a component, its licence and its origin
  • every picture in this bucket holds

Menus (7)

Every dropdown. One entry lives in one menu.

picture what it is expected
menu-file.png The File menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-view.png The View menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-simulation.png The Simulation menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-mesh.png The Mesh menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-analysis.png The Analysis menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-window.png The Window menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
menu-help.png The Help menu, open the menu drops with its sections, icons and shortcuts, and one entry appears in one menu only
  • every picture in this bucket holds

Part 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:

tools/shots/shots.py docs

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.go reads 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.

page what it is held to
index Learn - Overview what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
concepts Learn - What is real what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
getting-started Learn - Getting started every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
first-simulation Learn - Your first simulation every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
results Learn - Reading a result what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
fixtures Use - Shipped networks every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
importing Use - Importing a network every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
debugging Use - Debugging packet delivery every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
firmware-library Use - Firmware library every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
firmware-development Use - Firmware development every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
board-view Use - The board view every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
testing-repeaters Use - Testing a repeater every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
app-development Use - App development every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
testing Use - Testing your own code every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
experiments Use - Running an experiment every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
studies Use - Studies every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
sdr-observer Use - Listening with SDR++ every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
architecture Understand - Architecture what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
native-vs-emulated Understand - Native and emulated what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
rf-simulation Understand - RF simulation what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
rf-chain Understand - The RF chain what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
waveform Understand - Waveform mode what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
timing Understand - Time and determinism what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
golden-vectors Understand - Golden vectors what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
emulation Understand - Emulation what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
firmware-integration Understand - Running real firmware what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
what-it-does-not-do Understand - Accuracy and limits every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
scripting Automate - Scripting a session every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
cookbook Automate - Scripting cookbook every step can be followed literally, in order, and the application does what the page says at each one - no step names a control that is not there, and no screenshot shows a view that has changed
agent-skills Automate - Agent skills what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
reference-cli Automate - CLI every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
reference-control Automate - Control socket every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
reference-python Automate - Python client every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
reference-go Automate - Go client every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
reference-js Automate - Node client every entry matches the build: it is generated, so the check is that nothing here is missing or stale, not that the prose reads well
settings Reference - Settings what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
resources Reference - What gets downloaded what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
tools Reference - External tools what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
quality-gates Reference - What the build enforces what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
repositories Reference - Repositories and licences what it claims is true of the build in front of you, and every screenshot on it is recognisable in the application
  • every page holds

Anything that fails: comment with the scenario number, what you did, what you expected, and what happened. Screenshots welcome.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions