Checklists

requirements.md

Specification Quality Checklist: Annoying Bugs Sweep

Purpose: Validate specification completeness and quality before proceeding to planning Created: 2026-07-27 Feature: spec.md

Content Quality

  • ✅ No implementation details (languages, frameworks, APIs)
  • ✅ Focused on user value and business needs
  • ✅ Written for non-technical stakeholders
  • ✅ All mandatory sections completed

Requirement Completeness

  • ✅ No [NEEDS CLARIFICATION] markers remain
  • ✅ Requirements are testable and unambiguous
  • ✅ Requirement types are separated (Functional / Non-Functional / Constraints)
  • ✅ IDs are unique across FR-###, NFR-###, and C-### entries
  • ✅ All requirement rows include a non-empty Status value
  • ✅ Non-functional requirements include measurable thresholds
  • ✅ Success criteria are measurable
  • ✅ Success criteria are technology-agnostic (no implementation details)
  • ✅ All acceptance scenarios are defined
  • ✅ Edge cases are identified
  • ✅ Scope is clearly bounded
  • ✅ Dependencies and assumptions identified

Feature Readiness

  • ✅ All functional requirements have clear acceptance criteria
  • ✅ User scenarios cover primary flows
  • □ Feature meets measurable outcomes defined in Success Criteria <!-- N/A at spec time: nothing implemented yet -->
  • ✅ No implementation details leak into specification

Post-squad revision (2026-07-27)

A post-spec adversarial squad returned 3 CRITICAL findings against the first draft. All confirmed findings are folded into the revised spec. The four rows below were re-evaluated rather than re-ticked:

bounded (NFR-003 now scans tracked roots with a fail-closed non-zero file count) and the FR-008/Edge-Case-5 contradiction was removed by dropping the command guard in favour of a hand fix.

measured over .agents/**, which is gitignored and absent; a percentage over a missing denominator is not a threshold. Rescoped to tracked surfaces.

a dry-run proved is a dead oracle (0 of 324 missions can seed). Replaced with a synthetic drifted fixture carrying an explicit non-vacuity assertion.

  • "Requirements are testable and unambiguous" — re-ticked only after the guard predicate was
  • "Non-functional requirements include measurable thresholds" — NFR-003's "100%" previously
  • "Success criteria are measurable" — SC-001 previously named the committed dogfood corpus, which
  • "Feature meets measurable outcomes" — unticked; it cannot be true at spec time.

Corrections of record: the first draft's P0 causal model was falsified against src/specify_cli/status/reducer.py:315, and its "zero raw reads" requirement reversed a binding constraint on #1840 that protects open P1 #2304. Both corrected.

Notes

Validation performed 2026-07-27. Three items warranted an explicit judgement rather than a silent tick:

1. "No implementation details" — the spec names concrete symbols (status.events.jsonl, AgentProfileRepository, spec-kitty agent profile show). Judged compliant: this is a bug-fix mission against an existing system, so the defect sites are the subject. The requirements state observable outcomes ("terminal lane is never rewound"), not solutions; the named artifacts identify where the defect lives, which a reader cannot verify without them. C-002 records the one solution shape that was deliberately ruled out, which is a scope boundary rather than a design choice.

2. NFR measurable thresholds — NFR-002 (90% diff coverage) and NFR-003 (100% of prompt surfaces) are numeric. NFR-001 and NFR-004 are pass/fail process gates rather than metrics; treated as measurable because each has an unambiguous binary outcome with recorded evidence (a named commit that must red, then green).

3. Bulk-edit classification — assessed and deliberately declined; rationale recorded in the spec's closing section rather than left implicit, so a reviewer can overturn it.

No unresolved items. Ready for /spec-kitty.plan.