diff --git a/openspec/changes/rescope-go-code-standards/tasks.md b/openspec/changes/rescope-go-code-standards/tasks.md index 7ea1fb8..12bcf2b 100644 --- a/openspec/changes/rescope-go-code-standards/tasks.md +++ b/openspec/changes/rescope-go-code-standards/tasks.md @@ -19,40 +19,42 @@ ## 2. Write the shared sections once -- [ ] 2.1 Draft the shared `Code standards` text — `Function signatures`, +- [x] 2.1 Draft the shared `Code standards` text — `Function signatures`, `File naming`, `Go patterns` — with the worked examples that left the capability. Verified by the draft covering every rule this change removes from `go-code-standards` -- [ ] 2.2 Draft the shared `Testing` text — `Test file conventions`, suite +- [x] 2.2 Draft the shared `Testing` text — `Test file conventions`, suite naming, table-driven cases, and the `export_test.go` pattern -- [ ] 2.3 Confirm the draft states no rule that `.golangci.yml` or a formatter +- [x] 2.3 Confirm the draft states no rule that `.golangci.yml` or a formatter already enforces, naming the configuration instead ## 3. Apply to each repository One pull request per repository, each landing the same shared text under the -same headings in the same order. +same headings in the same order. Landed as osapi-io/gohai#164, +osapi-io/nats-client#133, osapi-io/nats-server#94, +osapi-io/osapi-orchestrator#77, and osapi-io/osapi#452. -- [ ] 3.1 `gohai` — restore the shared conventions, move `Go patterns` out from +- [x] 3.1 `gohai` — restore the shared conventions, move `Go patterns` out from under `Testing`, and rename `Package Structure` to `Project structure`. It is on `main` with the conventions removed, so it goes first -- [ ] 3.2 `osapi-orchestrator` — supersede and close the held removal +- [x] 3.2 `osapi-orchestrator` — supersede and close the held removal (osapi-io/osapi-orchestrator#76), and fold `Project Structure` and `Package Structure` into one `Project structure` -- [ ] 3.3 `nats-client` — move `Function signatures` and `Go patterns` from +- [x] 3.3 `nats-client` — move `Function signatures` and `Go patterns` from `Code style` to `Code standards` -- [ ] 3.4 `nats-server` — the same -- [ ] 3.5 `osapi` — replace the pointer with the shared text, keeping its own +- [x] 3.4 `nats-server` — the same +- [x] 3.5 `osapi` — replace the pointer with the shared text, keeping its own `Logging`, `Lifecycle`, and `Filesystem access` sections -- [ ] 3.6 Move every repository-specific section after `Testing`, and convert +- [x] 3.6 Move every repository-specific section after `Testing`, and convert every heading to sentence case ## 4. Let the configuration speak for what it enforces -- [ ] 4.1 Remove the hand-maintained linter list from all five repositories, +- [x] 4.1 Remove the hand-maintained linter list from all five repositories, naming `.golangci.yml` instead. Verified by no repository enumerating linters in prose -- [ ] 4.2 Record that the removed lists were wrong in the same way everywhere — +- [x] 4.2 Record that the removed lists were wrong in the same way everywhere — `goimports` named as a linter, `unused` omitted — so the reason is evidenced rather than asserted @@ -68,15 +70,24 @@ same headings in the same order. ## 6. Verification -- [ ] 6.1 Confirm the five `CONTRIBUTING.md` files carry the same `##` headings, - in the same order, up to their repository-specific sections -- [ ] 6.2 Confirm every heading in all five is sentence case -- [ ] 6.3 Confirm the shared sections are byte-identical across the five, so a - difference in wording would mean a difference in rule +- [x] 6.1 Confirm the five `CONTRIBUTING.md` files carry the same `##` headings, + in the same order, up to their repository-specific sections. All five run + `Before you start`, `Prerequisites`, `Setup`, `Code style`, `Code standards`, + `Testing`. `gohai`, `osapi-orchestrator`, and `osapi` also carry + `Project structure`; the two NATS libraries omit it, which the requirement + permits where a repository has nothing to say under a middle section +- [x] 6.2 Confirm every heading in all five is sentence case. The only remaining + capitalized pair is `### Claude Code`, a proper noun the requirement exempts +- [x] 6.3 Confirm the shared sections are byte-identical across the five, so a + difference in wording would mean a difference in rule. Verified by hashing + each block: `Code standards` and `Test file conventions` each hash the same in + all five repositories - [ ] 6.4 Confirm every rule removed from `go-code-standards` is stated in all five repositories or enforced by a tool, and that none was dropped - [ ] 6.5 Confirm `go-code-standards` retains only requirements no tool reports on -- [ ] 6.6 Confirm `specify-go-code-standards` tasks 2.2, 2.3, 2.4, and 3.6 are +- [x] 6.6 Confirm `specify-go-code-standards` tasks 2.2, 2.3, 2.4, and 3.6 are reconciled with this change rather than left describing the pointer-only - destination it replaces + destination it replaces. 2.2, 2.3, and 2.4 are checked against the + standardization pull requests; 3.6 is recorded as superseded, since a shared + convention is now stated in every repository it binds rather than in one diff --git a/openspec/changes/specify-go-code-standards/tasks.md b/openspec/changes/specify-go-code-standards/tasks.md index bf05976..ef64d1e 100644 --- a/openspec/changes/specify-go-code-standards/tasks.md +++ b/openspec/changes/specify-go-code-standards/tasks.md @@ -10,17 +10,25 @@ The capability has to exist in the corpus before a repository can rely on the pointer alone. It did not until task 2.0 synced it, so the four conversions below kept their local copy and the pointer led nowhere. +Applying this section is what established that the destination was wrong. A +pointer resolves across a repository boundary, over a network, for every reader, +and `gohai` spent a period citing a capability the corpus did not hold. +`rescope-go-code-standards` replaced it: each repository states the shared +conventions in full, in the same words, and the corpus keeps only what no tool +reports on. + - [x] 2.0 `specs` — sync `go-code-standards` into `openspec/specs/` so the pointer resolves. Every repository named it as the source while it existed only inside this change, where a reader following the link would not find it - [x] 2.1 `gohai` — `CONTRIBUTING.md` keeps its collector-specific conventions and drops the shared ones (osapi-io/gohai#163) -- [ ] 2.2 `nats-client` — `CONTRIBUTING.md` still restates `Function signatures` - and `Go patterns` under `Code style` -- [ ] 2.3 `nats-server` — `CONTRIBUTING.md` still restates `Function signatures` - and `Go patterns` under `Code style` -- [ ] 2.4 `osapi-orchestrator` — `CONTRIBUTING.md` - (osapi-io/osapi-orchestrator#76, open) +- [x] 2.2 `nats-client` — `Function signatures` and `Go patterns` move from + `Code style` to `Code standards`, stated in full (osapi-io/nats-client#133) +- [x] 2.3 `nats-server` — the same (osapi-io/nats-server#94) +- [x] 2.4 `osapi-orchestrator` — stated in full, and the duplication between its + own `Code standards` and `Testing` sections resolved + (osapi-io/osapi-orchestrator#77). The removal-only pull request that preceded + it was closed unmerged - [x] 2.5 `osapi` — `CLAUDE.md` dropped `Code Standards`, and the conventions duplicated into `development.md` and `testing.md` now resolve to the root `CONTRIBUTING.md`, which points at this capability rather than restating it @@ -46,12 +54,10 @@ below kept their local copy and the pointer led nowhere. files exist (32 in `gohai`, 32 in `osapi`, 1 in `osapi-orchestrator`), and the requirement turns on what each exposure is *for*, which no search can decide. This needs a file-by-file audit -- [ ] 3.6 Confirm no shared convention is stated in two places. All four Go - libraries restated the capability rather than only pointing at it, each - closing with "the specification wins where they disagree" — which acknowledges - the duplication instead of removing it. Their conversions under tasks 2.1 to - 2.4 did half of what design.md's migration asks: they added the pointer and - kept the copy. `osapi` points without restating (osapi-io/osapi#450), and - `gohai` now does too (osapi-io/gohai#163). `osapi-orchestrator` is in flight; - `nats-client` and `nats-server` restate under `Code style` as - `Function signatures` and `Go patterns`, and have no pull request yet +- [x] 3.6 Confirm no shared convention is stated in two places. Superseded by + `rescope-go-code-standards`, which decided the opposite: a shared convention + is stated in every repository it binds, identically, because a repository has + to be readable on its own. What this task was aimed at — copies that disagree + — is now the thing `repo-standards` forbids and the standardization pull + requests removed. The five `Code standards` and `Test file conventions` blocks + hash identically