---
name: docxology/template-prose-project
source: https://app.decimal.ai/s/docxology-template-prose-project@1/SKILL.md
source_sha256: 3fdfbc0e24c2
---

# 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

```bash
# From the repository root
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`](../../../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`](../../../docs/faq.md).

## Cross-refs

- Project contract: [`AGENTS.md`](../../../AGENTS.md)
- README: [`README.md`](../../../README.md)
- TODO: [`TODO.md`](../../../TODO.md)
- Exemplar roster: [`projects/AGENTS.md`](../../../../../AGENTS.md)