Placement before scheduler admission.
The intended runtime placement is inside BAM's routing/scheduling environment. An adapter extracts the minimal transaction view, calls the policy core, then returns a delay decision.
Incoming transaction
Transaction arrives at BAM routing.
BAM adapter
Extracts top-level calls and referenced keys.
xguard-core
Returns deterministic delay decision.
Scheduler
Normal or delayed admission path.
Small input. Small output.
classify(config, transaction) receives validated application rules and a minimal transaction view. It returns only the chosen delay_ms and stable rule matches for auditability.
No invented production API.
BAM's public ACE design discusses application registration and plugin execution, but XGuard intentionally leaves the production adapter as a boundary until BAM provides the supported interface for the early-access cohort.
- Application registration source of truth: supplied by BAM.
- TEE / attestation expectations: supplied by BAM.
- Scheduler adapter contract: supplied by BAM.
- Fee/accounting hooks: supplied by BAM if available.
The decision is a pure function.
There are no wall-clock reads, random values, network calls, mutable globals, or external storage reads. Identical validated policy plus identical transaction view yields the same classification.