Skip to main content

Issue Gate

GitHub issue forms and a chooser config that make "doesn't work" impossible to file without a reproduction. No dependencies, no API keys, no bot.

Why

GitHub already ships this gate, for free: YAML issue forms plus .github/ISSUE_TEMPLATE/config.yml with blank_issues_enabled: false, which removes the blank-issue bypass. The problem is that nobody sets it up, and the default bug form GitHub ships has Steps To Reproduce marked required: false — so a useless report walks straight through the form and lands on a maintainer anyway.

Issue Gate writes those same native files with the fields that actually cost maintainer time marked required, prefills the environment block for the ecosystems your repo uses, and orders the contact links so questions get routed to docs, upstream, or Discussions instead of the tracker.

Nothing to install on the contributor's side. No bot. No AI.

Used on

Running on our own public repos, merged as PRs:

Install & Run

No dependencies — Python 3.10+.

Landing page: https://danyblitz-bit.github.io/issue-gate/ · machine-readable summary: llms.txt

git clone https://github.com/danyblitz-bit/issue-gate.git
cd issue-gate

# See the diff, write nothing
python __main__.py /path/to/repo --dry-run

# A Node library, questions routed to Discussions
python __main__.py ~/code/my-lib --discussions

# Add contact links, then write
python __main__.py ~/code/my-lib \
  --docs https://mylib.dev/docs \
  --upstream https://github.com/vendor/base-lib \
  --discussions

# Print the generated files in full
python __main__.py ~/code/my-lib --verbose

# Verify the tool works on your machine
python __main__.py --self-check

Then push and open /issues/new/choose on the repo to see the gate.

Options

Flag Description
--docs URL Add a Documentation contact link (first in the chooser)
--upstream URL Add an Upstream project contact link (for wrappers)
--discussions Add a Discussions contact link, URL taken from git origin
--dry-run Print a unified diff and write nothing
--verbose Print the full generated files
--self-check Run a built-in correctness test
--report Open a pre-filled email to report an issue

What you get

File Purpose
.github/ISSUE_TEMPLATE/config.yml blank_issues_enabled: false plus contact links, ordered docs → upstream → Discussions
.github/ISSUE_TEMPLATE/bug.yml Repro steps, expected behaviour and environment are required: true
.github/ISSUE_TEMPLATE/feature.yml Problem before solution, alternatives optional
.github/ISSUE_TEMPLATE/question.yml Only when there is no Discussions link, so nothing is left unrouted

It never overwrites. An existing file is reported and left alone; merge by hand.

Two manual steps GitHub does not do for you: create the labels (needs-triage, bug, enhancement, question — a form cannot add a label that does not exist) and open /issues/new/choose to confirm the chooser renders.

Why required: true and not a bot

GitHub enforces a required form field at submit time, before the issue exists. A triage bot has to run afterwards, costs money per issue, and is exactly the "hostile gate" maintainers complain about — a comment bot telling someone their issue is invalid. The form just asks once, politely, and GitHub does the rest.

Support the Project

Issue Gate is free and open source. Like it?

Report a bug

Found a bug or something weird? Run:

python __main__.py --report

This opens a pre-filled email. Send it and I'll get notified automatically.

You can also email danyblitz@googlemail.com directly. Use the subject format:

[TOOL-REPORT] issue-gate <what happened>

License

MIT

Metadata

Release files for issue-gate 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for issue-gate 1.0.0
File Size Uploaded
issue_gate-1.0.0.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for issue-gate 1.0.0
File Interpreter ABI Platform
issue_gate-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 18.1 kB

Release files / issue_gate-1.0.0.tar.gz

Download URL issue_gate-1.0.0.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f4074b1eeecf64717b8ff240b216e69ef28bef9682ae4491afbd1bea4361fb21
BLAKE2b-256 checksum
How to use checksums
9230bdc6c84d5c1ae2b1d9d0e54585da692e2a0e184ca47c186ca54742cccd75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / issue_gate-1.0.0-py3-none-any.whl

Download URL issue_gate-1.0.0-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b6d259e9944e59a0d94d1df36f5a038882aa716ec7c15b13928884933ecb3050
BLAKE2b-256 checksum
How to use checksums
66c388788ce4882a138d6a65ecce61ecb8f1960142f54ca41b955fa533b6a03a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page