Wontfix
SkillAI & modelsUse when the user wants to elicit refused directions, generalize them, and close matching tracker items as not planned. Not for duplicates, spam, or items closed as completed or obsolete.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Wontfix skill
What this skill tells your AI
The instructions your AI receives, as published by outlinedriven/odin-claude-plugin in plugins/odin-git/skills/wontfix/SKILL.md and read by ahel’s review.
Contract
| Field | Bound contract |
|---|---|
| Trigger | User wants to elicit refused directions, generalize and concretize them, and close matching tracker items as not planned. |
| Authority | Remote: closes matching tracker items as not planned; requires explicit human invocation. The exact target set and its consequence are previewed and approved before any mutation; the same approval gates the optional local docs record. No credential, paid, publishing, or deployment mutation occurs. |
| Side effect | Matching tracker items closed as not planned; optional refusal preserved in docs. |
| Done | Refused directions are documented and matching items are closed as not planned after user approval. |
Inputs
Must be supplied by the user:
- The refused directions or designs, in the user's own words; rough phrasing is acceptable and is recorded verbatim.
- The GitHub repository in scope; the working repository is used when
gh repo view --json nameWithOwnerresolves it, otherwise an explicitowner/repois required. - Explicit approval of the exact closure set before any mutation.
Optional:
- A durable refusal record in the docs folder; without the request, no docs file is touched.
- Narrowing filters (labels, assignees, search terms) to bound enumeration.
Procedure
- Name the tracker in scope: run
gh repo view --json nameWithOwner; on error, ask forowner/repoand rerungh repo view <owner>/<repo> --json nameWithOwner. Done when: tracker is identified, or the step has stopped on failure with zero mutations. - Elicit refused directions: ask the user what will not be done. Record each statement verbatim. Never add, infer, or propose refusals the user did not state. Done when: all refused directions are recorded verbatim.
- Generalize and concretize each verbatim refusal: the generalization is the refused class of work in one sentence; the concretization is the detectable matching signals (keywords, component or path names, label names, design choices). A refusal that resists either form is ambiguous. Done when: every refusal has a generalization and concretization, or is marked ambiguous.
- Resolve every ambiguous refusal and confirm the completed refusal list with the user. The list is frozen only after this confirmation. Done when: refusal list is confirmed and frozen.
- Enumerate the open tracker surface:
gh issue list --repo <owner>/<repo> --state open --json number,title,body,url,labels --limit 200andgh pr list --repo <owner>/<repo> --state open --json number,title,body,url,labels --limit 200. When the returned count equals the limit, rerun with a higher--limituntil the open set is fully covered. Done when: open issues and PRs are fully enumerated, or the step has stopped on enumeration failure with zero mutations. - Match items to refusals: an item joins the closure set only when its title, body, or labels match a concretized signal of some refusal. For borderline candidates read the full item with
gh issue vieworgh pr view, and include it only on an explicit signal match. Record kind, number, title, URL, matched refusal, and matched signal for every included item; list excluded borderline items as not matched. Done when: every open item is classified as matched or not matched. - Preview and gate: present the exact closure set (number, kind, title, URL, matched refusal) with the consequence: issues close with reason "not planned", pull requests close unmerged with the refusal as the closing comment, and the docs record plan when requested. Mutate only after the user explicitly approves this exact set; any later change to the set requires fresh approval. Done when: user explicitly approves the exact closure set, or the step waits for approval.
- Close each approved item, one at a time, recording every result: issue:
gh issue close <number> --repo <owner>/<repo> --reason "not planned" --comment "<generalization>"; pull request:gh pr close <number> --repo <owner>/<repo> --comment "<generalization> (closed as not planned)". A failed close is recorded and does not block the remaining approved items; failed items are never silently skipped. Done when: every approved item is attempted with its result recorded. - Confirm every intended closure:
gh issue view <number> --repo <owner>/<repo> --json state,stateReasonmust report"state": "CLOSED"with"stateReason": "NOT_PLANNED", andgh pr view <number> --repo <owner>/<repo> --json statemust report"state": "CLOSED". An item still reporting open receives exactly one retry of its close command and one re-check; a second miss is reported as unconfirmed. Done when: every approved item is confirmed closed or reported as unconfirmed. - Write the optional docs record only when the user requested it and after the step 7 approval: append a dated section to
docs/refused-directions.md(create the file when missing) listing each refusal verbatim, its generalization and concretization, and the closed item numbers with URLs. Rollback is deletion of the appended section; the rest of the file is untouched. Done when: docs record is written or skipped (not requested). - Report per Output. The done predicate holds only when every approved item is confirmed closed. Done when: report is emitted and done predicate is evaluated.
Failure and recovery
- Tracker unreachable or unauthenticated: any failing
ghcommand before step 8 stops the skill in a blocked state with the command and error reported verbatim; zero items mutated. - Unresolvable repository: blocked until the user supplies
owner/repo; never guessed. - Ambiguous or unmatched refusal: returned to the user with the blocking question; matches are never guessed from inference. A refusal with zero matching items is a valid outcome, reported as such.
- Partial batch failure: already-confirmed closures stand because each was individually approved; remaining approved items are still attempted; unconfirmed and failed items are named exactly. Done is never claimed while any approved item is unconfirmed.
- Wrong item closed: recovery is an explicit reopen on user instruction only,
gh issue reopenorgh pr reopen, recorded in the report. - Docs write failure: closures are unaffected; report the filesystem error and the intended section content; never report a record that was not written.
- Errors are surfaced verbatim; the done predicate is never reported as holding when any approved item is unconfirmed.
Output
A refusal ledger (every verbatim refusal with generalization, concretization, and matched items), a closure table (number, kind, title, URL, result per item: confirmed closed as not planned / confirmed closed / unconfirmed / failed with error text), the docs record path when written or "not requested", a terminal classification (done / partial / blocked), and borderline items intentionally left open.
Signals
- GitHub stars
- 37
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
wontfix- Source
- github.com/outlinedriven/odin-claude-plugin