Skip to content

Coverage matrix — AHRL v27 against the Debian Hamradio Blend on Parrot

Generated by scripts/gen_coverage_matrix.py. Do not edit by hand. The facts are parsed from docs/reference/ahrl-inventory.md, the catalog and a fetched Parrot archive probe; the judgement is the generator's CURATION table, every override of which cites a URL.

Generated: 2026-09-30

What this answers

docs/reference/prior-art.md proposes the blend's hamradio-* metapackages as the base tier. This matrix measures what that leaves Hammunition to do: for each of the 95 units AHRL v27 executes, whether a metapackage already lists the package, whether Parrot's archive carries it outside any metapackage, or whether nothing in the archive does. One class per unit; a URL for every class but COVERED.

The archive that was measured

  • Archive: https://deb.parrot.sh/parrot, suites echo echo-updates echo-security echo-backports, components main contrib non-free non-free-firmware, amd64; fetched 2026-09-30.
  • Release: Origin=Parrot Suite=parrot Codename=echo Date=Wed, 30 Sep 2026 21:45:15 UTC.
  • Blend: debian-hamradio 0.10 — 12 task metapackages (hamradio-antenna, hamradio-datamodes, hamradio-digitalvoice, hamradio-logging, hamradio-morse, hamradio-nonamateur, hamradio-packetmodes, hamradio-rigcontrol, hamradio-satellite, hamradio-sdr, hamradio-tools, hamradio-training).
  • Parrot 7 echo is Debian 13 trixie stable plus backports (D-038), not testing or sid. The candidate is the highest version across echo, echo-updates and echo-security; echo-backports only when nothing else offers the package, and the suite column says so when that happens.
  • A unit counts as blend-covered when a metapackage Depends on or Recommends its package. Suggests is not installed by default and is not counted.

Counts

Class Units Meaning
COVERED 29 a metapackage lists it; Parrot is within a patch level of AHRL
COVERED_STALE 8 a metapackage lists it; AHRL bundles a materially newer upstream
DELTA_APT 15 Parrot's archive carries it; no metapackage lists it
DELTA_UPSTREAM 8 not in the archive; upstream publishes a binary
DELTA_SOURCE 17 not in the archive; built from source or a venv
DELTA_NONFREE 0 not free software; free substitute named
DEAD 18 superseded, sunset, or never software — replacement or drop named
total 95

The matrix

AHRL's version is what the v27 tarball bundles or, for apt units, blank (AHRL takes whatever the target offers). Parrot's is the candidate version and its suite. Task is every metapackage that Depends on or Recommends the package. Carried as is the catalog manifest and its install method, or — where none exists.

# Unit AHRL Parrot Task Class Carried as Licence Source / note
1 Firefox (browser) — 153.4.0esr (echo) as firefox-esr — DEAD — — https://deb.parrot.sh/parrot/pool/main/f/firefox-esr/ — drop — a browser is the operating system's, not a ham unit; Parrot ships firefox-esr
2 libhamlib4 — 4.6.2 (echo) as libhamlib4t64 rigcontrol COVERED libhamlib-utils (apt) — https://deb.parrot.sh/parrot/pool/main/h/hamlib/ — the runtime library every rig-control package pulls in; trixie renamed it libhamlib4t64 (Provides libhamlib4) and the catalog carries libhamlib-utils
3 pipx — 1.7.1 (echo) — DELTA_APT pipx (apt) — https://deb.parrot.sh/parrot/pool/main/p/python-pipx/
4 Source build toolchain — 12.12 (echo) as build-essential — DEAD — — https://deb.parrot.sh/parrot/pool/main/b/build-essential/ — drop — the build toolchain is each manifest's build_depends, resolved per unit (D-016)
5 Wine — 10.0~repack (echo) — DEAD — — https://deb.parrot.sh/parrot/pool/main/w/wine/ — drop from 1.0 — only Morse Runner needs it; a configured Wine prefix is post-1.0 (SCOPE.md); Parrot carries wine 10.0
6 RTL-SDR Blog V4 driver — 2.0.2 (echo) as rtl-sdr sdr COVERED rtl-sdr (apt) — https://deb.parrot.sh/parrot/pool/main/r/rtl-sdr/ — AHRL purges Debian's librtlsdr for the Blog fork; Debian's 2.0.x carries V4 support, and D-022 says coexist, never remove silently
7 SvxLink — 24.02 (echo) as svxlink-server digitalvoice COVERED svxlink-server (apt) — https://deb.parrot.sh/parrot/pool/main/s/svxlink/
8 Xastir — 2.2.0 (echo) packetmodes COVERED xastir (apt) — https://deb.parrot.sh/parrot/pool/main/x/xastir/
9 dump1090 — 3.14.1630+git20240609.adc080d (echo) as readsb — DEAD readsb (apt) — https://github.com/flightaware/dump1090 — replacement: readsb (dispositions S) — FlightAware's dump1090 is maintained (pushed 2026-08-14) but Debian packages readsb, not it, and Parrot has no dump1090-* package
10 Arduino IDE — 1.8.19 (echo) as arduino — DELTA_APT arduino-cli (apt) — https://deb.parrot.sh/parrot/pool/main/a/arduino/
11 atlc — 4.6.1 (echo) — DELTA_APT atlc (apt) — https://deb.parrot.sh/parrot/pool/main/a/atlc/
12 Claws Mail — 4.3.1 (echo) as claws-mail — DELTA_APT claws-mail (apt) — https://deb.parrot.sh/parrot/pool/main/c/claws-mail/
13 CQRLOG — 2.5.2 (echo) logging COVERED cqrlog (apt) — https://deb.parrot.sh/parrot/pool/main/c/cqrlog/
14 ebook2cwgui — 0.1.2 (echo) morse COVERED ebook2cwgui (apt) — https://deb.parrot.sh/parrot/pool/main/e/ebook2cwgui/
15 FLAMP — 2.2.14 (echo) datamodes COVERED flamp (apt) — https://deb.parrot.sh/parrot/pool/main/f/flamp/
16 FLMSG — 4.0.23 (echo) datamodes COVERED flmsg (apt) — https://deb.parrot.sh/parrot/pool/main/f/flmsg/
17 FLWRAP — 1.3.6 (echo) datamodes COVERED flwrap (apt) — https://deb.parrot.sh/parrot/pool/main/f/flwrap/
18 Fritzing — 1.0.1 (echo) — DELTA_APT — — https://deb.parrot.sh/parrot/pool/main/f/fritzing/
19 GNU Radio — 3.10.12.0 (echo) as gnuradio sdr COVERED gnuradio (apt) — https://deb.parrot.sh/parrot/pool/main/g/gnuradio/
20 gpsman — 6.4.4.2 (echo) — DELTA_APT gpsbabel (apt) — https://deb.parrot.sh/parrot/pool/main/g/gpsman/ — in the archive, in no task; the catalog supersedes it with gpsbabel + gpsd (dispositions S)
21 grig — 0.9.0 (echo) rigcontrol COVERED flrig (apt) — https://deb.parrot.sh/parrot/pool/main/g/grig/ — hamradio-rigcontrol recommends it; the catalog supersedes it with flrig (dispositions S) — grig stays on the machine for the operators who prefer it
22 JTDX — 2.2.159+improved (echo) datamodes COVERED jtdx (apt) — https://deb.parrot.sh/parrot/pool/main/j/jtdx/
23 KiCad — 9.0.2 (echo) — DELTA_APT — — https://deb.parrot.sh/parrot/pool/main/k/kicad/
24 KLog — 2.4.1 (echo) logging COVERED klog (apt) — https://deb.parrot.sh/parrot/pool/main/k/klog/
25 LinPac — 0.28 (echo) packetmodes COVERED linpac (apt) — https://deb.parrot.sh/parrot/pool/main/l/linpac/
26 ngspice — 44.2 (echo) — DELTA_APT — — https://deb.parrot.sh/parrot/pool/main/n/ngspice/
27 Notepadqq — 2.0.0~beta1 (echo) — DEAD — — https://deb.parrot.sh/parrot/pool/main/n/notepadqq/ — drop — a text editor, not a ham unit; Parrot carries it for anyone who wants it
28 PuTTY — 0.83 (echo) — DELTA_APT putty (apt) — https://deb.parrot.sh/parrot/pool/main/p/putty/
29 qrq — 0.3.5 (echo) morse COVERED qrq (apt) — https://deb.parrot.sh/parrot/pool/main/q/qrq/
30 QSSTV — 9.5.8 (echo) datamodes COVERED qsstv (apt) — https://deb.parrot.sh/parrot/pool/main/q/qsstv/
31 Qtel — 24.02 (echo) digitalvoice COVERED qtel (apt) — https://deb.parrot.sh/parrot/pool/main/s/svxlink/
32 SPLAT! — 1.4.2 (echo) as splat antenna, tools COVERED splat (apt) — https://deb.parrot.sh/parrot/pool/main/s/splat/
33 Sunclock — 3.57 (echo) — DELTA_APT sunclock (apt) — https://deb.parrot.sh/parrot/pool/main/s/sunclock/
34 SvxReflector — 24.02 (echo) digitalvoice COVERED svxreflector (apt) — https://deb.parrot.sh/parrot/pool/main/s/svxlink/
35 TkCVS — 8.2.3 (echo) — DEAD — — https://deb.parrot.sh/parrot/pool/main/t/tkcvs/ — drop — a CVS front end, not a ham unit; Parrot carries it
36 wwl — 1.3+db (echo) tools COVERED wwl (apt) — https://deb.parrot.sh/parrot/pool/main/w/wwl/
37 xcwcp — 3.6.1 (echo) morse, training COVERED xcwcp (apt) — https://deb.parrot.sh/parrot/pool/main/u/unixcw/
38 Xdx — 2.91 (echo) tools COVERED xdx (apt) — https://deb.parrot.sh/parrot/pool/main/x/xdx/
39 xosview — 1.24 (echo) — DEAD — — https://deb.parrot.sh/parrot/pool/main/x/xosview/ — drop — a system monitor, not a ham unit; Parrot carries it
40 aa-analyzer 0.09 — — DEAD flaa (source) — https://sourceforge.net/projects/aa-analyzer/ — replacement: flaa (dispositions S) — the same RigExpert AA-series analyzers from a maintained W1HKJ GUI, where aa-analyzer is a Perl CLI on a CPAN module unmaintained for a decade; it was the only CPAN consumer (D-014 amendment)
41 Coil64 2.4.39 — — DELTA_SOURCE coil64 (git) GPL-3.0 https://github.com/radioacoustick/Coil64
42 cwwav — — — DELTA_SOURCE cwwav (git) GPL-3.0 https://github.com/oyvholm/cwwav — upstream last pushed 2018-06-06
43 Dire Wolf 1.8.1 1.7 (echo) as direwolf packetmodes COVERED_STALE direwolf (apt) — https://deb.parrot.sh/parrot/pool/main/d/direwolf/
44 ESPHamClock 4.23 — — DEAD openhamclock (node) — https://github.com/openhamclock/hamclock/ — replacement: openhamclock (Q-006, dispositions S) — ESPHamClock is frozen at its author's death and points at a backend that no longer answers; the community mirror is what AHRL now builds
45 flaa 1.0.2 — — DELTA_SOURCE flaa (source) GPL-3.0-or-later https://w1hkj.org/
46 flcluster 1.1.01 — — DELTA_SOURCE flcluster (source) GPL-3.0-or-later https://w1hkj.org/
47 fldigi 4.2.11 4.2.06 (echo) datamodes COVERED fldigi (source) GPL-3.0-or-later https://deb.parrot.sh/parrot/pool/main/f/fldigi/ — the catalog builds AHRL's 4.2.11 from source and displaces the archive's 4.2.06 — a patch level, which this matrix does not count as stale
48 fllog 1.2.9 — — DELTA_SOURCE fllog (source) GPL-3.0-or-later https://w1hkj.org/
49 Fl_MoxGen 1.01 — — DELTA_SOURCE fl-moxgen (source) GPL-3.0-or-later https://sourceforge.net/projects/flmoxgen/
50 flnet 7.5.0 — — DELTA_SOURCE flnet (source) GPL-3.0-or-later https://w1hkj.org/
51 flrig 2.0.10 2.0.05 (echo) rigcontrol COVERED flrig (apt) — https://deb.parrot.sh/parrot/pool/main/f/flrig/
52 flwkey 1.2.4 — — DELTA_SOURCE flwkey (source) GPL-3.0-or-later https://w1hkj.org/
53 FreeDV GUI 2.2.1 1.8.11 (echo) as freedv digitalvoice COVERED_STALE freedv (apt) — https://deb.parrot.sh/parrot/pool/main/f/freedv/
54 glfer 0.4.2 — — DELTA_SOURCE glfer (source) GPL-2.0 https://www.qsl.net/in3otd/glfer.html
55 Gpredict 2.5.1 2.3-115-g0f3beb6 (echo) satellite COVERED_STALE gpredict (apt) — https://deb.parrot.sh/parrot/pool/main/g/gpredict/
56 Gqrx 2.17.7 2.17.6 (echo) as gqrx-sdr sdr COVERED gqrx-sdr (apt) — https://deb.parrot.sh/parrot/pool/main/g/gqrx-sdr/
57 gsmc — — — DELTA_SOURCE gsmc (source) GPL-3.0 https://github.com/tym163com/gsmc — upstream last pushed 2016-09-13
58 GSpiceUI 1.2.87 — — DELTA_SOURCE — GPL-3.0 https://sourceforge.net/projects/gspiceui/ — no manifest yet — reserved to the maintainer (dispositions M); absent from trixie and Parrot; AHRL's build hardcodes an aarch64 path (D-002)
59 JS8Call-improved 2.5.2 2.2.0 (echo) as js8call datamodes COVERED_STALE js8call (apt) — https://deb.parrot.sh/parrot/pool/main/j/js8call/
60 Linrad 05-02 — — DELTA_SOURCE linrad (source) MIT https://sourceforge.net/projects/linrad/ — needs a patch the source backend cannot yet apply (source-build-gaps.md)
61 MSHV 2.76.5 — — DELTA_SOURCE mshv (source) GPL-3.0 https://lz2hv.org/node/10
62 Open Wouxun (owx) — 20250530 (echo) as chirp rigcontrol DEAD chirp (apt) — https://chirpmyradio.com/ — replacement: chirp (dispositions S) — Open Wouxun is a 2022 CLI snapshot; CHIRP drives the same radios with a GUI and a release cadence, and Parrot packages it
63 qgrid 3.2 — — DELTA_SOURCE qgrid (source) GPL-2.0-or-later https://www.qsl.net/on4qz/qgrid/index.html
64 QLog 0.49.1 0.52.0 (echo-backports) — DELTA_APT qlog (apt) GPL-3.0 https://deb.parrot.sh/parrot/pool/main/q/qlog/ — Parrot's backports carry 0.52.0, ahead of AHRL's 0.49.1; the manifest installs that on Parrot and Kali and builds the same tag elsewhere (corrected 2026-09-06 -- it used to say only Kali packages it)
65 QUISK 4.2.50 4.2.32 (echo) sdr COVERED quisk (apt) — https://deb.parrot.sh/parrot/pool/main/q/quisk/
66 SatDump — 1.2.2 (echo) — DELTA_APT satdump (apt) — https://deb.parrot.sh/parrot/pool/main/s/satdump/
67 SDR++ — 0.0~git20260520.36ea9a1 (echo-backports) as sdrpp — DELTA_APT sdrpp (apt) — https://deb.parrot.sh/parrot/pool/main/s/sdrpp/
68 TQSL 2.8.4 2.8.1 (echo) as trustedqsl logging COVERED trustedqsl (apt) — https://deb.parrot.sh/parrot/pool/main/t/trustedqsl/
69 wfview 2.11 2.03 (echo) rigcontrol COVERED_STALE wfview (apt) — https://deb.parrot.sh/parrot/pool/main/w/wfview/
70 WSJT-X 3.0.0 2.7.0 (echo) as wsjtx datamodes COVERED_STALE wsjtx (git) GPL-3.0 https://deb.parrot.sh/parrot/pool/main/w/wsjtx/ — the catalog builds 3.0.0 from git and purges the archive's 2.7.0 first
71 WSJT-X improved 3.1.0 2.8.0+250501 (echo) as wsjtx-improved — DELTA_APT wsjtx-improved (apt) GPL-3.0 https://deb.parrot.sh/parrot/pool/main/w/wsjtx-improved/ — Parrot packages wsjtx-improved (2.8.0, a minor behind AHRL's 3.1.0) where the manifest fetches SourceForge's vendor .deb, measured installing there and a year newer; the archive package Breaks: wsjtx, which the plan has refused by name since 2026-09-07 (D-022 amendment), and Kali -- where the vendor .deb cannot install -- takes its archive's 3.1.0 (2026-09-07)
72 xlog 2.0.25 2.0.24 (echo) logging COVERED xlog (apt) — https://deb.parrot.sh/parrot/pool/main/x/xlog/
73 xnec2c 4.4.18 4.4.16 (echo) antenna COVERED xnec2c (apt) — https://deb.parrot.sh/parrot/pool/main/x/xnec2c/
74 xwefax 2.4.4 — — DELTA_SOURCE xwefax (source) GPL-3.0 https://www.qsl.net/5b4az/
75 AntScope2 1.4.15 — — DELTA_UPSTREAM antscope2 (binary:deb) MIT https://github.com/rigexpert/AntScope2 — vendor .deb; MIT per LICENSE.txt (Rig Expert Ukraine), not proprietary as the survey assumed
76 GridTracker2 2.260421.1 — — DELTA_UPSTREAM gridtracker2 (binary:deb) BSD-3-Clause https://gitlab.com/gridtracker.org/gridtracker2 — vendor .deb; BSD-3-Clause per the GitLab project, not proprietary as the survey assumed
77 FoxTelem 1.12z3 — — DELTA_UPSTREAM — GPL-3.0 https://github.com/ac2cz/FoxTelem — post-1.0 (Q-015); AMSAT publishes a Java tarball, no manifest yet
78 YAAC — — — DELTA_UPSTREAM yaac (binary:zip) LGPL-3.0-or-later https://www.ka2ddo.org/ka2ddo/YAAC.html — per docs/license.html inside YAACMain.jar; the bundled OpenMap carries its own licence
79 Morse Runner 1.85.3 — — DELTA_UPSTREAM morse-runner (git) MPL-2.0 https://github.com/zmetzing/MorseRunner — AHRL runs a Windows binary under Wine; the catalog builds the native Lazarus port of 1.68 (dispositions C, 2026-09-30) — the Community Edition at w7sst/MorseRunner does not build natively
80 Wordsworth 0.3 — — DELTA_UPSTREAM wordsworth (binary:tarball) GPL-3.0 https://sourceforge.net/projects/kb1oiq-k1ig-wordsworth/
81 Virtual Radar Server — 3.14.1630+git20240609.adc080d (echo) as readsb — DEAD readsb (apt) — https://www.virtualradarserver.co.uk/ — replacement: readsb + tar1090 (dispositions S) — a maintained Mono application whose Linux build AHRL patches at install time; the catalog supersedes it rather than carry the patch
82 Backdrops — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — AHRL's wallpapers, not software
83 Country files (cty.dat) — — — DELTA_UPSTREAM — MIT-style (AD1C, copyright.txt) https://www.country-files.com/ — post-1.0 (Q-015): the cty.dat archive as a zip; Parrot's hamradio-files 20250523 carries Debian's copy, which is the 1.0 answer
84 CHIRP 20260501 20250530 (echo) rigcontrol COVERED_STALE chirp (apt) — https://deb.parrot.sh/parrot/pool/main/c/chirp/
85 NanoVNA-Saver — 0.7.3 (echo) — DELTA_APT nanovna-saver (apt) GPL-3.0-or-later https://deb.parrot.sh/parrot/pool/main/n/nanovna-saver/ — AHRL installs it with pipx; the manifest hash-pinned a venv on the claim that no distribution packages it, and since 2026-09-06 installs Parrot's 0.7.3 with the PySide6 dependency the package forgot (Debian #1112747)
86 not1mm — — — DELTA_SOURCE not1mm (venv) GPL-3.0 https://github.com/mbridak/not1mm
87 js8spotter 1.18 — — DELTA_UPSTREAM js8spotter (binary:zip) MIT https://kf7mix.com/js8spotter.html
88 QtTinySA 1.2.2 1.0.2+git20250424T094920-a2d39d0 (echo) rigcontrol COVERED_STALE qttinysa (apt) — https://deb.parrot.sh/parrot/pool/main/q/qttinysa/
89 PyAutoGUI — — — DEAD — — https://deb.parrot.sh/parrot/pool/main/p/pyautogui/ — drop — AHRL's own menu-regression harness, not ham software; Parrot carries python3-pyautogui
90 AIS-catcher — — — DELTA_SOURCE ais-catcher (git) GPL-3.0 https://github.com/jvde-github/AIS-catcher
91 RF Exposure Calculator — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — a two-line script opening hintlink.com/power_density.htm in the browser; not software
92 Solar Data — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — wget of one image from hamqsl.com; not software
93 ahrl_docs — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — AHRL's own; the generated package reference replaces it
94 ahrl_menus — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — AHRL's own; D-036 generates menus per DE
95 ahrl_version — — — DEAD — — https://sourceforge.net/projects/kb1oiq-andysham/ — drop — AHRL's own; hammunition --version is the engine's

