Skip to content

symfonic.services.shadow.effects

effects

SHD-EC — the effect families and the shape of one classification row.

architecture_principles.explicit_effects names the capability families an invocation must declare before it may exercise them (filesystem, cache, network, credential discovery, background tasks, global registration, persistence). T2.3.7 adds the families the runtime itself crosses — provider, tool, pause-token, telemetry, scheduler, plugin, lifecycle — because a shadow run that suppressed only the declared capabilities would still mint a real pause token or export a real span.

The enum is the exhaustiveness axis: a family that exists here and has no classified port is a hole, and :mod:classification refuses to certify it.

EffectFamily

Bases: StrEnum

Every effect family the architecture declares. Exhaustive by contract.

EffectPort dataclass

EffectPort(port_id: str, family: EffectFamily, disposition: ShadowDisposition, rationale: str, externally_visible: bool = True)

One classification row: a port, its family, and its shadow disposition.

rationale is required. A disposition with no recorded reason is a decision nobody can review later, and this table is cutover evidence.

ShadowDisposition

Bases: StrEnum

What shadow mode does with a classified port. There is no third option.

DENY refuses the call. STUB answers it deterministically without reaching anything external. "Let it through" is deliberately not representable — that is the whole point of classifying.