Audit & Compliance
Meridian Exchange Services · Wed, Aug 19, 2026 · evidence window 2026-08-12 → 2026-08-19 (UTC)
Oregon QI registration lapsed 4 days ago
The renewal was filed Aug 6 and the filing receipt is attached — but a filing is not a renewal. This row stays lapsed until the state's issued certificate is on file, because the certificate is the evidence and the filing is not. Bond and E&O for Oregon remain in force; 3 open exchanges carry an Oregon relinquished property.
Event ledger
Append-only. Scoped to this org and the caller's exchange participations — audit_log has no UPDATE policy and a BEFORE DELETE guard for five years.
| Recorded (UTC) | Actor | Event | Outcome | Durability | Evidence | |
|---|---|---|---|---|---|---|
| Aug 1814:02:11 |
Matt Belcher
Exchanger · 7c1f…9ab2
|
disbursement.authorized
Signed Disbursement Authorization filed to EX-2024-0147.
Instruction — not an approval
The exchanger instructs; the exchanger never approves. Fund release is
decided by two authorized officers and this row is not counted toward either.
|
Success | Forwarded Vectr sink · rcpt 4f20… |
ESIGN-002
|
|
| Aug 1815:47:03 |
Priya Raman
QI Officer · c6a8…37e1
|
disbursement.proposed
$1,094,000.00 to Sierra Escrow, closing wire.
Proposal — 0 approvals
A proposer's own submission is never counted as an approval. This
proposal reached the approval state only through the distinct officer three rows down.
|
Success | Forwarded Vectr sink · rcpt 4f2b… |
IRS1031-006
|
|
| Aug 1815:47:56 |
Priya Raman
QI Officer · c6a8…37e1
|
disbursement.self_approval_blocked
Attempted to approve the proposal she had submitted 53 seconds earlier. Refused
HTTP 403 at the API and independently by the DB check constraint
disbursement_proposals_approver_ne_proposer.
|
Failure | Forwarded Vectr sink · rcpt 4f2c… |
IRS1031-006
|
|
| Aug 1909:12:40 |
Sandra Osman
QI Officer · e5d4…08fa
|
disbursement.approved
$1,094,000.00 released to Sierra Escrow.
2 of 2 QI officers · approver ≠ proposer
|
Success | Forwarded Vectr sink · rcpt 5a01… |
IRS1031-006a
|
|
|
Entry id a37c9e21-4b8d-4f0a-9c73-2e1f5d6a8b04 Recorded 2026-08-19 09:12:40.318 UTC Actor Sandra Osman e5d4…08fa Org org 8f31…c204 Resource disbursement_proposal d92a…7710 Source address 198.51.100.24 Retention floor 2031-08-19 · delete refused until then Sink receipt 5a01f7c8 · accepted 09:12:41 Controls this row is evidence for
IRS1031-006IRS1031-006a
SOC2-CC7.2-001BSA-002
ESIGN-002ADV-001
Event detail — written NPI-redacted
{
"proposed_by": "c6a8…37e1", // Priya Raman
"approved_by": "e5d4…08fa", // Sandra Osman — distinct, enforced
"amount_cents": 109400000,
"escrow_balance_cents": 141800000,
"escrow_balance_source": "escrow_accounts",
"escrow_balance_as_of": "2026-08-19T06:00:00Z",
"approved_undisbursed_cents": 0,
"available_cents": 141800000,
"screening_gate": "cleared",
"payee_account": "•••• 7842" // masked at write time, never stored raw
}
SSN, date of birth and bank digits never enter this table — they are masked or encrypted
before the row is written SOC2-CC6.3-001
SOC2-CC6.3-002. The balance the approval was measured against
rides on the row itself, so an examiner can reconstruct the sufficiency test without
trusting a later balance read.
|
||||||
| Aug 1411:26:02 |
System
Persona callback · no user
|
kyc.completed
Matt Belcher verified. Inquiry inq_8Kd…21, government ID + selfie,
OFAC screen clear.
Recorded from the provider's callback, never by a coordinator. No
role in this console can mark an exchanger verified on their behalf.
|
Success | Forwarded Vectr sink · rcpt 3c88… |
BSA-001
|
|
| Aug 1908:40:19 |
Priya Raman
QI Officer · org_admin · c6a8…37e1
|
deadline_override.requested
EX-2026-000188 · 180-day date, legal basis disaster_relief (Rev. Proc. 2018-58).
Waiting on: a second officer
Not applied. The stored deadline is unchanged until a distinct
approver runs the guarded RPC; the request alone changes nothing.
|
Pending | Forwarded Vectr sink · rcpt 5b7d… |
IRS1031-010
|
|
| Aug 1721:08:55 |
Okonkwo Holdings LLC
Exchanger · 9a02…ff17
|
identification.deadline.denied
Submission refused at 22:08:55 local, 1 day after the 45th day
(2026-08-16). Server-side gate; the client had already disabled the control.
|
Failure | Forwarded Vectr sink · rcpt 51e0… |
IRS1031-004
|
|
| Aug 1907:55:12 |
Sandra Osman
QI Officer · e5d4…08fa
|
qi.exchanges.exported
198 rows · 11 columns · NPI class financial + identity. Column names recorded,
values never. Written and forwarded before the file was produced.
|
Success | Forwarded Vectr sink · rcpt 59a4… |
GLBA-007
|
|
| Aug 1516:31:07 |
Sandra Osman
Org admin · e5d4…08fa
|
admin.hub_advanced
Operator override on EX-2026-000212 identification hub, reason recorded:
“title company re-issued the notice with the corrected APN”.
|
Success |
Local only
Written by admin.ts direct insert — never forwarded.
Readable here for 7 days.
|
IRS1031-004
|
|
writeAndForwardAudit() and live only in the seven-day local read model
(#2353). Those rows are marked Local only rather than shown as if
they were durable — a row that will be gone in a week is not five-year evidence, and an examiner must
be told which is which.
Integrity & retention
What the platform enforces on this ledger, and what it does not. Both halves, stated.
BEFORE DELETE trigger raises while now() < retention_until.
Triggers fire regardless of RLS and bypassrls, so a service-role script is refused too.anon or
authenticated caller can rewrite history.audit_log_retry and is drained by a
five-minute cron. Queue depth right now: 2, oldest 6 minutes.prev_hash. Nothing here proves a row was never removed before it was read — which is
why this panel shows no green “chain verified” state.service_role bypasses RLS and no trigger blocks it. The delete guard is the model to
copy.audit-log-tamper-detection ships, this button runs the chain and this panel
gains a verified-through timestamp — not before.
Export register
Every export writes its own audit row before a byte is produced. If that write fails, the export fails and no file exists.
| Taken | By | What left the system | Rows | NPI class | Audit row |
|---|---|---|---|---|---|
| Aug 1907:55 UTC | Sandra Osman QI Officer |
QI exchange queue · CSV
11 columns incl. exchanger name, escrow balance, deadlines |
198 | Financial + identity | a1c4…6f30 |
| Aug 1816:20 UTC | Tom Bottenberg Exchange Coordinator |
Book of business · saved report
Server-generated artifact; row count captured at generation |
64 | Aggregate only | bb70…12e9 |
| Aug 1809:04 UTC | Tom Bottenberg Exchange Coordinator |
Deadline bucket counts · CSV
Counts only, no party names |
4 | None | c093…88a1 |
| Aug 1713:41 UTC | Sandra Osman QI Officer |
Audit log · CSV
Today the audit-log export is built in the browser and writes no audit
row of its own — this line was reconstructed from a session log, which is not evidence.
It also exports only the 50 loaded rows, not the whole filtered result.
|
50 of 412 |
Identity | None written |
Compliance cadence
Every recurring obligation, with an owner, a due date, a last-completed date and the evidence. Obligations with no schema behind them are listed as Not tracked — the absence is the finding.
| Obligation | Owner | Cadence | Last completed | Next due | Status | Action |
|---|---|---|---|---|---|---|
|
Oregon QI registration renewal
State QI statute · ORS §86A STATEQI-001
|
Sandra Osman
Waiting on: OR DFR
|
Annual |
Aug 15, 2025
|
Aug 15, 2026
Lapsed 4 days ago
|
Lapsed
Filed Aug 6 · certificate not on file
|
|
|
Nevada QI registration renewal
State QI statute · NRS §645A STATEQI-001
|
Sandra Osman
Waiting on: us
|
Annual |
Sep 1, 2025
|
Sep 1, 2026
13 days remaining
|
Renewal open | |
|
California QI registration renewal
CA SB 1007 STATEQI-001
|
Sandra Osman
Waiting on: nobody
|
Annual |
Feb 2, 2026
|
Feb 2, 2027
167 days remaining
|
In force | |
|
Fidelity bond · California
$2,500,000 coverage on file STATEQI-001
|
Sandra Osman
Waiting on: nobody
|
Annual |
Dec 31, 2025
|
Dec 31, 2026
134 days remaining
|
In force | |
|
E&O insurance renewal
$1,000,000 coverage on file STATEQI-001
|
Sandra Osman
Waiting on: broker quote
|
Annual |
Nov 30, 2025
|
Nov 30, 2026
103 days remaining
|
In force | |
|
Audit-forward dead-letter drain
Scheduled worker · */5 * * * * SOC2-CC7.2-002
|
Backend on-call
Waiting on: nobody
|
Every 5 minutes |
Aug 19, 09:35 UTC
|
Aug 19, 09:40 UTC
Queue depth 2
|
Running | |
|
Rule 204-2 retention floor
Enforced by DB trigger, not by a job ADV-001
|
Backend
Waiting on: nobody
|
Continuous |
—
Not a task; a constraint
|
—
Oldest protected row: 2031-08-19
|
Active
Floor only — no sweep removes aged rows
|
|
|
OFAC / SDN rescreening of open files
BSA/AML BSA-002BSA-006
|
Compliance Officer
Proposed owner
|
—
Proposed: monthly + at payee add
|
—
Screening is point-in-time at counterparty add only
|
—
No rescreening cadence set
|
Periodic ofac-sdn-screening not scheduled for this counterparty
|
|
|
SOC 2 Type II evidence collection
Observation window & attestation dates SOC2
|
Compliance Officer
Proposed owner
|
—
Proposed: quarterly pull
|
— |
— |
No schema records the audit period or attestation dates
|
|
|
BSA/AML program annual review
31 CFR §1020.210(b)
|
Compliance Officer
Proposed owner
|
— Proposed: annual |
— |
— |
No schema tracks program review cadence
|
|
|
Form ADV annual amendment
Investment Advisers Act, Rule 204-1 ADV-002
|
Compliance Officer
Proposed owner
|
— Proposed: annual, within 90 days of fiscal year end |
— |
— |
No schema tracks RIA filing cadence
|
|
|
CCPA data-subject request clock
45 days, one 45-day extension CCPA-001
|
Compliance Officer
Proposed owner
|
— Per request |
— |
—
No intake exists, so no clock can start
|
Schema can locate PII by user_id; no DSAR intake, clock or runbook
|
|
|
Form 8824 / 1099-S filing status
IRS §1031, IRS §6045
|
Compliance Officer
Proposed owner
|
— Proposed: per closing, per tax year |
— |
— |
No admin surface or schema generates or tracks filing status
|
Control register — 77 controls across 11 regimes
Read straight from docs/COMPLIANCE.md. A control is Active only when the enforcement point exists in code or in a signed process — never because it is written down.
| Regime | Controls | Active | Draft | Deferred | Compensating | Last full review |
|---|---|---|---|---|---|---|
IRS §1031 / Treas. Reg. §1.1031(k)-1
Deadlines, identification rules, qualified escrow, constructive receipt |
20 | 16 | 4 | — | — | 2026-08-15 |
SOC 2 Type II CC1–CC9 common criteria |
22 | 16 | — | — | 6 | 2026-07-20 |
GLBA + Reg P / Safeguards Rule 16 CFR §314 — NPI handling |
7 | 2 | — | 2 | 3 | 2026-08-15 |
BSA / AML / OFAC CIP, SDN screening, SAR, CTR |
6 | 1 | 4 | 1 | — | 2026-07-20 |
eSign Act + UETA Intent to sign, tamper-evident retention |
7 | 4 | 3 | — | — | 2026-07-20 |
Investment Advisers Act Form ADV, Rule 204-2 books and records |
5 | 2 | 2 | 1 | — | 2026-07-22 |
State QI statutes CA, NV, ID, CO, OR, WA — bonding, segregated escrow |
3 | 1 | 1 | 1 | — | 2026-06-12 |
CCPA / CPRA DSAR, data inventory, retention schedule |
3 | 1 | — | 2 | — | 2026-06-12 |
Securities Act / Reg D 506(c) Marketplace accreditation gating |
2 | 2 | — | — | — | 2026-07-10 |
TCPA SMS and voice consent ledger |
1 | 1 | — | — | — | 2026-06-12 |
IRS Pub 1075
Applies only if federal tax information is received from IRS systems |
1 | — | — | — | — | Applicability undetermined |
Ledger states
The three states the ledger can be in besides populated. Each is designed, because an auditor meets them as often as the happy path.
2 · Filter scope is part of the result.
GET /v1/audit-log accepts
actor, exchange, action, from, to,
cursor and limit. Outcome, resource type and free text are applied in the browser
over the fetched page. Every control carries a query or page only marker and the count next
to a page-only filter is never presented as a total. Adding a filter without adding its marker is a review
rejection.3 · The exchanger is never in a fund-movement approval path.
disbursement.authorized is the exchanger's signed instruction and renders as
Instruction — not an approval; it is not counted toward the approval quorum and is not a gate on the
QI's decision. Release requires two authorized officers, and the approver is never the
proposer — enforced at the API, at a DB check constraint, and shown here as the
self_approval_blocked row. Any UI that reads a proposer's own submission as an approval, or that
puts the exchanger in the approving position, is constructive receipt under Treas. Reg.
§1.1031(k)-1(g)(6).4 · Status is derived from evidence, never from one flag. A renewal that was filed is not a renewal that was granted — the Oregon row stays lapsed until the state's certificate is attached. A screening that ran once at counterparty add is not a rescreening cadence. A row written locally is not a durable row. Each of those is a separate stored fact, and the surface reads all of them before it picks a colour.
5 · An overdue statutory obligation is permanently alarming. It cannot be acknowledged, snoozed, dismissed, or aged into a neutral state, and it never renders green. The only thing that clears it is the evidence that satisfies it.
6 · Identity is the first gate, and it belongs to the person.
kyc.completed is
written from the provider's callback. No console role can mark an exchanger verified by proxy, and no
“sign on behalf” affordance exists anywhere — the eSign Act and UETA require the signer's own intent, so the
control is absent rather than permission-gated.7 · Absence is rendered, not hidden. The six Not tracked cadence rows have no schema behind them and are listed precisely for that reason. Deleting them would make the register look complete and make the surface a liability. When a schema lands, the row changes status in place and keeps its identity.
8 · Integrity claims are split into enforced and not. Delete-refusal, fail-closed inserts and the absent UPDATE policy are shipped and shown green. The hash chain, the monotonic sequence, the service-role UPDATE guard and any alerting are not, and the verifier stays visibly disabled with the missing capability named. A greyed control that says why is honest; a page with no control reads as though verification already passed.
9 · Export is audited before it is produced. The audit row is written and forwarded first; if that write fails the export returns 500 and no file exists. Two live defects are drawn as defects: the audit-log CSV writes no audit row of its own, and it exports only the loaded page rather than the filtered result. Both must be fixed in the implementation, not designed around — an incomplete export an examiner believes is complete is worse than no export button.
10 · Every row carries its real action and deep-links to the section it concerns. A ledger row opens the file at Funds, Identification, Identity & AML or E-Sign — never a generic overview. A cadence row opens its licence, policy or queue. A row with genuinely nothing to open renders a disabled control that says so.
Fully tokenized against
../tokens.css — no raw hex and no inline colour outside token
references; --ink-4 is used for icons, rules and disabled glyphs only, never body text. Light
and dark are both designed. All names, identifiers, amounts and references are synthetic demo data.