symfonic.capabilities.governance.stages.objections¶
objections ¶
The one evaluation preconditions and policy steering share.
Both stages ask every objector about every call and collect the answers. They differ in authority, not in mechanism: a precondition is a fact about the call the tool itself declared, a policy guard is a rule the deployment imposed. Sharing the loop keeps the containment rule — an objector that raises admits, and says which one — written once.
ObjectionSweep
dataclass
¶
ObjectionSweep(findings: tuple[Finding, ...] = (), checked: int = 0, degraded: tuple[str, ...] = ())
What every objector said about every call, and which ones broke.
amendments
property
¶
The findings that name a rule which rewrote a call.
objections
property
¶
The findings that mean this call is not admissible.
Separate from amendments because a stage steers on one and not
the other: a rule that fixed the call did not object to it, and a
stage that steered on a successful repair would refuse the very call
the repair made admissible.
sweep ¶
sweep(objectors: Sequence[Objector], calls: Sequence[ToolCall], subject: GovernanceSubject, *, kind: str) -> ObjectionSweep
Ask each applicable objector about each call.
tool_name on the objector scopes it to one tool; an objector that
omits the attribute is asked about every call. An objector that raises
is skipped for that call and named in degraded — the finding it
might have produced is unknowable, and pretending otherwise in either
direction (admit silently, or refuse) would be a guess.