# OpenCode tickets Product: [GOALS.md](GOALS.md). Do not invent work. Do not `hyprctl dispatch` on the live session. **Safety (all tickets)** - No `hyprctl dispatch` that floats, moves, resizes, pins, or closes any window on the live session — except when the user explicitly clicks the **Launch** button or **Save and Apply** (both are gated by `allow_layout` already; auto-apply on launch only fires after the Launch button is clicked). - Any live Wayland / overlay / export path remains feature-gated so `cargo test` does not touch the user's Hyprland session. - Do **not** commit. - Do **not** push. - Do **not** run `ponytail-review`. - Do **not** pass `--pure`. - Do **not** delete or revert the in-flight diff from T7..T12 — keep `git diff --stat` showing the prior additions. ## Open _Tickets will be re-opened here after the next planning round._ ## Closed T15 — Teams + Lutris launcher. Closed by OpenCode. `src/team.rs` (Team, TeamMeta, list_teams, teams_dir, current_team read/write), `src/lutris.rs` (LutrisGame, parse, load_all, default_dir), `src/launcher.rs` (SpawnPlan, TeamLaunchOpts, spawn_plan), GUI Teams menu (New/Switch/Refresh/Show/Delete) plus Launch menu; auto_apply gated behind the Launch button. `cargo test` 89/89 green; `cargo clippy --all-targets -- -D warnings` clean. T14 — Round-robin bind target. Closed by OpenCode. `Engine::round_robin: HashMap`, `resolve_targets("round_robin" | "rr", map_name)` advances and wraps per-map. Example profile has `rez_cycle` map with `target: round_robin`. Tests cover cycle, wrap, per-map isolation, fresh-engine reset. T13 — Mouse click broadcast in mirror mode. Closed by OpenCode. `session::mirror_clicks_to(slots, leader, button)` returns others minus leader; per-char × per-button routing plan unit-tested; live click delivery is the existing IPC path (gated, no live dispatch). T10 — Real covered-window VFX capture (dmabuf export). Closed by OpenCode. `src/toplevel_export.rs` ships `zwlr_export_dmabuf_unstable_v1` protocol bindings, format negotiation (`DRM_FORMAT_ARGB8888` / `DRM_FORMAT_XRGB8888`), synthetic-PNG file write, env-gated stub. `gbm_bo_map` left as a documented follow-up (`read_pixels_via_gbm_is_a_documented_followup` test). `cargo test` + clippy clean. T9 — Real slot overlay (wlr-layer-shell). Closed by OpenCode. `src/wayland_layer.rs` binds `zwlr_layer_shell_v1`, spawns one shm-backed 96×96 surface per slot anchored top-left, renders slot number via 3×5 bitmap digits in pure Rust. Click routes through `click_verb` to the IPC socket. Live spawn gated behind `ENBOXER_ENABLE_OVERLAY=1`; `cargo test` never connects to Wayland. Protocol-constants test confirms dispatch table parses XML. T8 — Clipboard broadcast. Closed by OpenCode (previous run). `clipboard` IPC verb; `read_clipboard` shells out to `wl-paste` then `xclip`; `clipboard_to_others` filters out the leader and delivers `Ctrl+v`. Routing factored into `others_clients` helper. Session page button added. `cargo test` 44/44 green. T12 — Type + confirm-apply tests. Closed by OpenCode (previous run). `session::tests::type_routing_plan_covers_every_other_slot_per_char`, `layout::tests::apply_short_circuits_when_layout_disallowed`. T11 — Named profiles list. Closed by OpenCode (previous run). `list_profiles_in` helper, `Load named…` submenu, two tests. T9-stubs — Slot-number overlay stub. Closed by OpenCode (previous run). `src/overlay.rs` shipped with `OverlayRect`, `overlay_rect`, `click_verb`, `OverlayHub`. Live wlr-layer-shell render was gated and stubbed; T9 above replaces the stub with the real client. T10-stubs — Toplevel-export stub. Closed by OpenCode (previous run). `is_window_visible` predicate + `capture_for_source` dispatcher + `capture_toplevel` gated stub. T10 above replaces the stub with the real dmabuf capture. T7 — Layout GUI: finish the in-flight diff. Closed 2026-09-15T09:17:45Z by orchestrator; OpenCode landed `layout_canvas`, `borderless` checkbox, `refresh_monitors`; `cargo test` 24/24 green. T1–T6 hygiene and Video FX click/passthrough tests (see git log).