Accessibility-first publishing engine — PDF/UA-2 + WTPDF + PDF/A-4f, C2PA + PAdES + SLSA provenance, multi-format emission, MCP server.
Project description
Inclusio
Publishing that includes everyone.
Accessibility-first publishing engine for LaTeX, packaged as a Python CLI. PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance, C2PA + PAdES + SLSA provenance, multi-format emission (HTML5 / JATS / EPUB3), LLM-augmented judges, and an MCP server for agent integration. Built for macOS, Linux, and WSL.
Install
Run the local bootstrap:
./bin/setup
Then validate the engine:
make test
make coverage
Requires python3, git, and a TeX toolchain. Use WSL for full Windows support. Install tagpdf.sty if you need accessibility tagging.
Publish
Publish against the private content repository with the shell-agnostic form:
make publish CONTENT_DIR=/absolute/path/to/inclusio-private
Use the shell-specific form only when you need it:
# Bash / Zsh / POSIX sh
INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
# fish
env INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
# PowerShell
$env:INCLUSIO_CONTENT_DIR = "/absolute/path/to/inclusio-private"
make publish
EUXIS_PUBLISHER_CONTENT_DIR is not supported.
Drop supported briefs into data/jobs/ in the private content repo, then run
publish. The build now promotes .txt, .md, .markdown, .rtf, .doc,
.docx, .odt, and .html briefs into data/tailored/ automatically before
compiling PDFs.
Overview
Use this repository as the public engine layer of the Euxis publishing stack.
Keep private content in inclusio-private.
You get:
- LaTeX classes and styles through
core/cls/andcore/sty/ - Packaged Python entrypoints through
inclusio/cli/ - Operator utilities through
inclusio/tools/ - Compatibility wrappers through
scripts/ - Public fixture content through
data/,src/, andtemplates/ - 100% package coverage over
inclusio
Architecture
First, render or tailor content. Then compile camera-ready output from the same engine.
graph TD
A[Private or Public Content] --> B{inclusio.cli.build}
B --> C[Render: Jinja2 to LaTeX or Markdown]
B --> D[Build: latexmk or TeX compiler]
B --> E[Tailor: Brief to structured YAML]
C --> F[build/.cache/rendered]
D --> G[PDF artifacts]
E --> H[data/tailored]
G --> I[Stamping and metadata tooling]
Features
| Engine | Packaged Python CLI with build, render, blog, tailor, lint, and cleanup commands |
| Typography | Shared LaTeX classes and style packages for CVs, papers, patents, FAQs, guides, and bios |
| Build Modes | Draft, submission, and camera-ready flows managed from one orchestration layer |
| Publishing | PDF/A-oriented metadata flow with provenance stamping support |
| Fixtures | Public sample content for engine validation without exposing private briefs or templates |
| Coverage | 100% package coverage across inclusio |
| Platforms | macOS, Linux, and WSL |
| Docs | Sphinx docs plus folder-level READMEs for every major public surface |
Commands
| Command | Execute this to... |
|---|---|
make list |
inspect registered documents |
make draft |
compile all public documents in draft mode |
make final |
compile camera-ready output from the current content root |
make publish CONTENT_DIR=/absolute/path/to/inclusio-private |
auto-tailor briefs from data/jobs/ and compile the full private set |
make render |
render Jinja2 templates to LaTeX |
make render-md |
render Markdown output |
make blog |
render blog posts |
make tailor BRIEF=data/jobs/job.txt |
generate one tailored document explicitly and build it |
make sitemap |
generate build/site-map.json |
make test |
run the public engine test target |
make coverage |
enforce the package coverage gate |
make docs |
build the Sphinx site |
Use the packaged CLIs directly when you need lower-level control:
python3 -m inclusio.cli.build list
python3 -m inclusio.cli.render --doc cv
python3 -m inclusio.cli.sitemap --pretty
python3 -m inclusio.cli.tailor data/jobs/test.txt --no-ai
For bulk private publishing, prefer make publish. It scans data/jobs/,
refreshes stale tailored YAML, and compiles the resulting PDFs in one pass.
Public vs Private Boundary
Keep these surfaces public:
core/inclusio/scripts/tests/- non-sensitive fixtures in
data/,src/, andtemplates/ - CI, docs, and build metadata
Keep these surfaces private:
- real briefs and client content
- proprietary templates and assets
- content-bearing metadata sets
- content-specific QA and linguistic validation
For the full boundary contract, read docs/public-private-boundary.md.
Documentation
Start here:
- docs/README.md
- docs/architecture.md
- docs/classes-and-styles.md
- docs/package-reference.md
- docs/macro-reference.md
- docs/usage.md
- docs/testing-and-ci.md
Folder guides:
- bin/README.md
- core/README.md
- data/README.md
- inclusio/README.md
- inclusio/cli/README.md
- inclusio/tools/README.md
- scripts/README.md
- src/README.md
- templates/README.md
- tests/README.md
License
Licensed under the MIT License. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file inclusio-0.0.2.tar.gz.
File metadata
- Download URL: inclusio-0.0.2.tar.gz
- Upload date:
- Size: 183.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21448932237061039db66e15d0e745f7ae4e99af28b6ccf63325c7605aaf3aed
|
|
| MD5 |
f2928f07fab0b678a9187437684936fe
|
|
| BLAKE2b-256 |
2460be301620c277eae4c0ae74db8b7d1aeb21167d8138224f013a7863b83711
|
File details
Details for the file inclusio-0.0.2-py3-none-any.whl.
File metadata
- Download URL: inclusio-0.0.2-py3-none-any.whl
- Upload date:
- Size: 101.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e42570e091dc6f9f0d05f014e25a0b1940a2d5046bc8036e135272b240011f9b
|
|
| MD5 |
e1a85512f5edfb2e1ddc4462e3c39803
|
|
| BLAKE2b-256 |
7ad29bd6c25563f2bd8d55f2a7689c25065f7696effc13f89b4761c0b2688184
|