Skip to content

chore: Add GitHub issue templates#357

Open
lolimmlost wants to merge 6 commits into
ManiMatter:devfrom
lolimmlost:chore/issue-templates
Open

chore: Add GitHub issue templates#357
lolimmlost wants to merge 6 commits into
ManiMatter:devfrom
lolimmlost:chore/issue-templates

Conversation

@lolimmlost
Copy link
Copy Markdown
Collaborator

@lolimmlost lolimmlost commented May 8, 2026

Summary

Adds GitHub issue templates under .github/ISSUE_TEMPLATE/ to address the "Set up Issue templates" item in discussion #345.

Two structured templates (Bug, Feature) plus a chooser config that disables blank issues and redirects general questions to Discussions.

What's in here

  • bug_report.yml — required fields for: decluttarr version, deployment method, host OS / architecture, *arr versions, download client + version, test_run state, reproduction frequency, sanitized config, debug logs (with API-key sanitization reminder), steps to reproduce, expected vs actual behavior. Auto-applies the Bug label.
  • feature_request.yml — required: problem statement, proposed solution. Optional: alternatives, extras. Auto-applies the Feature label.
  • config.ymlblank_issues_enabled: false plus contact links to GitHub Discussions and the README's Dependencies & Hints & FAQ section.

Why these fields

Surveyed the last 25 closed issues and noticed the same pattern repeatedly: 7–13 comment threads spent extracting version, deployment method, debug logs, and config from terse OPs. The required fields here are exactly the info that was being asked for in those comment threads.

The Unclear label exists because maintainers can't always tell whether a report is a bug, a config question, or unclear behavior — that's what config.yml's blank-issue lockout + Discussions redirect is meant to fix.

Test plan

  • After merge, visit /issues/new/choose and confirm the chooser shows two templates + two contact links
  • Submit a test bug report through the form and confirm the required fields gate submit
  • Confirm the Bug and Feature labels are auto-applied

Closes part of the chore list in #345.

lolimmlost and others added 3 commits May 7, 2026 16:50
Adds three files under .github/ISSUE_TEMPLATE/ to structure incoming
issues and reduce the back-and-forth maintainers currently spend
extracting version/config/log details from terse reports.

- bug_report.yml: required fields for decluttarr version, deployment
  method, *arr versions, download client, sanitized config, debug
  logs, repro steps, and expected vs. actual behavior. Auto-applies
  the "Bug" label.
- feature_request.yml: structured around problem statement, proposed
  solution, alternatives considered. Auto-applies the "Feature" label.
- config.yml: disables blank issues so users must pick a template,
  and adds two contact links — one to GitHub Discussions for
  questions/config help (which currently land in the issue tracker
  and clutter triage), and one to the README's FAQ section that
  already covers many common problems.

Closes part of the chore list in discussion ManiMatter#345 ("Set up Issue
templates").

Co-Authored-By: Claude Opus 4.7 <[email protected]>
…g template

Self-review pass on the templates flagged four gaps that would
otherwise be extracted via comments. Adding upfront:

- Host OS / architecture dropdown (Linux x86_64, Linux ARM, macOS,
  Windows, Other) — path-related bugs and qBit issues sometimes
  behave differently on Windows or ARM (cf. ManiMatter#308 Windows path
  mappings).
- test_run state dropdown — removal-related bugs are very different
  in test_run=true vs false; capturing this avoids the "wait, were
  removals actually happening?" round-trip.
- Reproduction frequency dropdown (Always / Sometimes / Once / Unknown)
  — affects triage priority and whether the report is actionable.
- Log-sanitization warning: decluttarr already redacts X-Api-Key
  headers but not ?apikey=... query strings or session cookies, so
  the description now explicitly tells reporters to scrub those.

All four are required fields. Field ordering follows a setup → context
→ detail narrative.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
@ManiMatter ManiMatter self-assigned this May 8, 2026
@ManiMatter
Copy link
Copy Markdown
Owner

Thank you, this looks very good, appreciate the addition.
One small suggestion above re version, otherwise looks good to me.

