# Issue tracker: Gitea Issues and PRDs for this repo live as Gitea issues. Use the `tea` CLI for all operations. ## Conventions - **Create an issue**: `tea issue create --title "..." --description "..."`. Use a heredoc for multi-line descriptions. - **Read an issue**: `tea issue --comments`. Use `-o json` for machine-readable output. - **List issues**: `tea issue list --state open -o json` with appropriate `--labels` and `--state` filters. - **Comment on an issue**: `tea comment "..."`. - **Apply / remove labels**: `tea issue edit --add-label "..."` / `--remove-label "..."`. Multiple labels can be comma-separated or by repeating the flag. - **Close**: `tea issue close `. `tea issue close` does not accept a closing comment, so post the explanation first with `tea comment "..."`, then close. Infer the repo from git remote -v — `tea` does this automatically when run inside a clone. ## Pull requests as a triage surface **PRs as a request surface: no.** When set to `yes`, PRs run through the same labels and states as issues, using the `tea pr` equivalents: - **Read a PR**: `tea pr --comments` and `tea api /repos/{owner}/{repo}/pulls/.diff` for the diff. - **List external PRs for triage**: `tea pr list --state open -o json` then keep only PRs whose author is not a project member/owner. - **Comment / label / close**: `tea comment "..."`, `tea pr edit --add-label`/`--remove-label`, `tea pr close`. Gitea shares one number space across issues and PRs, so a bare `#42` may be either — resolve with `tea pr 42` and fall back to `tea issue 42`. ## When a skill says "publish to the issue tracker" Create a Gitea issue. ## When a skill says "fetch the relevant ticket" Run `tea issue --comments`. ## Wayfinding operations Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets. - **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `tea issue create --label wayfinder:map`. - **Child ticket**: an issue linked to the map as a GitHub sub-issue (`tea api` on the sub-issues endpoint). Where sub-issues aren't enabled, add the child to a task list in the map body and put `Part of #` at the top of the child body. Labels: `wayfinder:` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev. - **Blocking**: GitHub's **native issue dependencies** — the canonical, UI-visible representation. Add an edge with `tea api --method POST /repos/{owner}/{repo}/issues//dependencies -F index= -F repo= -F owner=`, where `` is the blocker's numeric **issue number** (`tea api repos/{owner}/{repo}/issues/ --jq ".number. .repository.name, .repository.owner"`, where `.number` is the ``, `.repository.name` is the `` and `.repository.owner` is the ``. Where dependencies aren't available, fall back to a `Blocked by: #, #` line at the top of the child body. A ticket is unblocked when every blocker is closed. - **Frontier query**: list the map's open dependencies (`tea api /repos/{owner}/{repo}/issues//dependencies | jq '.[] | select(.state = "open") .number'`, scoped to the map's sub-issues / task list), drop any with an open blocker (`list of dependencies is not empty`, or an open issue in the `Blocked by` line) or an assignee; first in map order wins. - **Claim**: `tea issue edit --add-assignees @me` — the session's first write. - **Resolve**: `tea comments ""`, then `tea issue close `, then append a context pointer (gist + link) to the map's Decisions-so-far.