Files
Nomarchy/agent
Bernardo Magri a9f3a642ee
All checks were successful
Check / eval (push) Successful in 3m16s
fix(nixos): two toggles that reported success and did nothing — wire the state bridges
BACKLOG #116. `nomarchy.settings` is declared in exactly one place —
modules/home/options.nix:412, the Home Manager side. On NixOS the attribute
does not exist, and `or <fallback>` swallows the missing-attribute error, so
four options that "defaulted from the state" had silently been their fallback
on every machine ever built.

The item said three options, and called them benign. Both halves were wrong,
and re-grepping rather than trusting the account is what found it:

  * There were four. The original enumeration read options.nix instead of
    modules/nixos/ and missed services.nix's printing.enable — the same
    mistake in miniature as the bug it was filing.
  * Two were live user-facing bugs. Control Center is shipped
    (default.nix:337) and reachable from the menu; its Bluetooth and Printing
    toggles wrote settings.{bluetooth,printing}.enable and printed "requires
    rebuild", and the rebuild changed nothing. They had never worked.

The fix is one shape, now uniform: the option declares a STATIC default, and
the implementing module reads the state via theme-state-read.nix (fails closed
on bad JSON, unlike greeter.nix's raw fromJSON — also moved onto the reader
here) and mkDefaults it behind `mkIf (state != null)`. An absent key leaves the
option default as the single source of the fallback; a hand-set system.nix
value still pins it. batteryChargeLimit gets no bridge and loses its dead read:
power.nix's oneshot already reads that key with jq at RUNTIME and prefers it
over the baked value, which is why that menu worked all along.

V2. The bug is proved real before/after on the same flipped state: BEFORE,
bluetooth stays true and printing stays false; AFTER, both flip, and a hand-set
value still outranks the state. Nothing in a build fails when a bridge dies, so
the guards are the point — checks.state-bridges asserts 11 eval cases, and
checks.printing-from-state boots a VM whose only input is the state file and
waits for a running cups.service. The guard was itself proved to fail:
re-breaking the bluetooth bridge makes it throw, naming both assertions. A
check that passes whether or not the property holds is worse than no check
(625b7e3). flake check, option-docs, template-sot, downstream-template-*,
installer-safety, hardware-toggles and battery-charge-limit all pass.

No V3: the mechanism is fully proved headlessly. Design record in ROADMAP §
NixOS-side state bridges (#116); new #117 (PROPOSED) for the control-center
toggles still leaving the rebuild to the user.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 16:03:12 +01:00
..

Agent instructions + loop state

Everything an AI agent needs to work on Nomarchy, vendor-neutral and git-tracked. Protocol: LOOP.md. Entry point for every harness: repo-root AGENTS.md.

Instructions (how to work)

File Who writes Role
LOOP.md Human One-iteration protocol (orient → pick → work → verify → commit → record) + the V0V3 ladder
VERIFICATION.md Human (agents propose) Enforcement: preflight, honesty rules, visual protocol, hardware-blocked checks, reporting
DELEGATION.md Human (agents propose) Capability tiers, scout/runner roles, token economy, parallel fan-out
GOALS.md Human (agents propose) Pillars, quality bars, non-goals
CONVENTIONS.md Human (agents propose) How to write code/menu/state while shipping
THEME-DESIGN.md Human (agents propose) Theme/visual design instructions

State (what's happening)

File Who writes Role
BACKLOG.md Both Prioritized queue — only executable work list
JOURNAL.md Agents Append-only iteration log (read last 35 entries; older → JOURNAL-ARCHIVE.md)
MEMORY.md Agents Curated durable gotchas
HARDWARE-QUEUE.md Agents append, human checks On-hardware V3 tests only Bernardo can run

Product / design docs (not a queue)

File Role
../docs/VISION.md v1.0 product themes — agents slice into BACKLOG PROPOSED
../docs/ROADMAP.md Design history + shipped log
../docs/README.md Full docs map

Harness adapters (vendor-specific, thin)

Shared content never lives in an adapter — adapters only register/route into the files above, in whatever format their harness requires.

Path Harness Role
../AGENTS.md any Entry point (CLAUDE.md is a symlink to it)
../.claude/settings.json Claude Code Tool permissions
../.claude/agents/ Claude Code nomarchy-scout / nomarchy-runner role defs (contracts in DELEGATION.md)

Do not put backlog items, vision text, or policy under an adapter directory — it is not shared with other agent runners.

Rules of thumb

  1. Execute from BACKLOG only (NOW → NEXT; never PROPOSED without human triage).
  2. Orient with GOALS + CONVENTIONS + MEMORY + last journal + BACKLOG; when the task is product-shaped, also read the relevant VISION §.
  3. Record lasting design in ROADMAP ✓ when something ships that future humans should know; delete the BACKLOG line.
  4. v1 branch is human-only — never advance from an agent session.