Per @ManiMatter's review on ManiMatter#357: the previous description told
reporters to find their version in a log line `Decluttarr <version>`
that doesn't actually exist. image_tag and short_commit_id come from
env vars set by the Docker build pipeline (only surfaced in the web
UI footer once ManiMatter#337 lands), not from any startup log message.

Replace with practical instructions for both deployment paths:
- Docker users: the image tag they pulled (latest/dev)
- Local Python users: short commit hash from git rev-parse --short HEAD

Co-Authored-By: Claude Opus 4.7 <[email protected]>
@lolimmlost
Copy link
Copy Markdown
Collaborator Author

Thanks for the look! Fix pushed in f1cc08c — drops the bogus "log line" claim and gives Docker users + local Python users separate paths to find their version.

@ManiMatter
Copy link
Copy Markdown
Owner

ManiMatter commented May 10, 2026

drops the bogus "log line" claim

I am not sure I follow.

When I switch to debug level, I see these logs:

============== ENVIRONMENT SETTINGS ==============
image_tag: dev
short_commit_id: 06adae9
use_config_yaml: true

From here, users could provide us the tag as well as the commit ID.
What if we simply asked users to switch to debug logs and
(1) disable all jobs other than the ones failing
(2) switch to debug-level
(3) provide full logs, including the header that shows "VERBOSE | 🛠️ Decluttarr - Settings 🛠️" incl. commit ID etc?

As example:

VERBOSE | 🛠️ Decluttarr - Settings 🛠️

============== ENVIRONMENT SETTINGS ==============
image_tag: dev
short_commit_id: 06adae9
use_config_yaml: true
================ GENERAL SETTINGS ================
log_level: DEBUG
test_run: false
timer: 10
ssl_verification: true
private_tracker_handling: remove
public_tracker_handling: remove
obsolete_tag: Obsolete
protected_tag: Keep
================== ACTIVE JOBS ===================
🟢 remove_bad_files
⚪️ remove_done_seeding
🟢 remove_failed_downloads
🟢 remove_failed_imports
🟢 remove_metadata_missing
🟢 remove_missing_files
🟢 remove_orphans
🟢 remove_slow
🟢 remove_stalled
🟢 remove_unmonitored
🟢 search_unmet_cutoff
🟢 search_missing
🟢 detect_deletions
================== JOB SETTINGS ==================
remove_bad_files:
keep_archives: false
remove_failed_downloads: {}
remove_failed_imports:
message_patterns:

  • Not a Custom Format upgrade for existing*
  • Not an upgrade for existing*
  • 'Found potentially dangerous file with extension'
  • Invalid video file*
  • No files found are eligible for import*
  • One or more episodes expected in this release were not imported or missing from
    the release
    remove_metadata_missing:
    max_strikes: 3
    remove_missing_files: {}
    remove_orphans: {}
    remove_slow:
    max_strikes: 3
    min_speed: 100
    remove_stalled:
    max_strikes: 3
    remove_unmonitored: {}
    search_unmet_cutoff:
    max_concurrent_searches: 3
    min_days_between_searches: 7
    search_missing:
    max_concurrent_searches: 3
    min_days_between_searches: 7
    detect_deletions: {}
    =============== INSTANCE SETTINGS ================
    Sonarr:
  • base_url: http://sonarr:8989
    api_key: '*****'
    Radarr:
  • base_url: http://radarr:7878
    api_key: '*****'
    Readarr:
  • base_url: http://readarr:8787
    api_key: '*****'
    ============ DOWNLOAD CLIENT SETTINGS ============
    qbittorrent:
  • base_url: http://qbittorrent:8080
    name: qBittorrent

@lolimmlost
Copy link
Copy Markdown
Collaborator Author

So something like replacing these three fields:

  • Decluttarr version (input)
  • Sanitized config (textarea, yaml-rendered)
  • test_run state (dropdown)

With one consolidated field:

  • Decluttarr startup banner + debug logs (textarea, shell-rendered) — "Run with log_level: DEBUG. Disable jobs not related to your issue (reduces noise). Paste the full
    output starting from the 🛠️ Decluttarr - Settings 🛠️ header through the cycle that exhibits the bug. API keys in the header are already masked as ***** — but scrub any
    ?apikey= in URLs from later log lines."

@ManiMatter
Copy link
Copy Markdown
Owner

Yes, I think that sound sensible, what do you think?
As these logs can be lenghty, should we encourage them using an external pastebin? What do you think?

@lolimmlost
Copy link
Copy Markdown
Collaborator Author

Yeah logs can be a pain. I like pastebin as alternative

…r#357

ManiMatter pointed out that decluttarr already prints a complete
configuration dump at startup under the `🛠️  Decluttarr - Settings 🛠️`
header (when log level is DEBUG or VERBOSE) — covering image_tag,
short_commit_id, all general settings, jobs, instances, and download
clients with API keys already masked as `*****`.

Asking for a separate "Sanitized config" field is therefore redundant
with what reporters will paste in the logs field anyway.

Changes:

- Drop the "Sanitized config" textarea entirely
- Rewrite "Debug-level logs" → "Decluttarr startup banner + debug logs"
  with the three-step workflow @ManiMatter described:
    1. disable jobs not related to the issue
    2. set log_level: DEBUG
    3. paste everything from the startup banner through the failing
       cycle
- Tweak the version-field description to mention that the banner also
  contains image_tag / short_commit_id, so reporters can cross-check

Net change: 13 fields instead of 14, less duplication, more useful
content per report.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
@lolimmlost
Copy link
Copy Markdown
Collaborator Author

Good call — Medium path applied in f1ab69d:

  • Dropped the separate Sanitized config field (your settings banner already covers it)
  • Rewrote the logs field to ask for the full 🛠️ Decluttarr - Settings 🛠️ startup banner + the failing cycle, with the three-step workflow you laid out: disable non-failing jobs → debug level → paste the lot
  • Tweaked the version field description to mention the banner also has image_tag / short_commit_id, so reporters can cross-check

Net: 13 fields instead of 14, less duplication. Kept version / test_run / OS / *arr versions as separate easy-scan fields up top for triage at a glance — happy to drop those into the log paste too if you'd rather have everything in one place.

@ManiMatter
Copy link
Copy Markdown
Owner

I think it‘s a good first version. Let‘s run with it snd finetune it along the way. Good to be merged from my point of view.

Comment thread .github/ISSUE_TEMPLATE/bug_report.yml
@lolimmlost
Copy link
Copy Markdown
Collaborator Author

lolimmlost commented May 11, 2026 via email

ManiMatter pointed out that accepting `latest` / `dev` tags as version
values is misleading since those tags move quickly — for reproducible
bugs we need the specific commit. Drop the tag aliases, ask for the
short commit hash directly, point Docker users at the startup banner's
`short_commit_id` and local Python users at `git rev-parse --short HEAD`.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
@lolimmlost
Copy link
Copy Markdown
Collaborator Author

Good call — applied in 0e88557:

  • Field renamed to Decluttarr commit hash (clearer ask)
  • Dropped latest / dev from placeholder and description with a one-liner explaining why those move too fast for repro
  • Split the lookup paths into bullets: Docker users → short_commit_id in the settings banner; local Python users → git rev-parse --short HEAD

Ready to merge whenever.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants