Skip to content

symfonic.agent.retired_configuration

retired_configuration

The refusal type for configuration fields retired on the 11.0 line.

Owned here, outside :mod:symfonic.agent.cutover, so native hosts can catch it without loading the serving facade. The guard that raises it, :func:~symfonic.agent.cutover.config_retirement.refuse_retired_setting, and the reasoning behind the retirement stay in :mod:~symfonic.agent.cutover.config_retirement, which re-exports this same object until the cutover package is physically retired.

RetiredConfigurationError

RetiredConfigurationError(setting: str, entry_point: str, group: str, message: str)

Bases: CutoverPathError

A configuration field retired on the 11.0 line was set.

Subclasses :class:~symfonic.services.shadow.errors.CutoverPathError, and through it ConfigurationError and SymfonicError, for the reason :class:~symfonic.agent.cutover.retirement.RetiredArgumentError gives for its own ancestry: an adopter's existing except around the agent API keeps catching this. A widening, never a rename.

Named separately from the lever and argument errors rather than folded into either. The reachability probe's validity predicate keys on the lever vocabulary and the envelope's guard loop keys on the argument one; a configuration field in either table would make one vocabulary carry two kinds of fact. Three exact classifiers beat one loose one.

Source code in src/symfonic/agent/retired_configuration.py
def __init__(self, setting: str, entry_point: str, group: str, message: str) -> None:
    super().__init__(message)
    #: Which retired field was set, spelled as ``FrameworkConfig`` spells it.
    self.setting = setting
    #: The entry point it reached (``run`` / ``stream`` / ``stream_typed``),
    #: so a handler can tell a refused blocking turn from a refused stream
    #: without parsing prose. Every entry point refuses; the attribute
    #: records which one was asked, not which ones would have refused.
    self.entry_point = entry_point
    #: The contractual group the field refuses with. Named on the exception
    #: because "this whole family of legacy consolidation dials is gone" is
    #: a different piece of news from "this one field is gone", and an
    #: adopter migrating twelve settings should be told once.
    self.group = group
    #: The line that retired it. Read from
    #: :data:`~symfonic.agent.config_migration.lines.LEVER_RETIREMENT_LINE`
    #: rather than re-spelled, so the attribute and the message cannot
    #: disagree with the levers or the arguments.
    self.line = LEVER_RETIREMENT_LINE