SmartConfig

Review of M3 chunk A (steps 1-4)

Date: 2026-10-03. One reviewer (an AI agent, as the plan’s question 6 says), on a23d050..a1be8e1: internal/check (findings, rules, runner, file graph, the fstab checker, the baseline diff) and the exported scope glob. The reviewer worked in a scratch copy and ran the real findmnt 2.39.3 as a user. Claude reproduced each finding before fixing it, with findmnt as root where the finding needed it; the outputs are now golden files in internal/check/testdata/findmnt.

Held up: the runner’s fixed tool directories, argument list, environment and timeout; the graph parser; the scratch copy’s modes and cleanup; severities from systemd-fstab-generator.

Findings

Area Finding Severity Fixed in
diff Added compared rule, severity and text, and every fstab-fields finding has the same text: with one bad line already in the file, a newly broken root line was not reported, or the old line was blamed. The same for two different findmnt errors on one mount point. high a2e325f (a finding has a key)
fstab A UUID or LABEL in the wrong letter case was accepted. libblkid and udev’s links are case-sensitive: findmnt reports the upper-cased UUID of this VM’s root as unreachable. The boot would have stopped. high a2e325f
fstab findmnt’s “unreachable on boot required source” was always dropped as “sc’s own rule”, also for sources sc could not look up (LABEL=My\\040Disk): no finding for a line that stops the boot. high a2e325f
fstab findmnt’s on-disk type warning is a string compare; sc made a blocker of working lines: ext4,xfs, ntfs-3g on ntfs, ext3 on ext4. Confirmed as root for the list and ext3. medium a2e325f (compatible types, ext family a warning)
fstab Real options near a common one were called misspellings at blocker level: btrfs nossd, ext4 resuid, xfs wsync, nfs nocto, _rnetdev. medium a2e325f (one slip only; 746 known options in mountopts.txt)
fstab A findmnt heading sc could not match (a mount point with an escape other than \040) gave line 0 at blocker; two lines for one mount point were both filed under the first. medium a2e325f
runner stdout and stderr shared a pipe. findmnt buffers stdout and not stderr, so on long output its summary landed inside a line and broke the parse. medium a2e325f (two streams)
checks A validator that was killed, rejected its arguments or had its output cut was read as a clean run, with no note. medium a2e325f
fstab As a user findmnt cannot read the disks and the type check is skipped: nothing said so. low a2e325f (a note)
runner Leftover processes were killed after the tool was reaped, when its process group id could in theory already name another group. low a2e325f (killed while the tool is a zombie)

Not changed

Found while fixing

Tests

Each finding has a test that fails without its fix: TestFstabAddedFields, TestFstabVerifyKeys (a mutation that ignores the key fails three tests), lines 20-22 of TestFstabRules, 15 cases of TestFstabFindmnt, TestFstabFindmntBroken, TestRunExact (streams apart), TestRunStraggler.