# Issue tracker: Gitea Issues and specs for this repo live as Gitea issues on the self-hosted instance at `git.arthurerlich.de` (repo: `haylan/LLM-Server`). Use the **`tea` CLI** (already installed and authenticated as `haylan` via `tea login`) for all operations — it's faster and needs no extra setup. Fall back to the `gitea` skill (Membrane-based) only for operations `tea` doesn't cover. ## Conventions - **Create an issue**: `tea issues create --title "..." --description "..." --labels "..."` - **Read an issue**: `tea issues --comments` - **List issues**: `tea issues list --state open --labels "..."` (add `-f` to control which fields print) - **Comment on an issue**: `tea comment -d "..."` (check `tea comments -h` for exact flags — `tea comments create` is invalid, `add`/`a` is the subcommand) - **Apply / remove labels**: `tea issues edit --add-labels "..."` / `--remove-labels "..."` - **Close**: `tea issues close ` - **Labels**: `tea labels create --name "..." --color "#hex" --description "..."`; `tea labels list` `tea` infers the repo from the working directory's git remote; pass `-r haylan/LLM-Server` when running outside the repo. ### Issue dependencies (native blocking) `tea` has no dependency subcommand — use the raw API. Get a token from `~/.git-credentials` (the `git.arthurerlich.de` line) or `tea login list`. - **Add a "blocked by" edge** (child index is blocked by blocker index) — `owner`/`repo` in the body are required, `index` alone 404s: `curl -s -X POST "https://git.arthurerlich.de/api/v1/repos/haylan/LLM-Server/issues//dependencies" -H "Authorization: token $TOKEN" -H "Content-Type: application/json" -d '{"index": , "owner": "haylan", "repo": "LLM-Server"}'` - **List dependencies**: `GET` the same URL. - **Remove**: `DELETE` the same URL with the same body. Confirmed present and working on this instance (Gitea 1.27.2, `enable_issue_dependencies: true`; verified live against the map created by this skill's first run). ## Pull requests as a triage surface **PRs as a request surface: no.** _(Set to `yes` if this repo treats external PRs as feature requests.)_ ## When a skill says "publish to the issue tracker" Create a Gitea issue via `tea issues create`. ## When a skill says "fetch the relevant ticket" Fetch the issue (with comments) via `tea issues --comments`. ## Wayfinding operations Used by `/wayfinder`. This Gitea instance (1.27.2) has **no native sub-issue/parent-child relation** in its API (only `dependencies`, confirmed via swagger) — so the map uses the body-convention fallback the skill describes for that case. It **does** have native issue **dependencies**, used for blocking. - **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Not-yet-specified body. `tea issues create --labels "wayfinder:map" --title "..." --description "..."`. - **Child ticket**: a plain issue, linked to the map via a task-list line in the map body (`- [ ] (#)`) and a `Part of #` line at the top of the child's body — sub-issues aren't available here. Labels: `wayfinder:` (`research`/`prototype`/`grilling`/`task`). Once claimed, assign it to the driving dev (`tea issues edit --add-assignees haylan`). - **Blocking**: native issue dependencies via the raw API calls above. A ticket is unblocked when every dependency (`GET .../dependencies`) is closed. - **Frontier query**: `tea issues list --state open --labels "wayfinder:,wayfinder:,..."` scoped to the map's children (cross-check against the map's task list), drop any with an open dependency or an assignee. - **Claim**: `tea issues edit --add-assignees haylan` — the session's first write. - **Resolve**: `tea comment -d ""`, then `tea issues close `, then append a context pointer (gist + link) to the map's Decisions-so-far, and check off its line in the map's task list. Map edits are full-body replaces (`tea issues edit` has no append) — concurrent resolutions racing on the same map issue can clobber each other's Decisions-so-far lines; re-fetch the map immediately before editing it, not from an earlier read.