Skip to content

Architecture Decision Records

Each record states a decision, the forces behind it, and what it costs. They are immutable once accepted: a decision that turns out badly gets a new record that supersedes it, rather than a rewrite of history.

# Decision Status
001 Typed Resource trait with an object-safe erased wrapper Accepted
002 Normalisation is mandatory and resource-owned Accepted
003 GitHub access shells out to gh api behind a port Accepted
004 REST first; GraphQL only as a read accelerator Accepted
005 Pruning is opt-in; deletions are always explicit Accepted
006 safe-settings compatibility is one-way and per-repository Accepted, narrowed by 017
007 The JSON Schema is the public contract, generated from Rust Accepted
008 YAML spans come from a side index for precise diagnostics Accepted
009 Secrets are out of scope Accepted
010 The plan is a serialisable artifact; applying re-checks for drift Accepted, narrowed by 017
011 Resource ordering via declared dependencies Accepted
012 Testing through a gh process stub and request-log assertions Accepted, extended by 019
013 Single crate until a second consumer exists Accepted
014 Releases are orchestrated by gh-ship Accepted, narrowed by 022
015 Token requirements are declared per resource Accepted, extended by 020
016 Diagnostics carry the identity of the document they came from Accepted, resolution rule superseded by 017
017 Inheritance replaces whole items, and provenance follows the merge Accepted
018 A resource may span more than one configuration section Accepted
019 Live-test sandboxes are owned, not created per run Accepted, extended by 021
020 Fine-grained permission categories do not nest Accepted, extended by 021
021 Actions general settings are one section over seven endpoints Accepted
022 The release commit is signed by a GitHub App Accepted