Skip to content

WO-024-P-G1-C3: feed validated closure evidence into final-promotion lineage #101

Description

@KayzenRoot

Classification

NECESSARY / V0.1 closure blocker.

Trigger

PR #98 / WO-024-P, exact HEAD 71776ca70bc3808a07e3c4bede43b5570cfdae4b, hosted CI run 35246912961.

Validate and Integration health PASS. Review Evidence FAILS while generating the manifest with:

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

at verify_wo024_approved_lineage() when reading closure.get("dod_pass_count") / dod_total_count.

Root cause

integration_evidence() intentionally does not publish v01_closure_sprint into the schema-bound Review Evidence manifest. This is deliberate and covered by test_wo024_manifest_stays_schema_valid_without_closure_property().

However, build_manifest() currently invokes:

fetch_wo024_approved_lineage(repository, integration.get("v01_closure_sprint", {}))

Since that key is intentionally absent, the lineage verifier receives {}. The actual v01-closure-sprint-v1 artifact exists in the same run and is PASS with DoD 46/46; the defect is the wrong data-source seam, not closure evidence itself.

Required correction

Create a separate bounded governance/test-only corrective increment WO-024-P-G1-C3 from protected main 0df7bb1079fe2a5bdc5ec55fcc76941ca31b8d2c.

The final promotion PR #98 must remain exactly two canonical files and must not absorb this correction.

Expected implementation outcome:

  • keep v01_closure_sprint OUT of the schema-bound integration_evidence() manifest;
  • make the WO-024-P approved-lineage path consume the already validated closure_sprint_evidence() payload, or an equivalent explicit validated closure payload, rather than integration.get("v01_closure_sprint", {});
  • preserve all fail-closed closure validation and immutable WO-024 lineage checks;
  • add behavioral regression coverage proving the final-promotion path receives complete closure counts while the integration manifest still omits the undeclared closure property;
  • add a negative proving missing/incomplete closure still fails closed.

Suggested exact scope

  • scripts/review_evidence.py
  • backend/tests/test_review_evidence.py

Generated deterministic maps only if the existing repository tooling proves they must change. No Project Brain/canonical files, product code, migrations, dependencies, workflows, ruleset or release assets.

Acceptance

Exact-head Validate, Integration health, and Review Evidence PASS; Ready/mergeable; zero unresolved threads; auto-merge UNARMED; executor stops before merge. After Sol merge + post-merge push CI, refresh same PR #98 onto new main and rerun its three gates.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions