Skip to content

Bug: Bug: Two coexisting acceptance-criteria numbering schemes in one spec cause miscounts #899

Description

@drmoisan
  • Work Mode: full-bug

Summary

A single spec.md can carry two different acceptance-criteria numbering schemes at once - a set
of (#<issue>)-prefixed criteria scattered through the document, and a separate numbered
## Acceptance Criteria section. The counts do not agree, and neither scheme announces that the
other exists.

On item 869: 15 (#869)-prefixed criteria coexist with a 31-entry ## Acceptance Criteria
section.

The section-scoped count is the authoritative one. Nothing in the document says so.

Environment

(not provided in potential file)

Steps to Reproduce

(not provided in potential file)

Expected Behavior

(not provided in potential file)

Actual Behavior

(not provided in potential file)

Logs / Screenshots

(not provided in potential file)

Impact / Severity

(not provided in potential file)

Source

From: docs/features/potential/2026-09-14-spec-dual-numbering-schemes-cause-ac-miscounts.md

Activity

  1. drmoisan commented on Sep 17, 2026

    @drmoisan
    OwnerAuthor

    Premise correction — this issue as filed is factually wrong

    I filed this issue. The core claim is incorrect and should not be acted on as written.

    What I claimed: that docs/features/active/2026-09-11-ci-coverage-threshold-and-pester-gates-869/spec.md carries two competing numbering schemes — 15 (#869)-prefixed criteria coexisting with a separate 31-entry ## Acceptance Criteria section.

    What is actually there: one ## Acceptance Criteria section at lines 239-271 holding 31 checkbox entries, all 31 of which carry a (#NNN) issue-attribution prefix — 7 for #561, 9 for #562, 15 for #869. The "15" I cited is the #869 subset of that same 31-entry list, not a competing scheme. Item 869 consolidated three issues, so the prefix is attribution within one list, which is correct behaviour rather than a defect.

    The (#NNN) form appears in exactly 1 of 86 active specs.

    The miscounts were real; the explanation was not

    The two measured miscounts cited in the body did happen. But they are explained by the genuine defect below, not by dual numbering schemes. I inferred a mechanism from the symptom instead of measuring it — the same error pattern corrected on #895 during the same run.

    The genuine defects, measured across all 86 active specs

    1. Stray checkboxes outside the acceptance-criteria section. 869 has 4 such lines at lines 24-27. Repository-wide, 52 of 86 active spec.md files carry checkbox lines outside their acceptance-criteria section. These are injected by the promotion scaffold. This is what makes a whole-file checkbox count disagree with a section-scoped count — the actual cause of both miscounts.
    2. 5 specs have zero in-section criteria at all, because the feature template ships a ## Definition of Done heading instead of ## Acceptance Criteria.
    3. A third label scheme exists. AC<n> is in use in 41 files, and is what the executor greps for — so three conventions are live simultaneously.

    Ownership — this is push-down-owned, measured not inferred

    • Authoring contract: .claude/skills/acceptance-criteria-tracking/SKILL.md lines 43-50. Line 44 permissively allows three different acceptance-criteria headings for every non-minor-audit work mode; line 50 forbids reformatting non-checkbox criteria.
    • The only authoring-time gate parsing criteria out of a spec.md: .claude/hooks/validate-prd-feature-output.ps1 line 66, bound to the prd-feature agent by .claude/agents/prd-feature.md line 20.
    • The scaffold injecting the stray checkboxes is not in this repository at all — it lives in the drm-copilot MCP resources bundle.

    Both .claude files were verified byte-identical to their drm-copilot copies.

    Disposition

    Routed upstream to drm-copilot; this issue stays open as a TaskMaster tracker, following the precedent set by #691.

    Cleaning the 52 local specs without fixing the scaffold would not hold — the scaffold reinjects on every promotion. The scheme declaration, the authoring-time gate and the scaffold templates all need to be fixed upstream first. A repo-local cleanup slice would survive push-down afterwards, because the push-down engine overwrites payload paths and never deletes destination-only files.

    Re-scope this issue to that local slice only after the upstream fix lands, and only if the cleanup is still wanted.

  2. drmoisan commented on Sep 28, 2026

    @drmoisan
    OwnerAuthor

    Consolidated into the upstream tracker #932 (item 2). As the correction comment above records, the real defects are the scaffold's stray checkboxes, the Definition of Done heading, and three live label conventions, and all of them are push-down owned. Closing in favour of #932.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions