Conversation
mberrys
commented
Oct 1, 2026
| } | ||
| continue; | ||
| } | ||
| item.remaining = item.remaining.subtracted(painted.region); |
Contributor
Author
There was a problem hiding this comment.
Quadratic path subtraction. Every opaque fill subtracts its path from every intersecting tracked item (up to 1000). A full-page background collects a hole per fill, so each QPainterPath::subtracted gets more expensive. This runs for every check id that builds a HiddenContentProcessor (hidden-layers, invisible-content, off-page-content), not only obscured-content. At minimum, only track occlusion when check.id == obscured-content.
Pairwise path subtraction ran for every hidden-content check id. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #118 (L01-13).
off-page-contentandobscured-contentnow judge painted, clipped geometry instead of raw bounding boxes. The hidden-content processor tracks the effective clip (W/W*, Form XObject BBox, text clip, withq/Qrestore).check-incomplete. Occlusion tracking is capped at 1000 objects per page and reports incomplete beyond that.Proof
Fixtures
off-page-content-clipped.pdfandobscured-content-clipped.pdf(generatorloop-preflight/tools/generate_clip_aware_geometry_fixtures.py) were committed first (e9bec03).pass: true, 0 warningspass: true, 0 warningsBaseline
PdfToolwas built from the fixture commit (engine unchanged). Local (Windows, MSVC Release):UnitTestsPreflightEngine,UnitTestsPreflightCorpus,UnitTestsPreflightVerdict,UnitTestsPreflightChecks,UnitTestsEvidenceGraph,UnitTestsContentProcessorLimitsall exit 0. Regenerating corpus snapshots produced only the two new files (other differences were line endings), so the golden corpus is unchanged.generate-architecture-catalogs.py --check,check_source_integrity.py,check_preflight_truth_source.pyandcheck-change.py --dry-runpass. New tests cover clipped and unclipped off-page cases,Qrestoring the clip, union coverage, a cover that misses the mark, and the blend-mode incomplete path.Not run locally
Full
check-changebuild/ctest/clang-tidy (noclang-tidy-18), Linux lanes, and the remaining mapped test targets; left to CI.Remaining risk
heuristic(confidence unchanged, so existing goldens are untouched).HiddenContentProcessoredits in feat(preflight): evaluate optional-content membership for print and screen (#115) #157; expect a textual merge conflict inpreflightengine.cpp.Handoff
Changed:
preflightengine.cpp(processor, emission), tests, fixtures and generator, two snapshots, overlay (both rows landed, closed_by their check ids), regenerated catalogs, change record and evidence. Anti-slop review: no new profile parameters and no API changes; the clip stack reuses existing processor hooks, and undecidable transparency is reported rather than guessed.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.