OASIS Open●  OASIS  / Publication
v0.5.0 · docs revised 8 October 2026 · OASIS-Docs/publication-assurance
OASIS Publication

Publication quality

Common publication issues and how the pipeline catches them. From a TC editor's point of view: what does a failed publication look like, what did the source MD do, how do you fix it.

Operational Status: Operational documentation. Not a Committee Specification. | Audience: TC editors, TC chairs, OASIS publication operators. | Version: v0.5.0 · docs revised 8 October 2026

1.The layers of checks

The pipeline applies three layers of automated checks, and the same defect classes are enforceable in the TC's own build before submission.

Layer When What it catches
Pre-render lint In step 2.0, on the HTML that step 1.0 produced, before the PDF is printed Structural issues in the rendered HTML that indicate a problem with the source MD or the renderer's interaction with it
Post-render assertions After PDF generation Issues that only show up in the printed PDF: a title printed twice on the cover page, a build-runner path in the text
Acceptance checks (pub-check) In the TC's own build, before the vote, and again by TC Administration at intake and before go-live Every defect class below, plus stage naming, front matter, links and packaging

A TC's own clean run predicts intake acceptance; it never substitutes for it, because TC Administration runs the same checks again. If a check fails (for pub-check, a blocker; its warnings are reported but do not stop a publication) the publication stops, the offending issue is reported by name, and the source is not deployed.

2.Pre-render issues

2.1Title rendered more than once on the cover page

What it looks like. The PDF cover page shows the specification title twice in a row, e.g.:

Data Provenance Metadata Version 1.0
Data Provenance Metadata Version 1.0
Committee Specification Draft 01
07 May 2026

What caused it. The source MD has more than one top-level heading matching the document title, or pandoc has emitted a separate title block on top of the body H1.

How to fix it. Ensure exactly one # Title heading at the top of the source, and let the citation block use lower-level headings.

2.2Pandoc title-block leakage

What it looks like. The published HTML contains a stray <header id="title-block-header">...</header> element that duplicates the title.

What caused it. Pandoc emits this block when invoked with --metadata title=. The pipeline strips it during rendering, but a malformed source MD can interact with the strip step.

How to fix it. Usually no source change required; the pipeline strips this automatically. If the lint flags it, the source has an unusual title shape that the pipeline operator can investigate.

2.3Build-runner path leaked into HTML

What it looks like. The published HTML contains a reference to /home/runner/... somewhere in a <link> or <img> tag.

What caused it. Pandoc has serialised an absolute filesystem path from the build environment into the output.

How to fix it. No source change required. The pipeline catches this and refuses to deploy.

2.4Image path with a double slash

What it looks like. The image fails to load on the published page, or in the PDF.

What caused it. The source MD references an image with a path like ./images//figure.svg (double slash). Browsers tolerate the double; the CDN does not.

How to fix it. Remove the double slash in the source: ./images/figure.svg.

2.5Horizontal rule between the OASIS logo and the title

What it looks like. The PDF cover renders with a blank page between the OASIS logo and the spec title.

What caused it. A Markdown horizontal rule (--- on its own line) immediately follows the logo. The publication CSS treats this as a PDF page break.

How to fix it. Remove the --- between the logo and the title H1 in the source MD.

2.6YAML code-block info string with trailing text

What it looks like. A YAML code block in the published HTML renders as a single line of inline code rather than a multi-line syntax-highlighted block. Each affected block is collapsed.

What caused it. The source MD has a fenced code block opening like:

```yaml <!-- json-path($.foo.bar) -->
key: value
...
```

Pandoc's classic fenced-code parser does not accept trailing text after the language token. The pipeline rewrites this pattern before pandoc sees it, so this is usually caught and handled automatically.

How to fix it. No action is needed for this publication; the pipeline rewrites the fence. The lint reports it so the editor can remove the trailing text in the next working draft.

2.7Image source defect

What it looks like. The publication fails with a message naming an <img> tag in the source.

What caused it. One of:

How to fix it. Each case has a specific cause in the source. The lint message names the offending image and the specific defect. Fix the reference in the source MD or replace the image file.

3.Post-render assertions

These run after the PDF is generated, against the rendered output.

3.1Cover page title appears more than once

What it looks like. Same symptom as 2.1, caught at the PDF stage if the pre-render lint missed it (e.g. the strip step was bypassed).

How to fix it. Same as 2.1.

3.2Build-runner path leaked into the PDF

What it looks like. The rendered PDF text contains /home/runner/... somewhere in the body.

What caused it. Same as 2.3, but the leak survived the HTML strip and reached the PDF.

How to fix it. No source change required. The pipeline catches this and refuses to deploy.

4.Failed publications

The publication operator surfaces the specific failure by name and, where the cause is in the source MD, points to the offending location. The TC editor fixes the source on the editorial branch, the operator re-runs the chain, the checks pass, and the publication goes live.

The TC editor never has to read the pipeline source code or guess what's wrong. The lint and assertions are designed to name the problem in terms the editor can act on.

5.Defect identifiers for cross-reference

When the publication operator or a reviewer cites a defect by ID, the mapping is:

ID Layer Name (in this page)
D1 Pre-render Title rendered more than once on the cover page
D2 Pre-render Pandoc title-block leakage
D3 Pre-render Build-runner path leaked into HTML
D4 Pre-render Image path with a double slash
D5 Pre-render Horizontal rule between the OASIS logo and the title
D6 Pre-render YAML code-block info string with trailing text
D7 Pre-render Image source defect
A1 Post-render Cover page title appears more than once
A2 Post-render Build-runner path leaked into the PDF

New defect classes are added when a new regression is caught in the field. The ID sequence is append-only; old IDs are never reused.

The full registry is also enforced at intake by pub-check (D1-D3 as html-residue, D4 as double-slash, D5 as cover-hr, D6 as fence-collapse, D7 as image-policy, A1/A2 as pdf-cover), so a TC can catch every one of these before submission: python3 oasis_pub_check.py <stage-dir>.

6.Changes to the PDF in recent releases

The PDF step changed three times between 27 and 30 September 2026. A TC that compares a new PDF with its previous draft will see these differences; none needs a change to the source. The Publication Console's steps run the toolkit's main branch, so they pick up each change as soon as it is merged. A TC repository that pins the toolkit (see architecture) gets them when it moves its pin to that release or later.

Release What changed in the PDF Where it showed
v0.4.0 A4 paper, the published OASIS footer (document name, track, copyright line, date), no running header, and a table of contents numbered from the printed pages. Earlier PDFs were US Letter with "Standards Track Work Product" as a running header on every document, Committee Notes included Every PDF the Publication Console has built since 27 September 2026
v0.4.1 A contents entry that wraps onto a second line ends that line with its page number. Before, the number sat on the first line and the dot leader ran along the second line to nothing DMLex, contents entry F.1.1
v0.5.0 A multi-line code block prints as one block. Before, each line printed in its own overlapping, clipped box; the published HTML was not affected CSAF v2.1 CSD03: 447 of 667 code blocks, in both renderers

7.Related documentation