chore(github): redesign issue intake forms and routing

Overhaul the bug report form and restructure issue intake for 2.0:

- Bug report: split actual vs expected behavior, add Affected area and
  Specific tool fields for triage, replace the self-defeating required
  "latest version" checkbox with a Version field that accepts a tag,
  release, or commit (always answerable from any install), modernize
  Docker guidance to the Compose stack, add Host OS, and fix the
  previously required image-tag field that source users could not fill.
- Move feature requests to GitHub Discussions: delete the feature_request
  issue form, rename the orphaned discussion form to ideas.yml so it binds
  to the built-in Ideas category, and point config.yml there.
- Add Translation and Documentation issue forms routed to existing labels.
- Remove the roadmap-update discussion form (roadmap is private).
- Reconcile CONTRIBUTING.md, SUPPORT.md, and the published docs
  contributing guide with the new routing.
This commit is contained in:
SnapOtter
2026-06-17 14:21:18 +08:00
parent ecc0a45f0e
commit 609cd6b609
10 changed files with 263 additions and 137 deletions
@@ -1,47 +0,0 @@
title: ""
labels: []
body:
- type: markdown
attributes:
value: |
Periodic roadmap updates from the maintainers. See the [full roadmap board](https://github.com/orgs/snapotter-hq/projects) for current status.
- type: textarea
id: shipped
attributes:
label: Shipped
description: What landed since the last update?
validations:
required: false
- type: textarea
id: now
attributes:
label: Now (actively working on)
description: What's currently in progress?
validations:
required: true
- type: textarea
id: next
attributes:
label: Next (coming soon)
description: What's planned for the near term?
validations:
required: true
- type: textarea
id: later
attributes:
label: Later (on the radar)
description: What's being considered but not yet scheduled?
validations:
required: false
- type: textarea
id: community
attributes:
label: Community highlights
description: Shoutouts, top-voted feature requests, notable contributions.
validations:
required: false
+89 -24
View File
@@ -1,7 +1,13 @@
name: Bug Report name: Bug Report
description: Something isn't working as expected description: Something isn't working as expected
title: "[Bug] "
labels: ["bug"] labels: ["bug"]
body: body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug. The more detail you give, especially how you run SnapOtter and how to reproduce it, the faster we can help.
- type: checkboxes - type: checkboxes
id: checklist id: checklist
attributes: attributes:
@@ -9,17 +15,26 @@ body:
options: options:
- label: I searched existing issues and didn't find a duplicate - label: I searched existing issues and didn't find a duplicate
required: true required: true
- label: I'm running the latest version of SnapOtter - label: I've tried the latest version to confirm it isn't already fixed
required: true required: false
- type: textarea - type: textarea
id: description id: what-happened
attributes: attributes:
label: Description label: What happened?
description: What happened, and what did you expect to happen? description: Describe the actual behavior you saw.
placeholder: | placeholder: |
When I try to resize an image, the output is blank. When I resize an image, the downloaded file is 0 bytes.
I expected the resized image to be returned normally. validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen instead?
placeholder: |
The resized image downloads normally.
validations: validations:
required: true required: true
@@ -27,41 +42,90 @@ body:
id: steps id: steps
attributes: attributes:
label: Steps to reproduce label: Steps to reproduce
description: How can we reproduce this? description: How can we reproduce this? Number each step.
placeholder: | placeholder: |
1. Upload a PNG image 1. Upload a PNG image
2. Select "Resize" tool 2. Select the "Resize" tool
3. Set width to 500 3. Set width to 500
4. Click "Process" 4. Click "Process"
5. Downloaded file is 0 bytes 5. Downloaded file is 0 bytes
validations: validations:
required: true required: true
- type: textarea - type: dropdown
id: docker-setup id: area
attributes: attributes:
label: Docker setup label: Affected area
description: Paste your `docker run` command or `docker-compose.yml` (remove any sensitive values). If running from source, write "running from source via pnpm dev". description: Which part of SnapOtter does this involve?
render: shell options:
- Image tools
- Video tools
- Audio tools
- PDF tools
- Data tools
- Image editor
- Pipelines / automation
- File library
- Account / login
- Installation / Docker / startup
- Other / not sure
validations: validations:
required: true required: true
- type: input - type: input
id: image-tag id: tool
attributes: attributes:
label: Image tag label: Specific tool
description: Which Docker image tag are you using? description: If this is about one tool, which one? Leave blank if it isn't tool-specific.
placeholder: "e.g. latest, 1.17.1" placeholder: "e.g. resize, background-remover, pdf-merge"
- type: dropdown
id: install-method
attributes:
label: How are you running SnapOtter?
options:
- Docker Compose
- Running from source (pnpm dev)
- Other (describe in deployment details)
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Image tag, release version, or git commit. Running from source? Paste the commit hash.
placeholder: "e.g. latest, 2.0.0, or a1b2c3d"
validations:
required: true
- type: textarea
id: deployment
attributes:
label: Deployment details
description: "Your compose file or run command, with secrets redacted. Write N/A if running from source. Strongly recommended for Docker issues."
render: shell
- type: dropdown
id: arch
attributes:
label: Host architecture
options:
- AMD64 (Intel/AMD)
- ARM64 (Apple Silicon, Raspberry Pi)
validations: validations:
required: true required: true
- type: dropdown - type: dropdown
id: platform id: host-os
attributes: attributes:
label: Platform label: Host OS
options: options:
- AMD64 (Intel/AMD) - Linux (native)
- ARM64 (Apple Silicon, Raspberry Pi) - macOS (Docker Desktop)
- Windows (Docker Desktop)
- Windows (WSL2)
- Other / running from source
validations: validations:
required: true required: true
@@ -69,13 +133,14 @@ body:
id: browser id: browser
attributes: attributes:
label: Browser label: Browser
description: Only if the bug is in the web UI.
placeholder: "e.g. Chrome 130, Firefox 133, Safari 18" placeholder: "e.g. Chrome 130, Firefox 133, Safari 18"
- type: textarea - type: textarea
id: logs id: logs
attributes: attributes:
label: Logs label: Logs
description: Paste any relevant container logs (`docker logs <container>`). description: "Relevant logs, secrets redacted. For Compose: docker compose logs app (or postgres / redis)."
render: shell render: shell
- type: textarea - type: textarea
@@ -90,5 +155,5 @@ body:
label: Would you like to contribute a fix? label: Would you like to contribute a fix?
description: If yes, we can assign this issue to you. See CONTRIBUTING.md for the PR process. description: If yes, we can assign this issue to you. See CONTRIBUTING.md for the PR process.
options: options:
- "Yes, I'd like to submit a PR"
- "No, just reporting" - "No, just reporting"
- "Yes, I'd like to submit a PR"
+6 -3
View File
@@ -1,11 +1,14 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Feature request or idea
url: https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas
about: Suggest a new tool or improvement and let the community upvote it.
- name: Questions and help
url: https://discord.gg/hr3s7HPUsr
about: Ask questions, get setup help, and chat with the community.
- name: Documentation - name: Documentation
url: https://docs.snapotter.com/ url: https://docs.snapotter.com/
about: Check the docs for setup guides, configuration, and API reference. about: Check the docs for setup guides, configuration, and API reference.
- name: Discord
url: https://discord.gg/hr3s7HPUsr
about: Ask questions, get help, and chat with the community.
- name: Security vulnerability - name: Security vulnerability
url: https://github.com/snapotter-hq/snapotter/security/advisories/new url: https://github.com/snapotter-hq/snapotter/security/advisories/new
about: Report security issues privately through GitHub Security Advisories. about: Report security issues privately through GitHub Security Advisories.
+61
View File
@@ -0,0 +1,61 @@
name: Documentation Issue
description: Report wrong, missing, or unclear documentation
title: "[Docs] "
labels: ["documentation", "area: docs"]
body:
- type: markdown
attributes:
value: |
Thanks for helping improve the docs. For small fixes, a direct PR to apps/docs/ is welcome too.
- type: checkboxes
id: checklist
attributes:
label: Before submitting
options:
- label: I searched existing issues and didn't find a duplicate
required: true
- type: dropdown
id: kind
attributes:
label: Issue type
options:
- Incorrect or outdated
- Missing / not documented
- Unclear or confusing
- Broken link or example
- Typo or formatting
validations:
required: true
- type: input
id: page
attributes:
label: Page
description: Link to the docs page. If it's missing, link the closest page to where it belongs.
placeholder: "e.g. https://docs.snapotter.com/guide/configuration"
validations:
required: true
- type: textarea
id: problem
attributes:
label: What's wrong?
description: Describe what's incorrect, missing, or confusing.
validations:
required: true
- type: textarea
id: suggestion
attributes:
label: Suggested fix
description: If you have a correction or wording suggestion, share it here.
- type: dropdown
id: willing-to-fix
attributes:
label: Would you like to submit a PR?
options:
- "No, just reporting"
- "Yes, I'd like to submit a PR"
@@ -1,54 +0,0 @@
name: Feature Request
description: Suggest a new tool, improvement, or change
labels: ["enhancement"]
body:
- type: checkboxes
id: checklist
attributes:
label: Before submitting
options:
- label: I searched existing issues and didn't find a duplicate
required: true
- type: textarea
id: problem
attributes:
label: Problem
description: What problem does this solve? Describe the use case or frustration.
placeholder: |
I frequently need to convert AVIF files to JPEG, but there's no tool for it.
I currently have to use an external service which means my images leave my machine.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed solution
description: How do you think this should work?
placeholder: |
Add an AVIF option to the format conversion tool, similar to how
HEIC and WebP are already supported.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Have you tried any workarounds? Are there other approaches that could work?
- type: textarea
id: context
attributes:
label: Additional context
description: Screenshots, links, examples, or anything else that helps explain the request.
- type: dropdown
id: willing-to-implement
attributes:
label: Would you like to implement this?
description: Feature PRs require issue approval first. If approved, we can assign this to you.
options:
- "Yes, I'd like to submit a PR if approved"
- "No, just suggesting"
+92
View File
@@ -0,0 +1,92 @@
name: Translation Issue
description: Report a wrong, missing, or awkward translation
title: "[Translation] "
labels: ["translation", "area: i18n"]
body:
- type: markdown
attributes:
value: |
Thanks for helping improve SnapOtter's translations. If you'd like to fix it yourself, translation PRs are welcome too (the locale files live in packages/shared/src/i18n/).
- type: checkboxes
id: checklist
attributes:
label: Before submitting
options:
- label: I searched existing issues and didn't find a duplicate
required: true
- type: dropdown
id: locale
attributes:
label: Language
options:
- English (en)
- Arabic (ar)
- Chinese, Simplified (zh-CN)
- Chinese, Traditional (zh-TW)
- Dutch (nl)
- French (fr)
- German (de)
- Hindi (hi)
- Indonesian (id)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Polish (pl)
- Portuguese, Brazil (pt-BR)
- Russian (ru)
- Spanish (es)
- Swedish (sv)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
- Vietnamese (vi)
validations:
required: true
- type: dropdown
id: kind
attributes:
label: Issue type
options:
- Incorrect translation
- Awkward or unnatural wording
- Untranslated (still shows English)
- Text is cut off or overflows
- Other
validations:
required: true
- type: input
id: location
attributes:
label: Where does it appear?
description: The string key if you know it, otherwise where you saw it in the UI.
placeholder: "e.g. tools.resize.title, or the Resize tool settings panel"
validations:
required: true
- type: textarea
id: current
attributes:
label: Current text
description: What does it say now? Paste the English fallback if it's untranslated.
validations:
required: true
- type: textarea
id: suggested
attributes:
label: Suggested text
description: What should it say instead?
validations:
required: true
- type: dropdown
id: willing-to-fix
attributes:
label: Would you like to submit a PR?
options:
- "No, just reporting"
- "Yes, I'd like to submit a PR"
+6 -4
View File
@@ -7,7 +7,9 @@ Thanks for your interest in contributing. This guide covers how to participate,
### Issues (no setup required) ### Issues (no setup required)
- **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps. - **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps.
- **Feature requests** - Have an idea? Open a [feature request](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) describing the problem it solves. - **Feature requests** - Have an idea? Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) so the community can weigh in and upvote it.
- **Translation issues** - Spot a wrong or missing translation? Open a [translation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml).
- **Documentation issues** - Something off in the docs? Open a [documentation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml).
### Code (requires CLA) ### Code (requires CLA)
@@ -19,15 +21,15 @@ We accept pull requests for:
| New translations | Open a PR directly (see [Translation Guide](https://docs.snapotter.com/guide/translations)) | | New translations | Open a PR directly (see [Translation Guide](https://docs.snapotter.com/guide/translations)) |
| Documentation improvements | Open a PR directly | | Documentation improvements | Open a PR directly |
| Test coverage improvements | Open a PR directly | | Test coverage improvements | Open a PR directly |
| New tools or features | Open an issue first, wait for a maintainer to add the `approved` label before writing code | | New tools or features | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first; a maintainer converts approved ideas into a tracked issue before you write code |
| Refactors or architecture changes | Open an issue first, wait for a maintainer to add the `approved` label before writing code | | Refactors or architecture changes | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first and wait for maintainer sign-off before writing code |
### What We Will Not Accept ### What We Will Not Accept
- Changes to CI/CD workflows, release config, or linter/compiler config - Changes to CI/CD workflows, release config, or linter/compiler config
- PRs without a signed [Contributor License Agreement](#contributor-license-agreement) - PRs without a signed [Contributor License Agreement](#contributor-license-agreement)
- PRs over 400 lines of change (break large work into smaller PRs) - PRs over 400 lines of change (break large work into smaller PRs)
- Features that were not discussed and approved in an issue first - Features that were not discussed and approved first
- Changes to `packages/ai/` without prior discussion - Changes to `packages/ai/` without prior discussion
## Contributor License Agreement ## Contributor License Agreement
+3 -1
View File
@@ -13,7 +13,9 @@
| Problem | Where to report | | Problem | Where to report |
|---------|----------------| |---------|----------------|
| Bug (something is broken) | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) | | Bug (something is broken) | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) |
| Feature request | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) | | Feature request or idea | [GitHub Discussions](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) |
| Wrong or missing translation | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml) |
| Documentation problem | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml) |
| Security vulnerability | [Private advisory](https://github.com/snapotter-hq/snapotter/security/advisories/new) (never a public issue) | | Security vulnerability | [Private advisory](https://github.com/snapotter-hq/snapotter/security/advisories/new) (never a public issue) |
## Before Opening an Issue ## Before Opening an Issue
+6 -4
View File
@@ -11,7 +11,9 @@ Thanks for your interest in contributing. This guide covers how to participate,
### Issues (no setup required) ### Issues (no setup required)
- **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps. - **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps.
- **Feature requests** - Have an idea? Open a [feature request](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) describing the problem it solves. - **Feature requests** - Have an idea? Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) so the community can weigh in and upvote it.
- **Translation issues** - Spot a wrong or missing translation? Open a [translation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml).
- **Documentation issues** - Something off in the docs? Open a [documentation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml).
### Code (requires CLA) ### Code (requires CLA)
@@ -23,15 +25,15 @@ We accept pull requests for:
| New translations | Open a PR directly (see [Translation Guide](/guide/translations)) | | New translations | Open a PR directly (see [Translation Guide](/guide/translations)) |
| Documentation improvements | Open a PR directly | | Documentation improvements | Open a PR directly |
| Test coverage improvements | Open a PR directly | | Test coverage improvements | Open a PR directly |
| New tools or features | Open an issue first, wait for the `approved` label before writing code | | New tools or features | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first; a maintainer converts approved ideas into a tracked issue before you write code |
| Refactors or architecture changes | Open an issue first, wait for the `approved` label before writing code | | Refactors or architecture changes | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first and wait for maintainer sign-off before writing code |
### What we will not accept ### What we will not accept
- Changes to CI/CD workflows, release config, or linter/compiler config - Changes to CI/CD workflows, release config, or linter/compiler config
- PRs without a signed [Contributor License Agreement](#contributor-license-agreement) - PRs without a signed [Contributor License Agreement](#contributor-license-agreement)
- PRs over 400 lines of change (break large work into smaller PRs) - PRs over 400 lines of change (break large work into smaller PRs)
- Features that were not discussed and approved in an issue first - Features that were not discussed and approved first
- Changes to `packages/ai/` without prior discussion - Changes to `packages/ai/` without prior discussion
## Contributor License Agreement ## Contributor License Agreement