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 ============================ ================= ============================== ``tests/unit/`` Software Engineer developer tests (test-first) ``tests/fixtures/`` Software Engineer fixture data, incl. the would-be store ``tests/specification/`` Test Engineer the verification suite realizing ``SEG-TS-nnn`` ``tests/conftest.py`` 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/`` and ``tests/fixtures/``; the line "``tests/`` … are the Test Engineer's paths" narrows to ``tests/specification/`` and ``doc/test-specification/``. - Test Engineer's brief, path scope: **Edit** narrows from ``tests/`` to ``tests/specification/``; **Read** gains ``tests/unit/`` and ``tests/fixtures/``. - ``tests/conftest.py`` follows 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.toml`` is 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.