@tibsfox/publish-pipeline
BMarkdown to HTML/PDF build + FTP sync to configured remote host. Pandoc + xelatex templates, branded output, automated deployment. Proven on 29-document HEL series.
Install
agr install @tibsfox/publish-pipeline --target claudeWrites 1 file into .claude/skills/, pinned to git-75de0be0.
- .claude/skills/publish-pipeline/SKILL.md
Document
name: publish-pipeline description: Markdown to HTML/PDF build + FTP sync to configured remote host. Pandoc + xelatex templates, branded output, automated deployment. Proven on 29-document HEL series. version: 1.0.0 type: skill category: media status: stable origin: tibsfox modified: false first_seen: 2026-03-31 first_path: .claude/skills/publish-pipeline/SKILL.md superseded_by: null
Publish Pipeline
Activates when research documents need to be converted to publication formats and deployed to the live site.
Build Chain
Markdown (.md) → pandoc → Standalone HTML (branded template)
→ LaTeX PDF (xelatex, branded template)
Prerequisites
~/.local/bin/pandoc(v3.6+)xelatex(texlive-xetex)- DejaVu fonts (for PDF)
- Templates at the project level:
template.tex,html-template.html build.shscript in the project directory
Build Command
bash www/$SITE_DOMAIN/Research/PROJECT/build.sh
Template Setup
Each research project needs:
template.tex— LaTeX template (branded header/footer, colors, title page)html-template.html— Standalone HTML template (dark theme, navigation)build.sh— Iterates research/*.md, builds both formats
FTP Sync
# Full site sync
bash scripts/sync-research-to-live.sh
# Single project sync (direct to FTP root)
lftp -f /tmp/lftp-PROJECT.sh
# Where remote path is /PROJECT (NOT /Research/PROJECT)
Critical: The web server maps $DEPLOY_HOST/Research/X/ to FTP root /X/, not to /Research/X/. Always upload to root-level project directories.
Series Integration
After publishing, add the project to series.js:
{ id: 'CODE', name: 'Project Name', path: 'CODE/index.html' },
Alphabetical insertion by ID.
Trustgrade B
- passBody integrity
Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.
- passType matchnot applicable to this artifact type
Whether the artifact is really the kind of thing its metadata claims it is.
- passFreshness
How long since the source repository was last pushed to.
- passPrompt injection
Scans the artifact's own text for instructions aimed at your agent rather than at you.
- warnLicenseno SPDX license detected
Whether the source repository declares an SPDX license permissive enough to redistribute.
How the grade is calculated
Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:
- Aevery check passed
- Bone warning
- Ctwo warnings
- Dprompt injection or body integrity failed, or three warnings
- Fone of those failed, and something else is wrong
These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.
Versions
git-75de0be0e1352026-07-31