docs(decisions): accept ADRs 0018, 0020, 0021 and enforce the record contract - #576
Merged
Conversation
…contract Maintainer ss-o accepts three decision records whose source issues are closed and whose implementations already exist in the repository: - 0018 Adopt Portable Worktree Management (#542) - 0020 Adopt Zsh Plugin Standard 2 (#557) - 0021 Derive Chroma Command Knowledge at Runtime (z-shell/F-Sy-H#73) Acceptance follows runbooks/adr.md: the flip happens on main through a merged pull request and each record names its accepting maintainer. Two defects found while reviewing the set are fixed here: ADR 0011 used a different header shape from every other record, with a bare `## Status` section instead of the `- **Status:**` bullet block. Any tooling that reads status by the common pattern skipped it silently. Its header now matches its neighbours; no decision content changed. decisions/ had no index, so a stale status was discoverable only by reading all 21 files. Rather than add prose that would drift in turn, scripts/decision-records.py owns both the header contract and the generated index at decisions/README.md, and CI runs it. The contract checks field presence and order, recognized statuses, ISO dates, number agreement between title and filename, and refuses an ACCEPTED record that still names no deciding maintainer. The renderer pads table columns to match the repository formatter, so the generated index is a fixed point under `trunk fmt` and cannot oscillate against its own `--check`. Supporting changes: the agent policy validator learns a GENERATED_INVENTORY map so a generated file inside a scanned inventory directory is recognized without being unconditionally required of every fixture; both new files are declared as manifest surfaces; and the routed-worktree test now pins ADR 0018 to its accepted state instead of the pre-acceptance PROPOSED text.
11 tasks
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.
Summary
Maintainer
ss-oaccepts three decision records whose source issues are closed and whose implementations already exist in the repository:Acceptance follows
runbooks/adr.md: the flip happens onmainthrough a merged pull request, and each record names its accepting maintainer. ADR 0010 is deliberately not included; it staysPROPOSEDpending the open items tracked in #454.Defects fixed
Two problems were found while reviewing the proposed set.
ADR 0011 used a non-standard header. It carried a bare
## Statussection with standaloneDate:/Deciders:lines, while every other record uses the- **Status:**bullet block. Any tooling that reads status by the common pattern skipped it silently. Its header now matches its neighbours; no decision content changed.decisions/had no index. A stale status was discoverable only by reading all 21 files. Rather than add prose that would drift in turn,scripts/decision-records.pynow owns both the header contract and the generated index atdecisions/README.md, and CI runs it.The contract checks header field presence and order, recognized statuses, ISO 8601 dates, agreement between the title number and the filename number, and refuses an
ACCEPTEDrecord that still names no deciding maintainer, which is theDeciders: TBDrule fromrunbooks/adr.mdmade executable.The renderer pads table columns to match the repository formatter, so the generated index is a fixed point under
trunk fmtand cannot oscillate against its own--check.Supporting changes
scripts/validate-agent-policy.pylearns aGENERATED_INVENTORYmap, so a generated file inside a scanned inventory directory is recognized without becoming unconditionally required of every synthetic test fixture..github/instruction-surfaces.json.- **Status:** PROPOSED. It now pins the accepted state instead; the general header shape is the new validator's job.agent-instructions.ymlruns the new unit tests and--check, and itspull_requestandpushpath filters both cover the new files.Verification
Pre-existing defect, reported not fixed
scripts/test_validate_zsh_standard_policy.pyfailstrunkblack formatting on a clean checkout ofmain, before any change in this branch. It is untouched here and needs its own change.References
runbooks/adr.mdfor decision authority