Deviations
A deviation is a recorded non-blocking event that ASF50 must account for. The deviation count is incremented and the event is preserved as part of the durable evidence.
What is a deviation
A deviation is any of:
- A non-blocking audit finding that is acknowledged and not fixed in the current goal.
- A retroactive reconciliation of a historical gate (e.g., the bounded PR15 reconciliation).
- A bounded repair against a frozen surface.
- A bounded PR/merge performed outside the canonical lifecycle (only when explicitly authorized as a repair).
A deviation is never:
- A retroactive authorization for a destructive operation that already happened.
- A bypass of the canonical lifecycle.
- A way to silence an unresolved audit finding.
Where deviations are recorded
Deviations are recorded as evidence files in evidence/<GOAL_ID>/ and may be referenced by governance/audit/deviation_accounting.yaml in some goals. The orchestrator tracks current_cycle_deviation_count in the program controller.
PR15 historical transaction
The most notable historical deviation in ASF50's release history is PR #15. The Program Controller pins this deviation explicitly:
PR15_HISTORICAL_TRANSACTION = {
"pr_number": 15,
"github_repository": "Bee1xGroup/ASF50",
"merge_commit": "26ccd973e72dd3d800c0e23c4a78a4641f2ab9bd",
"historical_goal_id": "ASF50_PROGRAM_COMPLETION_001",
"current_cycle_deviation_count": 18,
"retroactive_authorization": False,
}
The PR15 envelope is durably preserved; the Program Controller will never silently drop it. The count is incremented when the controller observes new deviations.
No retroactive authorization
Deviations are forward-only. A deviation is acknowledged as it occurs, not retroactively. If you find a deviation after the fact, the correct response is:
- Open a bounded repair goal.
- Acknowledge the deviation in the repair's evidence.
- Increment the deviation count via the orchestrator.
You may not "authorize" the deviation retroactively by editing the deviation count or by writing a backdated evidence file. The runtime DB enforces this via the created_at timestamps and the receipt chain.