Skip to content

Evidence

Daniel Boles edited this page Nov 6, 2026 · 1 revision

Evidence

The quality of SlideBridge is checked in three ways: a suite of 45 tests, one measured end-to-end run, and a set of deliberate probes of the places where the code is most likely to fail. All three use synthetic decks, because no real deck lives in the public repository, and the page lists the failures that the probes found beside the results that passed.

What the tests use

Every deck in the suite is built in code by tests/synthetic_decks.py. It writes two decks of 17 slides each into a temporary folder; every slide has a title placeholder and a body placeholder with two paragraphs, every third slide adds a 2 by 2 table, and every fourth carries speaker notes. The unit tests for classification, title detection, and notes use mock shapes, and the unit tests for reading order, confidence, and warnings build SlideRecord objects by hand. No test uses a deck with a chart, a grouped shape, a picture, or a multi-column layout, and so the behavior on those inputs is untested beyond the hand-built records.

Tests

The suite holds 45 tests in 7 files. On the recorded runs on Windows with Python 3.12, 44 passed and 1 skipped in 6.62 seconds without LibreOffice on the PATH, and 45 passed in 8.43 seconds with it.

File Tests What it checks
test_reconcile.py 16 Title first and footer last; body blocks sorted top then left; order numbers reassigned; an empty slide unchanged; the ordered character count; confidence of 1.0 for a clean slide and a drop for no title, no text, and grouped shapes; the floor at 0; four warning flags (no detected title, image without text, table detected, confidence below threshold) and no flags on a clean slide
test_extract.py 15 Shape classification for table, group, title, body, footer, and text box; title detection through each tier and on an empty slide; notes extraction, including an exception that returns empty text; extraction of the first synthetic deck and its slide 1 title
test_integration.py 6 Extraction of both decks; reconciliation of two decks; building a DOCX from a manifest; the full extract-to-DOCX path; unique slide identifiers; manifest slide order
test_manifest.py 4 Summary counts, low-confidence counting, empty inputs, and a serialization round trip
test_gui_smoke.py 2 The GUI module imports, and the window opens and closes when a display exists (skipped otherwise)
test_align.py 1 An exact-text edit produces an output file with the table intact
test_integration_render.py 1 LibreOffice renders a 17-slide deck to a PDF and 17 non-empty PNGs; skipped when soffice is not on the PATH

The penalty tests assert that confidence falls below 1.0, and they do not pin the amount of each penalty, so a change to one constant would pass unnoticed. The alignment suite holds a single exact-match case, which is thin cover for the module that fails first under probing, below.

One measured run

The sample deck from examples/make_sample_deck.py went through slidebridge run ... --dpi 100 on the test machine, with LibreOffice present, and the command finished in about 5 seconds with exit code 0. The outputs were checked by reading the files:

Output Result
run_report.json summary 1 file, 17 slides, 17 images, 0 low-confidence slides, 5 warnings
warnings.csv Five rows, all table_detected, on slides 3, 6, 9, 12, and 15
slides.csv 17 rows; slide 1 has the title "Example Deck 2025", confidence 1.0, and no warnings
review_pack.docx 17 tables and 17 inline images; the table for slide 3 holds the rows title, body, and table
slidebridge validate on the manifest Manifest is valid.

In run_report.json, source_hash_sha256 and pdf_file are empty strings, as the README says.

Static checks

ruff check src reports All checks passed! under the rules configured in pyproject.toml. mypy src, which pyproject.toml sets to strict mode, reports one error in src/slidebridge/orchestration/retry.py at line 65, an incompatible return value from a retry decorator, in 55 checked source files. The repository does not claim a clean type check, and the single error is listed here for completeness.

Check it yourself in 5 minutes

git clone https://github.com/dboles99/SlideBridge.git
cd SlideBridge
python -m venv .venv
.venv/bin/pip install -e ".[dev]"      # Windows: .venv\Scripts\pip install -e ".[dev]"
.venv/bin/python -m pytest
.venv/bin/python -m examples.make_sample_deck
.venv/bin/slidebridge run input/sample.pptx --workdir work --out output/review_pack.docx --dpi 100
cat output/run_report.json output/warnings.csv

Expected: 44 passed, 1 skipped without LibreOffice (or 45 passed with it), then the pipeline summary, then a report with 17 slides and 5 warnings and five table_detected rows. The run step needs soffice; without it, the render stage stops the run with a message naming LibreOffice.

Known failures

Each item was reproduced for this wiki, from the tool's own output or its source.

  • The review pack is not A4. docx_styles.py sets the page from A4_WIDTH_EMU = 11,906,400 and A4_HEIGHT_EMU = 16,838,400, but A4 measures 7,560,000 by 10,692,000 EMU, so the constants are 1.575 times too large. The generated document.xml carries w:pgSz w:w="18750" w:h="26517", which is about 330.7 by 467.7 mm; A4 would be 11906 by 16838 twips. The README and the configuration both call the pack A4. The cause is one pair of constants.
  • align loses line breaks before it splits. normalize_text collapses all whitespace, newlines included, to single spaces, and split_into_sentences runs afterward, so its newline rule never fires. An edited document of six lines without full stops became one segment, and every matched row came back as "Merged" with the entire document in the Edited Text cell.
  • align cuts a sentence that ends in a number. The splitter breaks before any run of digits followed by a full stop and a space, as it would for a numbered list. With the same six lines now ending in full stops, "Example Deck 2025." became the pieces "Example Deck", "2", "0", "2", and "5."; the title row matched "Example Deck" (Grammar), and the slide 2 rows matched the single character "2" (Split).
  • One penalty is defined and never applied. CONFIDENCE_PENALTY_HIGH_IMAGE_TEXT_MISMATCH = 0.20 sits in constants.py and docs/cli.md lists the penalty, yet score_slide does not use it.
  • Part of integrations/ is not wired in. The agent hooks, the capability contracts, and the skill registry are present, and nothing in the CLI path or the tests imports them; only the schema validator is used.
  • soffice --version hung on the test machine while another LibreOffice process was already open. docs/cli.md suggests that command as a check. The conversion itself ran normally in the same state, so the hang affected the check and not the pipeline.

Clone this wiki locally