SmartConfig

Worklog

What we are doing now, and a dated log of what is done. Updated and pushed after every step. For the full history, decisions and recovery guide see PROJECT_LOG.md.

Now

Where things stand (2026-10-09):

Where each milestone stands: MILESTONES.md. A progress dashboard as it was on 28 Sep (M1): visuals/progress.html.

The review of the whole plan (2026-10-09, after M5) checked every plan, roadmap and overview doc and the M6 draft. The write-up is ~/smartconfig-work/project-review-2026-10-09.md. It found three things:

Still waiting for you:

Done (kept for reference): the reboot of this VM on the package (2026-10-09; the read-only check passed on its first two boots), and this VM’s /usr/sbin/policy-rc.d (your answer, 2026-10-09, “Move it aside”: it is /var/backups/smartconfig/policy-rc.d.image, sha256 7a5c733d…; to put it back, sudo mv it to /usr/sbin/policy-rc.d).

Earlier “Now” notes (M2 to M5)

What “Now” said while each milestone was built, kept as written; the log below has the details.

M2 plan approved (2026-09-28, “start M2, all my picks”): every recommendation in M2_PLAN.md section 16 and in NEXT_STEPS.md holds.

Overnight run, starting 04:30 IST (23:00 UTC) on 28 Sep, unattended:

  1. Setup from the roadmap answers: CLAUDE.md edits (question 8), local git hooks against secrets (6), CI (5), a supported Go checked with govulncheck (9), make race (4).
  2. M2 steps 1 to 16 in plan order, one step at a time, each with its tests, checks, commit, worklog line and push; chunk reviews as the plan says.
  3. Only in the repo and in throwaway SC_HOMEs. No install of the watcher, no reboot, nothing written to /etc, /boot or the real store.
  4. It stops, and writes why here, at the acceptance run and the sign-off runs (they need the VM snapshot and your OK), or when the plan says “stop and ask”.
  5. Planning and design agents run on Fable; work that needs several agents (chunk reviews, checks) runs as ultracode workflows.

Now: M3 is being built (M3_PLAN.md, approved 2026-10-03, “great go ahead”: all 7 recommendations of its section 14, which also passes gate G1, scd may run validators as root). 16 steps in five chunks, one at a time. Done: step 1 (45df7da). Step 2 (95da13b). Step 3 (b665691). Step 4 (efc2ce3): chunk A is built and reviewed (reviews/2026-10-03-m3-chunk-a.md, fixes a2e325f). Step 5 (afa9403). Step 6 (5f6068b). Step 7 (c997865): chunk B is built and reviewed (reviews/2026-10-03-m3-chunk-b.md, fixes a946f6f). Chunk C (steps 8-11) is built: four agents built the checkers in separate worktrees, Claude reviewed and integrated each; reviewed (reviews/2026-10-03-m3-chunk-c.md, fixes 41c87bf). Timing-bound tests made robust (5b1d5a5). Step 12 (580e1d1). Step 14 (7ccb3d9). Step 13 is in (a73dfde, 2e4d4ee) and the acceptance script is committed, not run (2ff038b). Chunk D is reviewed (reviews/2026-10-03-m3-chunk-d.md, fixes 2fb037e, plan change C8). Step 15, the docs, is in (see the log). M3 is built. Now: the sign-off runs (plan section 11; your call, 2026-10-03: close the M2 soak now and sign off, on the snapshot you already have). S1, S2 and S3 are done, and S4’s final review is closed (reviews/2026-10-03-m3-final.md, fixes 297fbc7, bb31f3e, plan change C9, 8 follow-ups in MILESTONES). accept-m3 passes on the fixed build. M3 is done: tag m3 (2026-10-03); the fixed build runs as scd.

Now: M4 is being built (M4_PLAN.md, approved 2026-10-04, “approved”: all 7 recommendations of its section 10). 13 steps in five chunks, one at a time. Done: steps 1-3, chunk A built and reviewed (reviews/2026-10-04-m4-chunk-a.md, fixes 49a0a5b). Done: steps 4-6, chunk B built and reviewed (reviews/2026-10-04-m4-chunk-b.md, fixes 40288d8, plan change C4). Done: steps 7-10, chunk C built and reviewed (reviews/2026-10-04-m4-chunk-c.md, fixes 683678a, plan change C5). Step 11, the QEMU lab (lab/, make lab-e2e), is committed (9f29ea5, with its one product fix 55d2bde). The step 11 check on 618e4e9: UEFI passed; BIOS did not in three runs, none of them a fault of sc (log, 2026-10-05), and the last one needed a lab fix (bec333b). The second round (on 225e2d6) gave no verdict either: UEFI stalled before GRUB, and this VM went down during BIOS (log, 2026-10-05). The lab now retries such a stall (152ecbe). The step 11 check passed on 56f5359: make lab-e2e PASS, UEFI and BIOS, clean tree, with boot 5, no retries (log, 2026-10-05). The chunk D review is closed (2026-10-06; reviews/2026-10-05-m4-chunk-d.md, plan change C6). Two reviewers: 1 high (narrow), 10 medium, 13 low, 5 cleanups, none of which changed the PASS on 56f5359. Fixes 3115b71 (sc: the 60 s limit, the hangup flag, the login hint), 9d3df9e (lab: verdict classes, teardown, the cache); from the runs of the fixes 1d25037 and c70d886 (sc: the console writer’s turn, a host pause as one slice), 64911f4 and 0ccba27 (lab: the second command line, a SHUTDOWN not lost); the mutation tests fcb1b6d and a371738 (326 lab tests). make lab-e2e on 22383a0: UEFI PASS (24m29s, 0 retries) and, in a bios-only rerun of the same tree, BIOS PASS (45m14s, 2 lab retries, both the host’s pauses); both with boot 5 and dirty=no. Open items are in the write-up; the host’s pauses are yours (below). A check-in every 30 min resumes work after a usage limit (your ask); no VM is up. Step 12 is in (3e72281): scripts/accept-m4.sh (make accept-m4), the non-boot parts as root, nothing real written; checked as a user, not run as root yet. Its run is part of sign-off S1 (with all checks and make lab-e2e) and needs your OK. Step 13 is in (b722bf4): the docs (README “When the machine does not boot”, MILESTONES, PROJECT_LOG, CLAUDE.md; see the log). All 13 steps are built. The chunk E review is closed (reviews/2026-10-06-m4-chunk-e.md, plan change C7): 1 high (the README’s GRUB password recipe), 4 medium, 12 low, 6 cleanups, all fixed. Fixes 654ee7f (sc status: the undo is the newest blocker before a newer error; the menu promise only while its flag is set) and 4b91d97 (accept-m4.sh: the runtime units stay loaded, so step 2 can read their journal; the real store read-only; a bad verdict; more). M4 is built and reviewed. Sign-off S1 passed (your OK, 2026-10-06 14:22 UTC, “yes start S1”; log): all checks, make accept-m4 as root PASS (19f2200), and make lab-e2e PASS in both modes on 2c58f8b, one sc build (cafca1512050): BIOS 44m18s and UEFI 37m19s, no retries, boot 5, clean tree. On the way: an ovmf update made the lab’s reference image stale, and make lab-image was found gone since 9d3df9e (back in b9761a9). Sign-off S2 passed (your OK and your snapshot, 2026-10-06 19:45 UTC, “took the snapshot”; log). The M4 build (cafca1512050, the one S1 tested), the two boot units, the drop-ins and 42_smartconfig are installed on this VM, update-grub has run; the reboot’s verdict ok, flag clear, 23.5 s, sc off the critical chain, the menu hidden, sc status healthy. You reset the two boots after it (a black desktop; your answer). Sign-off S3 passed (your OK and a fresh snapshot, 2026-10-06 21:05 UTC, “Yes, taken — go”; your “s3 done” and two photos, 2026-10-07 06:27 UTC; log): the bad line in /etc/fstab (row 053fdf, scd: blocker); two failed boots, both verdict bad, each with the login screen up over emergency mode (on a desktop gdm takes the screen, so the way in is the next boot’s menu); the rescue boot with the report above “Press Enter” (your photos); your sc restore fb5cf4; and the boot after it: verdict ok, flag clear, /etc/fstab back (sha256 9d71ab60…), sc status healthy, exit 0. New on a desktop, for S4 (log): a red [FAILED] grub-initrd-fallback.service right above the report (Ubuntu’s unit, which cannot write grubenv on the read-only root), sc boot seen twice in each failed boot (harmless here), and the README’s “stops in emergency mode”. S4: the final review is closed (your OK, 2026-10-07 06:45 UTC, “go ahead with S4”; reviews/2026-10-07-m4-final.md, plan change C8): three reviewers, 2 high, 6 medium, all fixed, and 13 low (69ea585 … d9c8817, log); the rest is the M4 follow-up list in MILESTONES. A lab run on 87c6636 was stopped at your word (09:31 UTC) and does not count (log). S4 is closed and M4 is done: tag m4 (your OK, 2026-10-07 13:20 UTC, “yes, go ahead after it passes”; no snapshot, your call; log). make lab-e2e on 59203a3, clean tree, one sc build (1dce09f5ff12): UEFI PASS (19m35s) and, in a BIOS-only rerun of the same tree after a [lab] ssh timeout, BIOS PASS (19m59s); no retries, boot 5. accept-m4 as root PASS on that build, and that build is installed on this VM (sc, both units, 42_smartconfig, update-grub; the S1 build is kept as sc-2c58f8b). The annotated tag m4 is on 59203a3 and pushed. No VM is running. (The reboot check of that install is folded into the follow-ups’ one, below: no reboot came between.)

Now: M5, the package (your call, 2026-10-07: M5 starts after the follow-ups either way). The plan, for your read: M5_PLAN.md; its questions run on the recommended answers until you say otherwise. Its steps, drafted in ~/smartconfig-work/fu-scratch/wt-m5, land one at a time, each with its checks, CI and a worklog line. Where it stands (2026-10-09): steps 1-8 built and reviewed (reviews/2026-10-08-m5.md); of the sign-off (step 9), the lab’s --deb run passed in both modes on 8f91158, and this VM runs that package (installed over the hand install, rebooted, upgraded; log, 2026-10-09), and the remove and the install again passed (2026-10-09, after your policy-rc.d answer: moved aside). M5 is done: tag m5 on 8f91158 (2026-10-09; your answer “Decide later” on the license tagged it on the package the lab tested). This VM runs 0.5.0, built at the tag. The cleanup is done (log). Next: M6.

The M3 and M4 follow-ups: done and signed off (2026-10-08). Chunks F, G and H, each reviewed. make lab-e2e LAB_E2E_ARGS=--grub-password on 643cec3 (clean, sc 22a34f3df9b3): UEFI PASS (29m19s, 1 retry) and, in a BIOS-only rerun of the same tree after host stalls cost two runs their verdicts, BIOS PASS (24m21s, 2 retries); run files in ~/smartconfig-work/signoff/lab-e2e-643cec3/. As root (Claude, your OK of 2026-10-07): accept-m2, accept-m3 and accept-m4 PASS on d686341 with that build (accept-m4 fixed there: the hardened test units ran sc from /home, which ProtectHome= hides), then that build installed: scd Type=notify (startup rescan 413 ms), the three units enabled, systemd-analyze verify clean, grub-script-check ok, the rescue entry in grub.cfg, sc status exit 0, no failed units; the 59203a3 build kept as /var/backups/smartconfig/sc-59203a3. Log ~/smartconfig-work/signoff/signoff-fu-20261008T035149Z-d686341.log. At the next session after a reboot (yours to start: a reboot ends this session): the first boot with the follow-ups’ units. Read-only: its verdict ok, the flag clear, sc-boot-seen and sc-boot-ok done under their sandbox, scd active (Type=notify), sudo sc status exit 0, no failed units; log them.

The M3 and M4 follow-ups, as planned (your call, 2026-10-07: “if you have finished everything from v1 to v4 then only start the M5 plan”, then “All follow-ups”). Every open item of the M3 and M4 follow-up lists and the actionable “Open from the reviews” notes in MILESTONES, one at a time, each with its tests, checks, commit, worklog line, push and CI; where an item has a real choice, you pick. Out: M4 follow-up 8 (LUKS, a non-goal), and the items that are yours (below). Order, severity first, in three chunks, each closed by a review:

M2 follow-ups done; the soak (S6) runs (2026-10-03). M2 is done (tag m2). All 8 follow-ups from the final review are in (log, 2026-10-03), and the build of b6ab3cc runs as scd since 14:27 UTC (the m2 binary is kept as sc-m2). Earlier that day the VM came back from the pre-S5 snapshot; the m2 install, the apt upgrade and the post-upgrade manifest were redone (S5’s results stand, log 2026-10-02).

The soak (S6) is closed (your call, 2026-10-03, after 5.6 h instead of 24; log). It passed on what it saw. Next: your VM settings and snapshot, then the M3 plan for your approval. The soak check, once scd has run about 24 h on this build: uptime, restarts, memory, log volume, unexplained rows, and /etc against manifest-post-s5apt.txt in /var/backups/smartconfig. (Kernel 7.0.0-38 has run since 2026-10-05.) To remove the watcher: README “Watch every change”; keep the store (sc-m1 still reads it; copying changes.db.m1-backup back would drop every M2 row). One thing at a time: no review runs while the next step is built (your call, 2026-09-30).

Done at the tag: m1 on df1a378 (pushed); backups in /var/backups/smartconfig (binary sc-m1, store, /etc and /boot/grub, manifest and checksums), verified; recovery guide points to sc-m1.

Decisions already made for M2 (2026-09-27, “go with your picks”):

  1. Scope: all of /etc minus the exclude list; the tiers only decide how loudly to alert.
  2. Symlinks: supported in M2 (needed for systemd enable, disable and mask).
  3. Deleted and newly created files: recorded in history.
  4. SSH host private keys: fingerprint, mode and owner only, no content.
  5. Outside /etc: authorized_keys files and /boot/grub; not whole .ssh folders (they hold private keys).
  6. The two M1 fixes go first, as a small M1 follow-up.

Log

2026-09-27

2026-09-28

2026-09-28 night (unattended)

2026-09-30

2026-10-02

2026-10-03

2026-10-04

2026-10-05

2026-10-06