governance-v1 · as of 2026-09-18 01:15Z · 30-day window · simulated data
How the AI is governed
The model-risk record for this tenant, generated from the live record and the code that is running. It answers in the shape of SR 11-7 and NIST AI RMF. Every number carries its n; where nothing has been measured it says null. The same facts are served as JSON at /api/governance for an examiner export.
1. Inventory
Every model in use, what it reads, what it returns, and whether it decides. None of them decide: the written policy routes, a person or the policy closes.
| Model | Version | Kind | Decides | Purpose | Validation | Evidence |
|---|---|---|---|---|---|---|
| Transaction Risk Skoor | trs-v1 | deterministic | no | Score a transfer 0–100 from observed history so the policy can route it. In: Program history, counterparty history, entity verification and screening state, velocity, amount against declared activity, rail. All read from stored rows; none inferred. Out: skoor | null, band (clear 0–29, review 30–69, hold 70–100, unscored), n, confidence, signals with weights, reason codes. | src/evals/cases.ts through src/evals/runner.ts (band accuracy, hold-band precision and recall); live calibration per band on /metrics. | src/skoor/transaction.ts · /transfers/:id · /api/preflight |
| Entity Risk Skoor | ers-v1 | deterministic | no | Score the customer behind transfers from its own rail history. In: Verification and screening state, return history, activity against declared, screening age. Out: Same bands, n, confidence, signals. | src/evals/actors.ts (ENTITY_CASES). | src/skoor/actors · /entities/:id · /reports/entity/:id |
| Counterparty Risk Skoor | crs-v1 | deterministic | no | Score the other side of transfers across every program on the tenant. In: Tenant-wide history with the counterparty, country, first-time flag, returns. Out: Same bands, n, confidence, signals. | src/evals/actors.ts (COUNTERPARTY_CASES). | src/skoor/actors · /counterparties/:id |
| Agent Risk Skoor | ars-v1 | deterministic | no | Score an AI agent moving money on a program or on the counterparty side, from observed rail history and its declared mandate. In: Operator entity, declared purpose and scope, observed transfers. Out: Same bands, n, confidence, signals. | src/evals/actors.ts (agent cases). | src/skoor/actors · /agents |
| Program Risk Skoor | prs-v1 | deterministic | no | Roll a program's KRIs into one number for the board pack and the queue. In: KRI snapshot: return rates against NACHA thresholds, reserve coverage, review and hold aging, velocity, concentration, verification denials. Out: skoor | null (null until at least three KRIs have n > 0), band, n. | KRI thresholds are published constants; program detectors gated by src/evals. | src/kri/engine.ts · /programs/:id · /reports/weekly/:id |
| Detectors and typologies | policy-v1 | deterministic | no | Open an alert when a transfer, actor or program matches a written condition. In: Features and the Skoor; KRI snapshots for program detectors. Out: Alert drafts with a detector name, severity, evidence and a dedupe key. Transfer: skoor_hold, skoor_review, unscored_large, denied_entity_activity, sanctions_or_pep, sanctioned_jurisdiction, structuring_pattern, first_time_counterparty_large, velocity_spike, repeat_pattern, card_fraud_decline. Program: return_rate_breach, return_rate_drift_within_threshold, reserve_coverage, manual_review_aging, overdraft_or_frozen. Typologies: round_trip, layering_chain, dormant_reactivation, rapid_onboarding, amount_just_below_threshold, burst_then_dormant. | src/evals/cases.ts (expected detectors per case) and src/evals/typologies.ts. | src/detect/detectors.ts · src/detect/typologies.ts · /alerts |
| Rule studio rules | rules-<timestamp> per activation | rules | no | Tenant-written conditions over the same feature vocabulary, opening reviewed alerts. In: Features; a closed operator set (gt, gte, lt, lte, eq, neq, in, not_in, between, is_null, not_null); an unmeasured field never matches. Out: A reviewed alert per transfer per day, never automated. | A backtest over stored transfers is required before activation; activation needs a second approver and is chained as an action. | src/rules · /rules · /api/rules |
| Triage draft (large language model) | claude-sonnet-5 | llm | no | Draft a narrative and a recommendation for an alert from its evidence. It never decides. In: The alert's evidence and the policy; structured output only. Out: narrative, recommendation, confidence; stored on the disposition with narrativeModel; the person's decision is recorded separately and overturnsDraft is set when they disagree. | Overturn rate on /metrics (share of drafts a person disagreed with); demotion of a program's autonomy when overturns exceed the eligibility threshold. | src/triage/narrative.ts · /alerts/:id · metrics.overturned |
2. The boundary: automated or reviewed
- Policy version
- policy-v1
- May close alone
- repeat_pattern, return_rate_drift_within_threshold — only in band clear, no hard signal, program history ≥ 30
- Always a person
- first_time_counterparty_large, freeze_or_limit, sanctions_or_pep, sanctioned_jurisdiction, denied_entity_activity, structuring_pattern, skoor_hold, reserve_coverage, return_rate_breach
- Never automated for any program
- agent_hold, counterparty_hold, denied_entity_activity, entity_hold, freeze_or_limit, layering_chain, reserve_coverage, return_rate_breach, round_trip, sanctioned_jurisdiction, sanctions_or_pep, skoor_hold, structuring_pattern
- Second approver required
- freeze_account, request_to_program, suspend_card_account
- Hold band
- held before anyone decides; fail closed
- Widening the automated side
- per program only, through the autonomy ladder: ≥ 10 person decisions in 30 days agreeing with the draft at ≥ 90%, one change per 7 days, demoted when overturns exceed 10%
Per program
| Program | Source | Tier | Policy version | Granted detectors | Last change |
|---|---|---|---|---|---|
| Harbor Marketplace Payouts (simulated) harbor-marketplace | simulated | supervised | policy-v1 | none beyond policy | never |
| Lantern Lending (simulated) lantern-lending | simulated | supervised | policy-v1 | none beyond policy | never |
| Meridian Remit (simulated) meridian-remit | simulated | supervised | policy-v1 | none beyond policy | never |
| Northwind Payroll (simulated) northwind-payroll | simulated | supervised | policy-v1 | none beyond policy | never |
3. Validation
The labeled sets in src/evals run on every build and gate every change to a weight, a threshold or the policy. They ran again to produce this page.
- Transaction Risk Skoor
- 47 cases · band accuracy 100% · hold band precision 92.3% · recall 100% n=13 · review-or-hold precision 46.2% · recall 100% n=26
- Typologies
- 27 cases · 6 detectors
- Entity Risk Skoor
- 22 cases · band accuracy 100% · hold band precision 100% · recall 100% n=5
- Counterparty Risk Skoor
- 21 cases · band accuracy 100% · hold band precision 100% · recall 100% n=7
- Agent Risk Skoor
- 20 cases · band accuracy 100% · hold band precision 100% · recall 100% n=6
- Failures in the labeled sets
- 0
Against outcomes, live (30 days)
| Band | Share later bad | n |
|---|---|---|
| clear | 17.1% | 35 |
| review | 62.5% | 8 |
| hold | 100% | 2 |
| unscored | null | 0 |
- Hold band precision
- 100%n=2
- Hold band recall
- 15.4%n=13
- Coverage (transfers with a Skoor)
- 100%n=2583
4. Ongoing monitoring: the six numbers
- Calibration
- clear 17.1%n=35 · review 62.5%n=8 · hold 100%n=2
- Coverage
- transfers 100%n=2583 · programs 100%n=4
- Precision and recall (hold)
- 100%n=2 · 15.4%n=13
- Auto-closed / overturned
- 0%n=823 · nulln=0
- Time to decision (median h)
- automated null n=0 · reviewed null n=0
- Approved without waiting
- 2099 transfers n=2583
- Event coverage
- 57.1%n=20 · seen: identity.verification.verified, wire.outgoing_transfer.completed, ach.outgoing_transfer.settled, identity.verification.denied, ach.outgoing_transfer.returned, account.overdrafted, ach.outgoing_transfer.manual_review, ach.outgoing_transfer.submitted, ach.outgoing_transfer.initiated, ach.outgoing_transfer.hold_created, swift.outgoing_transfer.initiated, identity.verification.created, card.transaction.authorization, realtime.outgoing_transfer.completed, ach.outgoing_transfer.completed, account.overdraft_released, wire.outgoing_transfer.initiated, identity.verification.manual_review, realtime.outgoing_transfer.initiated, identity.verification.pending
5. Change control
- Policy versions on record
- 0 (0 active)
- Rules
- 0 active in no version yet · 0 versions · gate: backtest on record, then a second approver; activation is an action on the chain
- Hash chain
- verified · 0 records checked · dispositions 0 · actions 0
- Schema
- drizzle/ (0000_init … 0003_milestone_c), applied at container start; schema changes are code-reviewed migrations, never manual DDL
No stored policy versions yet: the written policy-v1 is in force.
6. Human oversight
- Attribution
- Every API decision carries X-Operator (or key:<prefix> for an API key); every dashboard decision the operator cookie name; stored on dispositions.decided_by and actions.requested_by / approved_by.
- Decision clocks
- auto 1h · standard 24h · complex 72h · appeal 168h
- Decisions in window
- 0 total · 0 by a person · 0 under policy · 0 overturned the draft (null: no drafted decisions yet)
- Second approver
- freeze_account, request_to_program, suspend_card_account
- The language model
- Drafts a narrative and a recommendation from the evidence; never decides, never acts, never widens the automated side. A person's disagreement is recorded as overturnsDraft and feeds the autonomy ladder.
model: claude-sonnet-5
7. Data
- Null rule
- A score or metric is null until it has been measured, and always carries n. Unscored is treated as review, never as clear.
- No fabrication
- src/evals/no-fab.arch.test.ts fails the build if any scorer returns a number without an observation behind it.
- Retention
- Events are stored as received (events.raw) with the delivery signature result; transfers, actors, alerts, dispositions and actions are never deleted on a Column-sourced program; the sandbox reset touches simulated programs only.
8. Where each requirement is met
| Framework | Section | Requirement | In this record | Evidence |
|---|---|---|---|---|
| SR 11-7 | III. Model inventory | An inventory of models in use, their purpose, inputs, outputs and versions. | inventory | This record, section Inventory; versions are constants in src/domain.ts and stored on every scored row (transfers.skoor_version, actor_skoors.version). |
| SR 11-7 | IV. Model development, implementation and use | Sound design, documented assumptions, testing before use, clear limits of use. | inventory.validation, boundary | Eval sets in src/evals gate every weight, threshold and policy change (src/evals/*.test.ts); the automated-or-reviewed line is written policy (/policy) and can only widen per program through the autonomy ladder (src/autonomy/ladder.ts). |
| SR 11-7 | V. Model validation | Evaluation of conceptual soundness, ongoing monitoring, outcomes analysis (back-testing). | validation, monitoring | Band accuracy and hold-band precision/recall on the labeled set (validation.transaction); live calibration per band, hold-band precision and recall against outcomes (monitoring.calibration, monitoring.holdBand); rule backtests before activation (src/rules/service.ts backtest). |
| SR 11-7 | V. Ongoing monitoring | Confirm the model is implemented appropriately and performing as intended; process verification and benchmarking. | monitoring, changeControl.chain | Six metrics with n, persisted daily (metrics_daily); hash-chain verification on every disposition and action (/api/record/verify); NO-FAB architecture test forbids a number without an observation (src/evals/no-fab.arch.test.ts). |
| SR 11-7 | VI. Governance, policies and controls | Board and senior management oversight, policies and procedures, roles, internal audit, documentation. | boundary, changeControl, oversight | Written policy with a version on every alert (alerts.policy_version); program autonomy versions with basis and approvers (policies table); two-approver actions (TWO_APPROVER_ACTIONS); every decision attributed (dispositions.decided_by); examiner export (/api/record/export). |
| SR 11-7 | VI. Vendor and third-party models | Validation and monitoring of vendor models; contingency if the vendor model is unavailable. | oversight.llmRole | The language model drafts only; a draft is never a decision. If the model is unconfigured or fails, a template draft with model: null is stored and the alert waits for a person (src/triage/narrative.ts). |
| NIST AI RMF | GOVERN | Policies, accountability, roles, risk tolerance, documentation and transparency. | boundary, oversight | /policy; X-Operator on every API decision; decision clocks (due_at, sla_tier) from tenant policy; this record. |
| NIST AI RMF | MAP | Context, intended use, limits, impacted parties, known risks. | inventory | Each entry states purpose, inputs, output, where used and whether it decides (none do). Unscored band: too little history is treated as review, never as clear. |
| NIST AI RMF | MEASURE | Metrics, test sets, evaluation of performance, tracking over time. | validation, monitoring | Eval sets (transaction, typologies, actors) with failures listed by case id; six live metrics with n; daily persistence. |
| NIST AI RMF | MANAGE | Respond to risks, change control, incident handling, decommissioning. | changeControl, oversight | Versioned policies and rules with backtest gate and second approver; autonomy demotion when overturns exceed the threshold (ELIGIBILITY.demoteOverturnRate); hash chain reports the first break, never hides it. |
SR 11-7 is the Federal Reserve and OCC guidance on model risk management; NIST AI RMF 1.0 is the AI Risk Management Framework. Neither is a certification, and this page claims none: it shows where each expectation is met and points at the row or the line.