Pipeline
pipeline
Top-level orchestration: run + the fixed-point iteration loop.
The fixed-point loop (MAX_ITERATIONS=6) is the B3 fix: the cascade
of RELOCATE → SPLIT → MERGE → RENAME mutates classification (a moved
test may switch tier; a SPLIT can expose a new NAME_MISMATCH that
wasn't visible pre-split). Re-running the stages until convergence
gives a chance to settle to zero — see README_FIX_PROTO.md for the
caveats discovered during pass 12.
Post-loop polish: extract duplicated helpers + run ruff format/fix.
MAX_ITERATIONS = 6
module-attribute
Hard cap on the fix pipeline's fixed-point loop.
The RELOCATE → SPLIT → MERGE → RENAME cascade mutates classification
(a moved test may change tier; a SPLIT may free a NAME_MISMATCH that
was hidden pre-split), so :func:axm_audit.core.fix.run re-runs the
stages until no new ops are planned. The cap fails loud on a buggy
fixed-point instead of looping forever.
FixApplyError
Bases: RuntimeError
Raised when an apply=True run fails and the tree was rolled back.
Carries an actionable message (never a bare runtime dict key such as
'test_basic') so the audit_fix tool surfaces something a human
can act on. The original cause is chained via __cause__.