Skip to content

What the console reads, and how each screen degrades

The console reads only hammunition <verb> --json (the JSON interface). Every read runs in a worker thread. A document whose schema is not hammunition/1 is refused by name. There is no version floor: the console is part of the engine, so the engine field is shown and never compared. A read that fails shows the engine's own message and is never retried silently.

Engine prerequisites: E1 is per-profile members, installed and installed_size_bytes on each profile of hammunition list; E2 is hammunition update reporting retired units as rows with exit 0 (engine issue 239). Both are treated as present; each screen that reads them shows "unknown" when they are not.

Screen Reads Fields used When a field or document is missing
Home hammunition status target, engine the header says ?
Home hammunition doctor fails, warns, healthy, checks[].name/status/detail/fix the counts say ?; fix is shown, never run
Home hammunition station show callsign, grid_square (only whether each is set) "Station: unknown - (the engine's words)" on the screen; the header says station ?
Home hammunition logs runs[0] "Last run: no runs yet" for an empty list, "Last run: unknown" when runs is not a list
Home hammunition update counts.behind_pin, rows in state retired without E2 the engine refuses with exit 2: "unknown (the engine's words)"
Home hammunition list the starter profile's members, installed (E1) the checklist's install steps show [?]
Install hammunition list profiles: name, stage, summary, consent_gated, packages, documentation, E1 fields; units: name, status, summary, resolves_here without E1: "N units, state unknown"
Install hammunition install NAMES --dry-run, hammunition uninstall NAMES --dry-run the whole plan: every section of InstallPlanView and RemovalPlanView, blockers a refused plan shows its blockers and offers no run
Station hammunition station show every station field an unset field says "not set"
Station hammunition maps regions FILTER, hammunition reference books regions; books[].id/title/licence the chooser shows the engine's error
Secrets hammunition secrets status doppler.*, secrets[].name/purpose/available/source/detail/unit/command/get_url/get_how (never a value: the engine has none to give) the screen shows the engine's error
Repeaters hammunition maps repeaters list layers[].id/area/active/day/rows/personal_use/unverified, skipped[], credits; for a lookup rows[].callsign/output_hz/offset_hz/tone/mode/distance_km/bearing_deg/place, centre.source, within_km, merged the screen shows the engine's error
Repeaters hammunition maps areas active_areas, unloaded, areas[].area/kind/active/layers/size_bytes/day the screen shows the engine's error
Repeaters, Secrets hammunition update repeaterbook-client the row for the unit: state (not installed or not). list --json carries no per-unit installed state the fetch is offered anyway, and the engine refuses by name if the unit is missing
Logs hammunition logs directory, runs[].path/started/command/result/exit_code/size "No runs yet." A path outside directory is never opened
Update hammunition update [NAMES] [--upstream] counts, rows, lists_note, upgrade_command, rebuild_command, upstream without E2: the refusal is shown and a per-profile list is offered
Help hammunition list, hammunition show PROFILE documentation.*, consent.disclosure, suggests_one_of the engine's error is shown

Writes (never read as JSON): hammunition install|uninstall NAMES, hammunition station set --FLAG=VALUE, hammunition maps repeaters fetch-repeaterbook --state STATE [--county NAME] (with a session secret in its environment, never its argv), hammunition maps repeaters import FILE, hammunition maps repeaters remove --layer ID, hammunition maps activate AREA...|--all|--none, hammunition hardware apply, and the apt upgrade command the update report prints (run without apt's assume-yes, so apt asks). All of them run in a terminal pane.

hammunition services, hammunition artifacts, hammunition maps phone and the other documents the engine publishes are not read in this release.