Skip to content

Commit 874f49a

Browse files
committed
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.
1 parent b928dc9 commit 874f49a

1 file changed

Lines changed: 3 additions & 32 deletions

File tree

‎AGENTS.md‎

Lines changed: 3 additions & 32 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

0 commit comments

Comments
 (0)