chore: release 0.6.1#12
Merged
Merged
Conversation
0.6.0's row-group threading only promoted the full-width band form (a body
cell spanning the value region / scope="rowgroup"). The label-only-row form --
a body row whose value columns are empty while a single leading label cell
carries text ("9. Trip Cancellation | (empty) | (empty)"), pervasive in
Label|Value financial/insurance schedules -- was missed: is_full_width_note
geometry never sees a colspan=1 label, so the row was emitted as an orphaned
is_label rule and every value beneath it lost its group identity.
Such a row is now promoted to scope="rowgroup" and threaded as a bounded
ancestor of the value lines under it, symmetric with the full-width band:
10. Travel Delay > If the departure is delayed > 1. Adult insured person | Maximum limit (S$) > Value Plan: 100
How:
- New _mark_label_only_rowgroups detects body rows with no value-bearing <td>
but exactly one non-empty label source cell, groups maximal runs of
consecutive label-only rows into nested header stacks, and computes each
stack's extent (down to the next stack or full-width band). Promoted only
when the extent holds a real value row -- a trailing label that groups
nothing is left for the is_label path, never stranded as an empty group.
- The single-label-cell requirement separates a group header from a data row
whose designated value columns merely happen to be empty (a "Total | n=4"
summary, or a row under a header that over-promoted numeric columns to row
labels): threading its cells would invent a breadcrumb and misattribute it
onto the rows below. Such rows keep the is_label preservation path.
- maze_pathfinder honors a stored rowgroup_extent_end for these bands, since a
colspan=1 label cannot encode nesting depth the way a band's width does.
Full-width bands keep their colspan-bounded extent; the two compose.
- _build_rules skips rowgroup-promoted rows in label preservation so a threaded
header is not also emitted as an orphan label.
106 golds updated (orphan section labels collapsed into descendants' row paths;
no value dropped -- verified value multiset preserved + correctness oracle).
New fixtures matrix/label-only-rowgroup and label-only-rowgroup-vs-data-row.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <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.
Release 0.6.1.
What's in this release
fix(core): thread label-only rows as row-group headers
0.6.0's row-group threading only handled the full-width band form. The
label-only-row form — a body row whose value columns are empty while a
single leading label cell carries text (
9. Trip Cancellation | (empty)),pervasive in
Label | Valuefinancial/insurance schedules — was emitted as anorphaned
is_labelrule, so every value beneath it lost its group identity.Such rows are now promoted to row-group ancestors and threaded into each value
line beneath them, symmetric with the full-width band:
A single-label-cell requirement separates a group header from a data row
whose value columns merely happen to be empty (a
Total | n=4summary), so adata row's cells are never invented into a breadcrumb and misattributed onto the
rows below.
Verification
paths; no value dropped (value multiset preserved + correctness oracle).
matrix/label-only-rowgroup,matrix/label-only-rowgroup-vs-data-row.🤖 Generated with Claude Code