docs(adr): ratify ADR-0003, 0006, 0007, 0008, and 0009 - #129
Merged
Conversation
The corpus had been building on five records that were never ratified. Nine accepted ADRs relied on ADR-0007 and six on ADR-0009, and two of them narrowed clauses of a proposed record: ADR-0013 amends both, ADR-0012 refines ADR-0009. Accepted decisions were resting on a proposed foundation. Each record was verified against the tree rather than trusting its own checkboxes. ADR-0007's two assertions run as the clean-clone-builds CI job and scripts/check-deps.ts, both required status checks on main. ADR-0009's five deliverables all exist: core/src/affects/, the purity test, test/conformance/, the catalog port with catalog-backstage, and adr explain. ADR-0006 is irreversible in fact because the repository is public, and its schema id already resolved to the namespace-independent adrkit.dev. Ratification is recorded as review.decidedAt and review.approvals, the first use of either field here, so the audit trail carries when and by whom rather than leaving status to imply it. Stale action items were corrected to verified reality; genuinely open ones stay unchecked, including ADR-0006's DCO bot, which CONTRIBUTING.md requires but which no ruleset check enforces, and ADR-0008's re-import pull request, unbuilt because non-MADR re-import is unbuilt. Ratifying several records together follows existing practice (#74 ratified ADR-0016 and ADR-0017; #110 ratified ADR-0022 and ADR-0023). The CONTRIBUTING rule requiring a superseding record rather than a status flip is scoped to changes that contradict an accepted record; ratifying a proposed record contradicts nothing and completes its intended lifecycle. ADR-0005 deliberately stays proposed. Only Pass 0 of its four passes exists, by design (spec 005 scoped itself to Pass 0), and the record carries a SOC2 CC8.1 control plus a standing commitment to publish escalation precision and recall each release. Ratifying it would assert an obligation the project cannot yet compute; its reviewBy of 2027-01-18 leaves room to ship Passes 1-3 first. ARB queue depth drops from 6 to 1, which the queue-depth badge reads. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Mark Beacom <m@beacom.dev>
4 tasks
There was a problem hiding this comment.
Pull request overview
Ratifies five foundational ADRs and records their implementation status and approval metadata.
Changes:
- Moves ADRs 0003, 0006–0009 from
proposedtoaccepted. - Updates completed action items.
- Documents the ratifications in the changelog.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
CHANGELOG.md |
Records the ratifications and queue impact. |
docs/adr/0003-ship-as-spec-kit-extension.md |
Accepts ADR-0003. |
docs/adr/0006-license-apache-2-and-single-monorepo.md |
Accepts ADR-0006 and updates actions. |
docs/adr/0007-adapter-isolation-and-public-surface-build.md |
Accepts ADR-0007 and updates actions. |
docs/adr/0008-import-and-migration-semantics.md |
Accepts ADR-0008 and updates actions. |
docs/adr/0009-affects-resolution-and-catalog-binding.md |
Accepts ADR-0009 and updates actions. |
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Addresses review feedback on #129. Three findings, all correct. Untick ADR-0009 action item 4. The catalog port *type* exists in packages/core/src/affects/catalog.ts, but no adapter implementation ships: packages/adapters/catalog-backstage is placement and dependency boundary only, exports nothing but PACKAGE_NAME, and says of itself "No generator has run. No envelope exists." Calling it the reference implementation overstated it. The changelog claim that all five ADR-0009 deliverables exist is corrected to four of five for the same reason. This does not disturb the ratification. ADR-0009's decision is the pinned resolution semantics, which are implemented, pure, and conformance-tested; the catalog adapter is separately governed by ADR-0013 and ADR-0020 and is deferred by the Decision itself. Refresh MANIFEST.md, which published contradictory governance state. It listed the five newly ratified records as proposed and said six remain queued. It was also six records behind independently -- it stopped at 0019 and reported "19 records, 13 accepted" against an actual 25 records. The inventory now carries 0020-0025, the real counts (23 accepted, 1 proposed, 1 superseded), and a catalog-binding note that matches the unticked action item rather than implying an adapter exists. Close the two follow-ups this decision satisfies: ADR-0012 item 4, which asked for the ratification decision on ADR-0007 and ADR-0009 to be opened, and ADR-0013 item 1, which asked for its amendments to be folded in when each record was taken to an explicit accept decision -- both carry the amendment inline. ADR-0012 items 2 and 3 stay open and still gate the persisted envelope and the generator, neither of which any ratified clause asserts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Mark Beacom <m@beacom.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Five foundational ADRs — 0003, 0006, 0007, 0008, 0009 — move from
proposedtoaccepted. This is hygiene catch-up: the work these records authorize shipped long ago (the Spec Kit extension, adapter isolation,affectsresolution, MADR migration), but the records themselves were never ratified.This closed a governance inversion, not a formality. Nine accepted records already relied on ADR-0007 and six on ADR-0009 — and two of them narrow clauses of a record that was never ratified: ADR-0013 amends both, ADR-0012 refines ADR-0009. Accepted decisions were resting on a proposed foundation.
Verified, not assumed
Each record was checked against the tree rather than trusting its own checkboxes — which turned out to matter, since the boxes were stale in both directions:
main(clean-clone-builds, plusscripts/check-deps.ts, observed failing per ADR-0016).core/src/affects/, the purity test,test/conformance/, andadr explain. The catalog-port item is left unchecked — the port type exists, but no adapter implementation ships (catalog-backstageis placement only and generates nothing).schema/LICENSE(CC0), and$idalready on the namespace-independentadrkit.dev. The repo is public, so this one-way door is irreversible in fact.adr migrate --from madr,import-incomplete, and the fingerprint + four-bucket classifier all ship.@adrkit/spec-kit0.1.2 and the standalone CLI both ship; ADR-0019 already resolved the spikeno-go.Ratification is recorded as
review.decidedAtandreview.approvals— the first use of either field in this corpus — so the audit trail carries when and by whom instead of leavingstatusto imply it.Left honestly unchecked
Action items that are genuinely open were not ticked:
Why several records in one PR
This follows existing practice: #74 ratified ADR-0016 and ADR-0017 together; #110 ratified ADR-0022 and ADR-0023 and retired ADR-0021. The CONTRIBUTING rule requiring a superseding record "with the argument, not just the status flip" is scoped to changes that contradict an accepted record — ratifying a
proposedrecord contradicts nothing and completes its intended lifecycle. (Contrast e45335a, where changing ADR-0021's substance correctly produced ADR-0022 rather than an edit.) All five share one rationale, so they belong together.ADR-0005 deliberately stays proposed
Only Pass 0 of its four passes exists — by design, since spec 005 scoped itself to Pass 0. But the record carries a
SOC2 CC8.1control plus a standing commitment to publish escalation precision and recall each release, including the false-negative rate. Ratifying it would assert a compliance obligation the project cannot yet compute. ItsreviewByof 2027-01-18 leaves room to ship Passes 1–3 first.ARB queue depth drops 6 → 1, which the queue-depth badge reads from
$.totalItems(regenerated at site build; nothing committed goes stale).Checklist
git commit -s). No CLA is required.docs/adr/, an ADR is added orsupersedes the affected record — with the argument, not just a status flip.
(N/A — no accepted record is contradicted; see "Why several records in one PR".)
packages/ci/srcor@adrkit/corechanged, I regeneratedpackages/ci/dist— N/A, docs-only change.the corpus is covered by existing lint/check/conformance gates.
bun run typecheck && bun run build && bun test && bun run lintpass from aclean clone with no credentials configured
(ADR-0007).
Also green locally:
adr lint(25 records, 0 errors/0 warnings),adr checkon the changed files (0 changed-record errors),check:deps,check:changelog,check:doc-pins,check:freeze-hashes, and 1997 tests.Review feedback addressed (fe4363a)
All three review comments were correct.
PACKAGE_NAMEand states "No generator has run. No envelope exists." The item now says exactly what exists and points at ADR-0013/ADR-0020.catalog-backstageas a claimed reference implementation.MANIFEST.mdrefreshed — and it was worse than reported. Beyond listing the five asproposed, it stopped at ADR-0019 and claimed "19 records, 13 accepted" against an actual 25. Now carries 0020–0025, the real counts (23 accepted, 1 proposed, 1 superseded), and a catalog note consistent with the unticked item.Also closed the two follow-ups this decision satisfies: ADR-0012 item 4 (open the ratification decision for 0007/0009) and ADR-0013 item 1 (fold the amendments in on accept — both records already carry them inline). ADR-0012 items 2 and 3 stay open; they gate the persisted envelope and the generator, which no ratified clause asserts.
None of this disturbs the ratification: ADR-0009's decision is the pinned resolution semantics, which are implemented, pure, and conformance-tested.