Skip to content

[bug]: late row tightening collapses the reportho corridor through fetch_ortho #1593

Description

@pinin4fjords

Summary

The nf-core/reportho report corridor is not merely narrow on current main.
The final row envelopes overlap by 68.2 px, and the shared report trunk crosses
the fetch_ortho section.

This remains the concrete acceptance case for durable corridor settlement. A
reservation record can expose the defect, but this issue closes only when the
final layout honours that reservation.

Current main evidence

Measured at ea232872 after the row-tightening change in PR #1647:

fetch_ortho bottom       466.0
report header/top        397.8
available row interval   -68.2

required upper clearance  26.0
required lower clearance  52.0
required total             78.0
capacity slack            -146.2

report trunk y             347.8
report trunk x range       356.0 .. 2324.0

The 12 authored report feeders converge onto one simultaneously occupied trunk
lane. That corridor spans columns 0 through 5 and rows 0 through 1. Its exact
final blockers are the bottom of fetch_ortho and the header/top of report.

Why local edge checks miss it

The parser rewrites the authored report connectors through synthetic fan and
merge nodes. The resolved physical graph therefore has no direct
fetch_ortho -> report section pair.

The early placement stage reserves the correct 78 px minimum, but the value has
no route-system owner or full corridor span. Late row tightening cannot connect
that minimum to the report system. It instead selects an unrelated
samplesheets bypass floor over columns 2 through 5 and places report at
397.8 px.

The durable owner must come from authored connector topology and final emission
bindings. It cannot be reconstructed from raw section pairs or final polyline
coincidence.

Historical issue-era evidence

At 32d4f17a8, the failure was less severe:

Stage 2.1 gap             78.00
final gap                 53.73
required gap              78.00
capacity deficit         -24.27
trunk clearance above      3.73

Stage 6.13 grew the upper envelope by 4 px and Stage 6.15a lifted the lower row
by 20.27 px. _center_inter_row_channel then used its documented narrow-band
fallback. The original report correctly identified that later stages had spent
an earlier reservation. The current regression shows why phase-local minimums
are not enough.

Required fix

The final row and column settlement stage must consume an immutable reservation
owned by the report route system and preserve it after local section extents are
final. Settlement must be monotone and span-aware. It must not re-run all layout
repairs to a fixpoint or introduce a general path solver.

Acceptance:

  • the full reportho fixture retains 12 authored feeder connectors, one occupied
    lane, span (columns 0..5, rows 0..1), and the 26/52 px clearances;
  • current observational evidence names fetch_ortho and report and reports
    the exact -68.2 px interval and -146.2 px slack;
  • after settlement, the final emitted corridor satisfies its reservation after
    every bbox and canvas adjustment;
  • ordinary layouts do not gain unrelated whitespace;
  • full CI passes and changed renders receive visual review.

Programme relationship

A narrow fix is acceptable only if it establishes the same durable ownership
boundary. Adding another phase-local row-gap repair does not resolve this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinglayoutLayout engine, phases, ordering (layout/)reporthoFound while rendering the nf-core/reportho metro map (#1591)routingEdge routing (layout/routing/)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions