diff --git a/single-repository.yaml b/single-repository.yaml new file mode 100644 index 00000000..52a12760 --- /dev/null +++ b/single-repository.yaml @@ -0,0 +1,37 @@ +schema_version: 1 +kind: single-repository-record + +# =========================================================================== +# single-repository.yaml — this project STAYS A SINGLE REPOSITORY, recorded. +# +# OPTIONAL, AND NEVER OWED. The Triad — an assembly root with a spec leg and +# a code leg — is the PREFERRED project shape (openxFactory +# `prefer-triad-project-shape`, ratified by Brett Heap on 2026-10-06), and a +# person starting work here is told so once. This file is how a project that +# has DECIDED to stay in one repository says so, once, and stops meeting that +# advisory. A project that writes nothing owes nothing and is reviewed +# identically. +# +# IT CONFERS NOTHING. No gate, no floor, no grant, no clearance eligibility, +# no lifecycle state and no review difference. Its only reader is +# openRepoShape's Triad advisory; no review lane, required check, validator, +# floor, council or merge gate reads it. +# +# HOW TO USE IT. Copy this file to the repository's ROOT as +# `single-repository.yaml`, replace every value in double braces below, and +# commit it like any other change. `revisit_on:` is optional — delete its line if +# there is nothing to revisit. The schema is openRepoShape's +# `contracts/single-repository-record.yaml`. Converting to the Triad later is +# `adopt-project.py`, run by a person deciding for the project; nothing +# converts on this file's account, and nothing reads `revisit_on:` but people. +# =========================================================================== + +# The person who decided, for this project, that it stays single. +decided_by: "Brett Heap" + +# The day they decided it, as YYYY-MM-DD. +decided_on: "2026-10-11" + +# Why, in a sentence: a configuration repository, an aggregation, a vendored +# fork, a project too small to split. +reason: "openRepoShape is the standard itself: its rules (README, AGENTS.md, contracts) and the tools that apply them change together in one reviewed commit, and every project pins one commit of it." diff --git a/tests/test_shape_advisory.py b/tests/test_shape_advisory.py index 211df69e..64183f99 100644 --- a/tests/test_shape_advisory.py +++ b/tests/test_shape_advisory.py @@ -21,6 +21,9 @@ * a `single-repository.yaml` that does not parse, or declares another kind, silences nothing and is REPORTED beside the advisory, failing nothing; + * this repository is one of them: its own root carries the record Brett + Heap decided on 2026-10-11 (#337), so the standard's own checkout is not + advised either; * it writes nothing, records nothing, and is read by the three tools and by no validator, template script or workflow. @@ -661,6 +664,39 @@ def test_the_schema_the_template_and_the_module_agree(): assert shape_advisory.field_problems(parse_yaml(filled)) == [] +def test_this_repository_records_that_it_stays_single(quiet_env): + """#337: openRepoShape is not a Triad and says so, once, in its own root. + + Brett Heap decided on 2026-10-11 that this repository stays a single + repository, so the doctor gave every session that began work in this + checkout the advisory about the standard itself. The record is the + standard's own `single-repository.yaml`: it must be there, of the right + kind and with every field its schema asks for, and the doctor must not + give the advisory about it. + + ASKED OF THE DISK, as the doctor asks, and of two readers: `read_record` + for the file alone, which cannot depend on what this checkout is called + or where it sits, and the doctor's own rows for what a person actually + meets. The second asks for no `advisory` row rather than for no + `triad-advisory` row at all, because a checkout cloned under a leg's name + is sent to its assembly root instead and that row is not the advisory. + Nothing here pins a value of the record: the day Brett Heap amends his + decision, the file changes and this test does not. + """ + state, silences_nothing, notes = shape_advisory.read_record(REPO) + assert state == shape_advisory.RECORD_SILENCES, ( + f"this repository's root has no {RECORD} of the right kind: " + f"{state}, {silences_nothing}") + assert notes == [], ( + f"this repository's {RECORD} departs from " + f"{shape_advisory.RECORD_SCHEMA}: {notes}") + + _, rows, _ = doctor_json(REPO, quiet_env) + assert all(row["status"] != "advisory" for row in rows.values()), ( + "the doctor still gives this repository the Triad advisory: " + f"{rows.get(ROW)}") + + @pytest.mark.parametrize("field, value, problem", [ ("decided_on", "06/10/2026", "not an ISO date"), ("decided_on", "2026-02-30", "not an ISO date"),