Files
Nomarchy/agent
Bernardo Magri bec826baf0
All checks were successful
Check / eval (push) Successful in 3m10s
fix(docking): the undock keyword is inert, not raced; escalate to reload
Round 7 FAILED: 5-6 consecutive unplugs on the dev box, the panel never came
back. Round 6's retry could not have worked, because round 6's diagnosis was
wrong — and so was the "phantom re-add" theory I brought to this session.

With ZERO enabled outputs — panel disabled by the dock, external gone —
Hyprland 0.55.4 accepts `hyprctl keyword monitor eDP-1,preferred,auto,1`,
prints `ok`, exits 0, and never flushes it: the rule waits for a DRM event
that is not coming. It is inert, not raced. Retrying it 25x/poll for 6 polls
bought 30s of black screen and nothing else.

What made this survive two rounds is worth more than the fix: every
`transition=undock result=ok` in the round-6 journal was Bernardo plugging
the cable back in because the screen was black. His hotplug flushed the
queued rule and the next poll took the credit. Success was indistinguishable
from the user working around the failure, so the logs confirmed whichever
story we brought to them. Ten minutes of probing on hardware killed both.

Probed live 2026-07-14 (dev box, cable out): keyword inert across 4s and 5s
in two runs; `dispatch forcerendererreload` inert too; only `hyprctl reload`
escapes — 99ms and 289ms. So: issue the keyword (enough whenever another
output is still enabled, e.g. the menu's Dock mode), and escalate to reload
only when `monitors` proves it inert. After a reload, re-assert the rule so a
config that parks the panel off cannot undo the undock, and restore per-device
keyboard layouts — a reload re-reads the config and drops the runtime
`device[<name>]:kb_layout` an external board depends on. The menu's `enable`
now proves itself against `monitors` too, instead of cheering for an exit code.

Verified V3 (partial): the fixed transition driven through a real unplug —
panel on, workspaces 1-3 home, 1.8s, `keyword=inert escalate=reload` ->
`enable=via-reload` -> `result=ok`. V2: nix flake check --no-build; docking-ux
+ dock-audio; monitor-fallback.nix; shellcheck clean on display-transition.

NOT proven, and queued as HARDWARE-QUEUE round 8: the watcher-driven path
(exec-once + baked store path = relogin required, the round-5 trap) and
repetition. The keyboard-restore path is untested — the dev box's keyboard
hangs off the dock's hub, so it leaves with the cable; round 8 adds a check
with a keyboard in the laptop. The VM harness still cannot reach any of this:
QEMU aborts Hyprland if the last active output is deleted while the DRM output
is disabled, which is the same zero-output degeneracy from the other side.

New BACKLOG #114 (PROPOSED): tuigreet ignores per-device keyboard layouts —
a VT has one keymap, so the greeter cannot honour `device[]:kb_layout`.
Bernardo hit it logging out while docked; not a regression, a design gap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 12:28:06 +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.