Covered but stale

Where AHRL builds a newer upstream than the blend installs. These are the units where taking the blend as the base costs a version, and the only ones where a blend-first Hammunition would owe a source build for a package the archive already has.

# Unit AHRL bundles Parrot installs Gap
43 Dire Wolf 1.8.1 1.7 (echo) minor
53 FreeDV GUI 2.2.1 1.8.11 (echo) major
55 Gpredict 2.5.1 2.3-115-g0f3beb6 (echo) minor
59 JS8Call-improved 2.5.2 2.2.0 (echo) minor
69 wfview 2.11 2.03 (echo) minor
70 WSJT-X 3.0.0 2.7.0 (echo) major
84 CHIRP 20260501 20250530 (echo) 336 days
88 QtTinySA 1.2.2 1.0.2+git20250424T094920-a2d39d0 (echo) minor

Where the seven classes do not fit

DEAD was defined as upstream gone or superseded. 13 of the 18 units in it are not ham software — AHRL's own wallpapers, menu tooling and version stamp, a browser, an editor, a system monitor, a build toolchain, Wine, two scripts that fetch a web page. They are marked DEAD with the note drop because the matrix was asked for exactly seven classes; they are not dead upstreams, and a reader counting dead ham software should subtract them. The 5 that remain (dump1090, aa-analyzer, ESPHamClock, Open Wouxun (owx), Virtual Radar Server) are superseded in the catalog, and only ESPHamClock's upstream is actually gone.

