System overview
Tissue is a TypeScript pnpm monorepo with three runtime services and two shared libraries:The decision pipeline
Every feed message passes through the same ordered pipeline, live or in replay:Async ingestion
The daemon consumes two independent TxLINE SSE streams concurrently:/api/scores/stream
and /api/odds/stream. Each stream:
- Reconnects automatically with
Last-Event-IDon disconnect - Renews its guest JWT transparently on expiry
- Tracks feed-gap duration independently per stream
- Detects and records cross-stream clock skew rather than silently clamping timestamps to “fresh”
/api/odds/validation, /api/scores/stat-validation) and checked on-chain via the
validate_odds / validate_stat program calls before it can influence a decision. If
the recent proof-failure rate crosses a configured threshold, an aggregate circuit
breaker halts the desk entirely — distinct from a single message being rejected, which
never stops the desk on its own.
The Strategy Arena (A/B comparison)
The Arena runs the same ordered feed through the same deterministic engine twice:- Tissue — every regime enabled
- Baseline — every flagged heuristic regime neutralized to a no-op (correctness fixes, like the stoppage-time lambda floor, stay on for both — that’s a bug fix, not an opinion)
Real execution on Slip
TxLINE’s own on-chain program (txoracle) has no order or execution instruction of any
kind — confirmed against the live IDL, not assumed. The risk-gated quote-publication API
above was always the ceiling of what TxLINE itself makes possible. Real execution instead
lands on Slip, a separate real settlement venue: a decision that already cleared the
ordinary risk gate is evaluated against a second, stricter, off-by-default capital-risk
gate (its own edge threshold and exposure caps), then turned into a real signed, confirmed
transaction using the same keypair as on-chain anchoring. See architecture.md
§5
in the repository for the full sequence diagram, and
Verifiability for how to check a real execution’s transaction
independently.
Network consistency
TxLINE exposes both devnet and mainnet feeds. Tissue’s pricing input can come from either network, but on-chain execution and anchoring must always match the network of the configured Solana keypair — pricing on mainnet data while anchoring proofs on devnet (or vice versa) is treated as a configuration error, not a silent fallback.Testing strategy
Every layer of the pipeline above has a corresponding real test, not a mocked substitute for the unit under test. The ingest and analyst layers specifically have adversarial suites that feed deliberately malformed or hostile input (corrupted feed values, tampered proof responses, prompt injection, spoofed tool calls) and assert the system fails closed rather than silently misbehaving — this is how two real bugs were found and fixed during hardening (see the Changelog). On-chain anchoring is tested against a real local Solana validator (Surfpool), and two independent process-level chaos drills exercise crash/restart recovery and SSE disconnect/reconnect resilience as real OS processes against real TxLINE and Solana infrastructure. See Deployment → Testing & verification for exact commands.Dashboard and analyst isolation
The dashboard never reads the ledger or SQLite database directly — it talks only to the daemon’s read-only HTTP/SSE evidence API (/state, /verify, /arena,
/ledger/proof, /events, …). The analyst layer is stricter still: it opens its
SQLite projection with readOnly: true at the connection level, has no write, post, or
execute tool of any kind, and this isolation is a tested guarantee, not a convention —
see Verifiability and Core Concepts for why that
boundary matters.