home / skills / outfitter-dev / agents / stack-feedback
This skill creates GitHub issues on outfitter-dev/outfitter for problems found using the stack, streamlining bug reports, enhancements, and documentation gaps.
npx playbooks add skill outfitter-dev/agents --skill stack-feedbackReview the files below or copy the command above to add this skill to your agents.
---
name: stack-feedback
version: 0.3.0
description: Creates GitHub issues for problems discovered while using @outfitter/* packages. Use when finding bugs, missing features, unclear documentation, or improvement opportunities.
context: fork
agent: stacker
allowed-tools: Bash(gh *) Bash(bun *) Read
user-invocable: false
---
# Stack Feedback
Create GitHub issues on `outfitter-dev/outfitter` for problems discovered while using the stack.
## When to Use
Invoke this skill when you discover:
- **Bugs** in @outfitter/* packages
- **Missing features** that would improve DX
- **Unclear documentation** that caused confusion
- **Pattern gaps** where guidance is missing
- **Ergonomic issues** that made tasks harder than expected
## Issue Categories
| Category | Label | Example |
|----------|-------|---------|
| `bug` | `bug` | Package throws when it should return Result |
| `enhancement` | `feature` | Add helper for common pattern |
| `docs` | `documentation` | Handler contract docs missing edge case |
| `unclear-pattern` | `question` | How to handle X scenario with Result types |
| `dx` | `dx` | Error message unclear, hard to debug |
| `migration-pattern` | `adoption` | Migration scenario lacks guidance |
| `conversion-helper` | `adoption` | Need utility for legacy conversion |
| `compatibility` | `adoption` | Breaking change concern |
| `migration-docs` | `migration, documentation` | Migration docs gap |
## Using the Helper Script
The preferred method for creating issues. The script handles templates, labels, and validation.
### Basic Usage
```bash
bun plugins/outfitter-stack/skills/stack-feedback/scripts/create-issue.ts \
--type bug \
--title "Result.unwrap throws on valid input" \
--package "@outfitter/contracts" \
--description "When calling unwrap on Ok value, it unexpectedly throws" \
--actual "Throws TypeError instead of returning value"
```
### Dry-Run Mode (Default)
By default, the script outputs JSON with the `gh` command without executing it:
```json
{
"command": "gh issue create --repo outfitter-dev/outfitter --title '[Bug] Result.unwrap throws...' --label bug --label feedback --label source/agent --body '...'",
"title": "[Bug] Result.unwrap throws on valid input",
"labels": ["bug", "feedback", "source/agent"],
"body": "## Package\n\n`@outfitter/contracts`\n..."
}
```
### Origin Detection
The script automatically detects the git origin of the current directory and adds a "Discovered In" section to the issue body with a link to the source repo. This helps track where feedback originates.
### Submit Mode
Add `--submit` to actually create the issue:
```bash
bun plugins/outfitter-stack/skills/stack-feedback/scripts/create-issue.ts \
--type enhancement \
--title "Add Result.tap helper" \
--package "@outfitter/contracts" \
--description "Helper to run side effects without unwrapping" \
--useCase "Logging without breaking method chains" \
--submit
```
### View Template Requirements
Run with just `--type` to see required and optional fields:
```bash
bun plugins/outfitter-stack/skills/stack-feedback/scripts/create-issue.ts --type bug
```
### Available Types
| Type | Required Fields |
|------|-----------------|
| `bug` | package, description, actual |
| `enhancement` | package, description, useCase |
| `docs` | package, description, gap |
| `unclear-pattern` | package, description, context |
| `dx` | package, description, current |
| `migration-pattern` | sourcePattern, description, scenario |
| `conversion-helper` | legacyPattern, description, targetPattern |
| `compatibility` | package, description, breakingChange |
| `migration-docs` | area, description, gap |
## Manual Issue Creation
For cases where the script doesn't fit, use `gh` directly:
```bash
gh issue create \
--repo outfitter-dev/outfitter \
--title "[Bug] Brief description" \
--label "bug" \
--label "feedback" \
--label "source/agent" \
--body "$(cat <<'EOF'
## Package
`@outfitter/package-name`
## Description
What went wrong or what's missing.
## Actual Behavior
What actually happens.
---
*Created via `outfitter-stack:stack-feedback` skill*
EOF
)"
```
## Tracking Feedback
After creating, track in your project:
```markdown
## Stack Feedback
- [ ] #123: Result.unwrap throws on valid input — bug
```
## Check Existing Issues
Before creating a new issue, check if it already exists:
```bash
gh issue list --repo outfitter-dev/outfitter --label feedback
gh issue list --repo outfitter-dev/outfitter --search "{{KEYWORDS}}"
```
## Batch Feedback
If multiple issues have accumulated:
1. Review all feedback items
2. Deduplicate similar issues
3. Create issues with cross-references where related
4. Update tracking with issue numbers
## Best Practices
1. **Be specific** — Include package, function, and line if known
2. **Provide context** — Explain what task led to discovery
3. **Include workaround** — If you found one, share it
4. **Link related issues** — Reference if similar issues exist
5. **Stay constructive** — Focus on improvement, not complaint
## References
- [Migration-specific feedback](references/migration-feedback.md)
This skill creates GitHub issues on outfitter-dev/outfitter for problems discovered while using @outfitter/* packages. It standardizes issue content, labels, and origin metadata so feedback is actionable and traceable. Use it to report bugs, request features, clarify docs, or suggest ergonomics improvements.
The helper script builds validated issue bodies, selects labels based on category, and detects the git origin to include a "Discovered In" link. By default it performs a dry run that prints the gh command JSON; passing --submit will call the GitHub CLI to create the issue. Templates expose required and optional fields per issue type to ensure consistent, useful reports.
What happens by default when I run the script?
The script runs in dry-run mode by default and prints a JSON representation of the gh CLI command without creating the issue.
How do I actually create an issue?
Add --submit to the command to execute the gh issue create command and publish the issue to outfitter-dev/outfitter.