Skip to content

feat(gates): gate-promotion lifecycle — list advisory checks ready to promote - #157

Merged
eduralph merged 2 commits into
mainfrom
feat/156-gate-promotion
Jun 25, 2026
Merged

feat(gates): gate-promotion lifecycle — list advisory checks ready to promote#157
eduralph merged 2 commits into
mainfrom
feat/156-gate-promotion

Conversation

@eduralph

Copy link
Copy Markdown
Owner

Closes #156.

Promoting a check from advisory (gating = false) to gating is a manual flip in pdca.toml, with no signal for when it's earned — so a new (often Act-proposed) gate either blocks every cycle on day one, or never gets promoted.

A check may now carry promote_after = N. gates.promotion_candidates() scans frozen cycles (newest-first by §9 date) and returns each advisory check that has passed in its N most-recent runs — earned promotion. pdca gates --promotions lists them. Hint-only: the human flips gating = true; nothing is auto-mutated.

  • gates.py: promotion_candidates() (+ check-gates.json readers).
  • cli.py: pdca gates --promotions.
  • pdca.toml GATING-POLICY note + docs/05.
  • test_gate_promotion.py (6 cases: ready at threshold, recent fail / unverifiable breaks it, below threshold, gating/no-promote_after excluded).

Suite 282 green.

🤖 Generated with Claude Code

… to promote (#156)

Promoting a check from advisory (gating=false) to gating was a manual flip with no signal for WHEN it's earned. A check may now carry promote_after=N: gates.promotion_candidates() scans frozen cycles and returns each advisory check that has PASSED in its N most-recent frozen runs. `pdca gates --promotions` lists them — hint-only, the human flips `gating` (nothing is auto-mutated). De-risks a new (often Act-proposed) gate, which should prove itself advisory before it blocks. Documented in pdca.toml + docs/05.

Adds test_gate_promotion.py (6 cases). Suite 282 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f7084705e5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread template/src/pdca_harness/gates.py Outdated
…SUMMARY date

Codex review (#157): _signoff_date searched the whole SUMMARY.md for the first ISO date, but assembled summaries carry brief/reviewer dates in §1/§5 before §9. A newer failing cycle could sort behind older passing ones, reporting a check ready though its most-recent sign-off run failed. Scope the date to the §9 'Check sign-off' section (as the act parsers do). Adds a regression test (newest cycle fails, has an old §1 date).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@eduralph
eduralph merged commit dcb13f8 into main Jun 25, 2026
2 checks passed
@eduralph
eduralph deleted the feat/156-gate-promotion branch June 25, 2026 19:54
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.

Gate-promotion lifecycle: surface an advisory check that's been clean for N cycles

1 participant