Python template with some awesome tools to quickstart any Python project
Project description
A delivery system that treats documentation as a first-class artifact and enforces production rigor through an AI-assisted workflow. Your team ships features, not broken promises.
Who is this for?
Developers — AI pair programming with industry standards
You have used AI coding assistants. They generate code fast, but without tests, without traceability, and without review. This template enforces TDD by default: acceptance criteria exist before code, every requirement traces to a test, and an adversarial review gates every shipment. The AI writes tests first, respects your architecture, and ships code you would merge with confidence.
Product Owners & Project Managers — Living documentation that earns trust
Stakeholders cannot read code. They read decisions. This template turns your repository into a transparent narrative: Gherkin stories trace requirements to tests, architecture decision records preserve reasoning, and a living domain model keeps everyone speaking the same language. Demo from the same source your engineers build from. No drift. No "trust me, it is done."
The delivery cycle
SCOPE → ARCH → TDD LOOP → VERIFY → ACCEPT
Each feature moves through five steps. At any moment, exactly one feature is in progress — enforced by filesystem state, not convention:
docs/features/backlog/ ← scoped, waiting
docs/features/in-progress/ ← building now (max 1)
docs/features/completed/ ← accepted and shipped
Scope is written before architecture. Architecture is written before code. Code is reviewed adversarially before acceptance. Nothing moves to completed without explicit Product Owner sign-off.
Living documentation views
Every artifact is version-controlled alongside the code that implements it.
Feature narratives — Gherkin .feature files in docs/features/ show exactly what is scoped, building, or shipped. Each story maps directly to tests; no requirement is orphaned.
Architecture decisions — Every significant architectural choice is recorded as a dated ADR in docs/adr/. Six months from now, the team can reconstruct not just what was built, but why.
Domain model and glossary — A living domain model and glossary keep business language consistent across team, documentation, and code. No invented synonyms; no drift between what stakeholders say and what engineers build.
System overview — docs/system.md reflects only completed, accepted features. No stale speculation; no documentation that lies about current state.
C4 diagrams — Context and container diagrams generated from the same source as the code, giving stakeholders a precise picture of system boundaries.
Post-mortems — Failures become append-only organizational memory in docs/post-mortem/. The same failure mode does not repeat silently; it leaves a record.
Development standards
TDD by default — Red → Green → Refactor, one acceptance criterion at a time. Every test is written before the code it validates. The loop is canonical: write the failing test, write the minimum code to pass, then refactor with the safety net of a green bar.
Behavioral tests only — Tests describe observable contracts, not implementation internals. A test that survives a complete internal rewrite is a good test. A test that breaks on refactoring is a liability.
Coverage enforced — Measured against your package. Threshold is defined in pyproject.toml. No untested paths ship. Coverage is a floor, not a goal.
Design principles enforced — YAGNI, KISS, DRY, SOLID, and Object Calisthenics are not guidelines — they are review gates. Every principle is checked with file and line evidence before a feature is approved.
Refactoring as first-class — The REFACTOR phase is not optional cleanup. Code smells trigger specific pattern applications. Complexity is managed continuously, not accumulated and then confronted.
Git workflow with guardrails — All work happens on feature branches. No force push. No history rewrite on shared branches. Conventional commits only. Clean merges to main via --no-ff. The branch model is simple and safe by default.
Zero type errors — Full static type checking with no exceptions, no type: ignore suppressions.
Adversarial verification — The architect who designed the system reviews it. The default hypothesis is "broken." Green automated checks are necessary but not sufficient for approval.
Quick start
git clone https://github.com/nullhack/temple8
cd temple8
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if uv is already installed
uv sync --all-extras
opencode && @setup-project # personalise for your project
uv run task test && uv run task lint && uv run task static-check
Commands
uv run task test # full suite + coverage
uv run task test-fast # fast, no coverage (use during TDD loop)
uv run task lint # ruff format + check
uv run task static-check # pyright type checking
uv run task run # run the app
uv run task doc-build # build API docs + coverage report
License
MIT — see LICENSE.
Author: @nullhack · Documentation
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 temple8-7.2.20260423.tar.gz.
File metadata
- Download URL: temple8-7.2.20260423.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48a5d614b559de2799e16c66b7d26e94f2dbb948134110680b449ba20b79f1d0
|
|
| MD5 |
197d3d2ea0d39ea6cc55a9041d354bb5
|
|
| BLAKE2b-256 |
570ad0ccca4b3c2fedce479adda5fbc7892280e7ce7047e1911f4bca8251f413
|
Provenance
The following attestation bundles were made for temple8-7.2.20260423.tar.gz:
Publisher:
pypi-publish.yml on nullhack/temple8
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
temple8-7.2.20260423.tar.gz -
Subject digest:
48a5d614b559de2799e16c66b7d26e94f2dbb948134110680b449ba20b79f1d0 - Sigstore transparency entry: 1361555940
- Sigstore integration time:
-
Permalink:
nullhack/temple8@2b090ea6f020a09e2745c339d1d6e0e494dd25b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nullhack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2b090ea6f020a09e2745c339d1d6e0e494dd25b6 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file temple8-7.2.20260423-py3-none-any.whl.
File metadata
- Download URL: temple8-7.2.20260423-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0f6c92ccc9d7bc320af75e9b07f5b0a4c89e08a50b9a4fb731dae66b266b7c4
|
|
| MD5 |
26e437f79fcf1b1576fab41a1d3aa003
|
|
| BLAKE2b-256 |
0906a25db184a71a947b3b6cb2d5e301f25b3bcca3e3c4ea7951e87d16a9a8f5
|
Provenance
The following attestation bundles were made for temple8-7.2.20260423-py3-none-any.whl:
Publisher:
pypi-publish.yml on nullhack/temple8
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
temple8-7.2.20260423-py3-none-any.whl -
Subject digest:
c0f6c92ccc9d7bc320af75e9b07f5b0a4c89e08a50b9a4fb731dae66b266b7c4 - Sigstore transparency entry: 1361555941
- Sigstore integration time:
-
Permalink:
nullhack/temple8@2b090ea6f020a09e2745c339d1d6e0e494dd25b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nullhack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2b090ea6f020a09e2745c339d1d6e0e494dd25b6 -
Trigger Event:
workflow_dispatch
-
Statement type: