ENGINE 06

SFS-E06-TRI · AI VALIDATION · REV 2026-07-20 · PRODUCTION

PRODUCTION = runnable end-to-end, CI-backed, full test suite passing. All data fictional and seeded.

Triangulate

Separation of duties for AI work — no consensus, no sign-off

Triangulate runs independent reviewer roles plus a deterministic auditor over the same AI-assisted workpaper. When they disagree, the line stops and the work goes to a person. It is separation of duties applied to AI: an explicit authority hierarchy, not a multi-model majority vote.

A processor buyer cannot re-run the vendor's benchmark lab. Every figure on this page re-derives from the public repository — the benchmark is a command, not a press release.

Run it Book a consultation

Architecture

functional block stack · static overview
Human Gate Deterministic Auditor Reviewer Specialist Preparer substrate: seeded fictional data

Select a layer

Each layer is an independent duty. Select a layer for its plain-terms and engineering detail.

Key specifications

at a glance
8,3201
Tests
the checks that pin this engine's behavior
52
Roles
independent duties over one workpaper
PASS / FLAG / FAIL3
Verdict states
0 = PASS · non-zero = FLAG/FAIL4
Gate exit codes
so it can act as a CI gate
offline, no API key5
Default mode
seeded + read-only6
Determinism

What it does for you

plain terms

No high-stakes workpaper should rely on one AI system reporting "looks good." Models agree too easily, invent support, miss the same issue twice, and explain a number without tying it to source. Triangulate assumes those failures will happen and builds the workflow around them.

An injected hallucination is caught by the arithmetic, not an opinion7. In the adversarial demo, an AI asserts a Total Revenue $49,000 over what the revenue streams actually sum to, backed only by an 'AI assumption' — the lowest authority. Because that cell feeds tax and net, the single bad figure cascades. The Reviewer and the deterministic Auditor both flag it independently; the verdict is FAIL and the process exits non-zero.

The gate discriminates — a clean workpaper passes8. The clean sample runs the identical flow and returns PASS, proving the gate discriminates instead of always failing.

Arithmetic self-heals; judgment escalates9. The review loop re-derives the lowest broken formula cell from its own formula on a clone, then re-runs the full pipeline. The injected $49k error clears in one turn (FAIL → PASS). An AI-assumption input and a hardcoded cell have nothing to re-derive from, so they stay in the fix packet for a human (FAIL → FLAG).

Functional block diagram

engineering · each block links to its source
Functional block diagram of the Triangulate engine draft draft draft findings findings tie-outs verdict fix packet (loop) Preparer Reviewer Specialist Deterministic Auditor Reconcile + Policy Human Approval SFS-E06-TRI · FUNCTIONAL BLOCK DIAGRAM · REV 2026-07-20

Plain terms

  • Preparer. drafts the workpaper
  • Reviewer. challenges the draft without changing it
  • Specialist. adds a narrow second opinion where needed
  • Deterministic Auditor. recomputes the arithmetic independently
  • Reconcile + Policy. combines findings and applies the severity policy
  • Human Approval. a person signs off — or doesn't

Engineering

  • Preparer. DemoPreparer builds draft; offline deterministic in the public demo
  • Reviewer. read-only challenge; hash-guarded
  • Specialist. scoped second opinion
  • Deterministic Auditor. re-derives every formula mechanically
  • Reconcile + Policy. findings reconciled; deterministic severity policy returns PASS, FLAG, or FAIL
  • Human Approval. external approval boundary; the demo policy does not record or replace a human signature

Instruction set

