Skip to content

feat(contributing): make filing a good issue the default path before a PR #1834

Open

Description

@clay-good

CONTRIBUTING.md now asks every change to start with an issue or a discussion. That only works if filing one is the path of least resistance. Today it isn't — and most of the pieces already exist, unwired.

Two people show up, and we serve neither

A user hits a bug while using OpenSpec in their own project. They have openspec installed and an agent open. Best case: they say "file that as an issue" and it happens. Today openspec feedback "..." posts a free-form ## Summary / ## Details body with a Feedback: prefix — no repro, no expected-vs-actual, no agent/model. And openspec/specs/cli-feedback/spec.md specifies a /feedback skill that drafts and submits this properly; the template is written (src/core/templates/workflows/feedback.ts) but feedback was never added to ALL_WORKFLOWS in src/core/profiles.ts, so it has never been generated or installed by anyone.

A contributor clones this repo and opens a PR. They never ran openspec init, so no skill will ever reach them. They find no .github/ISSUE_TEMPLATE/ and no PR template — just a blank box and, later, a review comment asking them to go file the issue they didn't know they needed. That is the contributor we are most likely to lose, and the current plan has nothing for them.

The fix: catch both, ask for almost nothing

1. .github/ for the drive-by contributor.

  • ISSUE_TEMPLATE/bug_report.yml — expected, actual, minimal repro, openspec --version, agent/model.
  • ISSUE_TEMPLATE/feature_request.yml — the problem in one sentence, who it affects, what you tried.
  • ISSUE_TEMPLATE/config.yml — route core-design topics to Discussions, per CONTRIBUTING step 1.
  • PULL_REQUEST_TEMPLATE.md — Closes # on the first line, and directly under it: "No issue yet? Run openspec feedback "..." or open one here." This is the piece that catches the PR-first contributor at the exact moment they need it, with no bot and no CI.

2. Ship the feedback skill that already exists. Register feedback as a workflow so init/update install it. Its job is to draft, not interrogate: it already has the conversation, the failing command, the version and the platform, so it fills those in itself, asks only for what it genuinely cannot infer, shows one complete draft, and submits on a single confirmation. Same fields as the bug form.

3. Point the CLI at the form. openspec feedback --type bug|feature|feedback emits the matching body and a label that exists (bug, enhancement — note the feedback label still does not exist in this repo, so every submission currently falls back to unlabeled). The manual-fallback URL in generateManualSubmissionUrl() must gain ?template=bug_report.yml and prefill the form's field ids — today it passes bare title/body, which lands on the blank form and quietly undoes step 1 for every user without gh.

The test: a contributor who has never read CONTRIBUTING.md still ends up with a well-formed issue linked to their PR, without being asked to read anything.

Not in scope

CI enforcement of "every PR links an issue." Worth doing later, but a gate only punishes people the easy path hasn't reached yet. The PR template above should make it mostly unnecessary — if it doesn't, we will have real data on how often.

One open decision

Keep the workflow id feedback (already a CLI verb, already spec'd) or rename it to report? Reusing feedback is the lower-churn option.

Notes for whoever picks this up

  • Step 1 is .github/-only and can ship on its own, today, with no proposal.
  • Steps 2 and 3 add a workflow and a CLI flag, so per CONTRIBUTING step 2 they want a change proposal PR first. Spec to delta: openspec/specs/cli-feedback/spec.md (its "Feedback skill for agents" requirement is currently unimplemented).
  • Adding a workflow id touches more than profiles.ts: shared/skill-generation.ts (skill + command entries), init.ts, profile-sync-drift.ts, utils/command-references.ts, shared/tool-detection.ts, WORKFLOW_PROMPT_META in commands/config.ts, plus the skills/ mirror and its parity hashes.

Activity

  1. added
    enhancementNew feature or request
    cliCLI commands, output, flags
    skillsSkills/workflows
    on Sep 10, 2026
  2. changed the title [-]Make filing a good issue the easiest path: issue forms + the guided feedback skill we never shipped[/-] [+]feat(contributing): make filing a good issue the default path before a PR[/+] on Sep 10, 2026
  3. clay-good commented on Sep 11, 2026

    @clay-good
    CollaboratorAuthor

    Picked this up. Split it the way the issue itself prescribes:

    • #1847 — step 1, .github/ only, all checks green. Issue forms, PR template, Discussions routing. One deliberate call: blank_issues_enabled: true, so the pre-filled URL openspec feedback prints when gh is missing keeps working until step 3 teaches it to target the form.
    • #1848 — change proposal for steps 2 and 3, per CONTRIBUTING step 2. openspec validate --strict passes. Depends on feat(github): add issue forms and a PR template #1847 for the field ids it prefills.

    Both open questions answered in the proposal, with the reasoning written down so either is easy to overrule:

    • Keep the id feedback. Already the CLI verb and the capability name; report would be the first workflow id naming a document rather than an act.
    • Make it core, not optional. getProfileWorkflows returns CORE_WORKFLOWS unconditionally for any non-custom profile, so an id in ALL_WORKFLOWS alone reaches a user only if they open config profile and tick it. Opt-in reproduces today's outcome at smaller scale.

    Three things the research changed against the plan in the issue:

    1. feedback is the only workflow module with no getOpsx*CommandTemplate. Without one it is a skills-only workflow that profile-sync-drift reports as drift on every run under delivery: 'both'. It has to be authored, not just registered.
    2. The touchpoint list has a wrong path and an omission. It is src/utils/command-references.ts, not src/core/utils/; and OPENSPEC_SKILL_NAMES (src/core/config.ts:3) is missing from the list, though it drives tool detection and skill-status counts. Also src/core/templates/workflows/feedback.ts:11 sets name: 'feedback' while every registered template sets name equal to its skill directory — registering it as-is commits the one skill whose frontmatter disagrees with its directory.
    3. One disagreement with the issue: it proposes dropping the nonexistent feedback label so every type carries a label that exists. The proposal keeps the label and adds creating it in this repository instead. Dropping it saves one round trip and costs the ability to find general feedback in the issue list at all, which is what the label is for.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cliCLI commands, output, flagsenhancementNew feature or requestskillsSkills/workflows

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions