Skip to content

fix: treat accepted promotions as replay resolved#470

Merged
ozand merged 1 commit into
mainfrom
fix/issue-469-accepted-promotion-not-blocked
May 2, 2026
Merged

fix: treat accepted promotions as replay resolved#470
ozand merged 1 commit into
mainfrom
fix/issue-469-accepted-promotion-not-blocked

Conversation

@ozand
Copy link
Copy Markdown
Owner

@ozand ozand commented May 2, 2026

Closes #469

Summary

Fixes the dashboard promotion replay classifier so accepted promotion lifecycle evidence outranks stale replay_readiness=blocked row markers.

The live post-#468 state had /api/promotions.items[0] with:

  • status=accept
  • lifecycle_phase=accepted
  • governance_packet.review_packet_status=accepted
  • governance_packet.decision=accept
  • concrete decision_record
  • concrete accepted_record
  • no readiness_blocker

but /api/system.promotion_replay_readiness still returned:

  • state=blocked
  • reason=promotion_replay_not_ready
  • recommended_next_action=resolve_promotion_replay_blocker

because stale row.replay_readiness=blocked won.

Changes

  • Add accepted-lifecycle branch in _promotion_replay_readiness_from_promotions(...).
  • Return:
    • state=accepted
    • reason=promotion_candidate_accepted
    • missing_records=[]
    • recommended_next_action=null
  • Add regression test with exact live accepted-promotion shape and stale replay_readiness=blocked marker.

Test plan

RED was verified before implementation:

FAILED test_promotion_replay_readiness_treats_accepted_promotion_as_resolved
assert 'blocked' == 'accepted'

GREEN/focused:

PYTHONPATH=ops/dashboard/src:ops/dashboard python3 -m pytest ops/dashboard/tests/test_dashboard_truth_audit_gaps.py::test_promotion_replay_readiness_treats_accepted_promotion_as_resolved -q
1 passed in 0.16s

PYTHONPATH=ops/dashboard/src:ops/dashboard python3 -m pytest ops/dashboard/tests/test_dashboard_truth_audit_gaps.py::test_api_system_does_not_block_ready_promotion_awaiting_policy_review ops/dashboard/tests/test_dashboard_truth_audit_gaps.py::test_promotion_replay_readiness_treats_accepted_promotion_as_resolved -q
2 passed in 2.61s

Full suites:

PYTHONPATH=ops/dashboard/src:ops/dashboard python3 -m pytest ops/dashboard/tests -q
169 passed in 195.66s

python3 -m pytest tests -q
699 passed, 5 skipped in 21.11s

@ozand ozand merged commit 6ae7189 into main May 2, 2026
3 checks passed
@ozand ozand deleted the fix/issue-469-accepted-promotion-not-blocked branch May 2, 2026 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Accepted promotions should not remain blocked by stale replay_readiness markers

1 participant