diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index 6abd4692..e90bf695 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -4,6 +4,10 @@ on: issues: types: [opened] +concurrency: + group: triage-${{ github.event.issue.number }} + cancel-in-progress: true + jobs: triage: runs-on: ubuntu-latest diff --git a/.opencode/agent/triage.md b/.opencode/agent/triage.md index 7844459a..9690cdea 100644 --- a/.opencode/agent/triage.md +++ b/.opencode/agent/triage.md @@ -20,21 +20,89 @@ Only use labels that already exist in this repository. Do not create labels. ## Triage Rules -Classify the issue by the strongest matching area: +### Step 1: Type label (pick the strongest match) -- UI: shared React UI, chat, settings, terminal UI, theme, typography, layout, and user-facing behavior. -- Web: web server, HTTP/SSE APIs, OpenCode server integration, filesystem routes, Git/GitHub/quota/notification/terminal/TTS/skills modules. -- Electron: desktop shell, native menus, dialogs, notifications, updater, deep links, quit behavior, and Electron packaging. -- VS Code: extension host, webview, bridge/runtime behavior, and VS Code packaging. -- Release: GitHub Actions, release builds, auto-update, installers, signing, publishing, and packaging pipelines. -- Docs: documentation, README, changelog, guides, and unclear instructions. -- Question or support: user needs help, setup guidance, or clarification rather than a code change. +| Label | When to apply | +|---|---| +| `bug` | Something is broken or not working as expected | +| `enhancement` | New feature request or improvement suggestion | +| `documentation` | README, guides, changelog, or unclear docs | +| `question` | User needs help, setup guidance, or clarification (not a code change) | + +### Step 2: Area label (pick the strongest match, use `area:*` labels) + +| Label | Covers | +|---|---| +| `area:chat-ui` | Chat messages, rendering, markdown, bubbles | +| `area:chat-input` | Chat input box, IME, message composing | +| `area:sessions` | Session lifecycle, list, status, history | +| `area:settings` | Settings UI, config, preferences | +| `area:agents` | Agents, subagents, multi-run, agent manager | +| `area:providers` | Model providers, API keys, model selection | +| `area:git` | Git operations, worktrees, branches, diffs, commits | +| `area:sidebar` | Sidebar, session list, folders, project list | +| `area:remote` | Remote instances, SSH, VPS, tunnels | +| `area:terminal` | Integrated terminal, PTY, xterm | +| `area:vscode` | VS Code extension, webview, extension host | +| `area:notifications` | Push/mobile/web notifications | +| `area:streaming` | SSE streaming, spinner, real-time updates | +| `area:sync` | State sync, cross-runtime consistency | +| `area:auth` | Authentication, passwords, OAuth, tunnels | +| `area:installation` | Install, Docker, Nix, deployment | +| `area:desktop` | Desktop shell (Electron/Tauri), window management | +| `area:keyboard` | Keyboard shortcuts, keybinds, input handling | +| `area:permissions` | Permission prompts, allow/deny flows | +| `area:compact` | Context compaction, /compact command | +| `area:i18n` | Internationalization, translations, locale | +| `area:queue` | Message queuing, queued messages | +| `area:files` | File viewer, file picker, file tree | +| `area:scheduled-tasks` | Scheduled/recurring tasks | + +### Step 3: Platform label (if clearly platform-specific) + +| Label | Covers | +|---|---| +| `platform:web` | Desktop web browser (incl. CLI serve) | +| `platform:macos` | macOS desktop (Electron/Tauri) | +| `platform:linux` | Linux desktop | +| `platform:windows` | Windows desktop / WSL | +| `platform:mobile` | Mobile web/PWA (iOS/Android) | +| `platform:vscode` | VS Code extension | + +### Step 4: Provider label (if clearly provider-specific) + +| Label | Covers | +|---|---| +| `api:anthropic` | Anthropic/Claude provider | +| `api:openai` | OpenAI provider | +| `api:openrouter` | OpenRouter provider | +| `api:copilot` | GitHub Copilot provider | +| `api:google` | Google/Gemini provider | + +### Step 5: Priority and quality labels (apply when evidence supports it) + +| Label | When to apply | +|---|---| +| `priority:high` | Blocks core workflows, data loss, or many users | +| `priority:medium` | Significant UX issue or common feature gap | +| `priority:low` | Minor UX polish, niche feature request | +| `data-loss` | Risk of losing user data or overwriting files | +| `regression` | Bug that worked in a previous release | +| `has-repro` | Confirmed reproducible with clear steps | +| `needs-repro` | No clear reproduction steps provided | +| `needs-info` | Needs more info from reporter to reproduce | + +### General guidelines + +- Apply at most 1 type label, 1-2 area labels, 1 platform label, and 1 provider label. +- Only add priority/quality labels when the issue clearly warrants them. +- Do not add labels speculatively; skip any category where the match is ambiguous. ## Output For each issue: -- Add a small set of accurate existing labels when appropriate. -- Leave one helpful comment with a short summary, likely affected area, and any missing information needed from the reporter. +- Add a small set of accurate existing labels following the steps above. +- In a single comment summarize the issue and ask the reporter for any additional information needed to complete the request. - Keep the comment friendly and concise. -- If there is not enough information, ask for the smallest useful reproduction details. +