docs: the table-join entries answer a caller, and the record has one home (#471)
#464's second slice, and the pair the issue said had to move together:
`table_join_failed` (268 lines) and `table_join_code_declined` (141).
This is not the move the issue described, because the destination already held the
subject. `docs/design-notes.md` carried a 128-line bullet inside `## Assembly` covering
the same rules, so moving API.md's reasoning across as written would have made a second
copy of an argument the repo already has once — the defect the one-job-per-document rule
exists to stop. So the bullet is promoted to its own `## Joining a table split across a
page turn` section, everything API.md held that design-notes did not is folded into it,
and `## Assembly` keeps a pointer.
What stayed in API.md is what a caller does with a log line: every `reason` as a table
with a one-line gloss, every field and what it holds, and the limits to know before
triaging a run off one. Each entry ends with the cross-link that makes this a move.
`table_joined` is trimmed too, and it is not one of #464's fourteen. Half of it was the
verification's reasoning, which this slice had just written into design-notes. One
sentence in it was also stale: "the one row the count forgives" has been the larger of
that row and the rows the joined caption absorbed since the promotion exemption landed.
Three review rounds, six notes, all fixed. The row allowance was restated as a SUM in
both files — the reading this work's own summary said it fixed — where `verifyJoin`
subtracts `headerDropped + max(1, absorbed)`; a rewrite can lose a sentence's accuracy
without losing any of its facts. 24-53% is the free path's share, so the decline line's
own share is 47-76%. The `rows: 1, cells: 0` limit had two homes. A cross-reference to
the diagnostics aggregates went. And a cross-reference by position pointed into a list
this work rewrote, which turned up three more of the same shape.
Nothing is deleted, and it is checked rather than read: 52 figures and both issue
numbers from the two entries, 32 from the promoted bullet, 13 from `table_joined`, and
62 of 62 identifiers across the two files. A third check was added because the dropped
cross-reference was invisible to the first two: link targets are compared by CITATION
COUNT, since the anchor that went is one ten other entries also link to.
docs/API.md 6,111 -> 5,821
docs/design-notes.md 2,110 -> 2,391
Refs #464
Co-Authored-By: Blake Bertuccelli-Booth <bbertucc@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>