From 6c2a9042c88f8b7cc6baef70a153e8e5a08b3da0 Mon Sep 17 00:00:00 2001 From: Allan Scott Date: Mon, 20 Apr 2026 09:32:17 -0400 Subject: [PATCH] Add OpenSpec tech-debt-backlog change Rolling collection point for small items that surface during code review and QA but aren't worth their own proposal. Seeded with two low-severity observations from Hermes QA on PR #21: - parser: rename `_has_trailing_mutation` to match what it detects - verifier: audit CUDA-Q backend severity/valid consistency The backlog is intentionally long-lived and has no specs deltas (so `openspec validate --strict` will fail on it, by design). Co-Authored-By: Claude Opus 4.7 --- .../changes/tech-debt-backlog/.openspec.yaml | 2 ++ .../changes/tech-debt-backlog/proposal.md | 30 +++++++++++++++++++ openspec/changes/tech-debt-backlog/tasks.md | 25 ++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 openspec/changes/tech-debt-backlog/.openspec.yaml create mode 100644 openspec/changes/tech-debt-backlog/proposal.md create mode 100644 openspec/changes/tech-debt-backlog/tasks.md diff --git a/openspec/changes/tech-debt-backlog/.openspec.yaml b/openspec/changes/tech-debt-backlog/.openspec.yaml new file mode 100644 index 0000000..c4036b7 --- /dev/null +++ b/openspec/changes/tech-debt-backlog/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-04-20 diff --git a/openspec/changes/tech-debt-backlog/proposal.md b/openspec/changes/tech-debt-backlog/proposal.md new file mode 100644 index 0000000..e8cfb6f --- /dev/null +++ b/openspec/changes/tech-debt-backlog/proposal.md @@ -0,0 +1,30 @@ +## Why + +We keep turning up small issues during code review and QA triage that +aren't worth their own OpenSpec change — internal naming nits, +minor error-severity inconsistencies, leftover dead code, error +messages that could be clearer, and so on — but they also shouldn't +disappear into commit-message limbo. + +## What Changes + +- Create a rolling "backlog" change that collects these small items + in one `tasks.md`, grouped by area. +- Items are added as they come up (from QA triage, self-review, + user feedback). Once an item is fixed, its task is marked + complete but **not** removed — the archive eventually preserves + what was done. +- When an item grows enough to warrant its own proposal/design + (behavior change, new requirement, cross-module impact), it is + pulled out into a dedicated OpenSpec change and the backlog entry + is marked with a pointer to that change. +- This change is intentionally long-lived: it stays open until it + gets too big to manage, at which point we archive it as a + snapshot and start a fresh one. + +## Impact + +- Affected specs: **none** — this is a process/backlog change, not a + requirements change. No `specs/` deltas. +- Affected code: items land as small PRs referencing their task + number in `tech-debt-backlog/tasks.md`. diff --git a/openspec/changes/tech-debt-backlog/tasks.md b/openspec/changes/tech-debt-backlog/tasks.md new file mode 100644 index 0000000..5a46290 --- /dev/null +++ b/openspec/changes/tech-debt-backlog/tasks.md @@ -0,0 +1,25 @@ +## 1. Parser + +- [ ] 1.1 Rename `_has_trailing_mutation` in + `q_orca/parser/markdown_parser.py` to something that reflects + what it actually detects (a mutation op appearing after a gate + call within the same effect string). Current name reads like + "this effect ends with a mutation" which is misleading. + (Source: Hermes QA on PR #21, low severity.) + +## 2. Verifier / backend adapters + +- [ ] 2.1 Audit CUDA-Q backend error reporting for `severity` / + `valid` field consistency. Hermes flagged cases where a result + could carry `severity="error"` alongside `valid=True`, or the + inverse. Confirm the convention (error severity must mean + `valid=False`) and fix any drift. + (Source: Hermes QA on PR #21, low severity.) + +## 3. How to use this file + +- [ ] 3.1 **Meta**: when an item is fixed, leave the task checked + rather than deleting it — the archived copy of this change is + our record. If an item grows beyond "small," spin it out into + a dedicated OpenSpec change and replace the task body with a + pointer (e.g. "→ spun out as `add-xyz`").