Skip to content

chore(nix): commit flake.lock and add a nix flake check CI job - #706

Open
forkwright wants to merge 4 commits into
mainfrom
chore/flake-lock
Open

chore(nix): commit flake.lock and add a nix flake check CI job#706
forkwright wants to merge 4 commits into
mainfrom
chore/flake-lock

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Summary

Closes out #610's two remaining artifacts (operator-approved workflow change):

  • flake.lock committed — inputs pinned (nixpkgs 2026-08-10, rust-overlay 2026-08-12, crane, flake-utils, systems), so flake builds are reproducible. Generated on metis with Determinate Nix 3.21.8.
  • New .github/workflows/nix.ymlnix flake check on the DeterminateSystems installer + magic-nix-cache (both SHA-pinned per repo convention). This is the verification surface for the chore(docs,nix,horismos): delete fabricated-feature docs and repair the NixOS module #619 module boot fixes, which were unverifiable when written (no nix toolchain then).

Scope discipline: PRs run the job only when the flake surface changes (flake.nix, flake.lock, nix/**, the workflow itself) — the full check builds the workspace plus two NixOS VM module tests, too heavy for every PR. Main always runs it.

Verification

  • nix flake lock: clean resolution, lock committed.
  • nix eval .#checks.x86_64-linux: all six checks resolve — clippy, deny, fmt, tests, harmonia-basic, harmonia-render-module.
  • The full nix flake check build is CI's job (metis compile budget + KVM VM tests); this PR's own nix.yml run is the first execution — watch it here.

Refs #610

forkwright added 2 commits August 12, 2026 09:29
Locks the flake inputs (nixpkgs, rust-overlay, crane, flake-utils,
systems) so builds are reproducible, and adds a path-filtered nix flake
check workflow — the verification surface for the module boot fixes from
PR #619. Main always runs it; PRs run it only when the flake surface
changes.

Refs #610
The action now requires FlakeHub authentication and fails closed without
it; the repo carries no such credential. The job runs uncached until a
cache account is a deliberate operator decision.

Refs #610
The locked nixpkgs removed the pkgs.nixosTest alias; the module tests now
use the current testers.nixosTest path. Caught by the first nix flake
check run — the CI job proving itself on its first day.

Refs #610
forkwright added a commit that referenced this pull request Aug 12, 2026
## Summary

Drains the standing basanos violation baseline (12 → 1, and that one —
`NIX/flake-lock-committed` — resolves when #706 merges, taking the
workspace to zero). Per the operator's standing rule that the baseline
and suppressions are in scope.

**Real fixes:**
- `paroche/routes/download.rs`: `ReleaseMetadata` gains a validating
constructor — non-empty title/URL enforced once at the persistence
boundary; both construction sites (HTTP route, MCP bridge) now go
through it. `ReleasePersistError` is `#[non_exhaustive]` with a new
`EmptyMetadata` variant and a forward-safe wildcard arm in the bridge's
match.
- `eksetasis/rate_limit.rs` + `komide/fetch.rs`: the two genuinely
wall-clock tests rewritten — paused-clock + `tokio::time::timeout` as
the bound. Same properties asserted (prompt cancel-unblock; client
timeout beats a stalled server), no `Instant::now()` measurement.
- `CONTRIBUTING.md` / `docs/integrations.md`: internal `.lan` FQDN
literals replaced (placeholder for the forge host; reserved
`example.com` domain for the KOReader examples).

**Suppressions (each with a WHY):**
- `search/tests.rs` wall-clock: the assertion measures
`tokio::time::Instant` under an explicitly paused clock — virtual time,
deterministic by construction; the rule's flake concern doesn't apply.
- `gate-attestation.yml` unpinned-action: `forkwright/.github` is
fleet-owned and `@main` is the deliberate single-update channel for the
shared hybrid gate (9 of 10 fleet repos call it this way).

**Cruft deleted:** four stale suppression entries that matched no files
(an as-cast glob for a moved module, a checksum glob, a dep-count entry,
and a per-crate ignore file whose suppressed field was removed in #575).

## Verification

```text
cargo test -p eksetasis: 316 passed; 0 failed
cargo test -p komide:     82 passed; 0 failed
cargo test -p paroche download: 33 passed; 0 failed
cargo test -p archon mcp_bridge: 28 passed; 0 failed
cargo check -p paroche -p archon: clean
cargo fmt --check: clean
kanon lint: 2 remaining (flake.lock → #706; the two justified suppressions above)
```

Refs #705 (the full 159-entry suppression audit is its own campaign)

Co-authored-by: forkwright <noreply@forkwright.dev>
The locked nixpkgs exposed three bit-rotted surfaces the never-locked
flake had been hiding:
- hardware.raspberry-pi."4" is gone: the DAC overlay moves to
  hardware.deviceTree.overlays (dtbo from the rpi kernel's dtbs), and
  onboard-audio-off becomes a snd_bcm2835 module blacklist. The
  iqaudio-dacpro auto-parameter is inexpressible via deviceTree
  overlays — driven by the base overlay now, detection to be verified
  on hardware.
- xdg.desktopEntries is Home Manager, not NixOS: the launcher entry
  becomes a makeDesktopItem package in environment.systemPackages.
- builtins.log never existed: the renderer volume option now takes
  levelDb directly instead of an uncomputable linear-to-dB conversion.
- services.harmonia collides with upstream nixpkgs's unrelated
  binary-cache module: disabledModules pins ours as the one.

All six flake checks now evaluate locally (drvPath for each).

Refs #610
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant