Date: 2026-10-04. One reviewer (an AI agent) worked in its own clone on
a8c42b3..779bd7e. The chunk is:
internal/boot, the hidden sc boot);sc status.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.
| 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. |
systemd-analyze verify is clean, there is no ordering cycle, and WantedBy= plus After=multi-user.target works.sc status --console named the fstab blocker and gave the commands, and running them fixed the next boot.> after, <= at), and nothing ever deletes a row.TestStatusConsole, TestStatusConsoleOwnRules, TestStatusAfterFix, TestStatusFailedBootAlone, TestStatusVerdictWithoutRow, TestStatusNoBootsEdits, TestStatusNewAndDeleted, TestStatusScdState, TestStatusTwoEditsSinceHealthy, TestBootVerdictUnknowns, TestBootUnits, TestReadLongLine, TestAppendWhileTrimming.