v1.1 (DRAFT) — CEO causality correction.
v1.0 described the CRM as the trigger surface for deal progression. That was wrong. The correct model: handshakes drive deals, engine drives money, CRM observes. v1.0 superseded same day. See the change log for the full correction record.
Level 3 — How They Talk (The Eight Seams)
When two tools need to talk, they use a named seam. S1 → S2 are causes. S3 → S8 are consequences. Read the direction of every arrow.
Read the seam direction carefully. S1 + S2 are causes (real-world handshakes + legal entitlements drive everything). S3–S8 are consequences (downstream interpretations + payment). This is the most important thing in the entire document.
S1
Handshake Capture
Real World Chain → Engine
The story: A customer signs H4 OUTCOME_CONFIRMED on their phone, declaring "Member B did the work I came to them for." The signature is bound to the customer’s device key (Secure Enclave / StrongBox / WebAuthn). The chain receives the signed event, signs it itself, links it to the previous event in this deal’s causation receipt, and emits it to the engine. The engine, on receiving H4, advances the deal to OUTCOME state and — if conditions met — fires commission.
What’s in itEvent type (H1/H2/H3a/H3b/H4) + signer device key + deal ID + signed payload
IdempotencyOne signed event → one chain row. Same signature twice → rejected.
If it failsSignature fails verification → event rejected, chain integrity preserved
Audit artifactThis IS the court-defensibility. Every deal progression signed by real party.
S2
Rule Provisioning
Legal Engine
The story: A partner signs an Affiliate agreement. Pine Lawyers’ signing flow doesn’t just store the PDF — it creates a commission_rules row stamped with the agreement execution ID. The engine later finds the rule and traces back to the signed agreement.
What’s in itExecution ID + rate, splits, clawback, lifecycle params
IdempotencyOne execution → one rule. Re-sign = new version.
If it failsRule creation fails → execution rolled back. No signed agreement without rule.
Audit artifactEvery rule traces back to a signed legal document
S3
Ledger → Journal
Engine Accounting
The story: Engine writes a ledger entry for $1,200 commission. Accounting reads it, applies posting rules (ACCRUAL = DR 6000 Commission Expense / CR 2100 Commission Payable), writes balanced journal lines. P&L knows the expense exists, Balance Sheet knows we owe $1,200.
What’s in itEntry type (ACCRUAL/PAYMENT/CLAWBACK) + amount + party + period
IdempotencyOne ledger entry → one journal entry
If it failsDR/CR imbalance impossible — enforced at DB level
Audit artifactJournal immutable when posted
S4
Ledger → Variance
Engine BI
The story: BI wants "Q1 commission paid vs budget?" Queries the ledger directly — sum of PAYMENT entries in Q1, compared to budget, run through variance rules → RAG status.
What’s in itPeriod + KPI key + actual + budget → variance %, attainment %, RAG
IdempotencyPure read — same answer until ledger changes
If it failsNo data → reported as "no data", never zero
Audit artifactEvery BI number reproducible from ledger + budget
S5
Variance → Cascade
BI Strategic
The story: Board asks "are we on track to $248M exit?" Cascade reads leaf attainments, weights via role-scorecard edges, rolls up to strategic KPIs.
What’s in itLeaf attainments + edge weights → parent attainment
IdempotencyPure read — recomputed on demand
If it failsMissing leaf → parent shows partial coverage (not silent failure)
Audit artifactEvery strategic number traces to ledger
S6
Chain → Render
Chain CRM + Member observers
The story: CRM Deal 360° wants to show "this deal is at H3b SETTLED, awaiting H4." It queries the chain for the deal’s causation_receipt and events, renders them as a 5-step progress indicator. It does NOT write. Same for /me — partner sees their own deal progressions sourced from the chain.
What’s in itRead-only chain query → rendered timeline
IdempotencyPure read
If it failsChain unavailable → observer shows "data temporarily unavailable" (never falls back to stale CRM-internal stage value)
Audit artifactWhat observer sees IS what chain says. No second source of truth.
S7
Member Dispute
Member Chain + Admin
The story: Partner X disagrees with a $1,200 entry, clicks Dispute, submits. System writes disputes row (admin queue with SLA) AND emits DISPUTE_OPENED chain event (audit spine). Same fact, two records, both intentional.
What’s in itMember ID + ledger entry ID + reason
IdempotencyOne dispute per entry per member. Re-submit updates existing.
If it failsChain write fails → dispute still recorded, integrity % drops
Audit artifactTwo writes, two records, one cryptographically signed
S8
Payout → RCTI/ABA
Engine Bank
The story: Carla runs payouts. Engine selects ELIGIBLE/APPROVED entries, generates sequential RCTI numbers, produces 120-char ABA file, emits SHA-256 in HTTP header.
What’s in itBatch of entry IDs → RCTI docs + ABA file + SHA-256
IdempotencyOne batch → one ABA → one set of PAYMENT entries written back
If it failsBank rejects → batch rolled back, entries flip to APPROVED
Audit artifactRCTI sequential (ATO required), ABA hash independently verifiable
Audience: Steer Co (Matt, Carla, Corrina) + future hires + auditors. Source of truth:
docs/ENTERPRISE_ARCHITECTURE.md (version controlled). EA function: Claude under delegated authority from CEO Matt.