Manage an architectural exception as a first-class, reviewable record linked to the governing decision. Define its exact repository and path scope, justification, owner, approver, expiry, compensating controls and evidence. CI should recognise only active, matching exceptions and surface approaching or expired exceptions for review.
Exceptions are part of the control model
Real systems contain legacy constraints, migrations and emergency trade-offs. Pretending that exceptions do not exist drives them into ignored warnings, blanket suppressions or undocumented comments. Once hidden, a temporary deviation can outlive the people who understood its risk.
An exception does not change the governing decision. It grants a narrow deviation under stated conditions. If exceptions become the normal path, the decision itself may need review.
Record the minimum defensible evidence
The exception should answer who accepted which risk for what scope and until when. Link it to the original decision so a reviewer can understand the default rule and the reason for deviating.
- Decision ID and exception ID.
- Repository, path, service or environment scope.
- Justification and alternatives considered.
- Owner, required approver and approval evidence.
- Expiry or explicit review date.
- Compensating controls and removal plan.
Make CI matching exact
An enforcement check should suppress a finding only when the exception is active and its declared scope matches the violation. Avoid repository-wide waiver tokens for path-specific problems. Report the exception ID and expiry beside the waived result so the risk stays visible.
AsDecided supports explicit decision lifecycle and scoped deterministic enforcement; teams designing exception automation should keep the exception record in the same reviewed workflow. Do not infer approval from an agent's explanation.
Close the lifecycle
Notify owners before expiry, fail or escalate after expiry according to risk, and preserve the historical record after closure. Track repeated and long-lived exceptions as signals that a rule is impractical, enforcement scope is wrong or migration work lacks ownership.
id: EXC-0091
decision: ADR-0042
scope: src/events/legacyPublisher.ts
expires: 2026-11-30
controls:
- reconciliation job
- publish-failure alert