All checks were successful
Check / eval (push) Successful in 3m48s
Every rebuild while docked re-lit the panel and threw a workspace onto it. Not forgetfulness: a rebuild PERFORMS an undock. Dock mode lived only in the compositor (`keyword monitor <internal>, disable`, nothing written down), the config's only monitor line is the catch-all `monitor=,preferred,auto,1`, and rewriting the config makes Hyprland reload it — re-enabling every output. Our own undock path already uses `hyprctl reload` as exactly that hammer (hardware-proven 2026-07-14). The watcher could not rescue it: reconcile diffs `monitors all`, which lists disabled outputs, so the connected set is identical across the flip — structurally blind, the blind spot of rounds 4-5's "the output set is the truth". So the intent is recorded where every other setting lives — settings.display.dockMode, in-flake, menu-writable — written at the one choke point both menu and watcher pass through (transition: dock → true, undock → false, `enable` of an internal → false, because "Screen on" IS leaving dock mode and must not be undone a second later). The watcher re-asserts it as a tick invariant rather than an event reaction, which is what makes the reload case work; auto_dock was already idempotent, so it costs one `hyprctl monitors` per tick. The trap avoided: baking the disable into the config would survive a reload and hand a user with no external a zero-output session at login — the #100/#127 brick. The config cannot know what is plugged in, so it keeps defaulting to "everything on" and the re-assert is gated on an external being present. Verified: 9/9 gates unit-tested by driving the REAL generated function against stubs (incl. no-external → never re-dock, profile active → yield, already-docked → no churn), plus the state write/read round-trip on a throwaway checkout so the live flake was untouched. V3 queued — needs a relogin, the watcher is exec-once. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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 V0–V3 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 3–5 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
- Execute from BACKLOG only (NOW → NEXT; never PROPOSED without human triage).
- Orient with GOALS + CONVENTIONS + MEMORY + last journal + BACKLOG; when the task is product-shaped, also read the relevant VISION §.
- Record lasting design in ROADMAP ✓ when something ships that future humans should know; delete the BACKLOG line.
- v1 branch is human-only — never advance from an agent session.