diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml new file mode 100644 index 0000000..fe1fdde --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -0,0 +1,143 @@ +name: Bug report +about: Something in the config is broken or behaves unexpectedly +labels: + - Kind/Bug +body: + - type: markdown + attributes: + value: | + Thanks for filing a bug. + + **Title it as a plain description of the problem**, not as a + conventional-commit subject — `mv clobbers a symlink when the target + exists`, not `fix(mv): ...`. The commit format belongs on the PR that + fixes this; the `Kind/` and `Area/` labels carry type and scope here. + + Before filing, please confirm the problem survives a fresh shell + (`exec fish`) — a stale function definition in a long-lived session is + the single most common false alarm. + + - type: input + id: fish-version + attributes: + label: fish version + description: Output of `fish --version`. This config targets fish 4.x. + placeholder: fish, version 4.0.2 + validations: + required: true + + - type: input + id: os + attributes: + label: Operating system + description: Distribution and version, or macOS release. + placeholder: Arch Linux (CachyOS), kernel 6.12.4 + validations: + required: true + + - type: input + id: terminal + attributes: + label: Terminal emulator + description: >- + Only matters for rendering, key bindings, and color problems. Leave it + blank if the bug has nothing to do with those. + placeholder: kitty 0.42.1 + validations: + required: false + + - type: dropdown + id: area + attributes: + label: Area + description: >- + Which part of the config is affected? Pick the closest match — a + maintainer translates this into the matching `Area/` label at triage, + since contributors without push access can't set labels themselves. + Choose "Not sure" rather than guessing. + options: + - Not sure + - Functions (functions/) + - Completions (completions/) + - Config and startup (config.fish, conf.d/) + - Docs (docs/manual/, man page, docs site) + - Tests (tests/) + - CI (.github/workflows/) + - Integrations (integrations/) + - Prompt and theme (themes/) + - Opinionated components (C1-C6 toggles) + - Scripts (scripts/) + validations: + required: true + + - type: textarea + id: summary + attributes: + label: What's broken + description: One or two sentences. Name the function or file if you know it. + placeholder: >- + `mv` replaces an existing symlink instead of prompting, so the link + target is lost with no confirmation. + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + description: >- + Exact commands, starting from a fresh shell, that someone else can + paste and run. Include any setup needed to reach the broken state. + render: fish + placeholder: | + exec fish + mkdir -p /tmp/repro; cd /tmp/repro + touch real; ln -s real link + mv real link + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What you thought those commands would do. + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual behavior + description: >- + What happened instead. Paste the complete output, including any error + text and stack traces — truncated errors are the usual reason a bug + report stalls in Status/Need More Info. + render: text + validations: + required: true + + - type: checkboxes + id: preflight + attributes: + label: Pre-flight + options: + - label: I searched the existing issues and this isn't already reported. + required: true + - label: I reproduced this in a fresh shell (`exec fish`), not a long-lived session. + required: true + - label: I ran `fish tests/run-tests.fish` and noted the result below (or in the output above). + required: false + + - type: textarea + id: context + attributes: + label: Additional context + description: >- + Anything else worth knowing: a private overlay in + `~/.config/.user-dots/fish/` that may be involved, opinionated + components you've disabled, the last commit where it worked. Never + paste credentials, tokens, or machine-specific paths you'd rather not + publish. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yaml b/.github/ISSUE_TEMPLATE/config.yaml new file mode 100644 index 0000000..de6c3ee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yaml @@ -0,0 +1,13 @@ +# Gitea reads this alongside the templates in this directory. +# Blank issues stay enabled deliberately: the three templates cover bugs, +# features, and docs, and anything else (a chore, a refactor, a question) +# is better served by an empty box than by a template that doesn't fit. +blank_issues_enabled: true + +contact_links: + - name: Contributing guide + url: https://git.rootiest.dev/rootiest/fish-config/src/branch/main/CONTRIBUTING.md + about: Branch naming, commit conventions, coding standards, and the label taxonomy. + - name: Customization and personal overrides + url: https://git.rootiest.dev/rootiest/fish-config/src/branch/main/docs/manual/07-customization.md + about: Want to change behavior on just your machine? Use your private overlay — no issue needed. diff --git a/.github/ISSUE_TEMPLATE/docs.md b/.github/ISSUE_TEMPLATE/docs.md new file mode 100644 index 0000000..e121953 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs.md @@ -0,0 +1,80 @@ +--- +name: Documentation issue +about: Something in the manual, man page, config-help, or docs site is wrong, missing, or unclear +labels: + - Kind/Documentation +--- + + + +## Location + + + +## Problem + + + +## Suggested fix + + + +## Notes + + diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 0000000..7fe99ae --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,111 @@ +--- +name: Feature or enhancement request +about: Propose new functionality, or an improvement to something that already exists +labels: + - Kind/Feature +--- + + + +## Summary + + + +## Problem + + + +## Proposed behavior + + + +## Alternatives considered + + + +## Scope + + + +## Acceptance criteria + + + +- [ ] +- [ ] + +## Notes + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e36ddea..90a93e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,6 +9,7 @@ treat it as a living document, not a final word. ## Table of Contents - [Getting Started](#getting-started) +- [Issues](#issues) - [Branching & Pull Requests](#branching--pull-requests) - [Commit Conventions](#commit-conventions) - [Fish Coding Standards](#fish-coding-standards) @@ -34,6 +35,72 @@ If you're touching anything under `docs/manual/`, you'll also want `pandoc`, (see [Documentation Pipeline](#documentation-pipeline)) — otherwise CI will catch problems on push. +## Issues + +Issues live on the Gitea repo. Three templates cover the common cases, each +pre-applying its `Kind/` label; blank issues stay enabled for everything else +— a chore, a refactor, a question, a tracking issue. + +| Template | Format | Use it for | Applies | +|---|---|---|---| +| **Bug report** | web form | Something is broken or behaves unexpectedly | `Kind/Bug` | +| **Feature or enhancement request** | markdown | New functionality, or an improvement to what exists | `Kind/Feature` | +| **Documentation issue** | markdown | The manual, man page, `config-help`, or docs site is wrong, missing, or unclear | `Kind/Documentation` | + +They live in `.github/ISSUE_TEMPLATE/`, next to the PR template, so the +GitHub mirror offers the same set. The bug report is a Gitea *issue form* — +a real web form with required fields — because a bug report missing its +version, reproduction, or full error text can't be acted on, and a form +refuses to submit without them. The other two are markdown templates in the +same comment-guided style as `.github/PULL_REQUEST_TEMPLATE.md`, since what +they ask for is open-ended prose that structure would only get in the way of. + +### Issue titles + +**Issue titles are plain descriptions of the problem, not Conventional +Commits subjects.** + +```text +mv clobbers a symlink when the target exists ← yes +fix(mv): prompt before replacing an existing symlink ← no +``` + +An issue states a problem; a commit states a change. The type and scope that +`fix(mv):` would carry are already on the issue as its `Kind/` and `Area/` +labels, and the conventional subject belongs on the PR that closes it, where +it becomes the commit message. Writing the fix into the title also presumes +one, which is the wrong end to start from for anything still being diagnosed. + +### What an issue owes + +- **A bug** needs a reproduction someone else can paste and run, starting + from a fresh shell, plus the complete error output. A stale function + definition in a long-lived session is the most common false alarm, so + confirm it survives `exec fish` first. `Status/Need More Info` is where + reports without a reproduction end up. +- **A feature** needs `## Acceptance criteria` — the checkbox list of what + must be true for the issue to close. It is the issue-side counterpart to a + PR's `## Verification`: a definition of done agreed before the work starts + rather than argued about after, and the PR's checks usually grow out of it. +- **A docs issue** needs to name the `docs/manual/**` source, not just the + page where the problem showed up. `docs/fish-config.md` and + `docs/fish-config.1` are generated, and a fix applied there is overwritten + by the next CI run — see [Documentation + Pipeline](#documentation-pipeline). + +### Triage + +Reporters aren't expected to label anything. Contributors without push access +can't, and the templates apply the `Kind/` label by themselves; the rest is +the maintainer's job when the issue is triaged — add the `Area/` label (the +bug form's **Area** dropdown is how a reporter tells you, since no forge can +map a form field to a label), set a `Priority/` if it isn't ordinary, and +apply `Reviewed/Confirmed` once a bug actually reproduces. See +[Labels](#labels). + +When a PR resolves an issue it closes it with a trailing `Closes #N` line — +see [Pull request descriptions](#pull-request-descriptions). + ## Branching & Pull Requests **If you don't have push access to this repo**, fork it and open your PR