Skip to content

The hardware list: what a listing says, who may vouch, and a check that holds each row to its report - #207

Draft
DevomB wants to merge 30 commits into
mainfrom
hardware-list
Draft

DevomB wants to merge 30 commits into
mainfrom
hardware-list

Conversation

@DevomB

@DevomB DevomB commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

The hardware list: which machines Kryptik has been run on, who ran it, and what each run showed. Stacked on #180, whose commits are the first four here; the list is built on its report.

The page, docs/hardware.md, says what a report is and the two ways to take one, what a row of each level says, who may vouch, and how a row enters the list. The list itself, docs/hardware/list.tsv, starts empty, with one report beside it per row once the hardware tests planned for October 2026 bring some.

Two levels, each defined by what the report shows, so a row cannot claim more than its evidence:

  • reported: the report is whole, names its machine, release and kernel, and holds no hardware address, UUID or serial number. It says what the machine has and what the image lacks for it.
  • certified: all of that on an installed system: a release and not a dated build, booted by UEFI with Secure Boot on and lockdown in confidentiality, the encrypted state partition in use, a DRM device with an output connected, the default route leaving by a wired or wireless interface that has a carrier, and nothing under missing.

The check, tools/check-hardware.sh: given reports, it prints what each shows and the level it carries, with every reason it falls short of certified; with --list it holds each row to its report, refuses a report that holds an identifier (naming the line, never its content) and a report without a row. tools/tests/check-hardware.sh covers each criterion and each refusal, and ends on the tree's own list, so CI runs the real check with no workflow change.

The report gains what a listing needs and it did not say: state: in its system section, and the net zone's interfaces by kind (wired, wireless, virtual) with the one the default route leaves by; no address is printed. The reporter's fixture suite now feeds its report to the checker, so the two cannot drift apart.

The sound in a listing. The check reads the report's audio section into one audio line, by the kinds of docs/design/laptop-audio.md: the HD Audio codecs, the graphics' HDMI ones left out, then any microphones on Intel's DSP, SoundWire parts, microphones on AMD's coprocessor and amplifiers, each with what drives it or "not driven". No level asks for any of it, and a report from before the section says so and keeps its level. The checker's suite tests the good report's line, the same report driven by SOF and one with no section; the reporter's suite gives each of its five kinds the listing it carries.

In acceptance, the hardware-report item holds the reports it takes to the listing they carry: the medium's is reported; and the installed disk, booted with the medium's certificate enrolled, a display and a network, takes a report that must be certified, or on a dated build short of it in that one thing.

For whoever merges the docs changes that are open: the README's documentation list and the roadmap's Version 2 line on a hardware certification list can point at docs/hardware.md. Not to be merged before #180, nor before v1.0.0 is tagged.

DevomB added 9 commits October 2, 2026 08:13
…lacks for it: each device with the driver that took it, the firmware the kernel asked for and did not find as lines for firmware.list, the devices and disks that want a line in boot.fragment, and the kernel log, with serial numbers, hardware addresses and UUIDs struck
… one at the first match killed its writer, which pipefail reported as a script no service runs
… gets the report at boot, and kryptik-hwreport --save writes one from its root shell: a temporary file, fsynced, renamed, and the partition unmounted again. No other stick is written, and the installer leaves the reports on the stick
… unprepared stick stays byte for byte what it was, a prepared one gets whole reports on a clean filesystem, a write-protected one is told why it gets none, an install from it carries none over, and the command writes one from the root shell
… reported when it is whole, names its machine and holds no address, UUID or serial number; certified when it also comes from an installed release with Secure Boot on, the state partition in use, a display, a network path and nothing missing
…ames the net zone's interfaces by kind, with the one the default route leaves by and no address
…row say, who may vouch and how a row enters; the list starts empty and check-hardware.sh --list holds each row to its report
…medium's is reported, and the installed system's, taken under Secure Boot with a display and a network, is certified or short of it only as a dated build
DevomB added 3 commits October 5, 2026 08:32
…her filesystem under the stick's label, a link at the report's name would carry root's write to a disk of the machine
…her filesystem under the stick's label, a link at the report's name would carry root's write to a disk of the machine
… report from a virtual machine is refused, and so is a row whose day is not its report's; the page keeps to the one sentence on hardware testing
DevomB added 12 commits October 13, 2026 09:42
run-ovmf.sh keeps main's second head and 4Kn disk beside the report's writable stick, and its help prints the whole header again (lines 2-40; main's range stopped two lines short). kryptik-install.sh drops both the report folder and slot b's medium kernel from the copied ESP.
… EDID serial, none of which may reach the report

The tool reads an allowlist of DMI fields and a connector's state and modes, never its EDID; the fixture now plants each identifier a real machine has there and denies it in the report, and wants the panel named by connector, state and mode.
…hes, a zone's sched and ioprio calls refused, proxy-calls ending at a proxy's exit
…hes, a zone's sched and ioprio calls refused, proxy-calls ending at a proxy's exit

# Conflicts:
#	tools/image/run-ovmf.sh
… themselves

A USB device's manufacturer and product strings, DMI fields and an
interface's name reach the report as their makers wrote them: the kernel
filters no control characters from usb_string(), and an interface name
may hold an ESC. A stick naming itself with an escape sequence would have
it run on the terminal of whoever prints or reads the report. scrub(),
which every line passes, now drops C0 controls but tab and newline, DEL,
and C1 controls in UTF-8 (U+0080 to U+009F, CSI among them).
Since the laptop stack, 1.0 drives sound and suspend, so a certified row
leaves them out because the report does not exercise them, not because
nothing drives them; a camera is the same. Bluetooth is what 1.0 does not
drive.
…ay scale, exFAT), run-ovmf's --second-head refusal with --s3, proxy-calls traced alone, source mirrors

# Conflicts:
#	build/stages/04-base-system.sh
#	tools/image/run-ovmf.sh
Stage 06 checks the root's executable files against image-programs.txt
both ways, and the report added /usr/sbin/kryptik-hwreport and the
medium's /usr/libexec/kryptik/hw-report.sh without naming them, so a
build of this branch stopped at its rootfs step.
…nds the laptop sound note sorts

The report listed every PCI device, so the audio controller's class was there, but not what tells
one kind of laptop sound from another: whether the firmware describes digital microphones for Intel's
DSP, SoundWire parts, speaker amplifiers, or microphones on AMD's coprocessor. The October machines'
reports are meant to answer that.

A new `audio` section: each audio controller on PCI with its class and the driver that took it, AMD's
coprocessor among them; the HD Audio codecs by maker and subsystem; the NHLT table's endpoints by link
type (pdm, ssp); the SoundWire controller ACPI describes at _ADR 0x40000000 under an HD Audio controller,
as the kernel finds it, and each part on it by link, maker and part; the speaker amplifiers ACPI names
(Cirrus's CSC3551/4/6/7 and CLSA0100/1, TI's TIAS2781, TXNW2770/2781/5825 and INT8866) with any driver
bound to them; and which of AcpDmicConnected, acp-audio-device-type and _WOV the ACPI tables hold, the
names AMD's drivers look for. Model and part IDs only.

tools/tests/hwreport.sh builds each kind on the fixture machine: HD Audio alone, a DSP with an NHLT of a
microphone array and an I2S link, a SoundWire controller with two parts beside an ACPI node that is not
one, AMD's coprocessor with AcpDmicConnected in its DSDT, and two CS35L41s described as one device beside
one the firmware calls absent.
…nd no level asks for it

check-hardware.sh reads the report's new audio section into one line: the HD Audio codecs, the graphics'
HDMI ones left out; digital microphones the NHLT describes for Intel's DSP; SoundWire parts; microphones
on AMD's coprocessor, with the ACPI names its drivers look for; amplifiers by their ACPI name. Each says
what drives it, or "not driven", SOF counting for what sits behind Intel's DSP and the ACPI device
splitter not counting for an amplifier. A report from before the section says so. Neither level asks
for any of it, as 1.0 drives none of these kinds (docs/design/laptop-audio.md).

tools/tests/check-hardware.sh: the good report's line, the same report driven by SOF, and one with no
audio section that stays certified. tools/tests/hwreport.sh gives each of the report's five kinds the
listing it carries. docs/hardware.md names the sound hardware among what a report holds, and what a
listing says of it.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant