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-feedback

Review the files below or copy the command above to add this skill to your agents.

Files (13)
SKILL.md
5.0 KB
---
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)

Overview

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.

How this skill works

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.

When to use it

  • You encounter a bug in an @outfitter package
  • A missing feature or helper would improve developer experience
  • Documentation is unclear or omits edge cases
  • You find a pattern gap or migration guidance is missing
  • Error messages or ergonomics make tasks harder than expected

Best practices

  • Be specific: include package, function, and code snippets or lines when possible
  • Provide context: describe the task and steps to reproduce the problem
  • Include the actual behavior and an expected outcome or workaround
  • Check existing issues to avoid duplicates and link related issues
  • Use the script templates to supply required fields for each issue type

Example use cases

  • Report a runtime error in @outfitter/contracts with steps and stack trace
  • Request an enhancement like a Result.tap helper with a concrete use case
  • Open a docs issue for a missing handler contract edge case
  • Submit a migration-pattern issue describing a problematic upgrade scenario
  • Batch-create and cross-reference a set of ergonomics and conversion-helper issues

FAQ

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.