Skip to content

validate: check_measurability_adjectives does not strip non-prose — latent, fires only by accident of template layout #474

Description

@explosivebit

Found while implementing #449 (PR #472, merged as 551ddb9). Out of scope there, filed so it is not rediscovered.

What

check_measurability_adjectives — the FR-side rule that shipped long ago — scans the Functional Requirements section for subjective adjectives (scalable, robust, efficient, responsive, fast) and does not strip HTML comments, fenced code, or tables first.

Its sibling check_nfr_measurability, added in #472, does strip. The two now disagree about what counts as prose.

Why it has never fired

Measured across the 69 PRDs in this repository: 2 adjective hits in FR, 15 in NFR.

All 15 sit inside the PRD template's own guidance —

<!-- BAD: "System should be fast and responsive" -->

— and that guidance happens to live under the NFR heading, not the FR heading. That is the only reason the FR rule stays quiet. Move the BAD examples up, or write a PRD that quotes one in its FR section, and the rule starts flagging text whose only fix is deleting the instructions.

Why it was not fixed in #472

Scope. #472 was about the SPEC validator inversion and the missing NFR rules; touching a long-shipped rule with no observed failures would have widened the diff without evidence that it matters. This issue carries the evidence for whoever picks it up.

Fix

Apply strip_non_prose_for_leakage in check_measurability_adjectives before scanning, mirroring check_nfr_measurability. Expected corpus impact: the 2 FR hits should be re-measured to confirm neither is inside non-prose; if both are real, the rule's behaviour is unchanged and the fix is purely defensive.

Verification it is really fixed

Move the template's BAD-example comment block under ## Functional Requirements in a scratch workspace and confirm the rule stays silent. Without that step the fix is unverified — the rule not firing is its normal state.

crates/forgeplan-core/src/validation/checks.rs

Refs: #449, #472, EVID-171

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions