enBoxer/PLAN.md

69 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
- [x] Crate, profile, engine, Hyprland session, grim Video FX, tests
- [x] `README.md`, `DESCRIPTION.md`, `CHANGELOG.md`, `AGENT.md`, `TASKS.md`, this file
- [x] `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
```bash
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."
```