Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Error Taxonomy

Every failure in Palimpsest is classified into exactly one category. No silent retries. No swallowed errors. Failures are stored artifacts — they are part of the crawl record, not noise to discard.

PalimpsestError

The top-level error enum. Every error in the system ultimately maps to one of these seven variants.

Network

#![allow(unused)]
fn main() {
PalimpsestError::Network(String)
}

Connection failures, DNS resolution errors, TCP timeouts, TLS handshake failures. The fetch could not reach the server.

Examples: DNS NXDOMAIN, connection refused, connect timeout, TLS certificate expired.

Protocol

#![allow(unused)]
fn main() {
PalimpsestError::Protocol(String)
}

HTTP protocol violations. The server responded, but the response is malformed or violates HTTP semantics.

Examples: Invalid status line, malformed headers, truncated chunked encoding, invalid Content-Length.

Rendering

#![allow(unused)]
fn main() {
PalimpsestError::Rendering(String)
}

Browser/DOM errors. Chrome launched but could not render the page correctly.

Examples: JavaScript execution error, page load timeout, CDP connection lost, DOM snapshot failure.

Policy

#![allow(unused)]
fn main() {
PalimpsestError::Policy(String)
}

The system refused to process a URL based on configured policy.

Examples: robots.txt disallow, scope violation (URL outside configured domain), rate limit enforcement, max depth exceeded.

DeterminismViolation

#![allow(unused)]
fn main() {
PalimpsestError::DeterminismViolation {
    context: String,
    expected: String,
    actual: String,
}
}

The nuclear option. This means a Law was broken. Two runs with the same seed produced different results. This should never happen in production — if it does, it’s a bug in the kernel.

Examples: Frontier produced different ordering for same seed, content hash mismatch for identical input, replay diverged from original.

Storage

#![allow(unused)]
fn main() {
PalimpsestError::Storage(String)
}

Blob store failures: write errors, read errors, integrity check failures, backend unavailability.

Examples: Disk full, permission denied, blob corrupted (hash mismatch on read), S3 connection error.

Replay

#![allow(unused)]
fn main() {
PalimpsestError::Replay(String)
}

Missing artifacts, incomplete capture groups, reconstruction failures. The stored data is insufficient to replay.

Examples: Missing blob for content hash, no envelope record in WARC, incomplete resource graph.

Other Error Types

ErrorCrateVariants
StorageErrorpalimpsest-storageBackend, NotFound, IntegrityError
EnvelopeErrorpalimpsest-envelopeMissingSeed, MissingTimestamp, MissingTargetUrl, MissingDnsSnapshot
CaptureGroupErrorpalimpsest-artifactMissingUrl, MissingTimestamp, MissingCrawlContext, MissingEnvelope, MissingRequest, MissingResponse
FrontierPersistErrorpalimpsest-frontierWraps serialization/IO errors
IndexErrorpalimpsest-indexWraps SQLite errors
WarcWriteErrorpalimpsest-artifactWraps IO/format errors
VectorStoreErrorpalimpsest-embedWraps SQLite errors