Create GitHub issues in Nic Cope's style. Use when opening, creating, or filing issues, bug reports, feature requests, or proposals. Uses gh CLI and respects issue templates.
Install
npx skillscat add negz/nix/github-issues Install via the SkillsCat registry.
GitHub Issue Style Guide
When to Use This (vs Other GitHub Skills)
Use this skill when creating or filing issues, bug reports, feature requests,
or proposals.
Use github for read-only operations (viewing, listing, searching issues).
Use github-pull-requests when creating or editing PRs.
IMPORTANT: Require Confirmation
Never run gh issue create without explicit user approval. Always:
- Draft the issue title and body
- Show it to the user
- Wait for confirmation or requested changes
- Only then create the issue
Use Issue Templates
Check if the repo has issue templates before drafting:
ls .github/ISSUE_TEMPLATE/Common templates: bug_report.md, feature_request.md
Use the template flag when creating:
gh issue create --template bug_report.md --title "..." --body "..."If templates exist, you must use one. Fill out all template sections.
Creating Issues
gh issue create --title "..." --body "..."
gh issue create --template <template> --title "..." --body "..."
gh issue create --label bug --title "..." --body "..."Bug Report Style
Use the repo's bug template sections. Key principles:
- What happened: Describe the problem clearly and technically
- Evidence: Include logs, error messages, stack traces, code links
- Root cause: If known, explain why it happens (link to specific code)
- Reproduction: Numbered steps, specific commands, example YAML
- Environment: Version, platform, relevant configuration
Example Bug Report
### What happened?
The resolver controller panics when the installed package uses a digest
reference (e.g., `@sha256:...`) instead of a semver tag.
The function calls `semver.MustParse(insVer)` at
[`reconciler.go:629`](https://github.com/.../reconciler.go#L629), where
`insVer` comes from `pref.Identifier()`. When the package reference is a
digest, `Identifier()` returns `sha256:abc123...`, which is not a valid
semver string.
### How can we reproduce it?
1. Enable the `EnableAlphaDependencyVersionUpgrades` feature flag
2. Install a Configuration that depends on a Provider
3. Install that Provider using a digest reference
4. The resolver will panic at `semver.MustParse`
### What environment did it happen in?
Crossplane version: main (commit abc1234)Feature Request / Proposal Style
Use the repo's feature template sections. Key principles:
- Problem first: Explain the use case and pain point before proposing solutions
- Context: Why does this matter? Who is affected?
- Prior art: Reference existing solutions, related issues, or designs
- Concrete examples: YAML, code, CLI commands showing the proposed UX
- Trade-offs: Acknowledge complexity, alternatives considered
Example Proposal
### What problem are you facing?
Crossplane packages can install other packages as dependencies. You can
configure a package directly - e.g. its image pull secrets, pull policy.
Until recently there wasn't any way to configure packages pulled in as
dependencies though.
We added the `ImageConfig` API to solve this. It's proven useful, so we've
expanded it to configure more settings. But this creates a complicated
mental model: when do you use ImageConfig vs package spec?
### How could Crossplane help solve your problem?
I think we should make it possible to configure everything via an ImageConfig.
If you can configure it on a Provider spec, you should be able to configure
it via an ImageConfig as well.Key Principles
- Be technical and specific - link to code, include line numbers
- Lead with the problem, not the solution
- Include evidence: logs, examples, reproduction steps
- Credit others who contributed analysis
- No marketing language or bragging
- Fill out all template sections (strike through if N/A)