publish · git:20261007.a8e832e · 2026-10-07 · sha256 ad828db516408d74

publish git:20261007.a8e832eA

Immutable. This exact content never changes and is served at /api/v1/blob/ad828db516408d74.

---
name: publish
description: Build a local HTML preview of an openEHR specification component via the AA_GLOBAL publisher
argument-hint: "<component, e.g. RM>"
allowed-tools:
  - "Bash(./specifications-AA_GLOBAL/bin/spec_publish.sh *)"
  - "Bash(docker run * ghcr.io/openehr/asciidoctor *)"
  - Read
  - Glob
disable-model-invocation: true
---

Build a local HTML preview of the component named in `$ARGUMENTS` (for example `RM`, `BASE` or `AM`)
with the publisher in `specifications-AA_GLOBAL`. The publisher builds a whole component, not a single
spec. This is the preview step of the `openehr-specs:authoring` skill. It never tags, commits, or
deploys a release; that is the `governance` skill.

If `$ARGUMENTS` is empty, ask which component and stop: without one, the script rebuilds every sibling
`specifications-*` repo.

The script prints `generated <file>` and exits 0 even when `asciidoctor` is missing or failed. Confirm
the outputs (steps 2 and 4) instead of trusting that line.

1. Work from the parent directory that holds the sibling `specifications-AA_GLOBAL/` and
   `specifications-<component>/` checkouts. If either is missing, say which and stop. Run
   `which asciidoctor jq bc`: the script needs all three. If one is missing, name it and use the Docker
   fallback in step 3; if `which docker` finds nothing either, report both and stop.
2. Snapshot the outputs: `stat -c '%Y %n' specifications-<component>/docs/*.html` (ignore "No such
   file"; use `ls -l` where `stat -c` is unavailable).
3. Build:
   ```bash
   ./specifications-AA_GLOBAL/bin/spec_publish.sh -f -v $ARGUMENTS
   # fallback when a tool is missing:
   docker run -u $(id -u):$(id -g) -v "$(pwd):/documents/" ghcr.io/openehr/asciidoctor development $ARGUMENTS
   ```
4. Verify. Glob `specifications-<component>/docs/*/master.adoc`: each needs a rebuilt
   `docs/<dir>.html` beside it, plus `docs/index.html` when `docs/index.adoc` exists. Repeat the `stat`
   command. A file that is missing, or whose time did not change, was not built: list each as
   `NOT BUILT` and report the build as failed.
5. Report where the HTML landed and every Asciidoctor warning or error verbatim (unresolved
   attributes, missing includes, missing images). On failure, summarise the first actionable error and
   point to `authoring` (includes, attributes) or the `xref-auditor` subagent (cross-references).

Never pass a release label (`-l Release-N.N.N`); releasing belongs to `governance`.