Generated from fhir-harness/skills/fhir-ig-base/ig-site-links.md — do not edit here.

✎ Edit this page’s source

ig-site-links

Skill id: ig-site-links · Package: fhir-ig-base · Instance: fhir-harness · Issue #2235

An IG’s pages are written for the IG Publisher’s output directory: a flat folder of the IG’s pages, every artefact page, its QA report, its download archives, and whatever its template copies. Our site renders the same pages inside just-the-docs and holds only some of that. Every link a page makes therefore resolves somewhere specific, or is said to resolve nowhere. Measured on 2026-10-05 before this existed: 408 dead links across the three smart-* IG sections of the main site, 395 on the WHO SMART Immunizations IG fork. After: one, which is the IG’s own.

a link togoes toby
an artefact page (StructureDefinition-X.html)artifact/… on our siterelinkArtifacts
…differing only in CASE (-hcert for -HCert)the one page it can mean; two candidates leave it alonerelinkArtifacts
a Publisher download (package.tgz, *.zip)the IG’s published site (sushi canonical)relinkPublisherOutputs
a Publisher-only page (qa.html, toc.html, …)the published siterelinkOffSite, PUBLISHER_PAGES
a FILE of the IG’s repository (.github/…, bpmn/x.bpmn from input/bpmn/)that file on GitHub, at the edit branchrelinkOffSite
openapi/index.html (Swagger’s deep links too)the OpenAPI graph’s own index, which forwards #/<tag>/<operationId> — on an IG repository’s own site too, where publish-served puts the graph at openapi/gen-openapi-pages, publish-served
a .html page nothing servesleft as written and reported — DEAD in the IG's own source in the stage logrelinkOffSite

The last row is deliberate. The WHO SMART Trust IG links video_tutorial.html, which is in no source anywhere: it is dead on WHO’s own site too. Pointing it at the published site would trade our visible dead link for WHO’s invisible one. Report it to the IG instead.

Liquid the Publisher accepts and Jekyll does not

The Publisher’s Liquid (Java) reads "<a href=\"x.html\">X</a>" with escaped quotes; Ruby Liquid has no escapes and ends the string at the first \". rubyLiquidStrings writes such an {% assign %} single-quoted with plain quotes — the same string in both engines — and leaves one holding an apostrophe as written, since it has no faithful Ruby form. Found as the WHO SMART Base IG’s smart.liquid page showing <a href=\ for every link variable.

gen-ig-pages refuses (exit 1) when a page it generates links, within its own directory, a page that run does not write. That is how 388 artefact pages came to link .schema.json.html views that were only written when the index is served: the link and the page were decided by two different conditions. The rule for any generator here: write a link and the page it points to under ONE condition, and check it.

Verify on the built site, not on the source

These are found by link-checking the BUILT pages, not by reading the generator: a full main-site build or the fork’s site, and a check over every relative link in the IG sections. The stage log’s DEAD line is the start, not the whole — it cannot see what a later step (the mount pass) serves.

An IG’s diagrams get the platform’s figure viewer

An IG page embeds a diagram in three ways: inline ({% include x.svg %}), as <object data="x.svg">, or as an <img>, often a .drawio.png. All three get the same pan, zoom, full-width and export viewer as the platform’s BPMN figures. Every IG page carries the data-fa-figure-images stamp (IG_FIGURE_IMAGES_STAMP in build-ig-site.ts, written by the standalone layout and by the composed pages’ top include), so a raster drawing that the column has shrunk also gets the viewer. Which embed is taken, the opt-in, and the keyboard controls are covered in graph-rendering rule 9 (bean n7f8). Do not give IG pages a viewer of their own.

The harness rail, the tiles, the navbar icon row and the folders around an IG page are the PLATFORM’s chrome, so none of the rows above covers them. On an IG repository’s own site they come from the platform’s _data/harness.json, which compose-docs --shell --instance <ig> scopes to that IG: its own paths resolve under its baseurl, the platform’s graphs link to the platform’s site, and no other instance’s state graph or count is shown. Owner, 2026-10-06, on the WHO SMART Trust IG (paraphrased): the beans and todos badges showed the platform’s counts rather than the IG repository’s own, and their links did not work. The rule, and why an undeclared graph shows no number rather than zero, is in harness-tiles §”On a folio’s own site, a tile describes the FOLIO” (issue #2263).


folio-assistant — code under the Apache License 2.0, documentation under CC BY 3.0. Generated schema and API references are rebuilt from source on every push to main.

deployed dev