every public command
CommandOperationOutputExitArtifacts
python -m triangulate
run the defective sampleVERDICT: FAIL [cannot sign off]non-zerobuilder memo, fix packet, change log, QA summary, verdict.json
python -m triangulate --sample clean
run the clean sampleVERDICT: PASS0output/ artifacts + verdict.json
python -m triangulate --demo-adversarial
inject one hallucinated figure and catch itVERDICT: FAIL · Critical=6non-zerofix packet showing cascade
python run.py --sample clean
use the equivalent script entrypointVERDICT: PASS0output/ artifacts + verdict.json
python -m triangulate --seed N
choose the deterministic fictional-data seedselected sample verdictverdict-dependentoutput/ unless --no-artifacts
python -m triangulate --no-specialist
skip the optional Specialist stepverdict without specialist findingsverdict-dependentoutput/ unless --no-artifacts
python -m triangulate --output DIR
write the audit trail to a chosen directoryselected sample verdictverdict-dependentDIR/*
python -m triangulate --no-artifacts
print the review without writing filesselected sample verdictverdict-dependentnone
python -m triangulate.loop --sample adversarial
self-heal the injected errorFAIL → PASS0re-derivation change log
python -m triangulate.loop --sample defective
attempt repair and escalate unsupported judgmentFAIL → FLAG / ESCALATEDnon-zerofix packet; optional report
python -m triangulate.loop --seed N
choose the loop's deterministic data seedselected loop verdictverdict-dependentoptional report
python -m triangulate.loop --budget N
cap remediation turnsfinal loop verdictverdict-dependentoptional report
python -m triangulate.loop --out DIR
write the Markdown loop reportfinal loop verdictverdict-dependentDIR/review_loop_report.md
python -m triangulate --xlsx
also emit a small .xlsx workpaperVERDICT + workpaper.xlsxnon-zerooutput/*.xlsx
python -m pytest -q
run the engine's test suitetest session summary0none

Benchmarks

measured demo results
MeasureResult
Adversarial cascade depth106 Critical findings from 1 injected cell
one bad number, six downstream failures caught
Self-heal turns (adversarial)111 loop turn to PASS
Independent detectors122 roles flag the same cell
Engine tests138,320 tests

Control characteristics

engineering

Plain terms

The demo's HumanGate class applies the severity policy; an actual person remains the final approver.

Engineering

Deterministic envelope. seeded fictional inputs, read-only operation, offline default mode.

Demo gate. automated-policy

AuthorityLevelNote
1Signed prior-year workhighest authority in the implemented enum
2Management instructiondirect instruction from accountable management
3Meeting decisiondocumented decision from the engagement record
4Current-year sourcecurrent-period source data and evidence
5Workbook formulaexisting formula logic, subject to re-derivation
6AI assumptionlowest authority; cannot outrank cited evidence
SeverityVerdictAction
Critical presentFAILreturned for rebuild; exits non-zero
High/unresolved judgmentFLAGfix packet escalated to a human
Medium/Low only, or nonePASSresidual notes documented; eligible for human sign-off; exit 0

Enterprise-safe mode (default). deterministic mock reviewer, no API key, no network call, runnable in conservative corporate IT.

Agent-accelerated mode. where approved, a live Anthropic Claude reviewer adapter can replace the mock reviewer; an optional orchestration layer for approved, agent-enabled environments; the platform runs fully without it.

Operating limits

what it refuses to do

See it run

the real CLI
Screencast of the Triangulate CLI running on fictional seeded data
Captured from the public deterministic --demo-adversarial --no-artifacts run on fictional seeded data.
Triangulate terminal excerpt showing FAIL, six Critical findings, one Medium finding, and the automated-policy demo gate
Verdict and severity summary
Triangulate terminal excerpt showing Reviewer and Deterministic Auditor tie-out findings for the injected fictional error
Fix packet with independent detections

Integration

how to run it

Distribution: public repository, MIT license.

git clone https://github.com/sophonfinance-wq/finance-automation-portfolio.git && cd finance-automation-portfolio/ai-validation-framework && python -m triangulate
python -m triangulate --sample clean
Source on GitHub Engine README All tests, by engine Run in Codespaces
Substantiation
  • 1python -m pytest --collect-only -q (ai-validation-framework/); verified 2026-07-20 and pinned in site-datasheets/counts.json
  • 2ai-validation-framework/README.md — Preparer, Reviewer, Specialist, Deterministic audit, Policy gate + human approver
  • 3ai-validation-framework/README.md — verdicts and exit behavior
  • 4ai-validation-framework/README.md — "exits 0 on PASS and non-zero on FLAG/FAIL"
  • 5ai-validation-framework/README.md — "default demo needs no API key and no network access"
  • 6ai-validation-framework/README.md — "All sample data is fictional and seeded"; read-only reviewer
  • 7python -m triangulate --demo-adversarial (ai-validation-framework/README.md)
  • 8python -m triangulate --sample clean (ai-validation-framework/README.md)
  • 9python -m triangulate.loop --sample adversarial / --sample defective (ai-validation-framework/README.md)
  • 10ai-validation-framework/README.md — "Critical=6" in --demo-adversarial
  • 11ai-validation-framework/README.md — "Turn 1 re-derive B5 … PASS"
  • 12ai-validation-framework/README.md — "flagged independently by two roles"
  • 13python -m pytest --collect-only -q (ai-validation-framework/); verified 2026-07-20 and pinned in site-datasheets/counts.json
  • 14ai-validation-framework/README.md — review-loop section
  • 15ai-validation-framework/README.md — human gate
  • 16ai-validation-framework/README.md — two operating modes

Show us where the hours go.

One conversation: you describe the work that consumes your team's month; we tell you plainly what this engine can take over, what it can't, and what a scoped first phase would cost. Your people keep approval authority.

Book a free consultation