Glossary: Tools
Candidate terms extracted from every Tool node: title as the label, description as the definition, the Tool id as the code. Each is the asset’s own text, verbatim and not curated, and carries the badge “candidate, extracted”. A person promotes one by authoring it. Authored terms are on their owning instance’s page, and those pages, the counts and the sources are linked from the glossary index.
From: cat-harness 175 (SKOS) · cat-harness-tools 1 (SKOS) · fhir-harness 33 (SKOS) · folio-assistant-core 12 (SKOS) · folio-assistant-sci 8 (SKOS) · smart-base 12 (SKOS) · who-iris 1 (SKOS).
Size: this page holds 242 terms and is 197 KB before compression, fetched in one request, within its budget of 1.0 MB. There is no search index: the filter below runs over this page, and the A–Z bar jumps within it.
| target | mapped | unmapped | undetermined | why undetermined |
|---|---|---|---|---|
fhir | 0 | 242 | 0 | — |
skos | 0 | 242 | 0 | — |
Undetermined is never “no match”. A vocabulary that could not be reached has said nothing, and the column above keeps that apart from a checked miss. The counts are reported and not graded: an unmapped candidate may be a term this corpus is right to coin.
Per term. Every term on this page is unmapped on fhir, and unmapped on skos, unless its entry says otherwise. No entry says otherwise.
242 shown
A
- A package's exports are its declared, shipped code directories candidate, extracted
Derive a package's
package.jsonexportsfrom the instance declaration beside it: a directory declared with graph typologycode(top level or from within) AND named infilesis exported as./<dir>/*.js → ./<dir>/*.tsand./<dir>/* → ./<dir>/*; a declared code directory that is not shipped (test/) stays private. Keys without*are named entry points, kept as written and checked to point into an exported directory. Without--writeit reports each difference; with it, it rewritesexports. Exit 0 in agreement, 1 drift, 2 cannot tell (no declaration, nopackage.json, or no shipped code directory).- A paper's block graph as UML candidate, extracted
Draw a paper's block graph from buildContentGraph: chapters as packages, editorial edges (uses / interprets) solid and formal Lean edges (type / value) dashed purple, never one derived from the other, and each block filled by its formalization status from proof-objects.json when given. One diagram for the paper and one per chapter, each in portrait and landscape, stamped with its source's hash. Run from a folio: the platform carries no paper.
- Agent memory assembler candidate, extracted
Assemble every declared
memorydirectory's nodes into each agent's memory, per vendor: Claude Code's.claude/agent-memory/<agent>/MEMORY.md(a marked region, injected when the subagent starts) and Antigravity's workspace skill.agents/skills/<agent>-memory/SKILL.md. Other vendors (Gemini CLI, Copilot, Codex, Cursor) are beaned under31niand not generated.- Apply a vocabulary mapping table candidate, extracted
Carry one source record into a target vocabulary by a declared
folio-vocab-mapping/v1table: each source field becomes the predicate its row names, in the table's order, with a DERIVED target (such asdcterms:titlerenderingskos:prefLabel) copied from its authoritative one so the two cannot drift. A table is shaped like a FHIR ConceptMap: an existing ConceptMap, R4 or R5, is representable as one without loss (fromConceptMap), and a table can be produced as a ConceptMap (toConceptMap), which returns every loss rather than dropping anything silently. First consumer:glossary-export.- Audit README links candidate, extracted
Verify every Markdown link in a folio's README still resolves — relative paths against the tree, repo refs against a real ls-tree, Pages URLs against the publish ref. Writes nothing.
- Authored L1 → verbatim against transcriptions and image narratives candidate, extracted
Check authored L1 (
*.l1.yaml, the measles pattern) for a source with no usable text layer: each statement must be verbatim in the image narrative (images.json) or thetranscriptionblock it names, every transcription word (digits aside) must be corroborated by the entry's text layer unless listed underinspectionOnly, and keys must be unique.- Avatar stylesheet candidate, extracted
Render the declared avatar nodes — an actor's glyph and colours, including the overlay states — into the stylesheet the site serves.
B
- beans CLI candidate, extracted
Read and write the work plan with the
beansbinary. The normal mechanism when it is installed.- beans, by hand candidate, extracted
Read and write the same work plan without the CLI —
scripts/beans-fallback.ts, or editing a bean's front matter directly. Equal standing to the CLI, not a degraded mode.- Bibliography page candidate, extracted
Render every reference in the checkout (each declared
referencesdirectory's folio-reference/v1 nodes and eachcataloguedirectory's Dublin Core records) as the bibliography page and one page per sub-graph, each with its BibTeX, CSL-JSON, RIS and Dublin Core JSON-LD exports and a per-reference export, at the route of the visualiser core declares for it.- Block edit and feedback links candidate, extracted
Each labelled block's links back to where it can be changed: [edit] opens the block's Markdown source in GitHub's editor on
main, and [feedback] opens a new GitHub issue about the block, from the folio's.github/ISSUE_TEMPLATE/block-feedback.ymlwhen it has one (prefilling only the fields it declares: block, section, source, page, url) or as a plain issue whose body carries the same facts. The document build draws these on every block; this Tool prints them as JSON for one block or all. Governed by theblock-actionsskill (beanuphx, REQ-17).- BPMN → FHIR Shorthand candidate, extracted
Derive FSH from a DAK's BPMN business processes — the render direction, of which the extractors are the inverse.
- BPMN checklist projection candidate, extracted
Generate, per diagram, a checklist that walks the BPMN as a state machine: each task names the
workflow_completecall that records it and ends withnext:by node id; each decision lists its labelled branches (or the DMN that computes it); parallel forks name every branch and joins wait for all; start/end events are entry and exit lines. A rendering, never an authority: it says it is generated, and--checkfails when one is stale.- BPMN diagram rendering candidate, extracted
Render each process diagram to SVG for the documentation site. The .bpmn file is the source of truth; the picture is generated from it, so a diagram and its image cannot disagree.
- BPMN workflow engine candidate, extracted
Run a declared BPMN process as an instance:
workflow_startopens one for a subject,workflow_nextreports what is enabled,workflow_completerecords a step or answers a decision (a DMN-computed one fromfacts) and REFUSES a step that is not enabled. State is committed under the work plan, so which edge was taken is a record, not a memory.- Build a Lean package's HTML docs (doc-gen4) candidate, extracted
Build the doc-gen4 HTML render of a folio's Lake package — the visualiser of a declared
leandirectory — withlake -R -Kenv=dev build <Lib>:docs, cache-aware: refuses while another lake/lean process holds.lake/, refuses on a restored tree that carries no traces (a Lake build there EVICTS the cache), checks or restores the warm cache first, and enables a sentinel-commented doc-gen4[[require]]for this build only, restoring the lakefile on exit. Never runslake update. Output:<lake-root>/.lake/build/doc.- Build an IG and write its AST candidate, extracted
Run one ordinary IG Publisher build through
AstPublisher(a subclass that overrides nothing) and write the AST besideoutput/: one JSON file per resource keyedcanonical|version,dependencies.json(upstream's DependencyAnalyser plus the Library/PlanDefinition/ActivityDefinition/Measure edges it leaves empty), SUSHI'sfsh-index.json, and a manifest that declares itself a cache and records the inputs it is valid for.- Build an IG repository's own site from its cached AST, with no instance declaration candidate, extracted
The three checkout scripts the platform's site build runs for a repository that holds an IG and only mounts layers (
index.config.json):ig-site:astrestores the AST from the IG's cache branch (ig-cache.sh restore) and judges it, refusing a stale, cannot-tell or absent one (a stale one is accepted for a preview withSITE_ACCEPT_STALE_AST=1);ig-site:composederives the artefact index from the AST (binding any IG API sidecars a layer above left in$SITE_WORK/ig-api/), writes the thin artefact pages, stages the IG'sinput/andsushi-config.yaml(menu read at build time, palette from the webpage theme of the top layer the repository mounts, edit links from its origin) and composes it at the ROOT of the host site source;ig-site:publisher-pagesserves the AST's resources (ast-data/and<Type>-<id>.json), the artefact index and the sidecars, refuses a page wearing the IG Publisher's chrome, repairs repeated element ids and stampsfolio-build.json. Never runs the Publisher and never reads its output. Compose lists the pages it puts in the site inFOLIO_SITE_UPSTREAM_PAGES, so the site build reports the IG's own dead links rather than refusing the publish over them.- Build and publish an IG repository's own site with its folio-site.yml workflow candidate, extracted
Dispatch the IG repository's
folio-site.yml(copied from the IG layer'sig-repo-sitetemplate): on a runner it composes the harness chrome for THIS instance (compose-docs --shell --instance,gen-navbar-include), composes the IG at the root of that Jekyll shell (stage-ig-sites --compose-at-root), builds it with Jekyll so every IG page wears the theme's side bar, search box and icon row, publishes the instance's served directories, rails any page Jekyll did not lay out (rail-standalone-pages --foreign-site --instance), stamps the platform that built it (folio-build.json), and on the default branch deploys the whole site to thegh-pagesroot. It reports platform drift against sibling sites and re-dispatches the IGs this one depends on when a token allows.- Build the docs site locally candidate, extracted
Build the published site on this machine, so a page can be looked at rather than described: the same Jekyll build
pages-publishruns in CI, into a directory of your choosing, and never pushed. The local half of the two site builds (owner, 2026-10-05: local and GitHub builds are two Tools for one skill).- Build the Latent Semantic Indexing index of a prose graph candidate, extracted
Build the per-graph LSI index sidecar for every declared prose graph (or the one named): input fingerprint, parameters, dimension summaries, nearest neighbours and near-duplicate findings, never the vectors. Records each run's outcome and input fingerprint, success or failure, as a
folio-tool-run/v1record.- Build, check and (on request) publish an instance's own site, or a STAGING/<branch> preview candidate, extracted
From a checkout whose layers arrive by remote mount: mount the pinned closure, install, run the instance's own gates (
--pre), compose the harness chrome for THIS instance, run its source steps, build with Jekyll at the base path read from the git remote (/<repo>, or/<repo>/STAGING/<branch>for a preview), run the post-build steps (mount-instance-docs, pdf-viewer, set-html-lang, publish-id-lookup, rail-standalone-pages), and check that every relative or base-rooted link in every page resolves to a file under the site, reading each page with an HTML parser. Any failing step stops the run; a link that does not resolve means nothing is published. It never decides to publish: only--publishdoes, and then a root publish keepsSTAGING/and_render-log/on the branch, and a preview replaces only its ownSTAGING/<branch>/.
C
- Check a Questionnaire field for field against the wireframe it was derived from candidate, extracted
Compare the
data-elementfields of a mid-fidelity wireframe (perdata-layout, in document order) with the answerable items of a BUILT Questionnaire (depth first, named bydefinitionorcode). Reports a field with no item, an item with no field, an item naming no data element, a data element twice in one layout, and the first place the order differs. Fidelity, not design. Moved down from the WHO layer on the owner's ruling of 2026-10-14: nothing in it is WHO's.- Check an IG's built Questionnaires with CSIRO's SDC libraries candidate, extracted
Build-time Structured Data Capture checks, one result per Questionnaire (
sdcChecks[]offhir-questionnaire-wireframe):assemble(@aehrc/sdc-assemble2.0.3: an assemble-root's sub-forms resolve in this IG, and--outwrites the assembled Questionnaire),template-extract(@aehrc/sdc-template-extract1.0.16: extraction from the IG's fixture response yields the expected resources),populate(@aehrc/sdc-populate4.7.2: FHIRPath pre-population from a fixture context gives the expected answers) andbehaviour(@aehrc/questionnaire-test-toolkit0.1.0: the IG's own behavioural test, warn-only). Owner, 2026-10-14: checks, not UI.- Check an instance's ArchiMate models against its config candidate, extracted
The gate for the
archimategraph typology: every modelcat-archimate.config.jsonnames is held, parses (Archi's native XML or its zipped archive), and resolves — every box in every view draws an element the model holds, every relationship's ends are in the model — and no.archimatefile is held that the config does not name.- Check declared credential needs against workflow use and expiry, by name candidate, extracted
Compare each repository's declared credential needs (
credentials/needs.json, profile and registry) with thesecrets.NAMEexpressions its workflows reference (GitHub Actions' dollar-and-double-brace form, said in words because this text is rendered on a Jekyll page), with the secret names GitHub lists when a token allows it, and with any recorded expiry. NAMES ONLY — no value is ever read. Findings per §6.2: used-not-declared, declared-not-used, declared-not-present, present-not-declared (reported, never deleted), naming advisories, and expiry (≤30 days minor, ≤7 major, expired critical). Exits 2 when anything could not be determined, which outranks clean; else 1 on a major or critical finding; else 0.- Comment on a merge request (GitLab) candidate, extracted
Add a comment to one merge request. The comment is read from stdin, never from the command line.
- Comment on a pull request (GitHub) candidate, extracted
Add a comment to one pull request. The comment is read from stdin, never from the command line.
- Compile LaTeX in a container candidate, extracted
Compile a rendered paper's
main.texwith latexmk inside a TeX Live (full) image, for a host with Docker but no TeX engine. The image carries TeX Live, latexmk, Pandoc, latexdiff, graphviz and poppler-utils; it does not run the content pipeline, which renders the chapters on the host first.- Complete a step candidate, extracted
Record an enabled step as done — or supply the facts a decision gateway is computed from — and advance the instance. Refuses a step that is not enabled.
- Compose the site's documentation tree from its declared docs layers candidate, extracted
Write the Jekyll source the docs site is built from: the base docs layer, the repository overlay on top (an overlay's
_config.ymlmerged, every override reported), and eachcomposedinstance under its own name.--stagingkeeps staging-only visualisations;--changed-filesstubs instances a branch does not reach.--shellwrites the CHROME only — the layers' Jekyll machinery and assets, no page, no instance, and the host's generated includes empty — which an IG repository composes its IG into so its own site wears the main site's chrome (#2235).- Content graph candidate, extracted
Build the content graph under a path and report its edges, separated into the EDITORIAL relation an author maintains and the FORMAL one derived from Lean. Reading the two as one number is how the editorial signal gets overwritten.
- Content graph counts candidate, extracted
Node and edge counts for the content graph by provenance and kind, and whether each root exists. Tells 'nothing matched' from 'that population has not been built'.
- Content JSON-LD context candidate, extracted
Emit the published JSON-LD
@contextthat both populations share — authored block siblings and ingestedlibrary/**nodes reference it by URL — generated from its TypeScript definition rather than hand-kept.- Content manifest validation candidate, extracted
Validate the block manifests under a path against their schemas. Exits 2 where no folio is present rather than reporting a clean run — the platform carries no content, and a validator that passes over nothing is how this one validated nothing for a while.
- Convert a checkout to a root index.config.json candidate, extracted
Write the root
index.config.json(folio-index-config/v1) that says which instances the checkout instantiates, where each comes from (source.localorsource.remote) and which owns/(site.landing), from the root*.config.jsonfiles and the declaration'sremoteMounts. With--writeit movesremoteMountsoff the declaration intosource.remoteentries, writes the generated.gitignoreblock, and renames a legacy<name>.mount-lock.jsontoindex.lock.json. Without a flag it prints the index it would write. Idempotent: a re-run merges what the declaration gained, and refuses an entry the index already holds differently. A root config naming no instance is reported asunmatched-configand not imported, because what to do with it is a person's decision.- CSV tabular metadata candidate, extracted
Read a delimited text file into a
folio-tabular-csvw/v1record: one table, its columns and their CSVW datatypes, each measured or explicitly undetermined. Routing is by content, never by extension: the first rows must agree on one field count of two or more, under exactly one of,;TAB|. A CSV'sfac:anchorsheet and cell are a determined null. Governed by thetabular-metadataskill (beaneief).
D
- DAK API hub candidate, extracted
Generate
dak-api.htmland the per-artefact.openapi.json/.displays.jsonsidecars — the hub a reader enters the DAK API through.- DAK spreadsheets → DMN, PlanDefinitions, CQL, requirements, logical models candidate, extracted
Run WHO's
extract_dak.pyin a DAK or IG repository: it reads the DAK template spreadsheets (input/decision-logic/*.xlsxviadt_extractor,input/system-requirements/*.xlsxviareq_extractor,input/dictionary/*.xlsxviadd_extractor) and the BPMN, and writes the DMN decision tables, the CPG recommendation PlanDefinitions with their citations, CQL library skeletons, Requirements and logical-model FSH. The authoring path the WHO IG Starter Kit (l3_decisiontables,l3_cql) prescribes: an adapted decision or scheduling table is an edited copy of the upstream DAK's spreadsheet, never a parallel format.- Dependency probe candidate, extracted
Report which of the harness's optional and required dependencies are present on this machine, and what each unmet one blocks.
- Directory READMEs from the Knowledge Graph candidate, extracted
Write a README for every directory an instance declares, from the declaration and the files themselves: the declared title and description, the Graph Typologies, and one row per file described from the file, with 'used by' only where a diagram records it. Renders the Liquid templates in
tools/templates/readme/, part of the tools graph, which may include one another with Jekyll-style include tags. Writes only between<!-- kg:subgraph:begin -->and:end; a README without the markers is left alone and reported. Records every missing title, missing or over-long description, absent directory and unmarked README intest/results/subgraph-readmes.qa-results.json.- discussion candidate, extracted
Put a question to a person or a sibling agent and receive an answer, to determine which harness this repository should become and which repositories are read from and written to. The two facts no file holds.
- DMN → FHIR Questionnaire candidate, extracted
Generate FHIR
Questionnaireresources from a DAK's DMN decision tables. Authoring, not rendering: its output is validated and indexed by the IG Publisher like any other resource.- DMN → HTML candidate, extracted
Render each DMN decision table to HTML for inclusion in a page, via
dmn2html.xsltanddmn.css. The only human-readable rendering of a decision table an IG has.- Do the Tool nodes agree with their skills? candidate, extracted
Check every Tool node's joins: that each
satisfiesresolves to a real skill and agrees with that skill's declared contract, that every io port names a declared type, and that no argv input has a type able to express a shell payload.- Document kinds viewer candidate, extracted
Render each declared document-kinds directory: every kind's structure, sections and sources, one page per subject instance.
- Dublin Core renderings candidate, extracted
Render every
folio-dublin-core/v1record a catalogue item names as Dublin Core XML (qualified DC, per DCMI's XML guidelines) and as JSON-LD bound to DCMI Metadata Terms. Both are written into the instance's published root (<instanceRoot>/dublin-core/<stem>.dc.xmland.dc.jsonld), so the site mount publishes them beside the item pages. Deterministic.--checkfails on a missing, stale or orphaned rendering. Governed by thedublin-core-renderingsskill (bean7eak).
E
- Editorial content-graph analysis candidate, extracted
Build the block- and section-level editorial dependency graph of one paper from its
.tsmanifests and report forward references, cross-chapter coupling, sparse or dense sections and isolated blocks, ranked. Readsuses[]/interpretsonly — the editorial relation, never the formal one.- Embed a PDF inline in a page candidate, extracted
Print the HTML fragment that shows a PDF in the installed viewer: a lazily loaded frame whose address is derived from the page's own location (so one page works at the site root, under a project base and under a staging preview), plus plain open and download links that work without it.
- Every path a declaration names resolves — directories, assets, visualisers, needs candidate, extracted
Read every instance declaration in the checkout and resolve what it names:
directories(and those declared from within) throughcheck:declared-dirs,assetsthroughcheck:declared-assets,visualisers[].renderedBythroughcheck:visualiser-routes,needsthrough the instance-graph resolver, andvisualisers[].coversKindsagainst the graph typologies registered IN THIS CHECKOUT — its own and those a mounted layer contributes, read from the checkout under inspection rather than from where the harness module sits (lesson 6). A declaration that does not parse is a finding. One verdict per instance and field, naming the gate that decided it. Exit 0 every reference resolves, 1 one does not, 2 could not determine; a certain finding is reported before anything undetermined.- Export an IG AST as JSON-LD candidate, extracted
Write an AST as linked data against
fhir-harness/schemas/ig-ast.context.jsonld: each resource a node identified by its canonical URL (urn:fhir:<Type>/<id>when it has none) and typed by its FHIR resource type, each dependency edge a link to its target, and the manifest'sauthority: cacheandprovisionallist carried on the graph. The AST is validated against the Zod declaration the JSON Schemas are generated from before it is exported (beanl0lq).- External schemas viewer candidate, extracted
Render the declared external schemas, and which of this instance's modules conform to each, as one page.
- Extract translatable strings candidate, extracted
Segment a folio's prose into a GNU gettext .pot template, leaving code, math and identifiers untranslated.
F
- Fetch a skill candidate, extracted
Load one skill's instruction body for the agent to follow, from the local packages or an external bundle.
- FHIR AST cache candidate, extracted
Restore, verify, seed and diagnose the prebuilt AST artefacts for an IG. Always try
restorefirst: a full AST build via AstExportCli is expensive, a restore is fast.- Folio block QA summary candidate, extracted
Summarise a folio's committed per-block QA verdicts into one
block-qa.jsona staging preview publishes: each block is failing (a FRESH verdict failed, with the worst severity), stale (a verdict predates the block's current files), passing, or unaudited. Freshness is the QA sweep's own rule, including the uses-graph hash for graph-scoped criteria. Runs no checker and writes no verdict.- Folio block screenshots candidate, extracted
Picture each changed figure, diagram, table, equation or simulator block on the published main site and on a staging build, and compare the two pictures pixel by pixel in Chromium's canvas. Writes
visual-diff.json(folio-visual-diff/v1: per block, the share of pixels changed beyond anti-aliasing, and the before, after and diff pictures) andvisual/*.png, which the review page's visual renderer shows. A side that cannot be pictured (page or anchor missing) is recorded as missing, never drawn blank. Adds no dependency: Playwright is already the platform's browser driver.- Folio ChangeSet candidate, extracted
What changed in a folio between two git refs, block by block: each block added, removed, or changed — and for a changed block, every aspect that applies (renamed, prose, manifest, moved). Keyed on the block label, which the
id-unique/id-stableQA criteria guard, not on file paths.- folio MCP server, as a container candidate, extracted
Build and run the folio MCP server as one image carrying Bun, TeX Live, Lean, lean-lsp-mcp and the generated Python set — the image
deploy/serves behind the auth gateway. Run it withdocker run -i --rm paper-assistant --stdio, or--httpon port 8080.- Folio review comments candidate, extracted
Ingest a pull request's tagged conversation comments (
block: <label>on the first line) intoreview-comment/1.0.0todos, and write them asreview-comments.json. Idempotent over its previous output, whose statuses it keeps. Re-anchors every comment against the head's blocks, followingrenamedFrom, and orphans a comment whose block is gone rather than dropping it.- Folio review coverage candidate, extracted
Compute the two facts
content-change-review.bpmn's coverage gate (GW_Covered) reads:uncoveredBlocks, the changed blocks with no reviewer verdict on their CURRENT hash, andopenDefects. Reads a preview'schangeset.json,blocks.jsonandreview-comments.json. With--commit, writes the ingestedfolio-review-verdict/v1verdicts into the todos graph's declaredreview-verdictsdirectory and commits them to the edit-set's FEATURE branch; refused on the base branch and a detached HEAD. Prints the facts as JSON on stdout.- Folio viewer candidate, extracted
Render each declared folio directory as a browsable page over its published index.
- Formal edges from the Lean build candidate, extracted
Extract ELABORATED formal dependencies between a folio's lean.ref declarations (LeanArchitect's rule over the folio's own lean.ref set). Needs a Lean toolchain and a built Lake project. Tagged declarations missing from the build are reported, never recorded as dependency-free; with ingest the result is recorded in the formal cache as source "elaborated".
- FSH dependency cone candidate, extracted
Compute the dependency cone over an IG's FSH graph, and the blast radius of a set of changed files. What makes an incremental IG build possible: without it, any edit rebuilds everything.
G
- Gates on the merged tree candidate, extracted
Build this branch merged with the current base in a throwaway worktree and run the full
bun run cat gatesthere — the state a merge will actually produce, which neither the branch's CI nor the base's CI evaluates. Exit 0 passes, 1 conflicts or fails, 2 could not determine (never read as clean). The working copy is never touched.- Generate an IG instance's reader-facing pages from its artefact index candidate, extracted
Write
<instance>/docs/— an index page, one page per artefact, a page per over-large category and per menu group — fromfhir-artifact-index/index.json(andmenu.jsonwhen ingested), styled by the template chrome an owning instance ingested. Moved down to this layer because nothing in it was one IG's own (#1767); with--summaryit writes an instance's landing page, opening with that instance's harness section. For an instance whose docs declareigSite(beanmftp) it writes no index, menu or category pages — the IG site's own replace them — and only a front-matterartifacts.mdnaming the Tool that drew it. Where an instance declares a visualiserrenderedBy: ig-pages, it also writes that visualiser's route page,<base>/<instance>/<id>/, which opens the artefact index; with--site <dir>it writes only those route pages, under that site. For an IG whose SOURCE is at hand,build-ig-siterenders the IG's own pages instead; this is for an IG known only by what it published.- Generated index pages candidate, extracted
Render index pages for the declared skills, docs and swimlane-glossary directories, one per directory.
- GitHub Pages (gh-pages) candidate, extracted
Push a rendered Knowledge Graph to GitHub Pages at a publication root URL — a staging preview (
STAGING/<slug>/) or the release root, the same steps either way — and report the push: a status (pushed, not pushed, could not determine) and one message carrying the commit merged ontogh-pagesand the QA result. Its steps are bootstrap-tools'render-kg-to-github-pagesprocess, which first provisions the target: an orphangh-pagesbranch, then Pages switched on to serve it.- GitHub Pages publish candidate, extracted
Push a built directory to the
gh-pagesbranch, where it is served. How the knowledge graph and its schema reach a URL.- Give every ArchiMate view, element and relationship a page and an IRI, and draw every view candidate, extracted
Write a JSON-LD node and a thin page for each model an instance's
cat-archimate.config.jsonnames and for every view, element and relationship in it — keyed by Archi's own ids — plus the normalised model the pages' one loader draws from, and every view drawn as SVG from the model's own bounds and bendpoints in ArchiMate's notation, each box a link to its element.--outwrites into a site being built — the data at the graph's path, the pages at the route of the visualiser the instance declares for this Tool,<locale>/<harness>/<id>/; without it the files go into the graph and--checkgates them.- Give every page Jekyll did not lay out the folio-assistant navbar candidate, extracted
A LAST pass over the finished site: inject the shared navbar (
lib/navbar.ts, the same component the site sidebar draws) into every page that carries none — standalone viewers, generated instance pages, and each IG site built bystage-ig-sites. A page under anigSiteinstance's route is railed as THAT instance's page (its name, mark and graphs); a page may declare its own section (data-fa-visualiser-nav) and its label (fa-visualiser-label). Mount routes are left to the mount pass, and a page that declines (folio-navbar: none) is left bare.- Glossary build candidate, extracted
Build a paper's glossary index from its manifests and render the LaTeX.
--checkreports drift instead of writing, comparing everything except thegeneratedtimestamp so a re-run is not mistaken for a change.- Glossary page candidate, extracted
Render every declared glossary — authored SKOS schemes, the swimlane ledger and the terms extracted from knowledge-graph assets — as the glossary page and one page per asset type, at the route of the visualiser core declares for it.
H
- Harness object model as PlantUML candidate, extracted
Draw the harness object model (Actor, Role, Skill, Process, Task, Todo, Bean, tests, schemas) with every attribute read from the schema behind it. Each relationship names the field that carries it, and the generator refuses to write if that field is gone.
- Headless render QC (Playwright) candidate, extracted
Drive a folio's built viewer in headless Chromium and report the blocks whose diagrams, SVGs, LaTeX math or markdown do not render — with
--screenshotto save the pictures. This is the mechanised half of looking at it: a green gate set is not a rendering.
I
- IG metadata → Liquid variables candidate, extracted
Scan the Publisher's
output/for{ResourceType}-{id}.jsonand emit a Liquid include assigningsmart__<ResourceType>__<id>__<category>__<key>for each published resource.Read
menu:(and the page tree) out of an IG source repository'ssushi-config.yamlintofhir-artifact-index/menu.json, recording the repository and commit it was read at — the declared sourcestage-ig-sitesclones.--checkre-derives it against a checkout; with no--sourceit reports COULD NOT DETERMINE and exits 2, never 0.- Ingest, standard library only candidate, extracted
Ingest an upload into
library/using only the Python standard library — archive listings, CSV and spreadsheet records, technical file metadata, and the content sniff that routes a file to its rung.- Ingest, with PDF and image extensions candidate, extracted
Ingest a PDF into
library/— embedded outline, page text, OCR for scans, and image extraction — using PyMuPDF, tesseract and pypdf with Pillow.- Inject translations candidate, extracted
Produce a translated copy of a source markdown file from a .po, using the same segmentation the extractor used.
- Install TeX Live in a sandbox candidate, extracted
Install TeX Live (full) and latexmk where no TeX engine is present, disabling the firewalled launchpad PPAs that otherwise abort
apt-get update. Idempotent: does nothing when pdflatex and memoize.sty are already present. About 5 GB and 10-20 minutes, so run it in the background. pdflatex unpacks early but is not usable until the post-install format build ends (kpsewhich memoize.styreturning a path is the ready signal).- Install the inline PDF viewer into a built site candidate, extracted
Download the pinned pdf.js release (legacy build), verify its SHA-256, copy the parts a site needs into
<site>/assets/vendor/pdfjs/, and add the shim that opens?src=only for the allowlisted URL prefixes or the site's own origin. Nothing is committed: the viewer exists only in the built site.- Instance declaration schema candidate, extracted
The zod definition of
<name>.json— what an instance may declare about itself — and the published JSON Schema generated from it.- IRIS replica and catalogue pages candidate, extracted
Render who-iris's replica of the IRIS site, its docs pages, and the catalogue visualiser who-iris declares — what the catalogue knows and what it records that it does not know — at that visualiser's declared route.
- Is CI passing on the default branch? candidate, extracted
Report each workflow's state on the default branch, which a checkout cannot see: a red workflow looks exactly like a green one from in here. One API call over the recent run history, not one request per workflow — fanning out would exhaust the unauthenticated 60/hr limit and make it unusable at session start.
- Is this IG AST still valid for the IG's current inputs? candidate, extracted
Run folio-assistant-core's
compiledValidityon an AST manifest'sinputs: recompute the input digest (the same algorithm as the Java writer, pinned by a shared golden vector) and the source revision, and answer valid, stale-inputs (naming which input), or cannot-tell.- Is this repository's cutover from the monorepo complete? Measured, condition by condition candidate, extracted
Run in a separated repository. Six conditions, each decided by an existing gate:
mounts(every declared layer on disk at its pin —remote-mount --check),declarations(every path a declaration names resolves —declaration-resolution),monorepo-paths(no wiring still names the monorepo:livesAton it, a submodule of it, a reusable workflow called from it, a path into its old checkout — the one condition implemented here),import-directionandreference-direction(no layer reaches a layer above it), andsite(the site builds from the mounts alone, every link resolving —build-instance-site --no-mount, only with--site). Findings inside a MOUNTED layer are listed and not counted: a defect in a layer pinned from upstream is fixed upstream and re-pinned. Exit 0 complete, 1 a condition failed, 2 a condition could not be determined or was not run — without--sitethe answer is never 0.
J
- JSON-LD content-key check candidate, extracted
Check every committed JSON-LD document that names the content context, or an instance's own generated context: every plain key is a declared term (never descending into an
@jsonvalue), and no file path sits under an@id-coerced term. An empty corpus is a finding, never a clean run. Prefixes are checked byjsonld:contexts --check.- Judge a tree and record the verdict by digest candidate, extracted
Run the layer PR-check gates and tests on a composed tree (head) and on its base, or reuse a stored verdict whose digest is the base tree's, compare them with the layer-pr-checks compare scripts, and write a verdict record: {treeDigest, runner {kind agent|github-actions|local, id}, startedAt, finishedAt, gates [{name, exit, seconds, skipped?}], tests {total, failed, new}, verdict green|red|unknown}. With a token it publishes the verdict as the commit status
judge-tree;checkanswers whether any runner judged a digest green;samplere-runs a seeded few gates of a record.
K
- Knowledge graph viewer candidate, extracted
Render the instance's published knowledge graph as one page: facets by kind and sub-graph, search, a node's properties, its edges and back-links, and the graph's own gaps — reading the JSON-LD document at the site root rather than carrying a copy.
- Knowledge-graph audit candidate, extracted
Audit every join in the actor→role→skill→task sentence and write a committed QA sidecar per node. A printed verdict is gone; a sidecar is what makes "unbound since it was drawn" distinguishable from "broken in the commit under review".
- Knowledge-graph export candidate, extracted
Dump this instance's knowledge graph — skills, BPMN activities and their lanes, roles, actors, directories — to one JSON-LD document for publication. The export is data; something else draws it.
L
- L1 extraction coverage candidate, extracted
Of the normative sentences in a publication (the closed marker list of smart-kg's
docs/COVERAGE.md§1), count how many an L1 extraction CAPTURED, how many are EXCLUDED for a fixed-list reason a person signed off, and how many are UNACCOUNTED — per page and in total. Writes the contract's §4 report and exits non-zero below 100% accounted-for. Issue #2405 FR-009.- L1 guideline → recommendation candidates (L1 3.0) candidate, extracted
Find every normative sentence of an ingested
library/entry (folio-assistant-core'sl1-coveragemarkers), hint where a reading is uncertain, and propose the publication's identity. Given an agent'sl1-recommendation-curation/v1, refuse a non-verbatim statement or an unknown location, and write the recommendations and remarks as an L1 3.0 graph, checked withkg/src/validate.ts, with coverage and the proposed (unsigned) exclusions.- L1 recommendations → L2 user-scenario candidates candidate, extracted
One smart-kg L2
user-scenariocandidate per L1 recommendation, joined to apersonaand abusiness-processby the edges smart-kg L2 already licenses, from an agent'sl1-scenario-mapping/v1. Reuses the guide's own personas and processes, then smart-base's genericDAK.Persona.*; otherwise a glossary candidate orcould-not-determine, each with a WARNING. Never invents a process.- L1 source completeness candidate, extracted
Is a
library/<bib-slug>/entry complete as L1 source content? Each requirement is met, unmet, or NOT-DERIVABLE, so a document that cannot yield an artefact is distinguished from one that simply has not.- Lake olean cache candidate, extracted
Restore, verify, seed and diagnose the prebuilt
.lake/artefacts for a Lean package. Always tryrestorefirst: a from-source Mathlib build is 30–60 minutes, a restore about two.- Latent semantic index viewer candidate, extracted
Render every committed LSI index — dimensions as two poles, narrow-dimension and near-duplicate findings — and which declared prose graphs still need one.
- Latent Semantic Indexing over a prose graph candidate, extracted
Find units of a declared prose graph (a library, the skills, the beans, docs) that discuss a query in OTHER words — the vocabulary gap lexical search cannot reach. Each hit is labelled lexical+latent or latent only, and the score is a cosine in the latent space, never merged with a lexical result.
- LaTeX compilation (latexmk) candidate, extracted
Compile LaTeX source documents into PDF using latexmk with safe shell-escape isolation across CI events.
- LaTeX overfull-box report candidate, extracted
Turn a pdflatex log's Overfull \hbox warnings into a located, actionable report, with a threshold so a long tail of trivial overruns does not bury the real ones.
- LaTeX preflight candidate, extracted
Lint TeX source for the pdflatex-compile failure classes a permissive AST parser accepts — the ones that pass validation and then break the build.
- Lean build candidate, extracted
Build every Lean project in the workspace from the root Lake manifest, so cross-package dependencies resolve against it rather than a possibly-stale per-paper manifest. Writes a committable build-status sidecar every run.
- Lean coverage candidate, extracted
Count how many provable blocks — theorem, lemma, proposition, corollary — carry a full Lean proof rather than a sorry, per paper. The completeness half of the Lean audit: what is formalised, and what is still a gap.
- Lean toolchain install candidate, extracted
Install the toolchain pinned in
lean-toolchain, fetching it from the GitHub release rather than through elan's downloader. Idempotent, and it detects partial state rather than re-downloading.- Lean vacuity audit candidate, extracted
Inspect Lean declarations chapter by chapter for proofs that type-check, are sorry-free and axiom-clean, and still carry no mathematical content — assuming what they claim, concluding something trivially true, or resting on a false premise.
- Lexical search over the content graph candidate, extracted
Find graph nodes, authored or ingested, whose label, title, kind or tags contain a string, with no graph expansion. corpus-search composes this with a neighbour walk.
- Library viewer candidate, extracted
Render each declared library directory — its entries, intakes and avatars — as a page per subject instance, and give every entry its own path IRI (<library>/<instance>/<id>/): a materialized thin shell that loads the entry from the published projection, with its JSON-LD manifest as the alternate.
- List a pull request's changed files (GitHub) candidate, extracted
List the paths one pull request changes.
- List and view the delta between two IG ASTs candidate, extracted
Diff two ASTs by resource key: added, removed, changed (with a structural element-level differential) and version-changed resources, plus edges added and removed; optionally fold in the incremental plan, and render just-the-docs pages (an index that lists, a page per resource that shows) every one of which carries the provisional mark.
list <ast>summarises one AST.- List branches (GitHub) candidate, extracted
List the branch names of the current checkout's GitHub project, as the forge reports them.
- List branches (GitLab) candidate, extracted
List the branch names of the current checkout's GitLab project, as the forge reports them.
- List merge requests (GitLab) candidate, extracted
List the open merge requests of the current checkout's GitLab project, optionally only those from one branch.
- List processes candidate, extracted
The BPMN processes this instance defines, and the instances currently open against them.
- List pull requests (GitHub) candidate, extracted
List the open pull requests of the current checkout's GitHub project, optionally only those from one branch.
- List skills candidate, extracted
Every skill this instance can resolve, with its one-line summary. The entry point AGENTS.md sends an agent to first.
- Local rendering server candidate, extracted
Serve an instance's renderings over local HTTP with their declared media types. The publication host wherever GitHub Pages is absent, and the only host that can enforce
application/ld+jsonat all.- Local rendering server (Python) candidate, extracted
Serve an instance's renderings over local HTTP with their declared media types using Python 3 standard library. The publication host wherever GitHub Pages is absent, and the only host that can enforce
application/ld+jsonat all.- Log a message to the discussion candidate, extracted
Write a log line where the human actor will read it: the discussion you are already in. Takes the five required fields and the optional body, and renders them as one entry.
- Logical models → JSON Schema candidate, extracted
A JSON Schema per logical model, from the published FHIR resources.
M
- May this step be performed? candidate, extracted
Ask before doing work a strict process governs. The content-agnostic processes refuse a step that is not enabled; the per-content-type ones advise.
- Measure the AST export on real IGs candidate, extracted
Build the WHO SMART Trust and Immunizations IGs through
ig-ast-exportand print the W1/W2 measurements: counts, whether FSH sources sit where the plan expects, and logic-layer edge coverage per resource type against 458 of 458.--byte-identicaladds a stock build and anoutput/diff.- Measure the IG Publisher's binary outputs on a pages branch candidate, extracted
Read a pages branch's git tree and report the Publisher's binary outputs (full-ig.zip, package.tgz and variants, package.db, validator packs, the definitions/examples/expansions zips, spreadsheets) by name: copies, bytes, and how much of it sits in branch previews. Reads the tree, never a checkout, so a multi-gigabyte branch costs a depth-1 fetch.
- Merge leftover (has a PR's intent landed?) candidate, extracted
After a train merged, compare a PR's head with the base path by path and say whether what it still changes is ONLY generated files, generated README regions, or changes the base already carries (its patch applies in reverse to the base):
landed,not-landedwith the authored paths still different, orcould-not-determine, which is never shown as clean. Only reports; closing the PR stays a steward action.- Merge overlap (conflict prediction) candidate, extracted
For the open PRs (via
gh, or a list of branches), report which pairs would conflict: pairwise overlap on AUTHORED paths, with generated paths excluded using the merge-conflict-patterns declaration; which PRs touch a shared declaration (an instance's<instance>.json,roles.json,package.json,bun.lock, schemas, BPMN/DMN); and which touch the harness layer's directory or its tools layer's. A PR that could not be measured makes no pair independent. JSON (merge-overlap/v1), the conflict-prediction input for composing trains.- Merge train candidate, extracted
Build a train branch from a base SHA: merge each member (a PR number or branch) with
merge-base.ts --no-regen, refusing — never hand-resolving — a member whose conflicts no declared pattern covers; then onebun run cat regen,check:l1-complete --write, every check an instance declaresafterMerge(its declared writer run when red), andkg:audit:all:check; then mergeorigin/main, taking main's side of generated conflicts and regenerating once more. Emits amerge-train-report/v1JSON report. Never pushes, opens or merges a PR.- Methodologies viewer candidate, extracted
Render the declared methodology graph as one page.
- Mirror FHIR packages from packages.fhir.org into a git repository candidate, extracted
On a machine that reaches packages.fhir.org, fetch exactly a missing list (from
fhir-cache-seed-npm --missing-out), check each tarball names itself exactly, record SHA512SUMS, and commit and push to a git repository that an environment without packages.fhir.org reads with--mirror. The person running it is the trust anchor for what it adds.- Mount remote harnesses at a pinned commit, only when trusted candidate, extracted
Lay down each declared remote mount — a
source.remoteinstance in the rootindex.config.json, or, in a folio with no index, aremoteMountsentry on its declaration (both at once is refused) — and its dependency closure, from another repository at a full commit SHA. Write the lock,index.lock.json(a legacy<name>.mount-lock.jsonis read, and renamed onto it when rewritten), and, with an index, regenerate the root.gitignoreblock that ignores each mount path. It READS the declared mounts and never writes them: a tool that changes a mount writes throughwriteDeclaredMountsintoindex.config.json. Before anything is checked out, each mount must pass the trust gate (schemas/mount-trust.ts, rule H8): a person's consent recorded for THIS pin, or a signature in a declared trust network. No signature verifier exists yet, so a signature alone is could-not-determine and does not mount. Unsigned and unconsented is refused.--stagingmounts for a preview and needs neither, by the owner's ruling.--checkcompares the disk against the lock and never fetches. When a run CHANGES the lock, it then re-renders the agent surface (skill:commands→.claude/commands/,agent-memory→.claude/agent-memory/and.agents/) from the checkout root, so a re-pin commit carries the skills and memory the new layers define; a generator that fails fails the run, and--no-agent-surfaceopts out.- Move a review comment's status candidate, extracted
A review-process task moves one
review-comment/1.0.0todo's status (address, send back, resolve, adjudicate, withdraw) throughtransition(), which refuses any move the named BPMN task may not make. The comment is written to the folio's todos graph (its declaredtodo-feedbackdirectory) and, with--commit, committed to the edit-set's FEATURE branch. Refused on the base branch and on a detached HEAD.
N
- Namespace vocabulary candidate, extracted
Emit the folio namespace as a document that dereferences — one node per class and property, each with an @id, a type, a label and a definition, so a consumer holding only the JSON-LD can resolve any term it meets.
- Node kind pages candidate, extracted
Render a page for every node kind, every harness holding nodes of it, and every node, under /<locale>/<declaring>/<kind>/ (issue #2195).
O
- Open a render candidate, extracted
Open a rendered PDF, HTML page or image in the system browser, or list the renders available to open.
- OpenAPI ingest from a published spec candidate, extracted
Ingest the OpenAPI documents an instance's
cat-openapi.config.jsonlists underrenderedby fetching each published spec URL (https), verbatim, with a provenance recording the URL, when it was fetched and the document's sha256 — a URL has no commit, so the digest pins the bytes. A failed fetch or bytes that are not OpenAPI 3 write nothing and never replace a held copy.- OpenAPI ingest from source candidate, extracted
Ingest the OpenAPI documents an instance's
cat-openapi.config.jsonlists underdocumentsfrom a local checkout of their repository, read AT a branch, tag or commit (git show), verbatim, with a provenance recording the resolved commit and the document's sha256.--checkverifies the committed copies offline.- OpenAPI viewer candidate, extracted
Render every OpenAPI document an instance's
openapigraph holds at the visualiser's route: a hub, a page per instance listing its documents, and a page per document and per operation, drawn from the document copied beside them.
P
- Package instance into an npm tarball and record binary release candidate, extracted
Build an npm tarball (.tgz) of an instance using
bun pm pack, compute its size and SHA-256 digest, and record it as afolio-binary-release/v1state node.- Package manager and registry client for npm and GitHub Packages candidate, extracted
Package, publish, inspect, and retrieve npm packages and Knowledge Graphs distributed as tarballs or packages from npm registry or GitHub Packages.
- Package release by hand candidate, extracted
A person follows the package-release skill: computes the bump, writes the CHANGELOG entry, tags
<package>-v<version>, and creates the release on the host. The same four steps with nothing to configure.- Paper build to LaTeX chapters candidate, extracted
Render a paper's content objects to LaTeX chapters: load the paper manifest, resolve its chapters and blocks, render, validate the LaTeX AST, and write the chapter files. With no manifest it builds the folio's only paper, and refuses — naming them — when there are several or none.
- Paper feature build (changed chapters + latexdiff) candidate, extracted
Quick preview of a paper folio's branch: render the paper with the sci print template (plus the folio's notation fragment when it has one), then compile ONLY the chapters changed against a base ref, and a colored and a plain latexdiff of each. Margin notes are off by default (
FAST_PREVIEW=1, about 2x). Cross-references to chapters outside the build print as '??'. A preview, never a publish build. Run from the folio. Without a TeX engine the render still runs and the compile steps are skipped with a message.- PDF page raster candidate, extracted
Render one page of a PDF to a PNG — the thumbnail a repository listing shows — and print the provenance a catalogue needs to record it as DERIVED: source, digest, page, geometry, renderer.
- Per-slice SQLite builder candidate, extracted
Build a named slice of a graph (beans, todos, library, or the whole-repo kg) as one SQLite file a browser mounts without parsing it, beside a manifest carrying its sha256, a row-content digest, its row counts and the search block the one search page reads. Heavy text is indexed by a contentless FTS5 and not stored; each row points at a content-addressed payload.
--checkbuilds every slice twice, requires one sha256, and requires the row digest read back from the file to equal the one computed from the source.- Pin third-party GitHub Actions to full commit SHAs candidate, extracted
Rewrite every third-party
uses: owner/repo@refoutside the declared staging-only workflows to@<full commit SHA> # <ref>, so Dependabot keeps the pair current. A tag resolves to its PEELED commit (an annotated tag's object is never pinned), else a branch head, bygit ls-remotewith argv. A ref that resolves to nothing, or to more than one commit, is refused and reported, never guessed. This repository's own reusable workflows are first-party and left alone. Idempotent.- Plan an incremental IG build from a delta of changed files candidate, extracted
Map a delta (a commit range, a PR's diff, or the staged index) onto a base AST: which resources to rebuild (the forward cone), which to load from cache, which to remove, or a full build and why. Builds nothing.
- Populate site.data.fhir for a just-the-docs IG render candidate, extracted
Write the IG Publisher's Jekyll variables (
site.data.fhir.ig.*,packageId,canonical) for ONE implementation guide, fromsushi-config.yamlor a published IG'sfhir-artifact-index, so pages written for the Publisher render on just-the-docs unchanged. fhir-harness declaressite.dataas a pass-through Liquid prefix; this is what Jekyll then reads (beanbamf).- Prime the work plan candidate, extracted
Load the current work plan for this session — the same committed beans store the CLI reads, so a fresh container starts from the plan rather than from nothing.
- Processes viewer candidate, extracted
Render the declared BPMN processes as an index page and one page per diagram.
- Proof dependency graph candidate, extracted
Render the dependency graph of a paper's proof objects from
proof-objects.jsonas SVG (or DOT), each node linking to its anchor in the published PDF.- Proof status from a Lean build candidate, extracted
Update each proof object's status in
proof-objects.jsonfrom a Lean build log — which objects built, which carrysorry, which failed. Exits 1 on a manifest with no objects rather than writing an empty status.- Proof-object extraction candidate, extracted
Extract the theorem, lemma and definition environments of a paper's LaTeX chapters into
proof-objects.json— the manifest the dependency graph and the proof-status update read.- Publish a folio's or an IG's site from the agent's own checkout — the one agent publish path candidate, extracted
Build a repository's site in the agent's checkout and push it to the publish branch, as a preview or as the main site, without an Actions runner. Which build is read from the repository: a declared
site.buildrecipe (built bybuild-instance-site), else the reusable workflow its own workflow files call —folio-staging.ymlfor a folio, the WHO SMART Base IG'sghbuild.ymlfor a FHIR IG, whosebuildjob is planned step by step and run as written. For an IG it then applies the harness chrome over the built output (sync-docs-harness, thenrail-standalone-pages --foreign-site --instance <the IG>): every page gains the rail and the icon row#fa-navbar-row, and the IG's own content is left byte for byte. A root publish is REFUSED when the chrome cannot be applied, and a clean root deploy is refused over any root whoseindex.htmlwears the icon row unless the new output does too, so a chromed root is never replaced by bare IG Publisher pages. Every run prints its plan first, and the plan lists the chrome step;--planstops there,--dry-runcomposes the commit in a temporary worktree and pushes nothing,--artifactwrites a claude.ai Artifact bundle instead.- Publish a Lean render under a folio site, with the harness rail candidate, extracted
Stage a doc-gen4 render under a folio's built site (
<site>/<route>/, defaultlean/) and give every page the harness navbar and rail by runningcat-harness/scripts/rail-standalone-pages.ts --foreign-siteover the site — the same railstage-folio-local.tsapplies to the folio's own pages. Leaves out Lake's.hash/.tracebookkeeping, marks doc-gen4's iframe navbar andfind/redirectfolio-navbar: noneso no rail is drawn inside the sidebar, adds a layout shim so the rail does not cover doc-gen4's fixed sidebar, and with--modulesprunes to the folio's own modules, repointing links into dropped ones to the community docs. Then asserts every staged page is railed or declined.- Publish the dynamic Lean viewer: doc-gen4 declaration data as knowledge-graph shards candidate, extracted
Ingest doc-gen4's per-module declaration data (
.lake/build/doc-data/declaration-data-<Module>.bmp) into JSON-LD shards — one per module, with declaration nodes,importsedges andformalizesedges to the content blocks whoselean.refnames each declaration — and publish them under the folio's site with a single viewer page that loads modules, signature chunks and the search list on demand. Signatures are chunked 500 declarations per file so a 12,804-declaration module stays usable. With--baseit writes a STAGING overlay: only modules whose content hash differs from the published base, plusoverlay.json; the viewer loads the rest from the base. Rails the viewer page with the same pass aslean-render-publish.- Published site viewer candidate, extracted
List the published site's top-level routes and staging previews, with the pages and files under each, as read from the branch that keeps the site — saying so when the branch is empty or could not be read, never drawing zeros in its place.
- Published-paper index page candidate, extracted
Write the gh-pages
index.htmlfor a built paper: a Paper tab embedding the PDF and, when given, a Visualizer tab, with download links and the build's branch and commit.
Q
- QA sweep candidate, extracted
Run every registered criterion over the blocks under a path and write a per-block QA sidecar. A sidecar rather than a console report, because a printed verdict cannot distinguish "never checked" from "checked and clean".
- Query the beans knowledge graph candidate, extracted
Query the beans knowledge graph using named graph analytics or arbitrary SPARQL 1.1.
R
- Read a merge request (GitLab) candidate, extracted
Read one merge request: title, state, body, and its comments and reviews.
- Read a pull request (GitHub) candidate, extracted
Read one pull request: title, state, body, and its comments and reviews.
- Read a pull request's checks (GitHub) candidate, extracted
Read the check runs of one pull request and their state.
- Rebuild only the cone of a change and merge it into the AST candidate, extracted
Write the unchanged part of a base AST as a FHIR package into the package cache, build a temporary IG of only the rebuild set with the stock Publisher, merge the result into a mixed-provenance AST (
builtAtper resource), and repeat while the merged graph's cone reaches resources that were not rebuilt.- Record a round-trip translation verdict candidate, extracted
Write a back-translation verdict, produced by a pair of translation agents, into a block's existing translation-QA sidecar. It records a judgement rather than making one, and refuses where no sidecar exists — a round trip cannot be what decides a block is translated.
- Record an IG's GitHub releases as pointers to their binary assets candidate, extracted
Read an IG repository's GitHub releases and write
fhir-artifact-index/releases.json(ig-releases/v1): each asset's name, size, SHA-256 digest and download URL, never its bytes. The IG site's generatedreleasespage lists them (beanb8ip).- Record what the publish branch served candidate, extracted
Append one entry to the render log on the publish branch: what was published or taken down, when, from which commit, and — for a removal or a retention — WHY. The log is the only place a preview that vanished leaves a trace.
- Refresh an IG's AST cache on a runner candidate, extracted
Dispatch an IG repository's
ig-ast-refresh.yml, which calls fhir-harness's reusable.github/workflows/ig-ast-refresh.yml: mount the layers the IG's index.lock.json pins, restore and judge the cache forref, and when it is not valid (orforce) run the caller's optionalpre-exportoverlay command and build the IG with the pinned Publisher AST exporter (the AST is recorded against the clean commit's inputs, the overlay's changes put back), check the new AST is valid for its commit, and seedcat/fhir-harness/fhir-ast/<package id>withig-cache seed --push— only from a commit on the default branch with the tip's inputs. Builds no site, writes no gh-pages, dispatches nothing.- Release package via GitHub Actions release workflow candidate, extracted
Build, tag, and publish an npm package tarball to GitHub Releases and GitHub Packages registry via workflow_dispatch across any repository.
- release-please (declared, not configured here) candidate, extracted
Propose the next version of each package from conventional-commit messages, open a release PR with the CHANGELOG and version bump, and — when that PR is merged — create the tag and GitHub release. Does not publish to a registry. Declared here, not configured: no config file and no tag exist in this repository (bean
frq2).- Render a computed IG AST delta as just-the-docs pages candidate, extracted
Write the pages for a delta already computed by
ig-ast-diff --json: an index that lists, a page per changed resource that shows, every one opening with the provisional mark and with Liquid in values neutralised.- Rendering preferences candidate, extracted
Read, write or clear the stored rendering preferences — engine, format, scope, math renderer, print mode.
- Replace inline Library content with URL references candidate, extracted
Replace inline CQL/ELM in
Libraryresources with a URL reference to the published copy.- Replay a committed mount lock with nothing but Node candidate, extracted
Lay down every remote mount
index.lock.jsonrecords — each instance fetched at the lock's full SHA (sparse, blob-filtered), each directory verified against itstreeDigest, a mismatch undone and reported — importing onlynode:*, so it runs on a fresh clone before any layer is present. It never decides what to mount:remote-mountwrites the lock (and checks trust); this only replays it. Refuses to write over a path with tracked files or bytes that no longer hash to the lock. Exit 0 mounted/current, 1 missing, 2 could-not-determine.- Request review on a pull request (GitHub) candidate, extracted
Ask one or more accounts to review a pull request. Adds to the reviewers already requested.
- Resolve a declared subgraph's content source candidate, extracted
Say where a declared subgraph gets its content — the checkout's own directory, a declared repository branch (with its keying), or a branch family (with its prefix, key and repository) — after the instance config's
subgraphSourcesoverride by id, and which layer answered. The samedeclaredSubgraphresolver the KG export, the publishers and the mount tool use, so a shell sees the answer they act on.- Resolve a review thread on a merge request (GitLab) candidate, extracted
Mark one discussion on a merge request as resolved.
- Resolve a review thread on a pull request (GitHub) candidate, extracted
Mark one review thread on a pull request as resolved. A GitHub thread id names its pull request, so no number is needed.
- Retrieve a remote Knowledge Graph via npm package or tarball candidate, extracted
Retrieve and inspect a remote Knowledge Graph packaged as an npm package or tarball (.tgz), supporting both unhydrated source graph views (authored declarations, skills, schemas) and hydrated materialized graph views (subgraph JSON-LD, metadata indexes, dereferenced graph projections).
- Rewrite paths that still name a moved file's old layer — never in a record candidate, extracted
After a move between two layers lands, find every mention
<from>/<prefix>/<rest>in the scanned tree's tracked files and rewrite it to<to>/<prefix>/<rest>only when the file exists under the destination root and not under the source root. Records are never read: beans, todos, memory, proposals, wireframes, QA results, upstream pins, vocab mappings, provenance figures and terminologies, and test fixtures (DEFAULT_RECORD_GLOBS; the CLI's--keep <glob>adds more, generated trees among them, which their generators rewrite — a glob is not a shell-safe argument type, so it is not a declared input). Reports by default with file and line;--writeapplies;--checkexits 1 while a rewrite is owed.- Run every existing security check as one named release step candidate, extracted
Run the repository's security checks — workflow injection, secret leaks, lockfile pinning, the toolchain pin, QA reviewer permission, materialised-asset fixity — plus two advisories (dependency advisories, third-party action SHA pinning), each by name as argv. Every check is reported as pass, fail or unknown; a blocking check that fails OR could not be run refuses the release, because could-not-check is never clean. Advisories are reported and never block. Called by
prepare-mergebefore a push that will merge, and by any publish process before it publishes.
S
- Scaffold a folio candidate, extracted
Create a new folio repository that uses this platform — folio/, uploads/, library/, the first manifests, the builder shim, agent files, and the link back to the platform.
- Schemas viewer candidate, extracted
Render each declared schema directory as a page per subject instance, over one shared data index.
- Screen a hand-over for injected instructions, field by field candidate, extracted
Before a model reads a sub-agent's report, a delegated prompt, a tool result or a comment from someone who is not the principal, screen it against a declared schema whose top-level fields are
control(steers what the receiver does) ordata(content it reads). A finding in a control field, or any field the strict schema does not declare, is REFUSED, so a report cannot extend the delegator's plan. A finding in a data field is QUARANTINED: the original is kept and marked, never stripped. The patterns are a deterministic tripwire (instruction overrides, role and turn spoofs, fence breaks, tool-call syntax, hidden Unicode, exfiltration links, pipe-to-shell), a mitigation and not a guarantee. Exit 0 clean, 1 refused, 3 quarantined, 2 could not determine.- Search the corpus and follow the graph candidate, extracted
Seed lexically over the authored folio and every declared library, then expand along graph edges, labelling each hit MATCHED or REACHED and by which edge. Counts are split authored vs ingested, and a root that exists but holds no graph nodes is reported rather than read as an empty answer.
- Seed the FHIR package cache from trusted sources (exact versions) candidate, extracted
Fill
~/.fhir/packages(or--cache) for an environment that cannot reach packages.fhir.org, from trust anchors only: npm accountgrahamegrieve(owner-trusted), publishers' own published-site repositories (the seeder's list, each fetch verified against the tarball's own package.json), template repos found through FHIR/ig-registry's templates.json read live each run, and an owner--mirror. Exact versions only (a patch wildcard resolves as the Publisher resolves it, recorded); every tarball verified; nothing computed once and kept; provenance recorded; missing versions listed, never substituted.- Seed the FHIR package cache, with WHO's published site as a source candidate, extracted
Run fhir-harness's
fhir-cache-seed-npmwith smart-base's publisher-site rules (SMART_PUBLISHER_SITE_REPOS):smart.who.int.*packages are also read from WHO's published-site repository, each fetch verified against the tarball's own package.json. Every other source and check is the seeder's own.- Sibling sessions in a window candidate, extracted
List the Claude Code sessions that have committed to this repository in a time window, from the
Claude-Session:trailer on commits across ALL branches — with each one's commit count, first and last commit, latest subject, and the branches containing its tip. The session API cannot see a sibling session, so the trailer is the only durable session identity here and a session's state is INFERRED from its branch; whether a session is still running is not knowable from a checkout and is deliberately not reported.- Sign off a translation candidate, extracted
Record a translation as official — who signed off, when, and the hash of the source it was signed against, so a later source edit is detectable.
- Site search index candidate, extracted
The just-the-docs search index,
assets/js/search-data.json, which the theme writes as part of the Jekyll site build: one entry per page section, searched by every page's search box. Built implicitly by the build rather than by a command of its own.- Site search scopes candidate, extracted
The site search index cut into one index per scope — each declared instance, each target locale, and the platform — plus
assets/js/search/manifest.jsonnaming them, so a reader's search loads its own scope rather than the whole site (issue #1972, beanm7mn). Run on the assembled site after the index is written or borrowed.- Skill contract reference candidate, extracted
Render each skill's input/output JSON Schema as a browsable Markdown reference page, with an index. The generated pages are committed so they are readable on the forge as well as on the site.
- Skill instruction reference candidate, extracted
Render the skill instruction bodies — the prose an agent actually loads — as browsable pages with an index, so a reader can see what an agent is told without cloning the repository.
- Snapshot a published IG's terminology at its pinned version candidate, extracted
Read every CodeSystem concept out of a FHIR IG clone checked out at its pinned tag and write a
folio-pinned-terminology/v1snapshot: the offline, version-fixed answercheck:term-mappingresolves itsfhirtarget against. Which IG, which pin record and which snapshot path are the caller's (--pin,--out,--source); this layer names none (#1767, stage B′).- Snapshot the SPDX License List at its pinned version candidate, extracted
Read
json/licenses.jsonandjson/exceptions.jsonfrom a copy of github.com/spdx/license-list-data at the pinned tag and writecat-harness/external-schemas/spdx-license-list.terminology.json(folio-pinned-terminology/v1): every licence and exception id with its name and deprecated flag — the offline, version-fixed listcheck:source-licencevalidates alicence.jsonid against.- Spreadsheet tabular metadata candidate, extracted
Read a workbook into a
folio-tabular-csvw/v1record, one CSVW table per rectangular block of cells. Blocks are split on empty rows, then on empty columns, so several tables on one sheet are found, each anchored at its real top-left cell (fac:anchor: sheet, A1 cell, row, column). Dates are read through the number formats instyles.xml, not misread as integer serials. A malformed part is refused rather than half-read. No new dependency: ZIP vianode:zlib, SpreadsheetML viafast-xml-parser. Governed by thetabular-metadataskill (beaneief).- Stage a branch's preview candidate, extracted
Publish a branch's built site to
STAGING/<slug>/on the publish branch, so a reviewer compares a rendered before and after rather than a description of one. Stamps the commit SHA, and removes the preview when its pull request closes.- Stage every IG whose instance records its source, one Jekyll site each candidate, extracted
For every instance holding
fhir-artifact-index/menu.jsonwith a sushi-config source, clone the IG at the recorded commit and stage it withbuild-ig-site: the instance's webpage theme (inherited alongneedswhen it declares none), its artefact pages andartifactspage, its post-processing fills, and an edit link to the IG's default branch. An instance whose docs directory declaresigSiteis staged to be served AT/<instance>/with its artefact pages copied in (a collision is refused); otherwise beside it at/<instance>/ig/. Prints one<instance> <jekyll source> <at>line per IG for the caller'sjekyll build(beansbamf,mftp).- Stage one IG as its own just-the-docs Jekyll site candidate, extracted
Turn an IG source repository into ONE Jekyll source for just-the-docs, as the IG Publisher builds one IG per site:
input/pagecontentpages with title, parent and order fromsushi-config.yamlpages:, the files the Publisher's include tags resolve against, images,_data/fhir.jsonfromig-site-data, and a_config.yml. The pages render unchanged, including their references to the IG's site data (beanbamf, owner's choice of one site per IG). With the IG's menu, the layout is the one every IG site wears (beanmftp): the IG's own top bar, the IG's TOC declared as the folio-assistant navbar's section (added byrail-standalone-pages), no sidebar of its own, an edit link per page, and per heading a source-line link and a pre-filled feedback issue.- Staging-only graph viewer candidate, extracted
Render a kept-but-unpublished workspace graph as one page, for a local build or a staging preview only; a canonical deploy withholds it.
- Stakeholder map candidate, extracted
Given the paths a proposed change touches, report which skills change, which roles declare them, and who therefore has a stake in the review.
- Start a process instance candidate, extracted
Open an instance of a process for a subject. Idempotent: an existing instance for the same subject is returned rather than duplicated.
- State graph viewer candidate, extracted
Render each declared state graph with a projection as a dashboard page: what the work plan holds, and what state it is in.
- Strip binary payloads from Library resources candidate, extracted
Remove base64
content.datafrom publishedLibraryresources, so an IG embedding compiled CQL does not ship the bytes twice.- Summarise one IG AST candidate, extracted
Counts per resource type, edges in total and resolved inside the IG, edges by origin (upstream's DependencyAnalyser or ast-export's LogicEdges), whether the AST is mixed-provenance and how many resources each revision built, and what the manifest declares provisional.
- sushi-config.yaml → dak.config.json candidate, extracted
Derive the DAK configuration from
sushi-config.yamlplus repository and branch context.- Sync generated README sections candidate, extracted
Rewrite each generated README region, and only where the README already carries that section's marker pair. Nothing outside a marked region is touched.
T
- TeX snippet validation (AST) candidate, extracted
Parse every
texsnippet in a folio's blocks and report what will not compile — structural, not textual: it reads an AST rather than matching patterns. Complementary tolatex-preflight, which gates a main.tex before a compile, and tolatex-overfull, which reads a log after one.- TeX-source hazard audit candidate, extracted
Catch the source patterns that crash pdflatex but read as ordinary prose — a bare
_or^in a bibliography field,|inside a markdown table cell where it is also the column separator, a$…$span across two lines, markdown link syntax inside a fenced tex block, a double subscript. Born from named build failures rather than from a style opinion.- The platform's quality gates candidate, extracted
Run the checks CI runs, derived from the workflow rather than listed here. One Tool for all of them, not one per gate: the list is computed from
.github/workflows/code-quality-gates.ymlat call time, so it cannot drift from what CI actually enforces.- The render pipeline, in dependency order candidate, extracted
Flatten the repository's renders into the order their
needsimply, and optionally run them. Two stages: the current declared state as json/jsonld and the README derived from it are FATAL; the dynamic renderers (viewers, visualisers, doc pages, diagrams) skip and log; the dynamic-state export closes it. A cycle or a missing dependency yields NO order rather than a partial one.- The upload step, from its Tools candidate, extracted
Render document ingestion's FIRST step as a reference page, generated from the Tool nodes that implement it: the step, its lane and role, its skill and every Tool whose
satisfiesnames that skill, with each Tool's description, installation, invocation, typed ports and selection triple. Everything but the process file's own path is derived — the start event, the activity its single outgoing flow reaches, and that activity's skill — so a step inserted, renamed or re-pointed moves the page rather than staling a literal. Refuses rather than emitting a partial page when the start event flows nowhere or to more than one place, when the first step is not an activity, when it names no skill or several, or when NO Tool satisfies that skill — the last because an empty page reads as a documented absence of mechanism, which is a finding rather than a document.- Theme stylesheet candidate, extracted
Render the declared theme nodes into the stylesheet the site serves. The nodes are the source: a colour has one home, and light and dark are two valuations of one token set rather than two hand-kept blocks.
- Tool I/O type vocabulary candidate, extracted
The zod definitions of the shared types a Tool's inputs and outputs reference by IRI, and the published JSON Schemas those IRIs name: one document per type,
tool-types/<Name>.schema.json, plus the combinedtool-types.schema.json.- Tool node schema candidate, extracted
The zod definition of a Tool node — what
defineToolaccepts — and the published JSON Schema generated from it.- Tools viewer candidate, extracted
Render this instance's Tool nodes, and the skills each satisfies, as one page.
- Transcribe audio — faster-whisper (option, not installed) candidate, extracted
Transcribe an audio file with faster-whisper (the Whisper models on CTranslate2), from Python. A declared OPTION: not installed in this repository.
- Transcribe audio — vosk (option, not installed) candidate, extracted
Transcribe an audio file with vosk (Kaldi-based), offline, from Python, with small per-language models. A declared OPTION: not installed in this repository.
- Transcribe audio — whisper.cpp (option, not installed) candidate, extracted
Transcribe an audio file to a timed transcript with whisper.cpp, offline, on CPU. A declared OPTION: not installed in this repository until the first audio upload (bean
1r0p).- Translation coverage candidate, extracted
Per-locale translation coverage, computed from the .po files under the translations directory.
- Translation status viewer candidate, extracted
Render the translation status of every declared translation-sources directory, per locale, as one page.
U
- UML overview per named sub-graph candidate, extracted
Draw one UML class diagram per harness and one per named sub-graph it declares, as PlantUML, Mermaid and Graphviz DOT from one model, with every class read from the graph typology's node schema, and render the PlantUML to the SVG each page shows (needs Java; the check does not). The DOT is the page's Interactive view, laid out in the reader's browser by the site's vendored Graphviz WASM with draggable nodes. A kind with none is drawn as could-not-determine, never as an empty box.
- Uploads viewer candidate, extracted
Render each declared uploads directory's intakes as a page per subject instance.
V
- Validate a node in the graph candidate, extracted
Check one file against the schema for its graph typology. ONE tool rather than one per schema: the declaration already says which directory holds which kind, so the kind is the parameter and the lookup does the rest.
- Validate a translation candidate, extracted
Check a .po against its .pot — every msgid present, none obsolete, placeholders preserved.
- ValueSet expansions → JSON-LD candidate, extracted
JSON-LD vocabularies built from the ValueSet expansions in the published output.
- ValueSets → JSON Schema candidate, extracted
A JSON Schema per ValueSet, plus the enumeration-response schemas published at the IG root.
- Verify a separated repository from a fresh clone candidate, extracted
Clone a separated sub-KG's repository (with submodules, and any sibling checkouts it needs) into an empty scratch directory, install, and run its gates: its
gatesscript, else itstestscript (a person may pass--gateon the command line instead; it is not part of this contract because it is a shell command). Reportsgreen,redorunknown; an empty tree, a failed clone or a repository with no gate isunknown, never green. Catches what a rehearsal inside this checkout cannot, because a rehearsal shares this checkout'snode_modulesand environment (#2082). Writes only inside the scratch directory.- Voices viewer candidate, extracted
Render each declared voices directory as a page per subject instance.
W
- Walk the content graph from one node candidate, extracted
List the nodes adjacent to one node, out (what it depends on) or in (what depends on it), to a given depth and optionally over named edge terms only. An unknown edge term is reported, never silently dropped.
- What is enabled now candidate, extracted
The activities an instance may work right now, each with the lane that owns it and the skill that implements it.
- What narratives are waiting on a person candidate, extracted
List the agent-drafted narratives awaiting human confirmation, numbered, with the numbered rejection reasons beside them. The queue is the only place a draft's state is visible before someone accepts it.
- What this instance's MCP server serves candidate, extracted
Read the real tool surface from the registrars by mounting each against a capture object — the same objects the server asks, so the Zod shapes and their optionality are the served ones rather than a reading of the source.
- Where to drop a file — the queue's upload URL candidate, extracted
Compose the forge URL a person can drop a file at, from the instance's own declaration: the
uploadsgraph's directory, resolved against the ROOT its scope names, expressed relative to the repository, and appended to the origin remote as GitHub's/upload/<branch>/<path>. Every failure is NAMED and no URL is guessed — no declaration, no declareduploadsgraph, a declared queue absent from disk, nooriginremote, and a non-github.com remote each return a reason and a remedy instead. It exists because the obvious composition mints a live 404: the declared pathuploads/is relative to the INSTANCE and a forge URL needs it relative to the REPOSITORY, so pasting the declared path drops thecat-harness/segment. Owner, 2026-09-20, on the hand-written form: "were it to exist, but it doesmt on main!!!!!"- Which uncovered skills warrant a Tool? candidate, extracted
Triage the skills that have no Tool by EVIDENCE rather than by grep: a serviceTask naming it or an I/O contract puts it in tier A, a userTask only in B, a shell block or a declared script in C, and nothing in D. The answer to "which of these still have their mechanism inlined in their prose".
- Who is asking, and what may they do candidate, extracted
User authentication and authorization (issue #1207). Asks GitHub for the caller's login and repository role, maps the role to a gateway actor, and answers from the ODRL policies — for an action, or for a BPMN step. Always states that GitHub's role covers the whole repository, not a sub-graph, node or query path.
- Wireframe check at web and mobile viewports candidate, extracted
Render each mid-fidelity wireframe candidate of one topic at a web viewport (1280x800) and a mobile viewport (390x844). For each viewport it records
scriptentries for renders, no-overflow and no-placeholder, each pass or fail with a note. It writes a screenshot per viewport and a report.json carrying the use, topic and surface, and exits 1 on any fail and 2 when the candidate set is not one the use admits.- Witness conformance report candidate, extracted
Check every
*.witness.jsonin the folio's declaredcomputation-witnessdirectories against the two schemas inschemas/computation-witness.ts: the envelope every witness should meet (a failure is a malformed file) and the producer contract (a failure is a finding against the producer, grouped by the fields at fault). Also lists files that are not strict JSON, which Python's reader accepts and every other consumer rejects. Report-only: it never edits a witness, which is generator output.- Witness reproduction check candidate, extracted
Re-run a computation witness's producer and say whether it reproduces the committed witness. Reads the command from
invocation.reproduce(elsepython3 <scriptFile>) and the recorded package versions fromenvironment; on a version mismatch it stops atunknown, since a different environment is not a reproduction test. Otherwise it runs the COMMITTED producer in a scratch git worktree, so the folio's own checkout is never written, and compares the result with the committed witness with run-specific fields (commit, timing, environment) masked at every depth.pass,fail(with the differing JSON paths), orunknown(mismatch, non-zero exit, timeout, no witness written).- Write an IG site's static terminology index from the IG's own cache candidate, extracted
Read the IG Publisher's
expansions.jsonandtxcache/, asig-cache.sh restoreleaves them, and writeindex.json(gzipped asindex.json.gzover 1 MB): every code with its system and display, and each value set's codes. The IG site's service worker answers the self-hosted Form Builder's LOINC search from it, and its UCUM search from the vendored full UCUM list, so the site makes no cross-site call (owner, 2026-10-14: "cache + ucum. this is gh-pages so no XSS").build-ig-siteruns it for every IG with a Questionnaire.- Write one JSON-LD node per IG artefact, and check a built site's nodes candidate, extracted
writeturns an artefact index intoartifact/<Type>-<id>.jsonld(and a.jsontwin) under a docs root: onefolio-ig-artifact-jsonld/v1node per artefact, in borrowed vocabularies only (the FHIR RDF class, dcterms, schema.org, PROV), naming the artefact's canonical URL, its representations and, for a compiled copy, what built it.checkis the kind's QA: over a BUILT site, every artefact has its node and no node is an orphan, each node is its own file's, its twin matches, and every local resource it names is on the site. It also writes and checks the index node,artifact/index.jsonld(folio-ig-artifact-index-jsonld/v1): every artefact once, each entry naming its node. WHO-free; the assets the thin pages render (owner, 2026-10-11, option A; thin by default since 2026-10-12).-
Write the IG AST viewer: a page per instance holding
ig-astdirectories, and a hub candidate, extracted For every visualiser an instance declares
renderedBy: ig-ast-pages, write the hub at<locale>/<harness>/<id>/and, withsubgraphs: "instance", one page per instance that declares anig-astdirectory, at…/<instance>/. Each lists the ASTs the directory holds: the IG's package id, resources in total and by type, dependency edges (resolved inside the IG, by origin, by kind), the rebuild plan when one is recorded, and what stays provisional. A declared directory not on disk — a branch-family member not restored, which is the normal case — is reported UNKNOWN with the family it would be restored from, never as zero ASTs. Notig-ast-listextended: that Tool summarises ONE AST it is handed, and a site build has no AST path to hand it.-
Write the L1 extraction viewer: a page per instance holding
l1-extractiondirectories, and a hub candidate, extracted For every visualiser an instance declares
renderedBy: l1-extraction-pages, write the hub at<locale>/<harness>/<id>/and, withsubgraphs: "instance", one page per instance that declares anl1-extractiondirectory. Each shows what was extracted, read from the files by what they declare: the L1 statements (graph nodes carrying astatement, and an authored L1 source'srecommendations), the candidate work list's counts, coverage and decisions, each graph document's nodes by type and edges by predicate (the L2 scenario candidates among them), the curation, mapping, vocabulary, exclusions and run context counted, and every file linked to its published copy (cat-harness'slibrary:viz) when the site holds it and to its source at the pinned commit. A declared directory not on disk is reported UNKNOWN, never as zero.Render
_includes/generated/navbar-footer.htmlfromdocs/_data/harness.jsonwith the same renderer every railed page uses. With--instance, render the navbar of an IG repository's OWN site instead — that instance first, then what it needs; its own pages at this site's root, every other link to the main site at--link-root— into the shell that site is built from (#2235).