Mess with nf-metro logo - #1245
Open
mashehu wants to merge 1537 commits into
Open
Conversation
…s, and line highlights
Terminal frames (frame="terminal") on all bash blocks in cli.md, contributing.md,
guide.mdx, and the dev/* and releases/* docs that had plain bash fences.
File name titles on parser.md grammar snippets (lark title=...), contributing.md's
xfail example (python title="tests/test_example.py"), and both Metro component import
blocks (mdx title="docs/mypage.mdx").
Diff ins markers on the hidden-stations block in guide.mdx to call out the _branch
renames, and on the dashed/dotted directive examples in releases/0.7.0.md.
Line highlights ({n}) on the off_track directive examples and the per-section
line_spread override in guide.mdx to draw attention to the key lines.
Closes seqeralabs#1130
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- nextflow.mdx: caution callout for complex-pipeline limitation - guide.mdx: Tips section → :::tip[Tips] callout - dev/testing.md: auto-discovery note → :::tip callout - embedding.md: reader shortcut → :::tip, attribution → :::note - live.md → live.mdx: fix MkDocs !!! tip syntax, add <Steps> to demo - how-its-built.md → how-its-built.mdx: <Steps> for three numbered workflows (topology case, CI render-diff, routing case pattern) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
guard_tiers.md: - Remove opening sentence referencing resolved internal PRs (seqeralabs#922/seqeralabs#923) - Fix Tier C description: update from 1 check to the current 2 (check_seam_segments_meet_at_port was added alongside check_seam_approach_equals_departure) - Remove stale rationale citing seqeralabs#1041 as pending; the rotation migration is complete and the seam checks are now correctness oracles, not blockers - Add check_seam_segments_meet_at_port to the CHECK_REGISTRY table - Remove issue-number reference from the Tier A promotion-intent column routing_gate_triage.md: - Rewrite step 3 to remove AI model names and replace with generic parallel-work guidance - Remove "Program structure" section: it tracked a completed campaign via now-closed issue numbers and adds no value for future readers - Remove issue numbers from Gotchas headers and inline examples - Replace concrete issue references in the "Finalising" example with generic placeholders [skip ci] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ive-code-features docs: apply Expressive Code terminal frames, file titles, diff/line markers
…work docs(dev): rework guard_tiers and routing_gate_triage for human readers
- Merge origin/main (PRs seqeralabs#1133 gallery content-collections, seqeralabs#1136 Expressive Code, seqeralabs#1137 dev-docs rework) — no content conflicts - Fix playground-e2e workflow: build_gallery.py now imports yaml (added in seqeralabs#1133) but the job only ran `pip install -e .`; switch to `pip install -e ".[docs]"` which includes pyyaml - Add node_modules/ + package-lock.json to root .gitignore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Installs and wires up @astrojs/sitemap so the build emits sitemap.xml, helping crawlers index individual gallery/pipeline pages once seqeralabs#1103 lands. - Adds lastUpdated: true to the Starlight config so each page shows a "Last updated" timestamp derived from git history of the source file. Closes seqeralabs#1132 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pre-existing format failure on main; fix it here so CI is clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-lastupdated feat(docs): add sitemap and lastUpdated to Astro/Starlight config
A --fold-threshold / %%metro fold_threshold (max_station_columns) below a map's natural width folds its sections into a tighter grid. Past a point the compacted geometry leaves the router no room to separate parallel bundles, size concentric corners, or seat a section header clear of a route, and the render chokepoint aborted with an internal CurveInvariantError / SectionHeaderClashError - an engine self-check leaking to the user as a traceback. Parsing now records the sections a user-set threshold relocated versus the unbounded layout (FoldThresholdError state on the graph). When the render chokepoint hits one of those aborts and the grid was compressed, it reframes the failure as FoldThresholdError - a ValueError the CLI surfaces cleanly, naming the directive and recommending a wider threshold. Aborts at a map's natural width are unaffected and still surface as the internal self-check. Fixes seqeralabs#1088 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…1088 Drop two inline comments that restated the adjacent assertions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Installs `starlight-links-validator@^0.25.1` as a dev dependency and
enables it in `astro.config.mjs` so every `npm run build` (including
CI) validates internal links at build time.
Excludes:
- `/nf-metro/gallery*` and `/nf-metro/pipelines*` - served by custom
Astro page routes (`website/src/pages/{gallery,pipelines}/`), not
Starlight content collection entries
- `../assets/live_demo.mp4` - a `website/public/` static asset; the
relative src is correct at HTML render time but is not a page link
Fixes found during first validator run:
- `docs/how-its-built.md`: 11 dev-doc links missing `/dev/` prefix
- `docs/manifest.md`: home-page anchor that doesn't exist, pointed to
the correct `/nf-metro/cli/#validating-the-rendered-geometry`
- `docs/dev/render.md`: `#bridges` slug wrong (should be
`#bridges-bridgespy`); `/nf-metro/docs/manifest/` had spurious `/docs/`
Fixes seqeralabs#1131
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
`svgDebugSources` only matched top-level `examples/*.mmd` files, but `docs/dev/routing.mdx` uses `<Metro src="examples/guide/03_fan_out.mmd">`, which requires a recursive glob. Widen to `examples/**/*.mmd`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…alidator feat(docs): add starlight-links-validator to catch broken internal links
The playground manifest generator imports build_gallery, which reads gallery.yaml via pyyaml. pyyaml ships in the docs extra, but the e2e job installed nf-metro without extras, so the manifest step aborted with ModuleNotFoundError: No module named 'yaml'. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s#1140) - Metro.astro: take origin/main scope string (examples/**) - website/package.json: keep sitemap + links-validator, drop redundant prettier devDeps - docs/how-its-built.mdx: fix /dev/ prefix in internal links (per links-validator)
ci: fix playground-e2e missing pyyaml dependency
…ht-components docs: adopt Starlight MDX components across dev docs
Adds `nf-metro render-many <manifest.json>` — a new CLI command that
renders multiple metro maps in one Python process, amortising interpreter
and import startup across the full corpus. The manifest is a JSON array
of {input, output, debug, from_nextflow, no_self_color_scheme, no_manifest}
objects; output directories are created as needed. Partial failures are
logged and reported but do not abort remaining jobs.
Wires a `buildStart` hook into the Vite plugin (`render-metro.mjs`) that
pre-warms `.metro-cache/` at the start of every production build by calling
`render-many` once with all corpus maps. Individual `?metro` load() calls
then hit the warm cache and return immediately, so cold deploy builds spawn
one Python process instead of ~210 (saving ~75 s on `docs.yml`).
The `cacheHash()` helper is extracted from `renderMetroFile()` so the
pre-warm and the per-file fallback share the same hash computation and
cannot drift apart.
Closes seqeralabs#1127
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…L [skip ci] render_svg() emits an <?xml …?> declaration; render-many was writing it verbatim to its output files. The Vite plugin pre-warm writes render-many output directly to .metro-cache/, then later reads it back with a bare readFileSync() and inlines it into HTML — an <?xml…?> prolog inside <body> is invalid HTML. Strip the prolog in render-many (matching what renderMetroFile does when writing individual renders to cache) and also in renderMetroFile's cache-read path so it is defensive against any prolog that may exist in a cache entry. Adds test_render_many_output_starts_with_svg to pin the invariant. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…skip ci] Exercises the render-metro.mjs module directly without a full Astro build: - findMmdFiles enumerates .mmd files in examples/ and tests/fixtures/ - buildStart pre-warms .metro-cache/ (248 entries on cold cache) - cache entries contain no XML prolog and start with <svg - renderMetroFile returns prolog-free SVG on cache hit - second buildStart is a no-op (warm cache unchanged) - prewarm and renderMetroFile agree on cache key (hash identity) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
render-many's manifest now accepts all options that nf-metro render does
(theme, mode, debug, logo, line_spread, legend, from_nextflow, title,
responsive, embed_font, text_to_paths, svg_class_prefix, no_self_color_scheme,
no_dark_mode_css, no_chrome_css, bare, validate, layout_options), making
it a first-class batch interface rather than a narrow vite-prewarm helper.
The Vite plugin's prewarm uses layout_options: {manifest: false} (the
general key-value path) instead of the removed no_manifest shorthand.
Tests cover the new option paths (layout_options, theme, html format,
svg_class_prefix) and a byte-identity check against nf-metro render. [skip ci]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…bs#1076) A symmetric fork-join diamond sharing a section with a wider fan straddled its trunk at full pitch, reading as tall as a 3-way fan with an empty trunk row between its two branches. Add Stage 6.17 (_apply_half_grid_symmetric_diamonds): per-diamond, place each clean 2-way fork-join diamond's branches at trunk +/- 0.5 * y_spacing, regardless of center_ports and even when the section also holds a wider fan (which keeps its full-pitch slots, so section height is unchanged). Runs after all trunk-settling so branches straddle the final trunk exactly; the inward-only move never breaks containment. A shared _iter_fork_join_diamonds primitive backs the new pass, the grid-snap invariant test, and the existing _guard_symmetric_diamond_branches_straddle_trunk (which loses its duplicate nx-based detection). A new _guard_symmetric_diamond_branches_half_pitch fails loudly if a diamond re-inflates to full pitch or straddles asymmetrically. Fixes seqeralabs#1076 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…o-data-uri fix(playground): support data-URI logos so a pasted map's logo isn't lost
_guard_no_route_through_section and _guard_no_line_crosses_non_consumer already detected a line routed through a section or station marker it doesn't connect to, but were classified Tier-B (validate-only), so the defect shipped silently on a plain render and even under --strict. Reclassifying them to Tier-A puts them on the always-on render chokepoint: warn by default, raise under --strict, matching the other visibly-broken-geometry guards. Fixes seqeralabs#1227
…eeze-through-guard fix: promote non-consumer breeze-through guards to Tier-A
A non-consumer line whose route to a packed-cell member is blocked by that member's cell-mate ran straight through the cell-mate's interior instead of bypassing around it. The bypass dispatch decision and the bypass's gap-channel placement both reasoned in grid-column terms, so a cell-mate sharing the target's own column was invisible to both: the dispatcher never routed the edge through the bypass family, and once forced through it, the rise/descent channel landed on the wrong side of the cell-mate, collapsing the below-row traverse to zero width. Fixes seqeralabs#1228
Resolve src the same way _build_inter_facts/_packed_cell_mate_obstructs do (prefer_upstream=False), so the section identity backing the needs_bypass decision and the gap-anchor lookup always agree for the same edge.
…fixes it test_packed_cell_breeze_through_warns_by_default and _raises_under_strict (from seqeralabs#1227's Tier-A guard promotion) used this exact packed-cell breeze-through as their repro vehicle; the fix above removes the breeze-through they were demonstrating, so the repro no longer reproduces a defect. test_breeze_through_guards_on_render_path already covers the Tier-A registration independent of any one scenario.
…ll-cellmate-bypass fix(routing): bypass around a packed cell-mate instead of through it
…ines page Add the nf-core/seqinspector logo to the single_row_rowspan_neighbor showcase fixture and list it on the nf-core pipelines page alongside the other real pipeline renders. Fixes a gap in build_gallery.py: the pipelines manifest/render-diff page assumed every pipeline .mmd lives directly in examples/, silently skipping entries (like this one) sourced from examples/showcase/.
…ry-nfcore-render feat(gallery): list seqinspector showcase render on the nf-core pipelines page
…wspan_neighbor The gallery/pipelines page id leaked the internal regression-fixture name into the public URL slug; rename it to match the pipeline it showcases.
…spector-pipeline-entry chore(gallery): rename seqinspector showcase entry from single_row_rowspan_neighbor
A non-consumer skip-line on a graph with no declared section was drawn straight through the markers of the stations it skips. A fully sectionless graph bypassed the section-inference pipeline (interchange detection, implicit section, resolve) that the same topology runs when wrapped in a subgraph, falling back to a flat single-row placement with no detour. Run interchange inference for sectionless graphs and, when a parallel-lane hub is found, give the loose stations an implicit section so the rail detour has a home. A clean linear/fan/merge graph infers nothing and keeps its flat layout byte-identical. Adds the examples/topologies/sectionless_skip_breeze.mmd regression fixture (gallery entry + guard-golden baseline) and a non-consumer-crossing invariant test. Fixes seqeralabs#1229 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… [skip ci] A non-consumer line routing to one member of a packed grid cell breezed straight through its cell-mate's interior when the bypassing line's source section sat in the column immediately adjacent to the packed cell. The needs_bypass dispatch gated the packed cell-mate check behind abs(tgt_col - src_col) > 1, so an adjacent-column hop never reached the geometric obstruction check and fell through to the straight-connector handler. OR the packed cell-mate check outside the column-distance gate: a same-row cell-mate can obstruct the straight path regardless of the column gap, since it never registers as an intervening column. The bypass then routes below the cell-mate's bottom edge as it already does for the gapped case (seqeralabs#1228). Fixes seqeralabs#1233 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…labs#1233 Pull the multi-column intervening-section predicate out of needs_bypass into a named helper so the two bypass triggers read as symmetric, named peers and the three-level-deep boolean flattens. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…packed-cell-bypass fix(routing): bypass packed cell-mate when source section is directly adjacent
…ss-skip-breeze fix: detour sectionless skip-lines around non-consumer markers (seqeralabs#1229)
Contributor
|
Render preview: no visual changes detected. All renders match |
Contributor
mashehu
force-pushed
the
mess-with-the-logo
branch
from
July 1, 2026 09:04
d810d5b to
4ffbe09
Compare
mashehu
force-pushed
the
mess-with-the-logo
branch
from
July 1, 2026 09:06
4ffbe09 to
7ef3845
Compare
Author
|
no idea how svgs can be blurry, but I re-exported them now |
Contributor
Better now although the px are reported to be the same 🤷 |
pinin4fjords
force-pushed
the
main
branch
2 times, most recently
from
July 28, 2026 11:30
a90d751 to
d134b08
Compare
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.

Feel free to ignore this PR if it is too nit-picky