Skip to content

Add CI, command reference, and contributing guide#1

Merged
miharp merged 2 commits into
mainfrom
docs/ci-and-command-reference
Jul 23, 2026
Merged

Add CI, command reference, and contributing guide#1
miharp merged 2 commits into
mainfrom
docs/ci-and-command-reference

Conversation

@miharp

@miharp miharp commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Adds the CI workflow, documentation for the two working commands, and a contributing guide — plus one behavior change that writing the docs uncovered.

CI

Runs markdownlint, gofmt, go vet, golangci-lint, race-enabled tests with coverage, and cross-compiles linux/amd64 and linux/arm64.

Tests run under -race deliberately: the agent will poll and swap versions concurrently with OpenVox Server invoking code-id, so data races become a live risk as this grows. Better to have the detector on before that code exists than to retrofit it after a heisenbug.

arm64 is a first-class build target rather than an afterthought, since Parallels VMs and Docker on Apple silicon are both aarch64 — without it nothing installs on the primary dev machine.

Behavior change: argv[0] dispatch

Writing the command reference surfaced a gap in the design. OpenVox Server passes only positional arguments to code-id-command, so the setting cannot point at /usr/bin/codavox — it would be invoked as codavox production, with no subcommand.

The binary now dispatches on argv[0], so packaging can ship symlinks:

/usr/bin/codavox-code-id      -> codavox
/usr/bin/codavox-code-content -> codavox

A shell wrapper would also work, but it would add a shell fork to a path that runs on every catalog compile. A symlink costs nothing. codavox code-id <env> still works directly for interactive use.

Documentation

New docs/commands.md covers both commands, exit codes, the OpenVox Server wiring, on-disk layout, and the input validation rules — including the base64 code_id trap, where + and = are both valid base64 and both rejected by OpenVox Server at runtime.

Docs now follow the OpenVox documentation style guide: American English, console fences for terminal commands, and OpenVox Server as the component name in prose while literal paths and service names keep their real spelling.

CONTRIBUTING.md records the style rules, the two load-bearing design invariants (no fallbacks; code-id stays a single read), and flags that GPG/DCO signing is not yet enforced — worth deciding before history accumulates, since retrofitting sign-off means a rebase.

Verification

All CI checks were run locally before pushing: markdownlint clean, golangci-lint 0 issues, go test -race ./... green across all three packages.

🤖 Generated with Claude Code

miharp and others added 2 commits July 23, 2026 12:00
CI runs markdownlint, gofmt, go vet, golangci-lint, race-enabled tests with
coverage, and cross-compiles linux/amd64 and linux/arm64. Tests use -race
because the agent will poll and swap concurrently with OpenVox Server
invoking code-id, so races become a live risk as this grows.

Writing the command reference surfaced a design gap: OpenVox Server passes
only positional arguments, so code-id-command cannot point at
/usr/bin/codavox — it would be invoked as 'codavox production' with no
subcommand. The binary now dispatches on argv[0] so the package can ship
symlinks. A shell wrapper would also work but adds a fork to a path that
runs on every catalog compile.

Documentation now follows the OpenVox docs style guide: American English,
console fences for terminal commands, and OpenVox Server as the component
name in prose while literal paths and service names keep their real
spelling. CONTRIBUTING records those rules and the two load-bearing design
invariants, and flags that GPG/DCO signing is not yet enforced.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The v6 action pins golangci-lint v1.64.8, which cannot parse a version: "2"
config and refuses to target a module newer than the Go it was built with:

  can't load config: the Go language version (go1.24) used to build
  golangci-lint is lower than the targeted Go version (1.26)

v8 is the first action line that installs golangci-lint v2. The version is
pinned rather than tracking latest so an unrelated golangci release cannot
break CI mid-review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@miharp
miharp merged commit 0a58744 into main Jul 23, 2026
7 checks passed
@miharp
miharp deleted the docs/ci-and-command-reference branch July 23, 2026 16:03
miharp added a commit that referenced this pull request Jul 23, 2026
* Add CI, command reference, and contributing guide

CI runs markdownlint, gofmt, go vet, golangci-lint, race-enabled tests with
coverage, and cross-compiles linux/amd64 and linux/arm64. Tests use -race
because the agent will poll and swap concurrently with OpenVox Server
invoking code-id, so races become a live risk as this grows.

Writing the command reference surfaced a design gap: OpenVox Server passes
only positional arguments, so code-id-command cannot point at
/usr/bin/codavox — it would be invoked as 'codavox production' with no
subcommand. The binary now dispatches on argv[0] so the package can ship
symlinks. A shell wrapper would also work but adds a fork to a path that
runs on every catalog compile.

Documentation now follows the OpenVox docs style guide: American English,
console fences for terminal commands, and OpenVox Server as the component
name in prose while literal paths and service names keep their real
spelling. CONTRIBUTING records those rules and the two load-bearing design
invariants, and flags that GPG/DCO signing is not yet enforced.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Fix golangci-lint action version

The v6 action pins golangci-lint v1.64.8, which cannot parse a version: "2"
config and refuses to target a module newer than the Go it was built with:

  can't load config: the Go language version (go1.24) used to build
  golangci-lint is lower than the targeted Go version (1.26)

v8 is the first action line that installs golangci-lint v2. The version is
pinned rather than tracking latest so an unrelated golangci release cannot
break CI mid-review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Michael Harp <mike@mikeharp.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant