Skip to content

bug(sdd-status): verify-report parser blocks archive on compliant prose containing Pending #848

Description

@luispino32

Pre-flight Checklist

  • I have searched existing issues and this is not a duplicate
  • I understand that PRs will be rejected if the linked issue does not have status:approved

📝 Bug Description

sdd-status can block archive with verify-report.md is not clearly passing even when the verify report has a clear passing verdict and all tests pass.

The false negative happens because the verify-report parser treats the standalone word PENDING as a blocker anywhere in the report, including ordinary compliant prose inside a spec compliance matrix.

In internal/sddstatus/status.go, the relevant behavior appears to be:

var reportPendingPattern = regexp.MustCompile(`(?i)\b(?:TODO|PENDING)\b`)

and reportLineHasBlocker(...) returns true when that pattern appears on any line.

This blocked archive for a report line like:

| Per-interface polling turn sequencing and timeout ownership | Pending apply/update messages drain before final poll | `test_getDataToInterface_owner_turn_orders_versions_tables_pending_then_final_poll` | ✅ COMPLIANT |

That row is explicitly compliant, but the word Pending caused the report to be treated as not clearly passing.

🔄 Steps to Reproduce

  1. Create an OpenSpec SDD change with all tasks completed.
  2. Add a verify-report.md with a passing verdict, for example **Verdict**: **PASS** and ### Verdict / PASS.
  3. Include a compliant matrix row or test name containing the standalone word Pending, e.g. Pending apply/update messages drain before final poll.
  4. Run:
gentle-ai sdd-status <change> --cwd <repo> --json --instructions

✅ Expected Behavior

sdd-status should treat the report as passing when:

  • the verdict is PASS;
  • no actual blocking findings exist;
  • the word Pending appears only in ordinary descriptive prose or a passing/compliant row.

The parser should only treat pending/TODO markers as blockers in explicit blocker contexts, task status fields, or non-compliant findings.

❌ Actual Behavior

sdd-status reports:

nextRecommended: verify
archive: blocked
blockedReasons: verify-report.md is not clearly passing

Removing or renaming the descriptive word Pending from the passing compliance row makes sdd-status return:

nextRecommended: archive
archive: ready
blockedReasons: []

Gentle AI Version

Observed with gentle-ai 1.37.2 from CLI output.

Operating System

Windows

AI Agent / Client

OpenCode

Shell

bash

📋 Affected Area

CLI (commands, flags)

💡 Logs / Error Output

blockedReasons: ["verify-report.md is not clearly passing."]

Additional Context

This is a parser false positive, not a product verification failure. In the observed case:

  • full native test suite passed;
  • focused command also passed;
  • verify report said PASS;
  • no CRITICAL findings remained;
  • archive became ready only after replacing Pending with Queued in report prose and avoiding the test name containing _pending_ in the same row.

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

    status:approvedApproved for implementation — PRs can now be openedtype:bugBug fix

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions