SmartConfig

Review of M4 chunk B (steps 4-6)

Date: 2026-10-04. One reviewer (an AI agent) worked in its own clone on a8c42b3..779bd7e. The chunk is:

The reviewer also booted a throwaway QEMU guest with the units and an sc built from its clone: 3 normal boots, 2 with a bad fstab line, and 1 rescue boot. That guest was copy-on-write, so the lab’s base image stayed clean. Claude checked each finding against the code and the lab’s logs, fixed them all in 40288d8, and confirmed that the reviewer’s surviving mutations now fail.

Findings

Area Finding Severity Fixed in
units sc-boot-seen had a 10 s timeout and held up sysinit.target. On a slow boot it was killed: twice in four lab boots, once on the bad-fstab boot, which then left no trace. With step 8’s menu flag set at “seen”, the menu would not have come back either. high 40288d8: nothing waits for it, it gets 90 s, IgnoreOnIsolate=yes, and it is skipped without sc. The verdict gets 30 s per systemctl call and 120 s for its unit.
status The last healthy boot always left out this boot. On the healthy boot after a fix, sc status still reported the failure and exited 2, against plan section 7. medium 40288d8: this boot’s “ok” counts, and the changes since it came up are listed
status --console’s 10 s cap left later changes “not checked”, sc’s own rules included. A blocker could be dropped with exit 0 and no undo. medium 40288d8: the console runs sc’s own rules only (plan change C4)
status The console form did not fit 80×25: 34 lines, 23 of them over 80 columns, and a 118-column “Failed since” line. medium 40288d8: worst first, at most 6 files, the reason in words; a test holds it to 20 lines of at most 80 columns
status With no healthy boot, an earlier edit’s blocker was missed when a later edit added nothing. low 40288d8: the path is compared with its oldest version listed
status A new file with a blocker got no undo, and the undo shown was for another, older file. low 40288d8: move it aside (.sc-off, a name every reader skips), and always undo the newest blocker
status A deleted checked file was severity 0 with no undo. low 40288d8: an error, undone by sc restore
status In emergency mode sc status said “(normal)” and gave no reboot steps. low 40288d8: the mode comes from systemd, then the command line (including -b and recovery). Outside normal mode the undo ends with daemon-reload and reboot.
status A user’s sc watch --root counted as scd running. low 40288d8: only a plain sc watch counts
boot A store error gave a verdict at row 0, and a failing list-units gave 0 failed units. low 40288d8: row -1 (sc status counts from the healthy boot before) and failed-units -1
boot Trimming lost concurrent appends (37 of 160 in a stress test), a junk line over 64 KiB made the whole file unreadable, and appends were not synced. low 40288d8: appends take a lock and are synced, trimming rewrites in place, and the file is read whole
units Without /usr/local/sbin/sc, both units failed at every boot. low 40288d8: ConditionPathIsExecutable
boot Edits made while scd was down can be recorded after the healthy boot’s row, if scd’s startup rescan is still running when the verdict is given. low deferred: the verdict would have to wait for scd’s baseline. The undo then names an older version, which is still a known good one.
tests Ten mutations survived, and plan step 6’s tests for a read-only store and the time cap were missing. cleanup 40288d8: new tests catch each mutation. The cap is gone (C4); the read-only store case is covered by step 2’s tests.

Held up

Tests