Skip to content

docs: point to the published blog series - #24

Merged
hallelx2 merged 2 commits into
mainfrom
halleluyaholudele/blog-series-pdftable
Aug 4, 2026
Merged

docs: point to the published blog series#24
hallelx2 merged 2 commits into
mainfrom
halleluyaholudele/blog-series-pdftable

Conversation

@hallelx2

@hallelx2 hallelx2 commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Originally added the seven-part series as markdown here. It now lives in apps/blogs (vectorless#17), where the diagrams became React components rather than static SVG.

Two copies of the same prose drift the moment either is edited, so this PR is now just the pointer:

  • docs/blog/ removed (16 files)
  • docs/README.md links to the published series and says why the split exists

What stays in pdftable: the evaluation reports. They belong next to the code and benchmarks that produce them, and they are a different artefact — a report records what was measured and what it does not prove; the series narrates why it mattered.

Verified no dangling links to the removed directory remain, and the Go build and test suite are unaffected.

Everything measured over the last two days lives in dated evaluation
reports, which are written for whoever maintains this next. Nothing was
written for someone trying to understand why any of it mattered.

Seven parts, in order: what a PDF actually contains; what a reader has to
know that the file does not tell it; why a table is inferred rather than
read; how the library is built and why it is a deliberate port; the five
silent corruptions and the one finding that turned out to be wrong; the
benchmarks, including a harness that measured itself twice; and what is
still missing.

Every number traces to a report in docs/evaluations -- verified by
cross-checking each headline figure appears in both places, so the prose
cannot drift from the measurements it cites.

Eight SVG diagrams built from the real brand assets: the mark from
VectorlessIcon.tsx, the palette from the blogs app globals.css, Geist and
Instrument Serif. Nothing invented.

Two things the series is careful about. It states repeatedly that 0.362
is an end-to-end number and NOT comparable to the 0.85-0.95 that
structure-only papers report, because that comparison is the easiest way
for a reader to draw a wrong conclusion. And it keeps the untested scope
-- scanned pages, CJK, embedded subset fonts, multi-table pages --
visible in the summary table rather than buried, since a benchmark
number without its scope reads as a general claim.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @hallelx2, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@sourcery-ai

sourcery-ai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds a new docs/blog/ section containing a seven-part, reader-focused narrative about pdftable, and wires it into the docs index alongside existing evaluation reports, including SVG-based diagrams that match the project branding and are ready to be surfaced via the blogs app.

File-Level Changes

Change Details Files
Introduce a reader-facing documentation series for pdftable and index it within the docs hierarchy.
  • Add docs/blog/README.md as the series index, linking the seven parts and summarizing key accuracy and benchmark numbers.
  • Update docs/README.md to describe docs/blog/ as the home for the seven-part written account, alongside evaluations and other docs.
  • Ensure each part in the series cross-links to the next and back to the index so the narrative can be read linearly or individually.
docs/README.md
docs/blog/README.md
Add seven detailed Markdown articles documenting pdftable’s design, bugs, measurements, and roadmap for future maintainers and users.
  • Create part 1 describing the true contents of a PDF, the lack of explicit structure, and implications for retrieval and parsing.
  • Create part 2 explaining font metrics, standard-14 fonts, width/descender handling, encodings, and how tables of metrics/encodings were generated mechanically.
  • Create part 3 outlining table inference strategies (lines vs text), edge cases like horizontally ruled tables, and coordinate normalization for citations.
  • Create part 4 documenting pdftable’s architecture, layering over pdfcpu, public API, and specific parity decisions with pdfplumber.
  • Create part 5 narrating five non-crashing corruption bugs, including missing minus signs and word-merge issues, plus methodology corrections.
  • Create part 6 describing expanded fixtures, ICDAR 2013 benchmarking, the oracle harness, and the “perfect grid” experiment that revealed structure as the bottleneck.
  • Create part 7 summarizing current capabilities, untested scopes, model selection and integration via StrategyExplicit, and future work ordering.
docs/blog/01-a-pdf-is-not-a-document.md
docs/blog/02-thinking-like-a-printer.md
docs/blog/03-where-tables-actually-live.md
docs/blog/04-building-pdftable.md
docs/blog/05-the-bugs-that-never-crashed.md
docs/blog/06-measuring-instead-of-believing.md
docs/blog/07-what-is-still-missing.md
Add branded SVG diagrams used by the blog posts, structured for portability into the blogs app.
  • Introduce eight SVG assets referenced by the blog articles, designed with existing brand colors, typography, and dark-surface rules.
  • Store all visuals under docs/blog/assets/ and reference them via relative paths from Markdown so they can be moved into apps/blogs without link rewrites.
  • Note that all SVGs are validated as well-formed XML to avoid rendering/runtime issues when consumed by the web app.
docs/blog/assets/00-hero.svg
docs/blog/assets/01-pdf-anatomy.svg
docs/blog/assets/02-advance-drift.svg
docs/blog/assets/03-encoding-chain.svg
docs/blog/assets/04-table-strategies.svg
docs/blog/assets/05-clipped-paren.svg
docs/blog/assets/06-benchmark-ceiling.svg
docs/blog/assets/07-hybrid-architecture.svg

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Added a seven-part blog series about PDF reconstruction, table extraction, implementation details, extraction defects, benchmark corrections, deployment options, and remaining work. Added links from the documentation index and a reproducibility-focused blog README.

Changes

PDF Extraction Documentation

Layer / File(s) Summary
Series overview
docs/README.md, docs/blog/README.md
Added links to the blog series, article index, reported metrics, and reproducibility references.
PDF reconstruction and table extraction
docs/blog/01-*.md, docs/blog/02-*.md, docs/blog/03-*.md, docs/blog/04-*.md
Documented PDF content streams, font metrics, text reconstruction, table detection, coordinate handling, and pdftable’s architecture and API.
Extraction defects and measurement
docs/blog/05-*.md, docs/blog/06-*.md
Documented non-crashing extraction bugs, independent validation, benchmark corrections, and revised perfect-grid results.
Limitations and deployment guidance
docs/blog/07-*.md
Documented layout and cell-extraction measurements, model comparisons, deployment guidance, remaining work, and validation practices.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • hallelx2/pdftable#19: The articles describe font-metric, whitespace, and extraction fixes implemented in this PR.
  • hallelx2/pdftable#23: The articles describe the ICDAR benchmark boundary and corrected F1 results implemented in this PR.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the documentation change, including the link to the new seven-part blog series.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch halleluyaholudele/blog-series-pdftable

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/blog/01-a-pdf-is-not-a-document.md`:
- Around line 15-21: Update all listed fenced blocks to use the text language
identifier: docs/blog/01-a-pdf-is-not-a-document.md lines 15-21 and 41-47;
docs/blog/02-thinking-like-a-printer.md lines 51-54;
docs/blog/03-where-tables-actually-live.md lines 36-41;
docs/blog/04-building-pdftable.md lines 27-32;
docs/blog/05-the-bugs-that-never-crashed.md lines 39-42 and 79-82; and
docs/blog/06-measuring-instead-of-believing.md lines 83-89 and 111-113.

In `@docs/blog/07-what-is-still-missing.md`:
- Line 7: Update the roadmap conclusion in the introductory statement so it
limits the claim to cell extraction being strong when a correct grid is supplied
for the evaluated digital PDFs. Preserve the distinction between structure-only
evaluation and end-to-end row and column discovery, and avoid implying that
reading cells is universally solved.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2553d102-36ae-4c7a-9fe9-f379faebfb0d

📥 Commits

Reviewing files that changed from the base of the PR and between 99f2f83 and 11f14e6.

⛔ Files ignored due to path filters (8)
  • docs/blog/assets/00-hero.svg is excluded by !**/*.svg
  • docs/blog/assets/01-pdf-anatomy.svg is excluded by !**/*.svg
  • docs/blog/assets/02-advance-drift.svg is excluded by !**/*.svg
  • docs/blog/assets/03-encoding-chain.svg is excluded by !**/*.svg
  • docs/blog/assets/04-table-strategies.svg is excluded by !**/*.svg
  • docs/blog/assets/05-clipped-paren.svg is excluded by !**/*.svg
  • docs/blog/assets/06-benchmark-ceiling.svg is excluded by !**/*.svg
  • docs/blog/assets/07-hybrid-architecture.svg is excluded by !**/*.svg
📒 Files selected for processing (9)
  • docs/README.md
  • docs/blog/01-a-pdf-is-not-a-document.md
  • docs/blog/02-thinking-like-a-printer.md
  • docs/blog/03-where-tables-actually-live.md
  • docs/blog/04-building-pdftable.md
  • docs/blog/05-the-bugs-that-never-crashed.md
  • docs/blog/06-measuring-instead-of-believing.md
  • docs/blog/07-what-is-still-missing.md
  • docs/blog/README.md

Comment thread docs/blog/01-a-pdf-is-not-a-document.md Outdated
Comment thread docs/blog/07-what-is-still-missing.md Outdated
The seven posts existed both here and in apps/blogs, which is two copies
of the same prose that drift the moment either is edited. The app owns
the writing -- it is where the posts are published, and where the
diagrams became components rather than static SVG.

What stays here is the evaluation reports. They belong next to the code
and the benchmarks that produce them, and they are a different artefact:
a report records what was measured and what it does not prove, while the
series narrates why any of it mattered.
@hallelx2 hallelx2 changed the title docs: seven-part written account of the project docs: point to the published blog series Aug 4, 2026
@hallelx2
hallelx2 merged commit d3ab676 into main Aug 4, 2026
5 checks passed
@hallelx2
hallelx2 deleted the halleluyaholudele/blog-series-pdftable branch August 4, 2026 20:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant