Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
851 commits
Select commit Hold shift + click to select a range
667e114
refactor(routing): switch corner-radii helpers from bool to Direction
pinin4fjords May 20, 2026
8254285
test(corners): rename right-going test for readability
pinin4fjords May 20, 2026
65ef236
Merge pull request #398 from pinin4fjords/fix/397-corner-radii-direction
pinin4fjords May 20, 2026
f2b60be
chore: retire propagator references; drop unused Section.flip_lines
pinin4fjords May 20, 2026
a315d64
Merge pull request #399 from pinin4fjords/chore/retire-propagator-refs
pinin4fjords May 20, 2026
70ff004
fix(routing): wrap geometry, around-section route, clearance
pinin4fjords May 29, 2026
3a4b7ed
test(routing): exercise _route_around_section_below
pinin4fjords May 29, 2026
adffda7
Merge pull request #388 from pinin4fjords/split/B-wrap
pinin4fjords May 29, 2026
45b5ce4
chore: remove orphaned variantbenchmarking.png
pinin4fjords May 29, 2026
0a85a84
Merge pull request #402 from pinin4fjords/chore/rm-orphan-variantbenc…
pinin4fjords May 29, 2026
f04d8d0
fix: make example mmds parse in stock Mermaid
pinin4fjords May 29, 2026
490f226
Merge pull request #403 from pinin4fjords/chore/github-parseable-mmds
pinin4fjords May 29, 2026
c41c207
feat(layout): canvas y-grid re-snap, junction reposition, drop icon-p…
pinin4fjords May 29, 2026
573b5a2
fix(parser): suppress terminus icon on mid-pipeline hub stations
pinin4fjords May 29, 2026
3bba8a1
test(layout): minimal topology fixtures for fan symmetry / trunk-through
pinin4fjords May 29, 2026
212eb4f
test(layout): trunk-Y / fan-symmetry invariants + re-enter exit gate
pinin4fjords May 29, 2026
869fd28
Merge pull request #389 from pinin4fjords/split/C-ystrict
pinin4fjords May 29, 2026
9895ebe
feat(layout): principled inter-section gap-width formula (A/B clearan…
pinin4fjords May 29, 2026
32acf77
feat(routing): row-aware gap-edge + symmetric bundle geometry helpers
pinin4fjords May 29, 2026
7062112
feat(routing): centre & uniformly bundle inter-section gap channels
pinin4fjords May 29, 2026
bd869e8
test(layout): inter-section gap sizing, centring, bundling & crossing…
pinin4fjords May 29, 2026
b2f745c
Merge pull request #390 from pinin4fjords/split/D-gap
pinin4fjords May 29, 2026
714cdc2
test(routing): add fan-out junction tail-join invariant + runtime guard
pinin4fjords May 29, 2026
1ef4c37
fix(routing): join fan-out upstream tails to downstream curve start
pinin4fjords May 29, 2026
7a36ba6
refactor(routing): share fan-out route-map builder, trim guard doc
pinin4fjords May 29, 2026
55097d4
Merge pull request #408 from pinin4fjords/fix/concentric-corner-seam
pinin4fjords May 29, 2026
b204f4d
fix(layout): restore symmetric section top padding (#409)
pinin4fjords May 29, 2026
8e0f18f
fix(layout): re-anchor junctions after late loop-station shift (#386)…
pinin4fjords May 29, 2026
1aca5e7
fix(layout): stop serpentine packer placing folds at negative columns…
pinin4fjords May 29, 2026
eb47654
fix(routing): reverse bundle order for bottom-exit fold into RIGHT en…
pinin4fjords May 29, 2026
aa16cbe
fix(layout): wrap wide labels and spread columns to prevent collisions
pinin4fjords May 29, 2026
86981ff
refactor: tighten label-overlap helpers after fix for #405
pinin4fjords May 29, 2026
a30e2eb
docs(gallery): add wide_label_fan to the render gallery
pinin4fjords May 29, 2026
c92fc70
Merge branch 'main' into fix/405-label-wrap
pinin4fjords May 29, 2026
86ca19d
Merge pull request #416 from pinin4fjords/fix/405-label-wrap
pinin4fjords May 29, 2026
98d17f3
fix(routing): slot perpendicular re-joining line by approach side at …
pinin4fjords May 29, 2026
a158e10
fix(routing): clear inter-row wrap channels from section edges (#414)
pinin4fjords May 30, 2026
3acee06
fix(render): orient terminus file icons to TB section flow (#419)
pinin4fjords May 30, 2026
b0ff2cb
fix(layout): straighten fan-in trunk; keep co-traveling trunk slot (#…
pinin4fjords May 30, 2026
51fd01f
feat: stacked-section serpentine routing + inter-column corridor fan-…
pinin4fjords May 30, 2026
87ab882
fix(layout): collapse reserved absent-line slots at partial fan branc…
pinin4fjords May 30, 2026
f216383
refactor(routing): dedup helpers, guard efficiency, backtrack unifica…
pinin4fjords May 30, 2026
3f5fa3c
fix(layout): skip explicit-grid sections in direction inference (#446…
pinin4fjords May 30, 2026
3cb2e3a
feat(render): positionable legend+logo block, logo_scale, cross-row r…
pinin4fjords May 30, 2026
bfe2c5e
feat(render): bridge non-merging line crossings with a gap (#439) (#449)
pinin4fjords May 30, 2026
f16b175
fix(layout): reject stations laid outside their section bbox (#424) (…
pinin4fjords May 30, 2026
d669eb1
refactor(layout): split engine.py into per-phase modules (#451) (#458)
pinin4fjords May 30, 2026
a5efd6e
docs(layout): fix CONTRACT.md drift from the engine split (#460)
pinin4fjords May 30, 2026
c31d97c
docs(layout): tag every CONTRACT stage invariant vs transient (#462) …
pinin4fjords May 31, 2026
e927bd1
docs(skill): remove standing auto-merge auth from fix-issue, forbid -…
pinin4fjords May 31, 2026
d333181
docs(layout): clarify Lifecycle invariant/transient principle + harde…
pinin4fjords May 31, 2026
9807c85
fix(layout): make off-track reanchor independent of call timing (#463…
pinin4fjords May 31, 2026
e389e71
PR1 of #464 - bidirectional section-top primitive, byte-identical (#470)
pinin4fjords May 31, 2026
043c639
style: make whole-repo ruff check clean (#471) (#473)
pinin4fjords May 31, 2026
e9cce87
PR2 of #464 - enable Group A top-shrink (render-changing) (#472)
pinin4fjords May 31, 2026
d75764e
chore(docs): remove #464 planning doc from the repo (#474)
pinin4fjords May 31, 2026
99a55ea
PR4 of #464 - finish: content-clamp dedup, rename bidirectional fit, …
pinin4fjords May 31, 2026
f5d579e
fix(types): close ruff ANN gaps and add mypy to CI (#476)
pinin4fjords May 31, 2026
f24e504
feat(layout): guard that content placement never moves a trunk anchor…
pinin4fjords May 31, 2026
56748f8
refactor(layout): extract Pass C into _settle_pass_c and promote _run…
pinin4fjords May 31, 2026
c8669c4
docs(layout): drop change-narrative from _settle_pass_c docstring (#480)
pinin4fjords May 31, 2026
e2d36ae
refactor(layout): split _settle_pass_c into content/stack/finalize se…
pinin4fjords May 31, 2026
e5e8b96
refactor(layout): run Pass C content phases row-major via _scoped_sec…
pinin4fjords May 31, 2026
6577730
fix(layout): stop grid-snap collapsing same-column stations (#478)
pinin4fjords May 31, 2026
6df298d
feat(layout): resolve inter-row offsets from a structural extent pred…
pinin4fjords Jun 1, 2026
5254f07
refactor(layout): drop redundant junction/canvas repair re-runs made …
pinin4fjords Jun 1, 2026
1664429
fix(layout): complete anchor-frozen guard (all ports, both axes) (#48…
pinin4fjords Jun 1, 2026
a1f25e6
refactor(layout): make content-placement phases 4.9 / 6.2 idempotent …
pinin4fjords Jun 1, 2026
d1ca54a
test(layout): content-placement purity probe with strict-xfail leak l…
pinin4fjords Jun 1, 2026
8c1788e
fix(layout): make full-bundle column fans pure via structural track s…
pinin4fjords Jun 1, 2026
4f6f209
fix(layout): make Stage 6.1 / 6.2 content fans pure via a frozen plac…
pinin4fjords Jun 1, 2026
4f1fac3
fix(layout): centre fan-out siblings on the frozen port trunk anchor …
pinin4fjords Jun 1, 2026
082dae5
fix(layout): make Stage 6.11 balance pure and lock the purity guard (…
pinin4fjords Jun 1, 2026
f68bfd3
docs(contract): note the content-placement purity guard (#491) (#497)
pinin4fjords Jun 1, 2026
e46e119
docs(contract): point helper refs at phases/ modules, drop stale line…
pinin4fjords Jun 1, 2026
1ff0fbe
refactor(parser): drop write-only Port.line_ids field (#500)
pinin4fjords Jun 1, 2026
29ec7fa
docs: sync user and developer docs with current code (#504)
pinin4fjords Jun 1, 2026
026acc9
docs(layout): document the anchor / content-placement split (#505)
pinin4fjords Jun 1, 2026
71d1394
fix(types): enable mypy strict_optional on the layout core (#498, ban…
pinin4fjords Jun 1, 2026
87be3e1
fix(types): narrow ignore_missing_imports to stub-less deps (#498, ba…
pinin4fjords Jun 1, 2026
ccfaf6c
fix(types): enable disallow_any_generics + per-module strict lock-in …
pinin4fjords Jun 1, 2026
e1bdbd1
feat(examples): long-read variant-calling example + #484 regression f…
pinin4fjords Jun 3, 2026
43f7a22
fix(layout): convergence-split placement, TB compaction and port alig…
pinin4fjords Jun 3, 2026
7419de1
fix(routing): route around sections, concentric bundling and directio…
pinin4fjords Jun 3, 2026
cc2be04
feat(layout): runtime invariant guards for routing correctness
pinin4fjords Jun 3, 2026
a0ad561
fix(render): bridge same-colour crossovers of independent arms
pinin4fjords Jun 3, 2026
eeb9a9c
test: regression suite for #484 layout/routing/bridge/corner invariants
pinin4fjords Jun 3, 2026
cf364aa
Merge pull request #507 from pinin4fjords/fix/484-complex-autolayout
pinin4fjords Jun 3, 2026
e23a98e
feat(layout): guard against intra-section collinear distinct-line ove…
pinin4fjords Jun 3, 2026
213c28a
fix(routing): centralise corner-radius computation on corners.py (#50…
pinin4fjords Jun 3, 2026
31c3894
fix(layout): align fan-out column-mates excluded from loop recenter (…
pinin4fjords Jun 3, 2026
6463bde
test(tracking): repoint variant_calling defect xfails from closed #31…
pinin4fjords Jun 3, 2026
77515e9
fix(routing): machine-enforce corner radii route through corners.py (…
pinin4fjords Jun 3, 2026
a1242d4
test(layout): completeness guard for content-placement phase set (#50…
pinin4fjords Jun 3, 2026
247a2e0
feat(triage): generalise build_review to ad-hoc checks (#510) (#521)
pinin4fjords Jun 3, 2026
d65eabb
feat(layout): per-phase coordinate snapshots for regression localisat…
pinin4fjords Jun 3, 2026
9eca645
fix(layout): make Pass C guards observational so validate flag is ide…
pinin4fjords Jun 3, 2026
4f34828
fix(labels): suppress node-name label on file-icon stations (#524) (#…
pinin4fjords Jun 4, 2026
0cfdad1
fix(parser): warn when graph primary direction is not LR (#525) (#534)
pinin4fjords Jun 4, 2026
d5704f1
feat(legend): opt-in combined-lines legend entry (#544)
pinin4fjords Jun 5, 2026
5ac40c1
feat(labels): opt-in diagonal station labels for dense trunks (#527) …
pinin4fjords Jun 6, 2026
21ccf47
feat(markers): per-station marker shapes/fills and a marker legend ke…
pinin4fjords Jun 6, 2026
823dd6a
feat(layout): place disconnected section components independently
pinin4fjords Jun 6, 2026
b1be7b3
feat(icons): | banner format-strip labels and edge clearance (#532)
pinin4fjords Jun 6, 2026
2dec641
docs(icons): document file-icon directives and the banner strip (#532)
pinin4fjords Jun 6, 2026
187cb5f
feat(parser): line_spread directive, model, and CLI flag
pinin4fjords Jun 6, 2026
a75e541
feat(layout): centered line_spread mode
pinin4fjords Jun 6, 2026
47ac772
feat(layout): rails line_spread mode (parallel rails + interchanges)
pinin4fjords Jun 6, 2026
9d2afce
docs(layout): document line_spread and add the mixed-mode gallery sho…
pinin4fjords Jun 6, 2026
0df9db2
docs(rails): correct the convergence wording
pinin4fjords Jun 6, 2026
f6ff4db
feat(parser): add %%metro group: directive and StationGroup model
pinin4fjords Jun 6, 2026
6c72314
feat(render): intra-section station group band captions
pinin4fjords Jun 6, 2026
dfc5255
test(group): group_labels fixture, gallery entry, and tests
pinin4fjords Jun 6, 2026
2e25c5f
feat(parser): %%metro fold_threshold directive for section-row wrap w…
pinin4fjords Jun 6, 2026
a21c7a2
feat(layout): pack diagonal-labelled rail sections to the graph colum…
pinin4fjords Jun 6, 2026
57714a5
fix(layout): snapshot structural extent after the off-track lift
pinin4fjords Jun 6, 2026
028b547
feat(off-track): anchor producer-fed sinks to their producer
pinin4fjords Jun 7, 2026
e9a1651
refactor: unify off-track guard and dedupe sink detection after fix f…
pinin4fjords Jun 7, 2026
e943aaa
feat(off-track): reserve a clear column for each off-track output icon
pinin4fjords Jun 7, 2026
0c8cb43
refactor: tighten off-track output column-spacing after fix for #573
pinin4fjords Jun 7, 2026
ed874cb
docs(gallery): enrich off-track-outputs demonstrator with a multi-out…
pinin4fjords Jun 7, 2026
d214029
fix(rail): label top-rail stations above and reserve their band
pinin4fjords Jun 7, 2026
4dd98ec
refactor(rail): share the top-rail threshold; drop a vestigial gate
pinin4fjords Jun 7, 2026
a8f6903
test(rail): import layout_validator as a top-level test module
pinin4fjords Jun 7, 2026
2a098af
fix(labels): scope diagonal-label column pitch per component (#581)
pinin4fjords Jun 7, 2026
60b8c4b
refactor(labels): tidy comments and naming on component-scoped pitch …
pinin4fjords Jun 7, 2026
ec5c2ec
fix(off-track): single-trunk sections lift by base pitch, not diagona…
pinin4fjords Jun 7, 2026
338f46c
refactor(off-track): tidy single-trunk lift-step helpers (/simplify)
pinin4fjords Jun 7, 2026
002bb16
fix(guards): narrow Section|None for mypy in single-trunk off-track g…
pinin4fjords Jun 7, 2026
4d58afa
fix(rail): tint spanning interchange with marker fill (#586)
pinin4fjords Jun 7, 2026
57ba72e
feat(off-track): drop downward-branch outputs below their producer (#…
pinin4fjords Jun 7, 2026
62fca63
fix(layout): exclude off-track stations from same-cell collision reso…
pinin4fjords Jun 7, 2026
5c77a7d
feat(debug): draw row-grid lines for sections outside a row group
pinin4fjords Jun 7, 2026
0a7151a
fix(layout): fan uneven reconverging diamonds downward, short branch …
pinin4fjords Jun 7, 2026
ba401d3
refactor(layout): tidy uneven-diamond chain detection
pinin4fjords Jun 7, 2026
aa69bec
fix(render): wrap over-wide file-icon captions across lines
pinin4fjords Jun 7, 2026
c6cd0e5
refactor(render): tidy icon-caption wrap and keep whitespace separators
pinin4fjords Jun 7, 2026
138c66a
test(render): demonstrate caption wrap with a wide HTML/PDF label
pinin4fjords Jun 7, 2026
e1c81f2
fix(rail): align diagonal labels above the bundle on a common baseline
pinin4fjords Jun 7, 2026
5aa3034
refactor(rail): tidy diagonal-label side selection
pinin4fjords Jun 7, 2026
3438194
fix(rail): label only top-rail stations above the bundle, others below
pinin4fjords Jun 7, 2026
b5eed48
fix(rail): give coloured interchange markers a light outline
pinin4fjords Jun 7, 2026
69b7259
test(rail): guard rail stations seat their knobs on their lines' rails
pinin4fjords Jun 7, 2026
3685b5e
fix(off-track): keep metro lines out of file icons and stop output ov…
pinin4fjords Jun 7, 2026
03af243
perf(off-track): skip the crossing probe's routing when no leaf icon …
pinin4fjords Jun 7, 2026
62a0e2f
fix(rail): space rails at the base grid pitch, not the label-widened one
pinin4fjords Jun 7, 2026
44acaa8
fix(render): center the front page of a stacked files icon
pinin4fjords Jun 7, 2026
34919b1
feat(layout): space off-track outputs clear of the next divergence
pinin4fjords Jun 7, 2026
e3f6913
fix(rail): seat markers, straighten termini, and hug box to label band
pinin4fjords Jun 7, 2026
2b7a2ca
feat(scale): add per-render font_scale directive
pinin4fjords Jun 7, 2026
c30b3b8
feat(legend): add legend_logo_gap directive and the sarek logo
pinin4fjords Jun 7, 2026
5ae0c53
docs(gallery): add the sarek-style integration showcase
pinin4fjords Jun 7, 2026
9ab43f3
chore(github): add issue templates and subsystem labels
pinin4fjords Jun 7, 2026
2123dbb
test(cli): cover --format html output (#599)
pinin4fjords Jun 7, 2026
8e6289b
refactor(convert): extract convert_nextflow_dag stages into named hel…
pinin4fjords Jun 7, 2026
310736d
refactor(parser): extract graph-semantic validation into testable val…
pinin4fjords Jun 7, 2026
5e0d740
docs(dev): add routing/parser/testing/architecture contributor docs (…
pinin4fjords Jun 7, 2026
e231c69
test(render): lock standalone (unlinked) node rendering (#164) (#603)
pinin4fjords Jun 7, 2026
112c45d
refactor(parser): replace the regex Mermaid front-end with a lark gra…
pinin4fjords Jun 8, 2026
3a56ab9
test(parser): cover the grammar parser, leniency, and inline edges
pinin4fjords Jun 8, 2026
b9dcb4c
docs(parser): document the grammar parser and authoring convention
pinin4fjords Jun 8, 2026
2f95322
feat(options): unify CLI flags and %%metro directives via a shared re…
pinin4fjords Jun 8, 2026
fe268e3
test(options): cover CLI<->directive parity, cascade, and duplication…
pinin4fjords Jun 8, 2026
ee0e810
docs: document CLI<->directive parity and the new layout options
pinin4fjords Jun 8, 2026
23b7394
test(perf): one layout pass per fixture for content-placement propert…
pinin4fjords Jun 8, 2026
0226733
test: dedupe snapshot/restore helpers and tighten the idempotence probe
pinin4fjords Jun 8, 2026
1804188
test: drop narrative comment from snapshot/restore helpers
pinin4fjords Jun 8, 2026
929e0b7
feat(layout): stack tall-anchor section chains vertically
pinin4fjords Jun 8, 2026
54375ad
refactor: tighten tall-anchor placement after fix for #552
pinin4fjords Jun 8, 2026
aae1b55
fix: don't fold a linear section chain that fits one row (#551)
pinin4fjords Jun 8, 2026
06b5171
refactor(routing): split core.py into a handlers subpackage (#550)
pinin4fjords Jun 8, 2026
6fade9e
refactor(routing): colocate _resolve_section_row with its siblings (#…
pinin4fjords Jun 8, 2026
83921d6
fix(routing): order inter-row trunk bands to minimise line crossovers
pinin4fjords Jun 8, 2026
f2cf972
refactor: tighten trunk-band crossing helpers after fix for #547
pinin4fjords Jun 8, 2026
dddac13
fix(routing): type the trunk-band permutation key to satisfy mypy
pinin4fjords Jun 8, 2026
ffe0a17
fix(ordering): give each branch of an uneven diamond its own track
pinin4fjords Jun 8, 2026
e5901ba
refactor: tighten coincidence guard after fix for #610
pinin4fjords Jun 8, 2026
d54267b
docs(gallery): add uneven_diamond to the render gallery
pinin4fjords Jun 8, 2026
a971c53
feat(labels): glyph-ink strike guard + flip label off foreign horizon…
pinin4fjords Jun 8, 2026
cbd9f4d
fix(rail): one station per column, in declaration order (#576) (#618)
pinin4fjords Jun 8, 2026
febef26
fix(labels): clear angled rail labels off lower-rail markers (#577) (…
pinin4fjords Jun 8, 2026
f2400b2
fix(labels): pull wrapped label off a foreign trunk it overruns (#617)
pinin4fjords Jun 9, 2026
99a26c2
feat(live): visualise a running Nextflow workflow on a metro map (#612)
pinin4fjords Jun 9, 2026
90ae91e
docs(live): embed the live-progress demo video (#620)
pinin4fjords Jun 9, 2026
d8cda8f
docs(live): refresh the demo video (post label-overlap fix) (#621)
pinin4fjords Jun 9, 2026
57a8583
docs(pipelines): add nf-core/sarek to the pipelines page (#622) (#622)
pinin4fjords Jun 9, 2026
389ec76
feat(svg): embed a machine-readable data manifest in every render
ewels Jun 9, 2026
ae75121
Merge branch 'main' into feat/svg-data-manifest
ewels Jun 9, 2026
9ee414e
style: apply ruff format to test files
ewels Jun 9, 2026
5803869
ci(render-preview): publish previews for fork PRs via workflow_run (#…
pinin4fjords Jun 9, 2026
a20c67a
Merge branch 'main' into feat/svg-data-manifest
pinin4fjords Jun 9, 2026
62192c3
fix(svg): add --no-manifest opt-out and keep the gallery render-diff …
pinin4fjords Jun 9, 2026
9a92f39
ci(render-preview): resolve fork PR number by head SHA, not commit-pu…
pinin4fjords Jun 9, 2026
ee14d97
Merge pull request #625 from pinin4fjords/ci/fork-preview-pending-for…
pinin4fjords Jun 9, 2026
8d4f05e
Merge branch 'main' into feat/svg-data-manifest
pinin4fjords Jun 9, 2026
2fa32f0
test(manifest): pin data-metro-section to the manifest entry
pinin4fjords Jun 9, 2026
edf97cf
Merge remote-tracking branch 'ewels/feat/svg-data-manifest' into feat…
pinin4fjords Jun 9, 2026
4bf4ffa
fix(svg): type _station_group_attrs return as dict[str, Any]
pinin4fjords Jun 9, 2026
5a8b8f8
test(manifest): assert array ordering follows graph declaration order
pinin4fjords Jun 9, 2026
4f75b92
feat(cli): hide the --manifest/--no-manifest flag from help
ewels Jun 9, 2026
32690b7
docs: document the manifest opt-out via directive, not the hidden flag
ewels Jun 9, 2026
d84b8df
Merge pull request #623 from ewels/feat/svg-data-manifest
ewels Jun 9, 2026
8e558d6
ci(cleanup): clean up fork-PR previews via pull_request_target (#628)
pinin4fjords Jun 9, 2026
f72ecc0
docs(live): separate plugin content from no-plugin sections
pinin4fjords Jun 9, 2026
ce36dd3
docs(live): add plugin install instructions (pre-registry) [skip ci]
pinin4fjords Jun 9, 2026
4f57bf9
docs(live): fix NXF_PLUGINS_DEV command - requires -plugins flag [ski…
pinin4fjords Jun 9, 2026
925d862
docs(live): restore plugin demo intro sentence lost in move [skip ci]
pinin4fjords Jun 9, 2026
6e522b0
docs(live): fix NXF_PLUGINS_DEV needs assemble first; add managed-mod…
pinin4fjords Jun 9, 2026
d9f19cd
ci: trigger docs deploy after live.md plugin section rewrite
pinin4fjords Jun 10, 2026
c9ef405
feat(manifest): factor the embedded-manifest standard into a dependen…
pinin4fjords Jun 10, 2026
839c6a3
docs(manifest): document the manifest standard with a reference and t…
pinin4fjords Jun 10, 2026
25e4c62
fix(layout): eliminate KNOWN_DIVERGENT by snapshotting after Stage 6.…
pinin4fjords Jun 11, 2026
1d7f874
fix(labels): accurate label width + orientation-aware strike detectio…
pinin4fjords Jun 11, 2026
4a47383
fix(layout): clear fan-diagonal label strikes via grid-quantized runw…
pinin4fjords Jun 11, 2026
c72cce9
fix(routing): seat bypass-V climb clear of bypassed station label
pinin4fjords Jun 11, 2026
193cd96
test(gallery): add bypass_label_rake demonstrator
pinin4fjords Jun 11, 2026
dff3162
fix(routing): merge same-line side-by-side runs into one trunk
pinin4fjords Jun 11, 2026
36af908
feat(info): add --json + richer graph introspection
pinin4fjords Jun 11, 2026
ac07243
refactor: tighten introspection after fix for #563
pinin4fjords Jun 11, 2026
d48cc84
test: run the suite in parallel with pytest-xdist
pinin4fjords Jun 11, 2026
2e5f3d9
test: memoize layout in the invariant suite to cut redundant recompute
pinin4fjords Jun 11, 2026
f175fd3
refactor: decompose _compute_fork_join_gaps for #454
pinin4fjords Jun 11, 2026
c6d0706
refactor: decompose place_labels for #454
pinin4fjords Jun 11, 2026
447a666
refactor: decompose _recenter_loop_side_stations for #454
pinin4fjords Jun 11, 2026
912ae96
refactor: decompose _align_row_y_grids for #454
pinin4fjords Jun 11, 2026
cf26351
build: add C901 complexity ratchet at 43 for #454
pinin4fjords Jun 11, 2026
12eb94b
refactor: tighten decomposed helpers after fix for #454
pinin4fjords Jun 11, 2026
9330b52
fix(layout): fail fast on cyclic / self-loop graphs with a node-namin…
pinin4fjords Jun 12, 2026
e973803
refactor: tighten cycle rejection after fix for #645
pinin4fjords Jun 12, 2026
d66bed3
refactor(offsets): decompose 4 C901 offenders below 30 [skip ci]
pinin4fjords Jun 12, 2026
27df678
refactor(routing): decompose _normalize_gap_channels and detect_rever…
pinin4fjords Jun 12, 2026
5c0b060
refactor(engine): extract strike-clearance and rail-retrofit phases b…
pinin4fjords Jun 12, 2026
702f40b
refactor(postprocess): split _collect_centering_candidates below 30 […
pinin4fjords Jun 12, 2026
98b3fd7
refactor(layout): decompose Band 2 C901 offenders below 30 [skip ci]
pinin4fjords Jun 12, 2026
bdbd599
refactor(layout): decompose Band 3 offenders and lower C901 ceiling t…
pinin4fjords Jun 12, 2026
cf4116b
refactor: tighten extracted helpers after fix for #644
pinin4fjords Jun 12, 2026
b25f86e
Merge remote-tracking branch 'origin/main' into fix/645-cyclic-graph-…
pinin4fjords Jun 12, 2026
20ccc4d
Merge pull request #647 from pinin4fjords/fix/645-cyclic-graph-error
pinin4fjords Jun 12, 2026
1cbd9e1
feat(render): add %%metro caption directive for figure attribution
pinin4fjords Jun 12, 2026
00ed5f3
refactor: tighten watermark constants after fix for #574
pinin4fjords Jun 12, 2026
87486e8
example: add caption attribution to sarek_metro showcase [skip ci]
pinin4fjords Jun 12, 2026
7d1288b
fix(render): use distinct CAPTION_FONT_SIZE/FILL for readability
pinin4fjords Jun 12, 2026
8fdf107
feat(explain): add nf-metro explain command (#564)
pinin4fjords Jun 12, 2026
45efe64
feat(skills): add nf-metro-stress-render bug-hunting skill [skip ci]
pinin4fjords Jun 12, 2026
51a7e8c
docs(skills): teach fix-issue the stress-render handoff + diagnostic …
pinin4fjords Jun 12, 2026
0fb480d
fix(off-track): keep multi-line entry consumer on the section trunk
pinin4fjords Jun 12, 2026
1beeb0a
refactor: tighten off-track consumer test helpers after fix for #650
pinin4fjords Jun 12, 2026
76aaeba
fix(layout): stack off-track inputs per column, not per anchor group
pinin4fjords Jun 12, 2026
57e1c70
fix(routing): nest fan-out bypass via concentric corner + divergence …
pinin4fjords Jun 12, 2026
6ad21f1
feat(aspect): target output aspect ratio via fold-threshold search (#…
pinin4fjords Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
69 changes: 69 additions & 0 deletions .claude/skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# `.claude/skills`

Claude Code skills for working on and with nf-metro. Skills auto-trigger
from the descriptions in each `SKILL.md` frontmatter; for the conventions
each one assumes (local paths, env names, render-preview URL), see the
preamble at the top of the relevant `SKILL.md`.

## Cohort map

The six skills fall into three conceptual groups.

### Pipeline-side

For someone integrating nf-metro into their own Nextflow pipeline repo:

| Skill | When to use |
|---|---|
| [`pipeline-metro-diagram`](pipeline-metro-diagram/SKILL.md) | Author the `.mmd` content for a pipeline's metro map: lines, stations, sections, off-track inputs, the render-inspect-edit iteration loop. |
| [`pipeline-metro-setup`](pipeline-metro-setup/SKILL.md) | Wire the rendered map into the pipeline repo: file layout, render commands, README image swap, CHANGELOG, install-line pinning (released version vs named-branch on a fork). |

### nf-metro-side authoring

For someone changing nf-metro itself:

| Skill | When to use |
|---|---|
| [`fix-issue`](fix-issue/SKILL.md) | General end-to-end workflow for a GitHub issue: worktree, environment, implement, test, push, PR. The "skeleton" most other nf-metro authoring tasks build on. |
| [`nf-metro-layout-fix`](nf-metro-layout-fix/SKILL.md) | Drive code-level fixes to nf-metro layout when a real pipeline render exposes a bug. Savepoint pattern, invariant-test-first-then-fix-then-runtime-validator loop, conditional gating, the "improvement ratchet". |
| [`pr-chain-vet`](pr-chain-vet/SKILL.md) | Per-PR vetting on a stacked PR chain: gallery diff vs `main`, classify every changed example, `/simplify` pass, sweep narrative comments, get CI green, post-merge cleanup in the right order. |

### Visual verification

Opt-in only (`disable-model-invocation: true` — the user must invoke
explicitly):

| Skill | When to use |
|---|---|
| [`render-topologies`](render-topologies/SKILL.md) | Local pixel-diff of all gallery renders between the current branch and `origin/main`. Only needed for pre-push confidence; the CI render preview on the PR is the authoritative review. |

## How the skills relate

- `pipeline-metro-diagram`'s "is it mmd or nf-metro?" triage in Step 5
hands off to `nf-metro-layout-fix` when the diagnosis is engine-side.
- `nf-metro-layout-fix` Step 4 hands off to `pr-chain-vet` for the
per-PR vetting workflow that ships the resulting chain back to `main`.
- `pipeline-metro-setup` Stage 2 Case B (named-branch pin on a fork) is
the bridge developers use *while* `nf-metro-layout-fix` +
`pr-chain-vet` work is in flight.
- `fix-issue` Step 4 references `render-topologies` for the optional
pre-push local diff.

## Conventions

Most skills assume:

- Local nf-metro checkout at `~/projects/nf-metro`
- Upstream slug `pinin4fjords/nf-metro` (issues + PR targets)
- CI render preview at `pinin4fjords.github.io/nf-metro/_pr/<N>/`

If your setup differs, substitute in the commands; the conventions are
called out at the top of each `SKILL.md` so the substitution points are
visible.

## Step / Stage nomenclature

Most skills use `## Step N: ...` for numbered procedural sections.
`pipeline-metro-setup` uses `## Stage N: ...` instead — its four stages
are deliberately coarser-grained (a pipeline-integration journey, not a
debugging checklist) and the word choice signals that.
Loading
Loading