# Documented exceptions to the RADICAL_SAM treatment rule
# (the table under "Treatment rule for the generic rows" in projects/RADICAL_SAM.md).
#
# The rule is enforced in code over both scopes by rsam_synthesis.py, and the
# project's tests assert that neither scope reports a deviation. One branch the
# table documents in prose cannot be expressed by the rule constant itself:
#
#     GO:0046872 metal ion binding | MODIFY | "Keep only if the protein binds a
#                                              separate metal ion."
#
# A member that genuinely binds a mononuclear metal site alongside its cluster
# should keep that row (ACCEPT, or KEEP_AS_NON_CORE if peripheral), which the rule
# would otherwise score as a deviation and the test would turn into a CI failure.
# This file is that escape hatch, so honouring the documented branch never requires
# editing a test.
#
# It is deliberately NOT the schema's `review.consistency_exception`. That field is
# scoped to the action-consistency rules in
# src/ai_gene_review/schema/action_consistency.yaml, and its validator warns when a
# row declares one but is in no action-consistency conflict
# (src/ai_gene_review/validation/action_consistency.py). Using it for a project-rule
# exception would therefore trade one spurious failure for another.
#
# Each entry needs:
#   gene     organism-qualified, as in phase3_scope.yaml (e.g. PSEPK/moaA), or
#            <organism>/<symbol> for a gene in the Phase 4 scope
#   term     the GO id of the row
#   actions  the action(s) the exception permits on that row
#   reason   why the rule's primary action is wrong for this protein; name the
#            separate metal site and the evidence for it
#
# An entry that matches no row is reported as stale and fails the test, so the
# hatch cannot rot the way an unchecked allowlist does.
#
# Empty today: no reviewed member has a mononuclear metal site beside its cluster.
exceptions: []
