Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions single-repository.yaml
Original file line number Diff line number Diff line change
@@ -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."
36 changes: 36 additions & 0 deletions tests/test_shape_advisory.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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"),
Expand Down
Loading