Architecture
Policy Pack Specification
Alpha
DSAR is currently in alpha. APIs, package surfaces, configuration, and documentation may change as the project evolves.
This document defines the schema and evaluator contract for @dsar/policy-engine.
Policy pack schema
Policy packs are versioned, machine-readable contracts with deterministic sections:
packId,version,jurisdiction,effectiveAtsections.clocksections.representationsections.verificationsections.responsesections.deliverysections.appealssections.retentionsections.audit
Clock section
Required fields:
start:"receipt" | "verification_complete"verificationEffect:"stop_clock" | "no_stop_clock"clarificationEffect:"stop_clock" | "no_stop_clock"ackRequired:booleanackDeadlineBusinessDays?:numberresponseDeadlineDays:numberextension:{ enabled, maxAdditionalDays, requiresJustification }rules: deterministic override rules withid,precedence,when,apply
Rule precedence is deterministic:
- sort by
precedencedescending - tie-break by
idascending - apply merged rule overrides from lowest to highest precedence so highest precedence wins
Evaluator interface
evaluatePolicy(input) returns an Effect program with deterministic output.
Input envelope includes:
- policy pack payload
- jurisdiction + policy version
- request type and requestor type
- authority evidence signal
- timeline context (
receivedAt,now, pauses, extensions) - actor/context signals (
isComplex,requiresVerification)
Output envelope includes:
decision: actionable booleans (verification required, appeal eligibility, etc.)clock: base/final deadlines and applied pause/extension contributionsrequiredActionsrequiredNoticesmatchedRuleIdsexplainabilityTrace
Explainability trace contract
Every decision includes machine-readable trace entries with:
code(clock.base,clock.rule.applied,clock.pause.applied,clock.extension.applied,clock.final)message- optional
detailspayload
This enables replay and clock explain APIs to show exactly how due dates were produced.
Fixture matrix
Current fixture coverage:
uk-accesseu-clarification-pauseus-no-stop-verificationedge-repeated-clarificationsedge-extension-near-deadlineedge-partial-refusal-precedencepolicy-packs/uk-deadline-baselinepolicy-packs/eu-clarification-vs-verificationpolicy-packs/us-extension-cappolicy-packs/us-co-high-risk-verificationpolicy-packs/us-va-refusal-appeal
These vectors validate:
- deterministic outputs
- precedence behavior
- stop-clock / no-stop-clock behavior
- extension cap handling
- explainability trace shape and stable ordering
Launch catalog and known gaps
First-party launch coverage includes:
- UK baseline pack (
uk) - EU baseline pack (
eu) - Initial US set: baseline US (
us), California (us-ca), Virginia (us-va), Colorado (us-co)
Known gaps:
- Additional US state packs are not yet implemented in the launch catalog.
- State-specific refusal categories and exemptions remain future additions.
Jurisdiction hard-gate contract
Request intake now requires a top-level jurisdiction and resolves an active policy via:
- workspace/tenant scoped pin (if present)
- latest available pack for the same jurisdiction
- hard-fail with
POLICY_JURISDICTION_UNMAPPEDwhen no mapping exists
The hard-fail envelope includes structured guidance so clients can route users/admins:
subject_contact_adminadmin_register_policy_packadmin_activate_policy_pack
Custom policy lifecycle events
Custom policy authoring and activation emit dedicated policy audit events:
custom_policy_registeredcustom_policy_activatedcustom_policy_deactivated
These events are emitted by @dsar/policy-packs services and consumed by backend policy routes.