fix(neogaia): replace guessed hardware detection with a real scan (task 0017) #2

Merged
alexion merged 6 commits from task-0017-hardware-detection-refresh into main 2026-07-19 23:12:42 -04:00
2 changed files with 30 additions and 31 deletions
Showing only changes of commit 42c602b814 - Show all commits

View File

@@ -22,40 +22,38 @@ One thing must be true before the disk is erased: every branch worth keeping has
- [x] The `Host`'s disk layout declares a 2 GiB EFI system partition - [x] The `Host`'s disk layout declares a 2 GiB EFI system partition
- [x] Every local branch worth keeping exists on the remote before the disk is erased - [x] Every local branch worth keeping exists on the remote before the disk is erased
- [ ] The reimage is performed from a configuration carrying the hardware profile, following the existing install documentation - [x] The reimage is performed from a configuration carrying the hardware profile, following the existing install documentation
- [ ] The install documentation is corrected wherever the procedure diverged from what it describes - [x] The install documentation is corrected wherever the procedure diverged from what it describes
- [ ] Manual confirmation: the machine boots, the encrypted root unlocks, and console login succeeds - [x] Manual confirmation: the machine boots, the encrypted root unlocks, and console login succeeds
- [ ] Manual confirmation: reported free space on the boot partition is consistent with its 2 GiB size, resolving the discrepancy observed before the reimage — where a 512 MiB partition reported 1022 MiB - [x] Manual confirmation: reported free space on the boot partition is consistent with its 2 GiB size, resolving the discrepancy observed before the reimage — where a 512 MiB partition reported 1022 MiB
- [x] The project's agent instructions record that a flake only sees git-tracked files, so an untracked file is invisible to evaluation - [x] The project's agent instructions record that a flake only sees git-tracked files, so an untracked file is invisible to evaluation
## Implementation Notes ## Implementation Notes
This task is **blocked on an operator action**, not finished. Three of seven Done. The reimage was performed by the operator and the machine now runs the
criteria are satisfied: the declaration, the branch check, and the recorded configuration this repository declares.
gotcha. The remaining four all depend on erasing the disk, which is not an
action taken on the operator's behalf.
The branch check was verified rather than assumed — no local branch holds a The install ran clean: the operator reports no step diverged from
commit absent from the remote, so nothing is lost to the wipe. Two items that `docs/install.md`, so criterion 4 is satisfied with no further corrections. The
live outside the repo do not survive it and are not covered by any criterion: four corrections that landed earlier came from reading the procedure; the run
the agent memory directory, and the wifi credentials. itself found nothing to add. That is the reproducibility evidence the task was
after — the document is a procedure, not a record of one improvised session.
Criterion 4 is deliberately left open despite four corrections already landing Verified on the running machine rather than assumed:
on the main branch — a wrong repository name in both clone commands, a closing
section describing a superseded key-derivation design, a stale enumeration of
flake inputs, and a bootstrap-ordering sentence contradicting a later one. All
four were found by reading the procedure. The criterion asks for divergences
found by *running* it, which has not happened. The wrong repository name would
have stopped the install at the clone step, so the reading pass was worth doing;
it is just not the same evidence.
**Ordering hazard.** Between merging this and completing the reimage, the - `/dev/nvme0n1p1` is 2.0 GiB and `df` reports 2.0 GiB. The pre-reimage
repository asserts a partition layout the physical disk does not have, and disko discrepancy, where a 512 MiB partition reported 1022 MiB, is gone.
reconciles nothing on a running machine. The declaration should reach the branch - The hardware profile is live — `mem_sleep_default=deep` is on the kernel
the install reads immediately before the install, not days ahead of it. If the command line and `psmouse` is blacklisted and not loaded.
reimage is deferred, this is the file that quietly lies about the only laptop. - `cryptroot` is open on `nvme0n1p2` with btrfs mounted, reached through a
console login, so the boot-unlock-login path is exercised end to end.
- One generation exists (`system-1-link`), confirming a fresh install rather
than a rebuild of the prior system.
One correction outside this task's scope also landed here: the gotcha claiming The ordering hazard closed favourably: the declaration and the install landed
git identity was unconfigured, which a hand-written `~/.gitconfig` had made close enough together that the repository never asserted a layout the disk
false. Moving that identity into the flake belongs to the commit-identity work lacked for long.
this task's description explicitly fences off.
Two items outside the repo did not survive the wipe, as anticipated, and neither
is covered by a criterion: the wifi credentials, and the agent memory directory
— confirmed empty after the reimage.

View File

@@ -29,8 +29,9 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla
Both were true only while the machine still ran CachyOS against a distro Nix daemon. Both were true only while the machine still ran CachyOS against a distro Nix daemon.
- The substituters a `nix build` fetches from are the **daemon's** (`/etc/nix/nix.conf`), *not* the `nix.settings` of the config being built — those only govern the built system. - The substituters a `nix build` fetches from are the **daemon's** (`/etc/nix/nix.conf`), *not* the `nix.settings` of the config being built — those only govern the built system.
The two coincide here because the dev host runs this flake; they diverge on any machine that does not. The two coincide here because the dev host runs this flake; they diverge on any machine that does not.
- Git identity is not declared in the flake — there is no `programs.git`but commits do work: identity comes from a hand-written `~/.gitconfig` plus this checkout's `.git/config`. - Git identity is not declared in the flake — there is no `programs.git`so it must be set by hand before the first commit on a fresh machine.
Both sit outside the flake, so neither survives a reimage nor reaches another machine; history uses `alexion <contact@alexion.dev>`. The July 2026 reimage confirmed this: it wiped the hand-written `~/.gitconfig`, and the next commit failed with `Author identity unknown`, auto-detecting `alexion@neogaia.(none)`.
It now lives in this checkout's `.git/config`, which reaches no other machine and does not survive the next reimage either; history uses `alexion <contact@alexion.dev>`.
- The primary build/verify seam for any Host is `nix flake check`, which builds `checks.x86_64-linux.<host>` (the system toplevel); cheap targeted checks use `nix eval .#nixosConfigurations.<host>.config...`. - The primary build/verify seam for any Host is `nix flake check`, which builds `checks.x86_64-linux.<host>` (the system toplevel); cheap targeted checks use `nix eval .#nixosConfigurations.<host>.config...`.
- A flake only sees **git-tracked** files, so a new file that has not been `git add`ed is invisible to evaluation even though it exists on disk. - A flake only sees **git-tracked** files, so a new file that has not been `git add`ed is invisible to evaluation even though it exists on disk.
The failure names the path and reads as if the file were missing: `error: Path 'secrets/shared.yaml' does not exist in Git repository`. The failure names the path and reads as if the file were missing: `error: Path 'secrets/shared.yaml' does not exist in Git repository`.