Skip to content

symfonic.agent.cutover.pause_surfaces

pause_surfaces

TA8.42's four rows, as data. The contract that reads them is next door.

Data only. What a pause surface is, why C1-B is a REPLACE and why C1-T was declined live in :mod:~symfonic.agent.cutover.pause_policy, with the rule that refuses the nested spelling. Read that module first -- this is the table it publishes. The same split settings_contract / retired_settings / config_retirement already make, for the same two reasons: the published surface reads end to end without the raise sites in the way, and each piece stays inside the repository's module budget. It also holds :data:REPLACED_PAUSE_SETTINGS, the two flat C1-B rows in the shape RETIRED_SETTINGS folds in -- derived here, from the surfaces above, so the refusal an adopter reads and the contract cannot drift apart.

PauseSurface dataclass

PauseSurface(path: str, subgroup: str, owner: str, disposition: str, served_by: tuple[str, ...], refused_by: tuple[str, ...], inert_on: tuple[str, ...], consumer: str, observable: str, replaced_by: str | None = None, adopter_break: str | None = None, override_argument: str | None = None)

One row of this lane, and what 11.0 does with it on each entry point.

served_by / refused_by / inert_on partition the public entry points exactly. inert_on describes only the migrated route at those entry points: it does not claim the legacy fallback lost the behaviour recorded by consumer and observable. An unmeasured third entry point is the gap that made earlier evidence unusable, and a row with a hole would reintroduce it. replaced_by and override_argument are mutually exclusive and one is required, so the table cannot hold a row that was neither replaced nor argued about.

pause_surfaces_for_subgroup

pause_surfaces_for_subgroup(subgroup: str) -> tuple[PauseSurface, ...]

Every row of one TA8.25 subgroup, in declaration order.

Parity is asserted per field and never aggregated, so the tests read the lane one subgroup at a time rather than reporting a single verdict.

Source code in src/symfonic/agent/cutover/pause_surfaces.py
def pause_surfaces_for_subgroup(subgroup: str) -> tuple[PauseSurface, ...]:
    """Every row of one TA8.25 subgroup, in declaration order.

    Parity is asserted per field and never aggregated, so the tests read the
    lane one subgroup at a time rather than reporting a single verdict.
    """
    return tuple(
        surface for surface in PAUSE_SURFACES.values() if surface.subgroup == subgroup
    )