| epub::read parses the container, the OPF, the manifest and the spine, and skips broken idrefs | Read from the code | superdocuments/src/epub.rs:126 | read() runs parse_container, parse_package, then resolves each spine idref against the manifest. A missing idref is logged with eprintln (:161) and skipped. |
| extract_text walks the spine in order and refuses partial output | Read from the code | superdocuments/src/epub.rs:181 | Each spine href is read with a 16 MiB cap, converted with to_markdown(&entry, ""), and appended. Exceeding MAX_TEXT_BYTES returns an error. |
| The OPF parser reads item, itemref and title elements only; linear is not read | Read from the code | superdocuments/src/epub.rs:272 | parse_package matches item, itemref and title by local name. A search of superdocuments/src/epub.rs for 'linear' finds nothing. |
| The convert route does not use the spine: it sorts .xhtml and .html names | Read from the code | superdocuments/src/document.rs:651 | epub() lists entries ending in .xhtml or .html, sorts the names, converts each with html::to_blocks (base epub:///name) and html::render, and joins them. It does not call epub::read. |
| fetch --dump text uses the spine walk for EPUB bodies | Read from the code | webfold/src/cli/epub_walk.rs:260 | try_epub_walk calls superdocuments::epub::read and extract_text for an EPUB body, and for HTML that points at one. |
| The fetch command calls the EPUB walk for dump text or markdown | Read from the code | webfold/src/main.rs:387 | If --dump is text or markdown, the body is read and try_epub_walk is tried before the normal HTML path. |
| EPUB size bounds are 256 MiB, 8,192 entries, 64 MiB per entry, 16 MiB per chapter, 64 MiB of text | Read from the code | superdocuments/src/epub.rs:92 | MAX_ENTRY, MAX_TOTAL, MAX_ENTRIES, MAX_XHTML_BYTES and MAX_TEXT_BYTES constants. |
| img elements become !alt with the src resolved against the base | Read from the code | superdocuments/src/html/extract.rs:425 | The img arm writes !alt) and skips data: URIs. resolve() returns absolute and empty references unchanged. |
| The EPUB reader has no panic containment and no encryption handling | Read from the code | superdocuments/src/epub.rs:1 | A grep of superdocuments/src/epub.rs and src/document.rs finds no catch_unwind and no reference to encryption.xml. |
| Named unit test: manifest and spine order | Covered by a test | superdocuments/src/epub.rs:418 | read_parses_manifest_and_spine_in_order. Not run. |
| Named unit test: spine walk order | Covered by a test | superdocuments/src/epub.rs:439 | extract_text_walks_spine_in_order, a two-chapter fixture built in the test. Not run. |
| Named unit test: broken idref is skipped | Covered by a test | superdocuments/src/epub.rs:460 | spine_with_broken_idref_is_skipped_not_panicked. Not run. |
| Named unit test: missing spine entry is an error | Covered by a test | superdocuments/src/epub.rs:490 | extract_text_refuses_a_missing_spine_entry. Not run. |