case-studystable
Evidence before answers
A confident financial answer is useless when I cannot tell which source, statement, or correction produced it.
Ledgerglass keeps immutable account and transaction observations, statement facts, corrections, and derived explanations separate so an agent can show its work without trusting a mutable source cache.
Public proof and references
Artifacts: ledger architecture · MCP response contract · trust model · observability privacy boundary
Research IDs: simplefin-protocol · mcp-security · cloudflare-workers-logs
Checked: 2026-08-20
case-studystable
Money that adds up
Floating-point totals and mixed currencies can make a tidy dashboard mathematically wrong.
Arithmetic uses integer minor units and keeps currencies separate unless an explicit conversion exists.
Public proof and references
Artifacts: money contract · cashflow architecture · synthetic evidence
Research IDs: actual-architecture
Checked: 2026-08-12
case-studystable
Boring, bounded synchronization
Late settlement, exclusive date boundaries, and provider limits make a naive daily fetch lose rows.
Connectors use bounded windows and overlapping incremental reads. Source-specific parsing crosses a normalized provider-evidence contract; independently committed windows and backfills feed one union post-processing pass. A cursor stream is not assumed to be a complete account inventory: each successful multi-source sync also records an immutable provider-derived snapshot for every active account, including balance-only accounts. A canonical identity layer routes owner-facing consumers through one counted projection, invalidates derived state by canonical revision, and retains database-level rollback and contribution controls.
Public proof and references
Artifacts: connector contract · sync-window architecture · provider-evidence boundary · complete account-inventory observation story · canonical counted-read parity and rollback contract
Research IDs: simplefin-protocol · plaid-accounts-api · plaid-transactions-api
Checked: 2026-08-27
case-studyexperimental
Two providers, one counted event
Two bank-data providers can report the same account and purchase, so adding both feeds directly would duplicate balances and spending.
Ledgerglass links only reviewed account identities, compares rather than sums balances, and treats provider transactions as evidence for one existing canonical event. Newer eligible linked-provider balance evidence can serve the existing counted account with currency, sign, provenance, and contribution controls preserved. Selected observation provenance is independent of the original connector; receipt time is not bank-update time. Net-worth and debt reads report unknown source freshness for receipt-only balances without changing selection, historical cutoffs, or counted amounts. History counts unknown source freshness separately from stale known source time and missing balances; complete account coverage does not certify bank freshness. Forecast starting evidence and retained backtest origins preserve that distinction; forecasts disclose unknown source time, and cached runs must match the starting observation even when amounts are unchanged. Retained provider credit limits remain dated provisional fallbacks below authoritative terms, subject to current eligibility and receipt-age guards, without reviving withdrawn values or requesting another product. Deterministic confirmation requires exact signed cents, currency, lifecycle, date, normalized merchant identity, and unique assignment in both directions; multiplicity abstains. Append-only revision-safe decisions can merge, reject, or undo evidence without creating a second counted row.
Public proof and references
Artifacts: multi-source consensus architecture · public-bundle/case-studies.json: selected-linked-observation-provenance · public-bundle/case-studies.json: provisional-credit-limit-fallback · transaction-equivalence policy · append-only decision contract · synthetic duplicate-purchase story
Research IDs: plaid-pending-transactions · plaid-accounts-api · simplefin-protocol · cloudflare-d1-batch
Checked: 2026-09-21
case-studystable
Pending is not forever
Some providers stop reporting pending purchases without saying whether they settled or disappeared.
Old pending rows can expire from operational totals, return when observed again, or link to a later posted transaction without erasing history.
Public proof and references
Artifacts: pending lifecycle contract · synthetic settlement story
Research IDs: simplefin-protocol
Checked: 2026-08-12
case-studystable
Statements can correct the feed
A connected card can still omit posted transactions or report rows that the closed statement does not support.
A complete closed statement is matched one-to-one against the ledger, exact gaps are repaired, and excess connected candidates fail closed with explainable owner-review evidence instead of an arbitrary match. Later provider evidence can replace overlays or refresh a deficient no-overlay component. Replacing a statement appends superseded revisions for relationships tied to retired overlays so matching can safely classify their replacement rows, and carries uniquely matched overlay enrichment, reviews, corrections, and valid allocations forward as new evidence. Ambiguous statement lines remain untouched. Balance reconciliation retains a valid statement checkpoint even before the rolling provider baseline and does not count its evidenced member transactions again because of later provider timestamps. Unmatched same-day movement and genuine post-statement differences remain visible without changing source records.
Public proof and references
Artifacts: statement workflow contract · synthetic repair story · synthetic exact-collision story · public-bundle/case-studies.json: statement-checkpoint-before-baseline · public-bundle/case-studies.json: statement-replacement-transfer · public-bundle/case-studies.json: statement-replacement-classification
Research IDs: actual-architecture · plaid-pattern
Checked: 2026-09-29
case-studystable
One place for every unresolved difference
Statement gaps, provider differences, conflicting card terms, and repair cases become dangerous when each subsystem keeps its own idea of what is unresolved.
Ledgerglass gives closed statement cycles stable identity, preserves field-level fact lineage, proves adjacent-cycle continuity, and routes every unresolved difference through one append-only discrepancy history with deterministic repair postconditions.
Public proof and references
Artifacts: truth-closure architecture · synthetic cycle-continuity case · correction receipt contract
Research IDs: cfpb-periodic-statements · open-banking-statements · w3c-prov · cloudflare-d1-batch
Checked: 2026-08-13
case-studystable
The totals do not need a model
Spending, debt, transfers, and recurring commitments should not change because a language model phrased them differently.
Deterministic read models calculate cashflow, debt, net worth, merchants, transfers, and recurring cadence before narrative is added. Statement-scoped APR allocations support read-only payment and payoff previews, while unknown issuer priority or deferred-interest behavior causes explicit abstention. Confirmed transfer and refund relationships lock a row's effective flow kind against divergent deterministic rules, so derived-state replay converges to zero writes.
Public proof and references
Artifacts: finance-query architecture · analysis contracts · APR evidence and abstention contract · synthetic household
Research IDs: actual-architecture · actual-schedules · cfpb-credit-card-interest · cfpb-payment-allocation · cfpb-repayment-disclosures
Checked: 2026-09-03
coreexperimental
A forecast that knows what it does not know
A calendar of recurring charges is not the same thing as a promise, and one future balance hides missing evidence and mixed currencies.
Wave 4 keeps owner and statement schedules separate from detected candidates, expands deterministic occurrences, and projects committed, expected, and possible paths per account and currency. A private post-sync scout may activate only mature derived patterns in the expected scenario behind deterministic evidence gates; it cannot create committed authority or ledger facts. The reusable public subset exports dependency-free recurrence, integer-minor-unit forecast, and backtest arithmetic with synthetic vectors and private/public parity proof; live adapters and orchestration remain private.
Public proof and references
Artifacts: public forecast core source · synthetic forecast vectors · schedule and occurrence architecture · synthetic forecast-range case · backtest contract · graduated schedule-autonomy case study
Research IDs: actual-schedules · cloudflare-workflows · actual-architecture · rfc5545-recurrence · plaid-pending-transactions · plaid-recurring-transactions · cfpb-recurring-debits · cfpb-available-balance · cfpb-cash-flow · cfpb-bill-calendar · forecast-prediction-intervals · forecast-distributional-accuracy · forecast-time-series-cv · cloudflare-workflow-rules · cloudflare-workflow-retries · cloudflare-d1-retry · cloudflare-d1-time-travel
Checked: 2026-08-22
case-studystable
Corrections that can be undone
A useful correction should teach the system without silently rewriting old evidence or poisoning evaluation data.
Owner corrections and exact statement facts can produce narrow rules with provenance, impact checks, and automatic suspension after contradiction.
Public proof and references
Artifacts: rule contracts · evaluation boundary · synthetic correction story
Research IDs: mcp-security
Checked: 2026-08-12
case-studystable
The same financial habits in every agent
Connecting the tools is not enough if every agent guesses a different workflow or trust policy.
Portable skills teach agents how to start, which evidence to prefer, when to ask before writing, and how to qualify incomplete data.
Public proof and references
Artifacts: Agent Plugin architecture · skill-routing contract
Research IDs: mcp-security
Checked: 2026-08-12
case-studyexperimental
A steward for the boring repair work
Indexes, enrichment, briefings, and derived views fail independently and should not wait for me to notice.
A durable agent keeps committed provider evidence independent from derived recovery, checkpoints each queue target from revision-bound local evidence, selects eligible pending and retry targets in request order while respecting retry backoff, and reports unrelated global derived failures separately while the ledger remains the source of financial truth.
Public proof and references
Artifacts: architecture · deterministic steward simulator · recovery story
Research IDs: cloudflare-agents · cloudflare-workflows
Checked: 2026-09-01
case-studyexperimental
Research without leaking the ledger
An unfamiliar merchant may need the web, but the web does not need my account or transaction identifiers.
Only a sanitized merchant signal leaves the ledger, and researched claims remain derived evidence rather than transaction truth.
Public proof and references
Artifacts: privacy boundary · synthetic merchant investigation
Research IDs: mcp-security
Checked: 2026-08-12
private-noteexperimental
Model routing from a real deployment
Different finance tasks have different latency, structure, and failure needs.
The private deployment uses task-specific routing and fallbacks; the public package explains a provider-neutral boundary instead of publishing personal quotas or credentials.
Public proof and references
Artifacts: provider-neutral contract · architecture note
Research IDs: cloudflare-ai-gateway
Checked: 2026-08-12
private-notestable
A private operator console
The owner needs a visual way to inspect evidence and authorize existing ledger operations without creating a second financial backend.
The private deployment has an authenticated owner-first console over the same finance application services: a plain-language check-in, validated briefing, at most three prioritized actions, and one owner-scoped AI chief of staff for bounded investigation and typed drafts. Technical operations and audit evidence are separated from the everyday experience. Opaque clock-window signals bound conservative background catch-up without carrying financial facts or claiming change detection. Revision-bound previews, explicit confirmation, idempotency, immutable receipts, and D1 authority remain unchanged; the agent cannot apply commands or claim real-time banking. Only the interaction, architectural, and authority boundaries are documented publicly.
Public proof and references
Artifacts: privacy boundary · architecture note · owner interaction contract
Research IDs: cloudflare-access-self-hosted · cloudflare-access-paths · cloudflare-access-jwt · cloudflare-worker-routes · cloudflare-service-bindings · cloudflare-chat-agents · cloudflare-agents-client-sdk · cloudflare-agents-human-loop · actual-reconciliation
Checked: 2026-09-12
private-noteexperimental
Finance AI reads stay bounded by their evidence
Model-backed finance reads can become slow or show narrative from an older evidence snapshot.
Private read paths keep deterministic evidence available without implicit model waits and serve prior validated narrative only with its original evidence, explicit age, and an admin refresh boundary.
Public proof and references
Artifacts: generic stale MCP envelope contract · deterministic-first read availability boundary · admin refresh boundary
Research IDs: actual-architecture
Checked: 2026-09-27
case-studyexperimental
Public contract documentation
Architecture and MCP contracts lived only in a private markdown tree, so they drifted from code and could not be searched as a public site.
A Starlight site is generated from catalogued canonical markdown and type-derived Zod contracts and served at /docs on the existing authenticated finance host. Private operator docs, hosts, and account data stay out of the public projection. Semantic fingerprints gate schema, route, operation, and public-interface drift.
Public proof and references
Artifacts: Starlight documentation architecture · type-derived MCP contracts · docs drift policy
Research IDs: astro-content · cloudflare-static-assets · diataxis · starlight
Checked: 2026-08-29
private-noteexperimental
Tool inputs reject unknown arguments
A tool schema can advertise that unknown arguments are forbidden while the runtime silently drops them, so a misspelled account filter reads every account.
Published finance tool inputs reject unknown arguments and name the rejected key, and tool execution errors carry explicit typed codes and retryability instead of relying on raw English substring guesses. Owner relationship decisions record a reason, and reads expose that reason with actor provenance. Machine matches are attributed to the matcher. Default transfer reads return one effective head per endpoint pair while historical identities remain. Deliberately open evidence records stay open.
Public proof and references
Artifacts: generic MCP input-validation note
Research IDs: mcp-tool-input-validation
Checked: 2026-10-10