6 units are DELTA_* with no manifest (Fritzing, KiCad, ngspice, GSpiceUI, FoxTelem, Country files (cty.dat)). The electronics tools and GSpiceUI are reserved to the maintainer (dispositions M), and FoxTelem and the country files are post-1.0 by Q-015. They are classified by what AHRL does with them, not by what the catalog does.

2 units the archive carries are built or fetched by the catalog anyway (fldigi, WSJT-X). Each row's note says why. When this probe first ran (2026-09-06) it contradicted three manifests — that no distribution packages NanoVNA-Saver, that only Kali packages QLog, that the archive's WSJT-X is the only one — and they were corrected the same day: the first two now install from the archive where it offers them, and the third names the archive package and why the engine does not use it yet.

What the blend as base tier leaves to Hammunition

With the blend installed as the base tier, 37 of AHRL's 95 units are already on the machine and 15 more are one apt install away — together 52 of the 77 units that are not DEAD, or 67% — if the operator installs all twelve task metapackages, which is what base tier would mean. That is the measured version of the survey's claim that the blend makes most of AHRL redundant, and it holds. What it leaves is 25 units: 17 source builds the archive does not carry (Coil64, cwwav, flaa, flcluster, fllog, Fl_MoxGen, flnet, flwkey, glfer, gsmc, GSpiceUI, Linrad, MSHV, qgrid, xwefax, not1mm, AIS-catcher), 8 upstream binaries and no proprietary tools. Plus the 8 stale rows, where the operator who wants AHRL's version needs a build the blend cannot give them. Hammunition's actual scope on the amateur side is therefore not a catalog of 77 programs but a build layer for roughly 33 of them — the W1HKJ suite, the Qt and FLTK one-offs, the Python venvs — sitting on a base someone else maintains; and the tiering, hardware, station configuration and SDR/SIGINT profiles that no metapackage attempts. The 18 DEAD units are the explanation AHRL never wrote down.

Reproducing

python3 scripts/gen_coverage_matrix.py --fetch   # rewrites reference/probes/blend-metapackages-parrot-echo.tsv
python3 scripts/gen_coverage_matrix.py           # rewrites this file
python3 scripts/gen_coverage_matrix.py --check   # CI: fail if stale

tests/test_gen_coverage_matrix.py holds the parsers to fixtures, every unit to exactly one curated entry, every override to an https:// citation, and regeneration to a no-op.