Skip to content

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__.

Source code in packages/axm-audit/src/axm_audit/core/fix/pipeline.py
Python
class FixApplyError(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__``.
    """