Skip to content

Commit 355c879

Browse files
authored
hotfix(v6.4.20260420): rewrite README in brand voice and enrich branding.md with Greek-antiquity theme (#91)
1 parent 4cd2b8f commit 355c879

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

README.md

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
[![CI](https://img.shields.io/github/actions/workflow/status/nullhack/python-project-template/ci.yml?style=for-the-badge&label=CI)](https://github.com/nullhack/python-project-template/actions/workflows/ci.yml)
1414
[![Python](https://img.shields.io/badge/python-3.13-blue?style=for-the-badge)](https://www.python.org/downloads/)
1515

16-
**Production-ready Python scaffolding with a structured AI-agent workflow — from idea to shipped feature.**
16+
**From zero to hero — production-ready Python, without the ceremony.**
1717

1818
</div>
1919

@@ -34,19 +34,21 @@ uv run task test && uv run task lint && uv run task static-check
3434

3535
## Why this template?
3636

37-
Most Python templates give you a folder structure and a `Makefile`. This one gives you a **complete delivery system**:
37+
Most Python templates give you a folder structure and a `Makefile`. This one gives you a **complete delivery system**: five AI agents, a structured five-step workflow, and quality gates that cannot be silenced by convention.
38+
39+
The goal is to give every project — from its first commit — the same rigour that mature teams take years to establish.
3840

3941
- **No feature starts without written acceptance criteria** — Gherkin `Example:` blocks traced to tests
4042
- **No feature ships without adversarial review** — the reviewer's default hypothesis is "broken"
41-
- **No guesswork on test stubs**they are generated automatically from your `.feature` files
43+
- **No guesswork on test stubs** — generated automatically from `.feature` files
4244
- **No manual `@id` tags** — assigned automatically when you run tests
43-
- **AI agents for every role**PO, SE, and reviewer each have scoped instructions; none can exceed their authority
45+
- **AI agents for every role** — each agent has scoped instructions and cannot exceed its authority
4446

4547
---
4648

4749
## How it works
4850

49-
### 5-step delivery cycle
51+
### The delivery cycle
5052

5153
```
5254
SCOPE → ARCH → TDD LOOP → VERIFY → ACCEPT
@@ -75,6 +77,7 @@ docs/features/completed/ ← shipped
7577
| `@product-owner` | Scope, stories, acceptance criteria, delivery acceptance |
7678
| `@software-engineer` | Architecture, TDD loop, git, releases |
7779
| `@reviewer` | Adversarial verification — default position: broken |
80+
| `@designer` | Visual identity, colour palette, SVG assets |
7881
| `@setup-project` | One-time project initialisation |
7982

8083
### Quality tooling, pre-configured
@@ -141,13 +144,21 @@ def test_display_version_a3f2b1c4() -> None:
141144
"""
142145
```
143146

144-
Each test is traced to exactly one acceptance criterion. No orphan tests. No untested criteria.
147+
Each test traces to exactly one acceptance criterion. No orphan tests. No untested criteria.
148+
149+
---
150+
151+
## Branding
152+
153+
When you run `@setup-project`, the agent collects your project's identity — name, tagline, mission, colour palette, and release naming convention — and writes `docs/branding.md`. All agents read this file. Release names, C4 diagram colours, and generated copy all reflect your project's identity without you touching `.opencode/`.
154+
155+
Absent or blank fields fall back to defaults: adjective-animal release names, Mermaid default colours, no wording constraints.
145156

146157
---
147158

148159
## Versioning
149160

150-
`v{major}.{minor}.{YYYYMMDD}` — each release gets a unique adjective-animal name.
161+
`v{major}.{minor}.{YYYYMMDD}` — each release gets a unique name derived from your branding convention. By default: an adjective paired with an animal (scientific name). Configure your own theme in `docs/branding.md`.
151162

152163
---
153164

docs/branding.md

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,51 @@
1-
# Branding
1+
# Branding — Python Project Template
22

3-
All fields are optional. Blank or absent fields fall back to defaults (adjective-animal release names, Mermaid default colors, no wording constraints). Agents read this file before generating release names, C4 diagrams, README banners, or any document with visual or copy identity.
3+
> *From zero to hero — production-ready Python, without the ceremony.*
4+
5+
Agents read this file before generating release names, C4 diagrams, README banners, or any document with visual or copy identity. All fields are optional; absent or blank fields fall back to defaults (adjective-animal release names, Mermaid default colors, no wording constraints).
46

57
---
68

79
## Identity
810

911
- **Project name:** Python Project Template
10-
- **Tagline:** Production-ready Python, from zero to workflow in minutes.
12+
- **Tagline:** From zero to hero — production-ready Python, without the ceremony.
1113
- **Mission:** Eliminate boilerplate so engineers ship features, not setup.
12-
- **Vision:** The standard starting point for any serious Python project.
13-
- **Tone of voice:** Direct, precise, minimal. No fluff.
14+
- **Vision:** The standard starting point for any serious Python project — the bedrock every Python engineer reaches for first.
15+
- **Tone of voice:** Direct, precise, minimal. The Greeks did not decorate the Parthenon with apologies. Neither do we.
1416

1517
## Visual
1618

17-
- **Background/parchment:** `#faf7f2``#ede8e0` — warm off-white marble (primary surface)
18-
- **Primary text:** `#5c3d1e``#3b2410` — deep warm brown (body text, headings)
19-
- **Accent/gold:** `#c9a84c``#e8c96a` — antique gold (borders, highlights, lines)
20-
- **Secondary/blue:** `#7baabf``#4a7a96` — muted steel blue (labels, secondary text)
21-
- **Stone/marble:** `#f0ece4``#c8c0b8` — structural marble tone (temple columns, shapes)
19+
The palette is drawn from classical marble, parchment, and gold — materials that have carried ideas for millennia. Every colour choice serves legibility first; decoration is secondary.
20+
21+
- **Background/parchment:** `#faf7f2``#ede8e0` — warm off-white, the surface on which ideas are set down
22+
- **Primary text:** `#5c3d1e``#3b2410` — deep warm brown, the ink that endures
23+
- **Accent/gold:** `#c9a84c``#e8c96a` — antique gold, used for borders and structural lines only — never body text
24+
- **Secondary/blue:** `#7baabf``#4a7a96` — Aegean steel blue, for labels and secondary hierarchy
25+
- **Stone/marble:** `#f0ece4``#c8c0b8` — the load-bearing colour; columns, shapes, structural chrome
2226
- **Logo:** `docs/assets/logo.svg`
2327
- **Banner:** `docs/assets/banner.svg`
2428

25-
> Color system derived from the SVG assets (classical Greek temple aesthetic — marble, parchment, antique gold). Deep brown `#3b2410` on parchment `#faf7f2` achieves > 10:1 contrast (WCAG AAA). Gold accent used for decorative lines and borders only, not body text.
29+
> Deep brown `#3b2410` on parchment `#faf7f2` achieves >10:1 contrast (WCAG AAA). Gold is decorative; it never carries meaning that must be read.
2630
2731
## Release Naming
2832

2933
- **Convention:** `adjective-greek-figure`
30-
- **Theme:** Greek antiquity — philosophers, heroes, gods, mythological figures (e.g. "Nimble Socrates", "Resolute Athena", "Precise Pythagoras")
34+
- **Theme:** Greek antiquity — philosophers, heroes, gods, mythological figures. Every release name should read like an epithet: something a figure *earned* through their defining quality (e.g. "Resolute Athena", "Precise Pythagoras", "Luminous Hypatia").
35+
- **Rationale:** Ancient Greece is the origin of the intellectual tradition that underpins Western civilisation — democracy, systematic philosophy, formal logic, and scientific reasoning all trace their lineage to the Greek city-states. Plato and Aristotle invented political philosophy as a genre; Aristotle formalised logic and ethics; the Pythagoreans established that abstract reasoning could describe the physical world. This template stands on the same premise: rigorous method, applied from the beginning, produces something worth building on. The Greek figure in each release name is not decoration — it is a statement about what kind of work this is.
3136
- **Excluded words:** *(none)*
3237

3338
## Wording
3439

35-
- **Avoid:** `easy`, `simple`, `just`, `quick` — these undermine engineer credibility
36-
- **Prefer:** `minimal`, `precise`, `production-ready`, `zero-boilerplate`
40+
Every word carries weight. The Greeks had a name for ornament that obscures meaning: *kenophonia* — empty noise.
41+
42+
- **Avoid:** `easy`, `simple`, `just`, `quick`, `scaffold` — these words undermine engineer credibility or imply the work is trivial. A temple is not a scaffold.
43+
- **Prefer:** `minimal`, `precise`, `production-ready`, `zero-boilerplate`, `rigorous`, `from zero to hero`
3744

3845
## Project Summary
3946

4047
A Python project template with a production-ready AI-assisted delivery workflow.
4148
Ships with quality tooling (ruff, pyright, pytest, hypothesis), Gherkin-driven
42-
acceptance criteria, and four specialized AI agents covering scope through release.
43-
Use this summary in banners, release notes, and document headers.
49+
acceptance criteria, and five specialised AI agents covering scope through release.
50+
Built on the premise that rigorous method, applied from the beginning, produces
51+
something worth building on. Use this summary in banners, release notes, and document headers.

0 commit comments

Comments
 (0)