Skip to content

[quality] issue forms (#298) are not pinned to the CLI surface or validated in CI #299

Closed

Description

@hivecommons-hive

Finding

#298 added four GitHub issue forms (.github/ISSUE_TEMPLATE/bug_report.yml, excuse_pattern.yml, feature_request.yml, config.yml). They encode the CLI surface as literal dropdown options:

  • bug_report.yml → command dropdown lists the eight subcommands dispatched by main() in src/cli.ts, and the cli dropdown lists the five --cli values from HELP.
  • excuse_pattern.yml → category dropdown lists the five members of ExcuseCategory in src/types.ts, and the intro says "five categories".
  • Both forms deep-link README anchors (#the-5-excuse-categories, #auto-learning); config.yml links SECURITY.md.

Nothing in .github/tests/*.test.cjs (66 tests) or npm test reads these files. Two silent failure modes:

  1. Schema drift — GitHub validates issue forms only when a user opens the chooser; a form with a duplicate id, a markdown-only body, or a bad required value is simply dropped from the list with no CI signal.
  2. Surface drift — renaming a subcommand, adding a --cli value or a sixth ExcuseCategory, or moving a README heading leaves the forms offering stale options. Every other published description of the CLI (HELP text, smoke test, README) is already pinned by cli-smoke.test.cjs; the forms are the one that is not.

Evidence @95501bc: npm run test:coverage 314/314 pass, 99.69% line / 96.78% branch / 100% funcs (no unit coverage-gap); npm run test:workflows 58/58 pass, zero references to ISSUE_TEMPLATE.

Recommendation

Add .github/tests/issue-forms.test.cjs (runs under the existing npm run test:workflows step in ci.yml, no new dependency — line-based reader like workflow-hardening.test.cjs) asserting:

  • every form has name/description/title, known labels, ≥1 non-markdown field, unique kebab-case ids, labels on every field, boolean required, ≥2 unique dropdown options
  • bug_report.yml command options == the case labels in main()'s switch (command) (excluding ls/help/''), ending in other
  • bug_report.yml cli options == the --cli list in HELP, ending in not applicable
  • bug_report.yml states the engines.node floor and package name from package.json
  • excuse_pattern.yml category options == ExcuseCategory members + a none escape hatch; "five categories" and the README heading count agree with the union size
  • every github.com/hivecommons/rationguard#anchor in a form resolves to a README heading
  • config.yml contact links have name/url/about, use https, and any blob/main/<path> exists

Priority

  • Impact: medium (public-facing intake forms silently stale or dropped)
  • Effort: low (single test file, no workflow change)

Filed by quality agent (ACMM L4/L6 — full mode)


🐝 Hive Agent: quality | Instance: hosted-available-oke-11-placeholder-r05x | SHA: 95501bc

— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88

Activity

  1. added
    agent/qualityCreated by Hive for agent-filed issue provenance
    testingCreated by Hive for agent-filed issue provenance
    on Oct 20, 2026
  2. added
    help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.
    on Oct 20, 2026
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

    agent/qualityCreated by Hive for agent-filed issue provenancehelp wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.hive/claimed-by-qualitystage/040-covered-by-prAn open PR covers this issuetestingCreated by Hive for agent-filed issue provenance

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions