Repository navigation
Fix false column transitions by reconstructing logical native lines with source provenance #15
Description
Problem and observed impact
A valid, single-column abstract can be withheld as unverified_multi_column_continuation because native PDF fragments are mistaken for distinct columns. This is the first recorded blocker for 29 of the 55 previously correct v2 cases lost by the parallel primary selector. The latest 200-paper run has 38 correct proposals, zero false proposals, and 73 complete abstracts withheld; its frozen v2 baseline has 91 correct proposals.
The 2026-09-28 diagnosis is bound to source commit d5ca636a48e963619f4c89e2958d0bb1a3e72f80 and latest results SHA-256 661964b8db10bf2bd806a95a0119f4492dcabf72e759fff521993f702f016b0d. Private evidence files are validation_v3_private/diagnosis-20260928/selector-causes.json and summary.json beneath the authorized data root. The public integration report already records the preservation failure.
Confirmed cause and implementation entry points
source_lines() retains PyMuPDF block/line fragments, but locate() calls any consecutive pair with horizontal overlap below 0.5 a column change. The test ignores shared baselines, direction, spacing and paragraph ownership. The collector and final gate then hold the candidate.
An isolated same-row diagnostic recovered 12 boundary-and-text98-correct proposals: f011, f037, f087, f089, f092, f103, f111, f129, f139, f157, f166 and f173. f026 is visibly one abstract column and already matches its reference; removing this blocker reveals a separate missing-closure blocker. This confirms interacting causes. The diagnostic examined only 29 selected cases and is not an integrated fix, a 29-case recovery forecast, or independent validation.
Proposed work
Introduce logical visual-line and paragraph/column membership derived from native character/span geometry. Preserve a reversible mapping to original line IDs and exact source offsets, including inline formulae, superscripts and font changes. Infer continuation between regions using layout evidence rather than overlap between arbitrary consecutive fragments. Make genuine cross-column ambiguity explicit and retain evidence explaining each hold.
Assess whether _chains() also drops or reorders fragmented text under its anchor-overlap rules. Keep source identity, unique occurrence and alignment requirements intact; do not implement an ID allowlist, disable column checks, or lower the 98% alignment floor. Version any changed native representation/assessment receipt so historical replay remains interpretable.
PyMuPDF's extraction documentation describes span properties, line direction and RAWDICT character coordinates. These support reconstruction; the documentation does not prove a specific grouping heuristic succeeds on this corpus. Coordinate and region handling should remain compatible with the separate section-boundary repair.
Reproduce and verify
Use an authorized external ${TRACE_GC_TEST_DATA_ROOT} containing the original validation_v2/ and validation_expanded200/ caches, frozen labels and the relative original-PDF source map described in the reproduction guide. These artifacts are private: an implementer needs authorized access, and authored fixtures cannot replace this corpus gate. At this pinned commit, the frozen helper still assumes a sibling data directory; setting the environment variable alone does not repair that assumption. Apply the tracked environment/data-root repair or use the original sibling layout, and verify the resolved root before a costly run.
From the repository root, with the validation environment and optional PyMuPDF/Pillow installed, run the existing commands below (Bash syntax). Choose a fresh output suffix on each run.
python -m unittest discover -s tests -p 'test_parallel_source*v4.py' -q
python -m src.parallel_source_v4.extraction regression \
--data-root "${TRACE_GC_TEST_DATA_ROOT}" \
--source-map validation_v3_private/parallel-v4-source-map.json \
--output validation_v3_private/geometry-development-01
python tools/run_validation.py
python tools/validate_package.pyThe unchanged implementation should fail preservation (exit 1), with source preflight and saved v2 replay passing. A preflight error (exit 2) is not a measured regression run. Preserve immutable existing receipts; record the actual interpreter/dependency versions and source hashes for both comparisons.
Acceptance and delivery
- Add authored geometric fixtures that fail before the fix: one visual line split by font/equation fragments; superscripts; paragraph wrapping; and a full-width abstract above two body columns.
- Round-trip every returned span to unchanged source text and offsets. Preserve notation rather than accepting an alphanumeric-only match as fidelity evidence.
- Negative fixtures retain ambiguity for duplicated/near-duplicated text and exclude neighboring-column body text; genuine unsupported column jumps remain held.
- Recover the 12 confirmed same-row cases with correct boundaries after integrating necessary boundary work, and report all 29 cases individually. f026 must expose an honest remaining closure state until that separate repair lands.
- Run all 200 cases for all four cached methods, report changed IDs/reasons, accepted precision, complete-abstract recall and false proposals on absent/partial pages. Explain any remaining preservation failure through linked issues; no regression may be hidden by increased abstention.
- Keep first-physical-page scope, review-only proposals and disabled automatic admission/fallback. An extraction repair must not authorize graph writes.
- Deliver code, fixtures, schema/version notes and a compact public receipt linking commit/dependency identities, authorized external artifact identifiers/hashes and before/after counts. Publish no PDFs, source text, labels or personal filesystem paths.
Final integrated qualification belongs to the parent recovery gate; these targeted fixtures and known-case improvements cannot establish unseen-paper accuracy.
Tracking and completion dependencies
Parent: #12. Milestone: Paper extraction and GraphRAG qualification.
Completion prerequisites: #13. These are native blocked-by links; design, fixtures and other independent implementation work may proceed in parallel.
Required by: #17.
Activity
CompleteDotTech commentedon Sep 28, 2026
Merged-tree acceptance audit (d7af957, saved-native 200×4 result SHA-256
0cfb07240426c5df4de077d6ae1091d28e0a2721558724da91ff1f55d75c19ec): implementation fixtures and 22 focused geometry tests pass; source spans still round-trip to native IDs/offsets, negative column/repetition cases hold, and the full corpus reports all denominators with zero legacy false proposals. The real-case acceptance remains incomplete.Of the required 12 same-row recoveries, 11 are automatic proposals. f111 is still held for unverified multi-column continuation with no emitted abstract spans. Only nine of the 12 pass the separate source-reviewed notation/boundary/order/location checks; f103 and f166 have notation failures despite reviewed boundaries. f026 remains geometry-held with zero spans and no closing boundary, so it has not reached the distinct closure state seen in the early isolated diagnostic. The 29 exposed cases remain individually accounted for. Checkboxes 2 and 4 stay open; this issue remains OPEN while #17/#19 source-correct recovery continues. No text98 score is being presented as scientific-fidelity proof.
CompleteDotTech commentedon Sep 28, 2026
Merged PR #47 at verified merge
370240f65426991ae4a095cc89f45ffd74ac519f(signed heada3c342c4b17bd1417990fc9141861f8b10e2581d). All 6 PR checks and 3 post-mergemainchecks passed; pinned local validation: 995 run, 988 passed, 7 skipped, zero errors/failures (VALIDATION_REPORT.jsonSHA-256203d690c10fce4f6cfd8839d03f06ba8ac51f99ef62d62487668ac13a122ad07, external private validation folderissue15-16-integrated-validation-20260928-01).The source-owned logical math row change now exposes raw proposals for exact cached-native f111/f142; both retain
math_review_required=trueandadmission=false. Focused diagnostic receiptissue19-combined-f111-f142-20260928-01/receipt-v2.jsonSHA-25654ae33d90df2e1c6bf2bce535fac5c66fb799f49fb7ccaee15bbb421d647f78a. Source review found that f111's five script groups/ℚ remain flattened, and f142's emitted text omits the √ from κ=1/√2. A fresh exact-code 200-case regression is running underissue19-structure-geometry-fresh200-20260928-01; preservation and notation gates remain OPEN. No graph admission or selector promotion follows from this merge.CompleteDotTech commentedon Sep 29, 2026
Merged PR #51 at verified merge
eb2772cd17fb76939406ceb060ad737ede26c140(signed head824a23ff209f33175ccc46981fe29ecdddb0dc85). All six PR checks and three post-merge main checks passed; pinned local validation: 1,029 run / 1,022 passed / 7 skipped / zero failures or errors. The final private six-case source readback isissue15-f059-fraction-seam-20260928-03/READBACK.json, SHA-256ca573042ce6d4929b210af03900de4c1c01634075724adf117639c614ed0b45e.This is an opt-in PDF-bound fraction-seam locator helper. On the exposed f059 source, explicit opt-in retains exact raw native spans
(5,0,88),(6,0,7),(7,0,90), removes the unsupported column transition, and requires notation review. Five other exposed locator cases are unchanged; the default f059 assessor is unchanged. No slash or scientific correction is inserted, and the unheaded body boundary still needs attributed closure review. Consumer integration, current-code reviewed routes, and a fresh combined 200-paper run remain required before #15/#16/#19 acceptance. Automatic graph admission and fallback remain disabled. See source contract.CompleteDotTech commentedon Sep 29, 2026
Incremental source-geometry consumer plumbing merged in PR #57. Default policy remains disabled; enabled
source_fraction_v1is experimental. The 200-paper/four-method preflight passed with verified original PDFs. Native digests changed only for f012 and f195 because font names differ between original PDFs and cached page copies; text and boxes agree. Full result SHA-256:93a1674991aa0dd6a530d84c87e9def4b2451355c7d3f8f8bbfcecdb680b3c6f(public redacted receipt:review/source_geometry_consumers_v1/receipt.json).Primary correct legacy-text98 proposals moved 77 to 79: f098, f111 and f142 gained; f188 became held. Zero false proposals, but preservation of all 91 historical correct papers still fails with 16 losses. f059 remains held for section ownership and notation review. The changed f149 and f188 states need source-grounded follow-up. This issue remains open for its specified 12-case recovery, source-span fidelity, and preservation checks; the merged work supplies a safe, replayable context for that work.
CompleteDotTech commentedon Sep 29, 2026
Case-level follow-up to the merged receipt: the primary geometry-enabled replay proposes all 12 previously diagnosed same-row cases (f011, f037, f087, f089, f092, f103, f111, f129, f139, f157, f166, f173), each with the frozen legacy text98 match. The prior default replay proposed 11 of 12; f111 is the incremental gain. This is a proposal/legacy-score result, not scientific-notation or independent source-fidelity acceptance. f026 remains held for its separate closure issue, and the 91-paper preservation gate still fails. The earlier comment's remaining-work list should be read with this 12-case result in mind.
CompleteDotTech commentedon Sep 29, 2026
I also replayed the 12 primary assessments against their immutable native JSON: every assessment seal verified, every source span passed
validate_source_spans, the concatenated raw span text exactly matched the proposed text, and all 12 native digests matched. f111 carriesmath_review_required=true; this byte/offset check does not substitute for notation review of its visible equation.CompleteDotTech commentedon Sep 29, 2026
A read-only final geometry audit now binds the current merged extraction bytes (
c635c33) to the latest 200×4 receipt. PrivateAUDIT.jsonSHA-2562af80b912dfe3f930b5b4c7f7edea7246b69ee663d8880b4d69c322d95f3e505verifies all 800 assessment hashes and 200 native hashes. All 2,575 nonempty returned span groups (15,212 spans) round-trip exact page-one native substrings, line IDs, character offsets and boxes. No measured method-hash mismatch exists on current main. This is raw provenance evidence, not visual/scientific notation acceptance.All twelve named cases have complete proposals with matching boundaries and legacy text98: f011/f037/f087/f089/f092/f103/f111/f129/f139/f157/f166/f173. All 29 diagnostic cases are reported individually in the private audit: 25 now proposed, four held (f079/f081/f122/f153). f026 now has source-bound complete closure. The full 200 result remains
FAILED_REGRESSION_PRESERVATION_GATE, with zero false proposals in all arms.Separate assistant review confirmed the span counts and the limitation: f103/f111/f166 still carry math-review requirements, so exact native offsets and legacy scores do not prove the unchecked notation-preservation clause. Issue #15 remains open; #19 retains the four full-preservation holds. The audit makes no scientific-fidelity or graph-admission claim.
CompleteDotTech commentedon Sep 29, 2026
Targeted geometry acceptance is delivered in PR #81, merge 9986c19. All six final-head checks and three exact-main checks passed (run 36633400313). The source-bound public receipt reports all 29 native cases and qualifies all twelve targeted cases using nine native and three current reviewed-image proposals. Private delivered readback SHA-256 a3cac4a15472b766fb43a4c3a51e996afcea2e1c3c2c0a65f6a9ee8d326148ab. The remaining full200 selector gate is explicitly FAIL under #19 and is not claimed by this closure.