Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 30 additions & 19 deletions openspec/changes/rescope-go-code-standards/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
36 changes: 21 additions & 15 deletions openspec/changes/specify-go-code-standards/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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