Skip to content

Unify status-tool output schemas across get_status, get_requirement_status, and get_requirements_status #413

Description

@jimisola

Context

Spun out of #412. That issue consolidates the computation of automated-test completeness into a single predicate. This issue is about the separate, orthogonal problem: the three MCP status tools render that verdict into two different output schemas.

The divergence

get_status()StatisticsService.to_status_dict():

  • per-req: completed, implementations, implementation_type, automated_tests:{total,passed,failed,skipped,missing,not_applicable}, manual_tests:{...}

get_requirement_status(id) / get_requirements_status(urn)details.py:

  • per-req: id, urn, lifecycle_state, implementation, test_summary:{passed,failed,skipped,missing}, meets_requirements

Concrete mismatches an MCP client has to reconcile:

  • verdict field name: completed vs meets_requirements
  • implementation field name: implementation_type vs implementation
  • test breakdown: a single flat test_summary (automated only, no total, no not_applicable) vs split automated_tests + manual_tests objects carrying total and not_applicable
  • manual-test results are absent entirely from the test_summary shape

Why deferred from #412

Aligning the schemas is a breaking change to two live MCP tool contracts, independent of fixing the computation drift. #412 deliberately maps the unified predicate back into the existing test_summary/meets_requirements shape to avoid expanding scope.

To investigate

  • Pick the canonical shape (likely the to_status_dict() per-req shape, since it's the richer/more honest one) and migrate the two details.py-backed tools onto it.
  • Decide on a deprecation/transition story for MCP clients depending on meets_requirements / flat test_summary.
  • Confirm whether get_status's to_status_dict() and the per-id/scoped tools should literally share a serializer.

Blocked on / best done after #412 lands.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions