| name | template-prose-project |
| description | Prose-review pipeline exemplar — readability gates, structural checking, BibTeX validation, and quality review workflows. |
| version | 0.1.0 |
| author | docxology |
| license | MIT |
| tags | ["exemplar","prose","review","readability"] |
template-prose-project
Project-scoped skill for the in-repo exemplar at
projects/templates/template_prose_project/. Load this when working inside the project.
When to Use
- Working inside the
template_prose_project exemplar — running scripts, editing source,
or regenerating outputs.
- Forking this exemplar as the starting scaffold for a new research project.
- Validating that the exemplar's contracts (thin-orchestrator, layer boundaries,
no-mocks testing) still hold after changes.
Quick Reference
uv run pytest projects/templates/template_prose_project/tests --cov=projects/templates/template_prose_project/src --cov-fail-under=90
uv run python scripts/pipeline/stage_02_analysis.py --project templates/template_prose_project
uv run python scripts/pipeline/stage_03_render.py --project templates/template_prose_project
uv run python scripts/pipeline/stage_04_validate.py --project templates/template_prose_project
uv run python scripts/pipeline/stage_05_copy.py --project templates/template_prose_project
Pitfalls
- Keep scripts thin. Business logic belongs in
src/ or shared
infrastructure/, not in scripts/.
- No mocks. All tests must use real data, real files, and real
computation.
- Outputs are disposable. Never hand-edit
output/ — regenerate from
source and config.
- Run from the repo root. Commands assume the template monorepo root
as working directory unless the child
AGENTS.md states otherwise.
- Mermaid/PDF rendering needs a pinned Chrome. Diagrams built with
mmdc
require chrome-headless-shell; install it once via
npx --yes puppeteer browsers install chrome-headless-shell (see
README.md).
- Config validation is strict, not permissive.
src/config.py::ProjectConfig.from_dict
rejects unknown keys and out-of-range values by raising ValueError with the
offending value and the allowed set quoted — see
docs/faq.md.
Cross-refs