feat(revalidate): add pdca revalidate — re-gate a frozen bundle (#11) - #39
Merged
Conversation
A bundle's check-gates.json is frozen at Check time, but the gates run
against a moving substrate (engine, ruleset, deps). A frozen FAIL the
current engine would never reproduce is otherwise indistinguishable from a
real accepted failure. `pdca revalidate <id>` re-runs the gates against the
current engine and records the staleness, without re-deciding §9.
- gates.run_gates_dry: same single-sourced _run_checks as `pdca gates` but
write_to=None, so re-gating a COMPLETE bundle never overwrites its frozen
check-gates.json / .md.
- revalidate.py: diffs frozen vs fresh rows by (element, rule_id, check),
writes an additive revalidation-<date>.json {date, engine_rev, per-row
old→new, changed, regression}. Never touches the frozen files or §9.
- cli: `pdca revalidate <id> [--date]`; refuses a non-COMPLETE bundle
(rc 2), exits nonzero on any delta (rc 1), quiet confirmation otherwise.
- act: the bundle index surfaces revalidation deltas (read-only) so Act can
tell a stale frozen FAIL from a real failure where it already looks.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
eduralph
force-pushed
the
feat/pdca-revalidate
branch
from
June 13, 2026 11:50
af731ee to
766bacf
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A bundle's
check-gates.jsonis frozen at Check time, but the gates run against a moving substrate (engine, ruleset, deps). A frozenFAILthe current engine would never reproduce is otherwise indistinguishable from a real accepted failure.pdca revalidate <id>re-runs the gates against the current engine and records the staleness — without re-deciding §9.What
gates.run_gates_dry— same single-sourced_run_checksaspdca gatesbutwrite_to=None, so re-gating a COMPLETE bundle never overwrites its frozencheck-gates.json/.md. (The crux:run_gateswrites via_finalize(write_to=d)and would clobber the frozen record.)revalidate.py— diffs frozen vs fresh rows by(element, rule_id, check), writes an additiverevalidation-<date>.jsonrecording{date, engine_rev, per-row old→new, changed, regression}. Never touches the frozen files or §9.pdca revalidate <id> [--date]; refuses a non-COMPLETE bundle (rc 2), exits nonzero on any delta (rc 1), quiet confirmation otherwise.FAILfrom a real failure where it already looks.Tests
7 new cases in
test_revalidate.pyusing deterministictrue/falsegates: stamp written + frozen files byte-identical; regression (frozen PASS now FAIL); unchanged = quiet confirmation; rc on delta; refuses non-COMPLETE; missing bundle; act-index surfaces the delta. Full suite green.Note
Evidence is n=1 (the
gramps-testbed-v2bundle11786case in the issue); filing the full command per the issue's "if pursued" acceptance criteria.Closes #11
🤖 Generated with Claude Code