0006. Test-tree ownership: developer tests, verification tests, fixtures
Status
Accepted, 2026-07-25.
Context
Path-based ownership (ADR-0002) gives the Software Engineer
src/affirmatrix/ and the Test Engineer tests/. Two instructions
cut across that boundary. The Software Engineer is required to work
test-first, so the Software Engineer necessarily authors test code; and the
iteration-0 would-be store — a fixture the Software Engineer hand-authors —
is placed in tests/fixtures/. As written, the Software Engineer cannot
follow the method without writing in the Test Engineer’s path.
The two kinds of test are genuinely different artifacts, not merely
differently-authored ones. The Test Engineer’s tests are verification
evidence:
each realizes a SEG-TS-nnn specification, states that specification in
a :test-id: marker and the requirement it demonstrates in a
:verifies: marker, and becomes a TestOutcome node in the case. The
Software Engineer’s tests are developer tests: they drive the design, they are not graph
participants, and nothing in the evidence graph refers to them.
Decision
The test tree is partitioned by artifact kind, one directory per owner:
Path |
Owner |
Holds |
|---|---|---|
|
Software Engineer |
developer tests (test-first) |
|
Software Engineer |
fixture data, incl. the would-be store |
|
Test Engineer |
the verification suite
realizing |
|
shared |
changed by proposal only |
A single pytest root is retained; testpaths = ["tests"] is unchanged.
Ownership stays directory-granular, so the standing rule — never two
agents in the same path — survives verbatim, one level deeper.
Rejected alternatives: a separate top-level tree for developer tests
(cleanest boundary, but two pytest roots and a layout an OSS contributor
would not expect, against ADR-0002’s clone-and-build motive); and tests
inside src/affirmatrix/ (no brief amendment needed, but it ships test
code and fixture data in the wheel and hides the suite from contributors).
Consequences
Software Engineer’s brief, path scope: Edit gains
tests/unit/andtests/fixtures/; the line “tests/… are the Test Engineer’s paths” narrows totests/specification/anddoc/test-specification/.Test Engineer’s brief, path scope: Edit narrows from
tests/totests/specification/; Read gainstests/unit/andtests/fixtures/.tests/conftest.pyfollows the precedent already set for the shared documentation federation config: common infrastructure, changed by proposal at a checkpoint, not unilaterally.The tree documents the distinction it encodes: a reader can see which tests are evidence and which are development.
The would-be store lands at
tests/fixtures/would_be_store/, exactly where the Software Engineer’s brief says — the contradiction is removed by widening the Software Engineer’s scope, not by moving the fixture.Amended 2026-09-29:
pyproject.tomlis owned by the maintainer who decides on dependencies. A dependency or tool-configuration change is such a decision, applied in whichever pass needs it; the file is in no role’s edit scope by default.