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 |