enBoxer/PLAN.md

3.4 KiB
Raw Blame History

Plan

enBoxer is a new Hyprland program. It routes keys to several World of Warcraft windows and can show a live crop of one window on another.

How work is split

Two roles. They do not share a keyboard.

Role Who Does
Designer + PM Grok Writes this file and TASKS.md. Splits the product into small tickets before the worker starts a phase. Does not implement those tickets.
Worker OpenCode Implements open tickets, one at a time, with the ponytail plugin on (opencode.json). Never --pure. Never runs ponytail-review.

Sequence for a phase:

  1. Grok writes every ticket for that phase into TASKS.md (Open list). That is “giving tasks.”
  2. Grok starts OpenCode against those tickets. No ponytail-review while tickets are still being written or still open.
  3. OpenCode finishes the phase (or says a ticket is blocked).
  4. Grok reads the diff against the tickets (ordinary review: did the ticket land, tests pass). Not ponytail.
  5. If a ticket is wrong, Grok adds a smaller ticket and sends OpenCode back. That is a new giving-tasks step; ponytail still waits.
  6. When Grok accepts the whole phase, Grok runs ponytail-review once.
  7. Grok pushes HTTPS https://gitea.nettsi.de/en/enbuddy. No SSH.

OpenCode must not invent tickets, add features, or “clean up” docs unless a ticket says so.

Product rules (do not regress)

  • Named maps: a hotkey runs a list of steps to named targets (current, others, all, group:…, slots:…).
  • Keys not in maps (and not in repeater) go only to the focused primary.
  • passthrough is a list. Empty means nothing is skipped. The example profile uses ESDF so those letters stay on the primary.
  • Routing is off when focus is not a managed game window and not an enBoxer overlay.
  • No code is loaded into the game. Keys go through Hyprland (hl.dsp.send_shortcut / send_key_state).
  • No game addon in v1. Macros and the Interact with Target bind are documented in docs/MACROS.md.
  • Video FX: crop of slot A drawn on the primary; hover with pass_through sends keys and clicks to slot A only.

Phase 0 — tree and contract (Grok)

  • Crate, profile, engine, Hyprland session, grim Video FX, tests
  • README.md, DESCRIPTION.md, CHANGELOG.md, AGENT.md, TASKS.md, this file
  • opencode.json with ponytail
  • Git remote + push (after Phase 1 is accepted and Grok has run ponytail-review)

Phase 1 — OpenCode tickets (all assigned below; do not ponytail-review until they are closed)

See TASKS.md.

  • T1 format — closed
  • T2 clippy — closed
  • T3 stop if already clean — closed
  • T4 Video FX click pass-through — closed
  • T5 log slot list when it changes — closed
  • T6 test: empty passthrough can map e — closed

Phase 1 Open list is empty. Next: Grok ponytail-review, then git push.

Later (not this phase, not OpenCode until Grok files tickets)

  • Capture a window that is fully covered (hyprland-toplevel-export)
  • Clicks on a covered source without moving the real cursor onto the covering window
  • Follow/assist binds that track which slot is primary
  • Check Forevers macro language when that client exists

Invoke worker

opencode run --dir /home/en/git/enBoxer --auto --title "enBoxer T4-T6" \
  "Read AGENT.md, PLAN.md, TASKS.md. Ponytail plugin required. Do open tickets in order, one at a time. Do not run ponytail-review."