Skip to content

Commit d20032d

Browse files
authored
docs(agents): drop the fact-placement convention from AGENTS.md (#121)
* docs(agents): drop the fact-placement convention from AGENTS.md Where a fact goes, its admission check and the ADR convention all go; doc placement is a domain-modeling convention. The INVARIANT: docstring shape stays. * docs(agents): drop inline ADR citations from AGENTS.md The remaining docs/adr/ references were citations inside architecture prose, or an index of them. The prose stays; the pointers go.
1 parent b928dc9 commit d20032d

1 file changed

Lines changed: 4 additions & 33 deletions

File tree

‎AGENTS.md‎

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ re-exported as-is. Three protocol seams — client ↔ middleware chain, client
2525
httpware ↔ optional extras — are defined in `CONTEXT.md` and named **A**, **B** and **C** in the
2626
module docstrings that implement them. Never cross a seam except through its protocol.
2727

28-
Behavior detail has no prose home — it lives in the code and its `INVARIANT:`-marked tests. Before
29-
writing prose about a capability, run the admission check in **Where a fact goes** below.
30-
3128
### Key files
3229

3330
Every module under `src/httpware/` is named for what it does; read it. What a single-file read will
@@ -68,38 +65,12 @@ parallelism: they run under the GIL for coverage, but the proof comes from the f
6865

6966
## Workflow
7067

71-
Two things outlive the PR, and there are exactly two places to put them: an alternative
72-
**rejected** with reasoning becomes an ADR in [`docs/adr/`](docs/adr/) (`NNNN-slug.md`,
73-
sequential), and real work **not scheduled** becomes a GitHub issue. There is no third state, and
74-
no separate truth-home directory — a behaviour change is reviewed with the diff, not promoted to a
75-
page.
76-
77-
### Where a fact goes
78-
79-
Four homes, one owner each:
80-
81-
| Home | Holds |
82-
|---|---|
83-
| `src/httpware/` | anything readable from the module — the default |
84-
| a named test | an **invariant**: must stay true, and a change could silently break it |
85-
| `docs/adr/` | a rejected alternative, with the reasoning that would otherwise be re-litigated |
86-
| `docs/` | anything a user needs |
87-
88-
Before writing a line anywhere:
89-
90-
> Can an agent get this by reading `src/httpware/`? → **don't write it.**
91-
> Would a wrong change here fail a test? → it belongs **in the test**, not in prose.
92-
> Does a user need it? → **`docs/`**.
93-
> Otherwise it does not get written.
94-
95-
**Prose about mechanism has no home. There is no file to add a paragraph to.** This file included:
96-
it is always loaded, so a line that restates a docstring, a justfile comment, or `pyproject.toml`
97-
costs every turn and rots in two places at once.
68+
Real work **not scheduled** becomes a GitHub issue.
9869

9970
An invariant is a test whose name is the claim, with a docstring opening `INVARIANT:` and a second
10071
paragraph naming **what breaks it** — design rationale, not a report of what this one test catches;
101-
a sibling test may be the one that trips. Both ADRs and `INVARIANT:` docstrings ratchet: nothing
102-
prunes a record once its call is settled. Keeping them lean is a standing habit.
72+
a sibling test may be the one that trips. Nothing enforces that docstring shape; it is read at
73+
review time.
10374

10475
## Code Style
10576

@@ -111,7 +82,7 @@ prunes a record once its call is settled. Keeping them lean is a standing habit.
11182
`ty`, which silently accepts the latter without checking the rule
11283
- Docstrings: public API documents the contract; internal helpers get a one-line contract, plus at
11384
most 1–2 lines for a genuinely non-obvious constraint. Never narrate implementation or justify
114-
code to a reviewer — cross-file rationale lives in an `INVARIANT:` test docstring or an ADR
85+
code to a reviewer — cross-file rationale lives in an `INVARIANT:` test docstring
11586

11687
## Agent skills
11788

0 commit comments

Comments
 (0)