|
|
@@ -1,6 +1,6 @@
|
|
|
# Issue tracker: GitHub
|
|
|
|
|
|
-Issues and PRs for this repo live as GitHub issues. Use the `gh` CLI for all operations. The project repo is `alvinunreal/oh-my-opencode-slim`; the fork `mhenke/oh-my-opencode-slim` is used for PRs.
|
|
|
+Issues and PRs for this repo live as GitHub issues. Use the `gh` CLI for all operations. The project repo is `alvinunreal/oh-my-opencode-slim`.
|
|
|
|
|
|
## Conventions
|
|
|
|
|
|
@@ -11,7 +11,7 @@ Issues and PRs for this repo live as GitHub issues. Use the `gh` CLI for all ope
|
|
|
- **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
|
|
|
- **Close**: `gh issue close <number> --comment "..."`
|
|
|
|
|
|
-Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone. When working from the fork, pass `--repo alvinunreal/oh-my-opencode-slim` (or rely on the `GH_REPO` default).
|
|
|
+Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone. **Write operations (create / label / comment / close) must target the upstream tracker:** pass `--repo alvinunreal/oh-my-opencode-slim` (or set `GH_REPO=alvinunreal/oh-my-opencode-slim`). In a fork clone, a bare `gh` command would mutate your fork instead of the project tracker.
|
|
|
|
|
|
## Pull requests as a triage surface
|
|
|
|
|
|
@@ -23,13 +23,13 @@ Guardrails (per council review):
|
|
|
- Apply only `bug` or `enhancement` to PRs. Do not apply state labels (`needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`).
|
|
|
- Never apply `good-to-code` to PRs — they are already code; the label is noise.
|
|
|
- Never auto-close external PRs during triage. Closure stays in the review flow / maintainer decision.
|
|
|
-- Filter on `authorAssociation`, not PR content: keep CONTRIBUTOR / FIRST_TIME_CONTRIBUTOR / NONE; drop OWNER / MEMBER / COLLABORATOR.
|
|
|
+- Filter on `authorAssociation`, not PR content: keep CONTRIBUTOR / FIRST_TIME_CONTRIBUTOR / NONE (and any other non-collaborator association); drop OWNER / MEMBER / COLLABORATOR / FIRST_TIMER / MANNEQUIN.
|
|
|
- Keep PR triage out of issue metrics — don't mix PR counts into issue triage reporting.
|
|
|
|
|
|
When enabled, PRs are labeled using the `gh pr` equivalents:
|
|
|
|
|
|
- **Read a PR**: `gh pr view <number> --comments` and `gh pr diff <number>` for the diff.
|
|
|
-- **List external PRs for triage**: `gh pr list --state open --json number,title,body,labels,author,authorAssociation,comments` then keep only `authorAssociation` of `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, or `NONE` (drop `OWNER`/`MEMBER`/`COLLABORATOR`).
|
|
|
+- **List external PRs for triage**: `gh pr list --state open --json number,title,body,labels,author,comments` to enumerate open PRs, then for each run `gh pr view <number> --json authorAssociation` and keep only `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, or `NONE` (drop `OWNER`/`MEMBER`/`COLLABORATOR` and any other non-collaborator association).
|
|
|
- **Comment / label / close**: `gh pr comment`, `gh pr edit --add-label`/`--remove-label`, `gh pr close`.
|
|
|
|
|
|
GitHub shares one number space across issues and PRs, so a bare `#42` may be either — resolve with `gh pr view 42` and fall back to `gh issue view 42`.
|
|
|
@@ -42,13 +42,3 @@ Create a GitHub issue.
|
|
|
|
|
|
Run `gh issue view <number> --comments` (or `gh pr view` for a PR).
|
|
|
|
|
|
-## 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. `gh issue create --label wayfinder:map`.
|
|
|
-- **Child ticket**: an issue linked to the map as a GitHub sub-issue (`gh 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 #<map>` at the top of the child body. Labels: `wayfinder:<type>` (`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 `gh api --method POST repos/<owner>/<repo>/issues/<child>/dependencies/blocked_by -F issue_id=<blocker-db-id>`, where `<blocker-db-id>` is the blocker's numeric **database id** (`gh api repos/<owner>/<repo>/issues/<n> --jq .id`, _not_ the `#number` or `node_id`). GitHub reports `issue_dependencies_summary.blocked_by` (open blockers only — the live gate). Where dependencies aren't available, fall back to a `Blocked by: #<n>, #<n>` line at the top of the child body. A ticket is unblocked when every blocker is closed.
|
|
|
-- **Frontier query**: list the map's open children (`gh issue list --state open`, scoped to the map's sub-issues / task list), drop any with an open blocker (`issue_dependencies_summary.blocked_by > 0`, or an open issue in the `Blocked by` line) or an assignee; first in map order wins.
|
|
|
-- **Claim**: `gh issue edit <n> --add-assignee @me` — the session's first write.
|
|
|
-- **Resolve**: `gh issue comment <n> --body "<answer>"`, then `gh issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.
|