Skip to content

chore(issues): enforce production-ready issue standards - #93

Merged
Dyu20705 merged 20 commits into
mainfrom
chore/production-issue-standard
Aug 1, 2026
Merged

chore(issues): enforce production-ready issue standards#93
Dyu20705 merged 20 commits into
mainfrom
chore/production-issue-standard

Conversation

@Dyu20705

@Dyu20705 Dyu20705 commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Outcome

Strengthen the repository's GitHub Issue system so public intake and roadmap-managed work use explicit, proportional, type-aware, and verifiable contracts instead of generic checklists.

Refs #34 and #53.

Scope

Included

  • add production taxonomy for bugs, research, design, chores, technical debt, and untriaged intake;
  • add dedicated data-correction, accessibility, and research/design Issue Forms;
  • strengthen bug and feature intake with impact, scope, evidence, non-goals, acceptance, dependency, safety, and rollback context;
  • add docs/process/ISSUE_STANDARD.md for title conventions, required metadata, type-specific readiness/closure evidence, workflow transitions, handoff, PR linkage, and evidence safety;
  • add fail-closed tests for taxonomy, Issue Form schemas/contracts, managed-issue minimum metadata, lifecycle, and handoff policy;
  • keep managed-workflow readiness, stage gates, status semantics, WIP limits, schedule variance, closure sequencing, and reconciliation canonical in docs/process/ROADMAP_OPERATING_MODEL.md.

Excluded

  • no application code, product behavior, catalog, asset, dependency, deployment, milestone date, release state, issue closure, or GitHub Project mutation;
  • no live write reconciliation from CI;
  • no claim that canonical and live GitHub state are synchronized before the reviewed post-merge apply.

Review fixes

P1 — Schema-aware Issue Form enforcement

Replaced presence-only grep checks with tests/roadmap/validate-issue-forms.rb, using Ruby's standard-library YAML parser.

The validator now checks:

  • every Issue Form and config.yml parses as YAML;
  • supported element types and required element structure;
  • valid and unique field IDs;
  • contract-required field type;
  • validations.required: true for mandatory fields;
  • required preflight checkbox options;
  • non-empty and unique dropdown/checkbox options;
  • exact top-level title prefixes;
  • exact default labels;
  • every default label exists in roadmap/labels.json;
  • blank_issues_enabled: false;
  • upload validation shape when present.

Mutation self-tests prove the validator rejects malformed YAML, required: false, wrong field types, duplicate IDs, wrong titles, and wrong labels. The self-test helper itself fails when a mutation unexpectedly passes.

P2 — Research/design title contract

[Research/Design] is now explicitly defined as a combined untriaged intake prefix. During triage it must be normalized to [Research] or [Design], with exactly one corresponding type:* label, before the issue enters managed work or is marked Ready.

The standard now links to ROADMAP_OPERATING_MODEL.md instead of maintaining a competing numeric WIP policy.

RED → GREEN evidence

Original taxonomy RED

CI #159 reached the new policy test after existing roadmap tests passed, then failed as intended:

FAIL: missing required label: type:bug

Review-fix RED

CI #174 proved the new schema-aware test was active and failed because the validator had not yet been implemented:

FAIL: missing required file: tests/roadmap/validate-issue-forms.rb

CI #175 then proved P1 passed while P2 was still unresolved:

Issue form YAML schemas and repository contracts passed.
FAIL: issue standard must define the combined untriaged research/design prefix

Final GREEN

Final head: e96d3f84c72a8e10cdb5f026624f1b598db1cc3f

CI #177 completed successfully on the pull-request merge commit against current main:

  • roadmap-automation: success
    • bootstrap/security tests;
    • existing-number mapping tests;
    • stage-gate policy tests;
    • schema-aware Issue Form and issue-standard tests;
    • authoritative live read-only --dry-run --force-update plan;
  • check: success
    • Rust formatting;
    • Clippy with warnings denied;
    • Rust workspace tests;
    • WASM build;
    • frontend type check;
    • frontend tests;
    • frontend production build.

Both P1 and P2 review threads are resolved.

Final diff

  • 11 changed files;
  • +959/-18;
  • new validator: tests/roadmap/validate-issue-forms.rb;
  • no package or application dependency added.

Reviewed live reconciliation plan

The authoritative dry-run still plans only the documented post-merge operations:

No write operation was executed by CI.

Post-merge operation

Run the existing authorized roadmap apply from the reviewed default-branch state with --force-update, then rerun the authoritative dry-run. Treat live state as reconciled only when the plan contains expected no-ops and intentional superseded skips with no unexplained issue, label, parent, dependency, assignee, or milestone drift.

Rollback

Revert this focused PR. If live reconciliation has already run, execute the tested apply/dry-run workflow from the reverted canonical state to restore the previous labels, bodies, and relationships.

@Dyu20705 Dyu20705 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review verdict: changes requested before marking this draft ready.

The overall direction is strong: the forms are proportional by work type, the managed-issue metadata check is useful, the live reconciliation plan is explicit, and CI #173 passed against the current main merge commit. Two contract gaps remain:

  1. The new fail-closed test only greps for field IDs, so it does not prove that required fields are actually required or that GitHub can parse the forms.
  2. The combined research/design form generates a title prefix that the new standard does not permit.

After these are corrected, rerun the policy test and CI on the updated head. Non-blocking maintainability note: keep ISSUE_STANDARD.md and ROADMAP_OPERATING_MODEL.md linked rather than allowing Definition of Ready/WIP rules to drift between two documents.

Comment thread tests/roadmap/test-issue-standard.sh Outdated
Comment thread .github/ISSUE_TEMPLATE/research_design.yml
@Dyu20705
Dyu20705 marked this pull request as ready for review August 1, 2026 07:53
Copilot AI review requested due to automatic review settings August 1, 2026 07:53
@Dyu20705
Dyu20705 merged commit 710cd02 into main Aug 1, 2026
3 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR hardens the repo’s GitHub Issue system by adding a production-ready issue taxonomy, introducing/strengthening structured public intake forms, documenting a type-aware operating standard, and adding CI-enforced regression tests to fail closed when contracts drift.

Changes:

  • Add new type:* taxonomy labels and status:needs-triage, and update roadmap docs to reference the new standard.
  • Introduce docs/process/ISSUE_STANDARD.md to define type-specific readiness/closure evidence, workflow states, and traceability rules.
  • Add a new test suite (tests/roadmap/test-issue-standard.sh + Ruby form validator) and run it in CI to enforce issue-form structure and managed-issue minimum contracts.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/roadmap/validate-issue-forms.rb Adds a strict Ruby validator for issue-form YAML structure and expected contracts/labels.
tests/roadmap/test-issue-standard.sh Adds a shell test suite enforcing taxonomy, form presence/validity, managed-issue metadata contracts, and policy doc requirements.
roadmap/README.md Documents the new production issue standard and adds the new test to the local/CI checklist.
roadmap/labels.json Adds new taxonomy/triage labels used by forms and tests.
docs/process/ISSUE_STANDARD.md Defines the durable, type-aware issue operating standard (readiness, DoD, workflow, evidence safety, PR linkage).
.github/workflows/ci.yml Executes the new issue-standard test suite in CI.
.github/ISSUE_TEMPLATE/research_design.yml Adds a dedicated research/design intake form with required decision/hand-off fields.
.github/ISSUE_TEMPLATE/feature_request.yml Strengthens proposal intake (triage label, impact, scope, non-goals, dependencies, quality/rollback expectations).
.github/ISSUE_TEMPLATE/data_correction.yml Adds a dedicated source-backed data/content correction intake form.
.github/ISSUE_TEMPLATE/bug_report.yml Strengthens bug intake (triage label, impact/regression/workaround, more explicit environment/evidence guidance).
.github/ISSUE_TEMPLATE/accessibility_report.yml Adds a dedicated accessibility barrier intake form with AT/input-method context requirements.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +47 to +60
jq -s -e '
[.[].issues[]]
| all(.[ ];
select((.state // "open") == "open" and .phase != "cleanup")
| ((.labels // []) | map(select(startswith("type:"))) | length) == 1
and ((.labels // []) | map(select(startswith("priority:"))) | length) == 1
and ((.assignees // []) | length) >= 1
and (.milestone != null)
and ((.key == "web-mvp-roadmap") or (.parent != null))
and ((.outcome // "") | length) > 0
and ((.scope // []) | length) > 0
and ((.acceptanceCriteria // []) | length) > 0
and ((.definitionOfDone // []) | length) > 0)
' "$ROOT"/roadmap/issues/*.json >/dev/null || fail 'an active managed issue lacks one type, one priority, ownership, hierarchy, scope, acceptance criteria, or DoD'
@Dyu20705
Dyu20705 deleted the chore/production-issue-standard branch August 1, 2026 09:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants