Issue Triage
Read-only audit of open issues across active myrgic repositories. Produces a classified inventory, flags untouched and contributor-ready items, and ends with a summary and label recommendations. No write operations are performed.
Scope
Active repos: cogos, constellation, mod3, charts, skills, research, .github, cog-sandbox-mcp
Skip (archived): desktop, openclaw-plugin
Procedure
Step 1: Enumerate open issues
For each active repo, run:
gh issue list \
--repo myrgic/<repo> \
--state open \
--json number,title,author,createdAt,labels,comments,assignees \
--limit 200
Alternatively, enumerate across the org in one pass:
gh search issues \
--owner myrgic \
--state open \
--json number,repository,title,author,createdAt,labels,comments,assignees \
--limit 500
Compute age in days from createdAt to today's date (2026-05-01 as of this version).
Step 2: Classify each issue
Assign exactly one classification per issue:
| Classification | Criteria |
|---|---|
bug |
Identifiable defect; reproducible (see reproducibility heuristic below) |
bug (needs-info) |
Looks like a defect but lacks sufficient reproduction detail |
feature-request |
Enhancement or new capability |
question |
Support or clarification request; often belongs in Discussions, not Issues |
duplicate |
Same underlying problem as another open or recently-closed issue |
stale |
No activity in 60+ days; no clear path forward |
needs-info |
Insufficient detail for any classification; author follow-up required |
good-first-issue |
Scoped, has clear acceptance criteria, suitable for a new contributor |
Reproducibility heuristic for bugs. Check whether the issue body contains these four elements:
- Steps to reproduce
- Expected vs. actual behavior
- Environment or version info
- Logs or error messages
If 3 or 4 are present: classify as bug. If fewer than 3: classify as bug (needs-info).
good-first-issue overrides other classifications when the issue carries that label or meets all three conditions: scope is bounded, acceptance criteria are explicit, and no deep repo knowledge is required.
Step 3: Format each issue
One line per issue:
<repo>#<number> [<classification>] <title> (by @<author>, <age>d, <comment-count> comments)
Example:
cogos#142 [bug] Kernel exits on SIGPIPE with no log output (by @jsmith, 12d, 3 comments)
constellation#88 [feature-request] Add mTLS support for peer connections (by @alice, 45d, 0 comments)
mod3#31 [question] How do I configure a custom voice model? (by @bob, 7d, 1 comment)
Step 4: Group and sort
Output the full list grouped in this order:
bug/bug (needs-info)(highest priority)feature-requestgood-first-issueneeds-infoquestionduplicatestale
Within each group, sort by repo name, then by age (oldest first).
Step 5: Surface notable items
After the grouped list, produce four focused sub-lists:
Untouched (no comments, no labels, 7+ days old): Issues that have received no engagement since filing. These need a first response or label.
Contributor-ready:
Issues labeled good first issue or help wanted, or classified good-first-issue by this triage. Include a one-line summary of the acceptance criteria if present in the body.
Possible duplicates (flag for human verification only): For each open issue, check for title or body keyword overlap with other open issues and with issues closed in the past 90 days:
gh search issues --owner myrgic "<keyword from title>"
Extract 2–4 keywords from each title. If a match appears, list both issues and note the overlap. Do NOT auto-classify as duplicate; flag only.
Example:
POSSIBLE DUPLICATE: cogos#142 and cogos#98 (closed 2026-02-10)
Shared terms: "SIGPIPE", "kernel exit"
Verify: are these the same root cause?
Should be discussions:
Issues classified as question with no code reproduction or actionable defect. Suggest converting to a GitHub Discussion.
Step 6: Summary table
| Metric | Count |
|---|---|
| Total open issues | N |
| bug / bug (needs-info) | N |
| feature-request | N |
| good-first-issue | N |
| needs-info | N |
| question | N |
| duplicate | N |
| stale | N |
| Untouched (no comments, no labels, 7+ days) | N |
| Contributor-ready | N |
| Possible duplicates flagged | N |
Step 7: Recommendations
For each issue, append one read-only recommendation (do not execute):
| Recommendation | When to use |
|---|---|
SUGGEST LABEL: <label> |
Issue lacks a label matching its classification |
SUGGEST ASSIGN: @<maintainer> |
Clearly scoped to one repo's owner, unassigned |
SUGGEST CLOSE: duplicate of #<N> |
High-confidence duplicate |
SUGGEST CONVERT TO DISCUSSION |
Pure question, no reproducible defect |
NO ACTION |
Already labeled, assigned, and active |
Do not run gh issue edit, gh issue close, gh issue comment, or gh label add.
Constraints
- Read-only. No write operations against any repo.
- Skip archived repos (desktop, openclaw-plugin).
- Age calculations are relative to the run date; note the run date at the top of output.
- If a repo returns a 404 or permission error, note it and continue.
- Duplicate detection is fuzzy and keyword-based. Always frame as "possible duplicate, verify manually."
Example output fragment
Run date: 2026-05-01
## bug / bug (needs-info)
cogos#142 [bug] Kernel exits on SIGPIPE with no log output (by @jsmith, 12d, 3 comments)
cogos#137 [bug (needs-info)] Intermittent panic on startup (by @alice, 19d, 0 comments)
## question
mod3#31 [question] How do I configure a custom voice model? (by @bob, 7d, 1 comment)
## Notable: Untouched
cogos#137 [bug (needs-info)] Intermittent panic on startup (19d, no comments, no labels)
## Notable: Possible duplicates (verify manually)
POSSIBLE DUPLICATE: cogos#142 and cogos#98 (closed 2026-02-10)
Shared terms: "SIGPIPE", "kernel exit"
## Summary
| Metric | Count |
|---|---|
| Total open issues | 3 |
| bug / bug (needs-info) | 2 |
| question | 1 |
| Untouched | 1 |
| Contributor-ready | 0 |
## Recommendations
cogos#137 SUGGEST LABEL: needs-info
mod3#31 SUGGEST CONVERT TO DISCUSSION