Skip to content

chore: release 0.6.1#12

Merged
maish merged 2 commits into
mainfrom
release-0.6.1
Jun 14, 2026
Merged

chore: release 0.6.1#12
maish merged 2 commits into
mainfrom
release-0.6.1

Conversation

@maish

@maish maish commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

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 | Value financial/insurance schedules — was emitted as an
orphaned is_label rule, 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:

10. Travel Delay > If the departure is delayed > 1. Adult insured person | Maximum limit (S$) > Value Plan: 100

A single-label-cell requirement separates a group header from a data row
whose value columns merely happen to be empty (a Total | n=4 summary), so a
data row's cells are never invented into a breadcrumb and misattributed onto the
rows below.

Verification

  • Full suite green (4854 passed); ruff + mypy clean.
  • 106 golds updated — orphan section labels collapsed into descendants' row
    paths; no value dropped (value multiset preserved + correctness oracle).
  • New fixtures: matrix/label-only-rowgroup, matrix/label-only-rowgroup-vs-data-row.

🤖 Generated with Claude Code

maish and others added 2 commits June 14, 2026 19:29
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>
@maish maish merged commit d1af76e into main Jun 14, 2026
7 checks passed
@maish maish deleted the release-0.6.1 branch June 14, 2026 11:34
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