Integration Lab / engineering notebook 4 open · 3 draft
Integration testing ground

Seven benches.

Each one isolates a single integration problem that two production systems — CryptoFundingWatch and LatticePulse — keep running into, states what it is trying to find out, and reports what the testing showed. Several run live in the browser against real endpoints.

01

Auth & token lifecycle

bench up

Can a long-running poller hold third-party credentials for months without a mid-request expiry or a manual reconnect?

both systemsOpen →
02

Schema normalisation

live

Can N source schemas collapse into one canonical model so that adding source N+1 touches one file and nothing downstream?

both systemsOpen →
03

Retry & dead letter

live

When a source goes down mid-cycle, does the pipeline degrade, recover, and avoid double-applying anything?

both systemsOpen →
06

Connector architecture

live

At what point does point-to-point integration stop scaling, and what does introducing a hub actually cost?

both systemsOpen →
04

Alert delivery

draft

Does an alert survive the last mile — dedupe, ordering, and a messaging provider that rate-limits or silently drops?

LatticePulsenot built
05

LLM action layer

draft

Can a model be given API access without ever inventing a parameter or writing something irreversible unprompted?

both systemsnot built
07

Reconciliation & drift

draft

How fast can an undocumented upstream schema change be detected — before or after it corrupts the scored output?

both systemsnot built
What feeds the bench

Two production systems, one architecture

Both ingest from sources that disagree about everything — schema, units, identifiers, cadence, availability — and both must keep producing a usable ranked view when one source misbehaves.

System A · crypto derivatives

CryptoFundingWatch

Real-time perpetual futures funding rates across five exchanges, surfacing funding-rate spreads and arbitrage opportunities on one clock.

sources
Binance · OKX · Hyperliquid · Coinbase INTX · Kraken
coverage
100+ assets — BTC, ETH, plus Gold, Oil, S&P 500, MAG-7
cadence
uniform — all venues on the same refresh cycle
hard part
five funding conventions, five symbol formats, one number
System B · market attention

LatticePulse

Detects abnormal attention velocity across social and regulatory sources, scoring each ticker against its own historical baseline with a fixed deterministic formula rather than a model.

sources
X · Reddit · SEC Form 4 · SEC 8-K, 13D, 13G
coverage
1,514+ tickers
cadence
ragged — minutes for social, 15–30 min for filings
hard part
four source types that aren't the same kind of thing
Why the pairing is useful. They stress the same pipeline from opposite ends. CryptoFundingWatch is numerically fussy but structurally uniform — five sources, same shape, same clock. LatticePulse is structurally chaotic: a Reddit comment and an SEC Form 4 filing have nothing in common except that both are evidence about a ticker at a point in time. A technique that survives both is probably sound.
Where the benches sit

Both systems reduce to the same five stages

Each bench maps onto a stage. Where it sits is where its failures show up.

SOURCES ADAPT CANONICAL SCORE ACT Heterogeneous 5 exchange APIs 2 social firehoses 2 SEC filing feeds One adapter each units normalised here validated on arrival provenance attached Canonical model one shape, one clock one identifier space stale flags, not gaps Deterministic annualised edge velocity vs baseline reproducible Rank · alert thresholds dedupe delivery 01 auth · 03 retry rate limits 02 schema normalisation 06 connector architecture 07 reconciliation drift detection 05 LLM action layer schema-validated calls 04 alert delivery 03 delivery retry
Findings so far

Notes

  • Normalise identity and time; do not normalise meaning. CryptoFundingWatch should collapse five rates into one comparable number because they measure the same quantity. LatticePulse should not — there is no honest exchange rate between an upvote and an insider purchase. Bench 02.
  • Partial availability beats a spinner. When one of five exchanges stops responding, four live rows and one stale-flagged with its last-good timestamp is more useful than a blank view. Users can reason about a known-stale number; they can't reason about an absence.
  • The hub pays for itself at three sources and two consumers. Point-to-point costs S×C connections, a hub costs S+C, so it wins exactly when (S−1)(C−1) > 1. At 2×2 it's a wash; everything beyond that favours the hub. Bench 06.
  • A timeout is not a failure. After one you don't know whether the write landed, and the only safe answer is an idempotency key. Bench 03.
  • Ragged cadence is harder than slow cadence. Comparing velocity across sources that sample at different rates needs the baseline to be per-source, not global.
  • Deterministic scoring is a feature. Both systems use fixed formulas rather than models, so a score can be explained, reproduced and argued with — which matters more than accuracy when someone asks why a ticker moved up the list.