---
name: template-infrastructure-module
description: |
  Add or extend generic infrastructure/ packages — Layer 1 modules with SKILL.md, AGENTS.md,
  tests in tests/infra_tests/, 60% coverage. USE WHEN new reusable package under
  infrastructure/, extending validation/rendering/llm, or skill manifest entry — even without
  infrastructure_module prompt.
metadata:
  version: "1.0.0"
  last_updated: "2026-05-25"
  status: active
  data_access_level: raw
  task_type: open-ended
  modes:
    - package
  related_skills:
    - template-code-development
    - template-test-creation
---

# Infrastructure module

## Natural invoke

- "Add infrastructure/foo/ package with CLI and tests"
- "Extend infrastructure/validation with a new gate"
- "New generic utility reusable across projects"

## Inputs to confirm

- **Module name** — under `infrastructure/<package>/`.
- **Public API** — functions/classes to export in `__init__.py` and `__all__`.

## Workflow

1. **Layout** — `__init__.py`, core logic module(s), optional `cli.py`, `AGENTS.md`, `README.md`, `SKILL.md` with YAML frontmatter.

2. **Implement** — generic (no project-specific paths hard-coded); type hints; `TemplateError` hierarchy.

3. **Tests** — `tests/infra_tests/<package>/`; no mocks; ≥60% on `infrastructure/`.

4. **Exports** — re-exporting `__init__.py` must declare `__all__` (MED5).

5. **Register skill** — `uv run python -m infrastructure.skills write` after adding `SKILL.md`.

6. **Wire docs** — update `infrastructure/AGENTS.md` module map if significant.

## Deliverables

- Package tree + test path
- Coverage snippet from pytest

## Verification commands

```bash
uv run pytest tests/infra_tests/<area>/ -v --cov=infrastructure --cov-fail-under=60
uv run python -m infrastructure.skills check
uv run python -m infrastructure.skills check --all-exports
```

## When NOT to use

- **Project-specific domain code** → [code-development](../code-development/SKILL.md) in `projects/*/src/`

## References

- [`infrastructure/AGENTS.md`](../../../infrastructure/AGENTS.md)
- [`docs/rules/api_design.md`](../../rules/api_design.md) — `__all__` for re-exporters
