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
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -506,12 +506,14 @@ Each authoritative fact should have one explicitly designated ownership and upda
- Conflicting updates would be materially expensive or unsafe.
- A responsible owner can be assigned at an appropriate domain boundary.
- One fact arrives in several spellings, such as case, encoding, or path form, and is normalized to one canonical form at the boundary so that two copies can be compared for equality.
- Text shown to readers, such as documentation, help text, a message, or a footnote, restates facts another party owns, such as a vendor's documented behavior.

**Ask**
- Which component owns the canonical meaning and writes?
- Can every copy explain its source and refresh policy?
- What happens when the authority is unavailable?
- Is there exactly one writer for this fact, and what stops a second component from writing it?
- Where text shown to readers restates another party's facts, does it name the source, and does it say anything as that source's fact which the source does not say?

## Unix Composability
Prefer small, focused mechanisms connected through stable, inspectable interfaces so that complex behavior can be assembled rather than embedded in one indivisible program.
Expand Down
2 changes: 2 additions & 0 deletions REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -506,12 +506,14 @@ Each authoritative fact should have one explicitly designated ownership and upda
- Conflicting updates would be materially expensive or unsafe.
- A responsible owner can be assigned at an appropriate domain boundary.
- One fact arrives in several spellings, such as case, encoding, or path form, and is normalized to one canonical form at the boundary so that two copies can be compared for equality.
- Text shown to readers, such as documentation, help text, a message, or a footnote, restates facts another party owns, such as a vendor's documented behavior.

**Ask**
- Which component owns the canonical meaning and writes?
- Can every copy explain its source and refresh policy?
- What happens when the authority is unavailable?
- Is there exactly one writer for this fact, and what stops a second component from writing it?
- Where text shown to readers restates another party's facts, does it name the source, and does it say anything as that source's fact which the source does not say?

## Unix Composability
Prefer small, focused mechanisms connected through stable, inspectable interfaces so that complex behavior can be assembled rather than embedded in one indivisible program.
Expand Down
5 changes: 5 additions & 0 deletions policy/upheld.toml
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,11 @@ record = "single-authoritative-source"
catches = "Add a hand-written docs/PRINCIPLES.md that restates each record's claim and applies_when, alongside the generated REVIEW.md that already compiles them from principles/*.toml."
misses = "Change scripts/review.py's render() so the compiled document prints applies_when before the claim."

[[review.control]]
record = "single-authoritative-source"
catches = "Add to the osv-scanner bullet in docs/REFERENCE.md that osv-scanner retries a query once before it exits 127, which osv-scanner's own documentation does not say, and link no page for it."
misses = "Reflow the osv-scanner bullet in docs/REFERENCE.md onto different line breaks, keeping every exit code and the meaning given for it."

[[review.control]]
record = "unix-composability"
catches = "Make `uphold_check.py --review --emit` ask \"Overwrite REVIEW.md? [y/N]\" through input() before writing, with no flag to answer it, so a script or agent without a terminal hangs or gets an end-of-file error and the exit status is 0 either way."
Expand Down
4 changes: 2 additions & 2 deletions principles/single-authoritative-source.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ summary = "Give each authoritative fact one owner and update authority; copies a
claim = "Each authoritative fact should have one explicitly designated ownership and update authority, while replicas, caches, and derived views remain subordinate to that authority."
problem = "Independent writable copies create semantic drift, ambiguous ownership, conflicting updates, and reconciliation work."
rationale = "When update authority is explicit, disagreements can be resolved against a known source and changes can be traced to an accountable boundary."
applies_when = ["The same fact is represented in multiple services, stores, reports, or workflows.", "Conflicting updates would be materially expensive or unsafe.", "A responsible owner can be assigned at an appropriate domain boundary.", "One fact arrives in several spellings, such as case, encoding, or path form, and is normalized to one canonical form at the boundary so that two copies can be compared for equality."]
applies_when = ["The same fact is represented in multiple services, stores, reports, or workflows.", "Conflicting updates would be materially expensive or unsafe.", "A responsible owner can be assigned at an appropriate domain boundary.", "One fact arrives in several spellings, such as case, encoding, or path form, and is normalized to one canonical form at the boundary so that two copies can be compared for equality.", "Text shown to readers, such as documentation, help text, a message, or a footnote, restates facts another party owns, such as a vendor's documented behavior."]
does_not_mean = ["Use one physical database for the entire system.", "Forbid replication, caching, indexes, or read models.", "Centralize unrelated domains under one team or schema.", "Treat every derived value as independently authoritative."]
benefits = ["Clear ownership and update paths.", "Simpler reconciliation and lineage.", "Reduced semantic drift across consumers."]
costs = ["The authority can become a latency or availability dependency.", "Cross-domain facts may resist clean ownership.", "Synchronization and versioning remain necessary."]
failure_when_overapplied = ["An enterprise-wide shared database couples unrelated domains.", "A central team becomes a throughput bottleneck.", "Local operation is blocked even when temporary divergence would be acceptable."]
conflicts_with = ["graceful-degradation", "reversible-decisions", "least-common-mechanism"]
related = ["information-hiding", "end-to-end-principle", "observability", "parameterize-do-not-enumerate"]
review_questions = ["Which component owns the canonical meaning and writes?", "Can every copy explain its source and refresh policy?", "What happens when the authority is unavailable?", "Is there exactly one writer for this fact, and what stops a second component from writing it?"]
review_questions = ["Which component owns the canonical meaning and writes?", "Can every copy explain its source and refresh policy?", "What happens when the authority is unavailable?", "Is there exactly one writer for this fact, and what stops a second component from writing it?", "Where text shown to readers restates another party's facts, does it name the source, and does it say anything as that source's fact which the source does not say?"]

[enforcement]
level = "governance"
Expand Down
5 changes: 5 additions & 0 deletions review-controls.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,11 @@
"catches": "Add a hand-written docs/PRINCIPLES.md that restates each record's claim and applies_when, alongside the generated REVIEW.md that already compiles them from principles/*.toml.",
"misses": "Change scripts/review.py's render() so the compiled document prints applies_when before the claim."
},
{
"record": "single-authoritative-source",
"catches": "Add to the osv-scanner bullet in docs/REFERENCE.md that osv-scanner retries a query once before it exits 127, which osv-scanner's own documentation does not say, and link no page for it.",
"misses": "Reflow the osv-scanner bullet in docs/REFERENCE.md onto different line breaks, keeping every exit code and the meaning given for it."
},
{
"record": "unix-composability",
"catches": "Make `uphold_check.py --review --emit` ask \"Overwrite REVIEW.md? [y/N]\" through input() before writing, with no flag to answer it, so a script or agent without a terminal hangs or gets an end-of-file error and the exit status is 0 either way.",
Expand Down
Loading