docs(contributing): add issue templates and define the labeling standard #124
No Reviewers
Labels
Clear labels
Area/CI
Area/Completions
Area/Components
Area/Config
Area/Docs
Area/Functions
Area/Integrations
Area/Prompt & Theme
Area/Scripts
Area/Tests
Compat/Breaking
Kind/Bug
Kind/Chore
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Refactor
Kind/Security
Kind/Testing
good first issue
help wanted
.github/workflows and repository automation
completions/ - tab-completion scripts
The opinionated-component system (C1-C6)
config.fish and conf.d/ - startup and environment
docs/manual/ and the generated manual, man page, and site
functions/ - user-facing functions and helpers
integrations/ - third-party tool wiring
themes/ and prompt appearance
scripts/ - standalone helper scripts
tests/ - the syntax lint and functional suite
Breaking change that won't be backward compatible
Something is not working
Tooling, dependencies, and housekeeping
Documentation changes
Improve existing functionality
New functionality
Makes existing behavior faster or lighter
Restructures code without changing behavior
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Low
4
The priority is low
Priority
Medium
3
The priority is medium
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Well-scoped and self-contained; a good place to start
Maintainer is looking for someone to pick this up
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
rootiest (Rootiest)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: rootiest/fish-config#124
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Follows the PR-template work in #123 with the two conventions it left open: a
template for issues, and a rule for labeling both issues and PRs.
.github/ISSUE_TEMPLATE/, beside the PRtemplate so the GitHub mirror offers the same set.
bug.ymlis a Giteaissue form rather than markdown — version, OS, area, reproduction,
expected and actual behavior are required fields, so an unactionable bug
report can't be submitted at all.
feature.mdanddocs.mdarecomment-guided markdown in the same house style as
.github/PULL_REQUEST_TEMPLATE.md, since what they ask for is open-endedprose.
config.ymlkeeps blank issues enabled for what the three don'tcover and links the canonical tracker plus the contributing and
customization docs.
Kind/andat least one
Area/.CONTRIBUTING.mdnow documents all 33 labels, whichgroups are exclusive, and who applies what.
describe a refactor or a chore, and had no way to say which subsystem an
item touched.
so they actually work there — see Mirror parity.
CONTRIBUTING.mdsections,## Issuesand## Labels, plus alabeling bullet in the standing PR rules and TOC entries for both.
Why
Issues had no template at all, so a report arrived in whatever shape the
reporter chose — most often missing the fish version, a reproduction, or the
full error text, which is what actually stalls a bug. And the stock Gitea
label set was present but unused, because nothing said when to apply it.
How it works
bug.ymlcarries an Area dropdown mirroring theArea/labels. Thatexists because no forge maps a form field to a label, and contributors
without push access can't set labels themselves — so the dropdown is how a
reporter tells you, and a maintainer translates it at triage. The rest of the
maintainer-applied groups (
Priority/,Reviewed/,Status/) are documentedas exactly that, so reporters aren't expected to touch them.
feature.mdcarries## Acceptance criteria, the issue-side counterpart to aPR's
## Verification— a definition of done agreed before the work startsrather than argued about after.
docs.mdinsists on naming thedocs/manual/**source rather than the generated page, since a fix applied todocs/fish-config.mdis overwritten by the next CI run.Labels added
Created in Gitea as part of this change (33 total now, up from 18):
Kind/Refactor,Kind/Chore,Kind/Performance— the group now mapsone-to-one onto the Conventional Commits types already in use, so a PR's
label and its title agree.
Area/group over the ten subsystems:Functions,Completions,Config,Docs,Tests,CI,Integrations,Prompt & Theme,Components,Scripts.good first issueandhelp wanted, unscoped on purpose. They'd fitnaturally under
Status/, but that group is exclusive and an issue is oftenboth blocked and open for someone to pick up; outside the group they can
coexist with a real status.
Mirror parity
GitHub reads the same
.github/ISSUE_TEMPLATE/files, and its schema differsfrom Gitea's in two places that both fail silently:
config.yaml→config.yml. Gitea accepts either(
modules/structs/issue.go:267), GitHub only recognizesconfig.yml. Underthe old name the mirror's chooser would have shown neither the contact links
nor the blank-issue setting.
about:→description:in the YAML form. GitHub requiresdescription; Gitea'sIssueTemplate.Aboutis annotated "Usingdescriptionin a template file is compatible" and falls back to it atmodules/issue/template/unmarshal.go:126.descriptionis the onlyspelling both accept. The markdown templates keep
about:, correct fortheir format on both.
Both files now carry a comment explaining the constraint so neither gets
tidied back into a broken state.
All 33 labels were also created on the mirror, driven from the Gitea API so
the two can't drift, and GitHub's 7 stock defaults (
bug,documentation,duplicate,enhancement,invalid,question,wontfix) were deleted —each duplicated a taxonomy label, and the mirror has never had an issue, so
nothing referenced them. The two forges now hold an identical 33-label set.
Keeping them aligned is manual by necessity: mirroring copies files, not
repository settings, and GitHub silently drops a
labels:entry naming alabel it doesn't have. Note GitHub has no exclusive labels, so the one-of
rule on
Priority/,Reviewed/, andStatus/holds only by conventionthere.
Notes
mv clobbers a symlink when the target exists, notfix(mv): .... An issuestates a problem; a commit states a change, and the type and scope are
already carried by the
Kind/andArea/labels. Documented under### Issue titles.## Labelstables inCONTRIBUTING.mdare the written source of truth, andthe verification below checks all three against each other.
open so a report landing there isn't lost, and the chooser's first contact
link steers people to the canonical Gitea tracker before they file.
CI.
Verification
fish tests/run-tests.fish→10/10 passed.python3 docs/verify-manual.py→74/74 passed.bug.ymlparses and satisfies GitHub's required top-level keys (name,description,body), carries no leftoverabout:, and has 10 unique field ids.config.ymlparses:blank_issues_enabled: true, 3 contact links.feature.mdanddocs.mdparses and usesabout:, correct for markdown templates on both forges.CONTRIBUTING.mdresolve to real headings — no broken TOC or cross-reference entries.CONTRIBUTING.mdexists in Gitea and every Gitea label is documented — cross-checked against the API, both directions empty.abouttext.Kind/Bugapplied and thefishcode block rendered. Close and delete the throwaway issue afterward.Kind/label attached.config.ymlanddescription:fixes landed.