Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
8bcd61f
docs: align doctor skill readiness task context
marcioaltoe Jul 26, 2026
94e0ba6
chore: archive 0049-baseline-preservation-idempotency
marcioaltoe Jul 26, 2026
474e2aa
docs: refine doctor skill readiness plan
marcioaltoe Jul 26, 2026
d2cf8de
docs: add constraints to terminal outcome specs
marcioaltoe Jul 26, 2026
c664fc8
docs: isolate protected skill alignment tasks
marcioaltoe Jul 26, 2026
9d456de
docs: report baseline profile refresh retention gap
marcioaltoe Jul 26, 2026
1865d12
docs: report baseline capability remediation gaps
marcioaltoe Jul 26, 2026
7b44d70
docs: add terminal outcome task graphs
marcioaltoe Jul 26, 2026
50d4dbf
chore: align CodeRabbit reviews with Go project
marcioaltoe Jul 26, 2026
a20f0cd
docs: update baseline remediation evidence
marcioaltoe Jul 26, 2026
80ebf4a
fix: remove markdown files from coderabbit review scope to avoid unne…
marcioaltoe Jul 26, 2026
8564e67
fix: update codex model to gpt-5.6-terra for improved performance
marcioaltoe Jul 26, 2026
393624b
feat: diagnose Repository Skill Set readiness
marcioaltoe Jul 26, 2026
672eb5c
chore: refresh repository skill set
marcioaltoe Jul 26, 2026
fd786ed
chore: refresh repository skill set
marcioaltoe Jul 26, 2026
7e59784
Merge branch 'ma/0036-doctor-skill-readiness' into roundfix/run-run_2…
marcioaltoe Jul 26, 2026
ccfbd15
docs: synchronize Doctor skill-readiness guidance
marcioaltoe Jul 26, 2026
d4b679e
docs: reopen skill hash compatibility task
marcioaltoe Jul 26, 2026
fb78fbf
feat: diagnose Repository Skill Set readiness
marcioaltoe Jul 26, 2026
bda64c4
docs: authorize derived skill readiness artifacts
marcioaltoe Jul 26, 2026
0a0f5bd
feat: diagnose Repository Skill Set readiness
marcioaltoe Jul 26, 2026
9c1e00f
docs: authorize parity corpus refresh
marcioaltoe Jul 26, 2026
6e5618d
docs: align the protected Roundfix Skill pair
marcioaltoe Jul 26, 2026
6ec34e3
docs: qa report for 0036-doctor-skill-readiness (partial)
marcioaltoe Jul 26, 2026
e08ad4e
docs: close doctor skill readiness qa
marcioaltoe Jul 26, 2026
46efe28
docs: order doctor skill readiness qa reports
marcioaltoe Jul 26, 2026
46b7534
chore: archive doctor skill readiness spec
marcioaltoe Jul 26, 2026
af3bd79
docs: document Claude adapter migration
marcioaltoe Jul 26, 2026
b71957d
docs: plan doctor skill readiness hardening
marcioaltoe Jul 26, 2026
6fd1d32
chore: add the authorized Unicode collation dependency
marcioaltoe Jul 26, 2026
93b3151
feat: centralize external skill hash compatibility
marcioaltoe Jul 26, 2026
be91ebc
feat: anchor Repository Skill Set filesystem reads
marcioaltoe Jul 26, 2026
14e03d6
feat: harden Doctor coordination and evidence
marcioaltoe Jul 26, 2026
d8588d8
docs: qa report for 0050-doctor-skill-readiness-hardening (pass)
marcioaltoe Jul 26, 2026
b089b92
chore: archive 0050-doctor-skill-readiness-hardening
marcioaltoe Jul 26, 2026
53a1522
docs: plan Doctor readiness contract reconciliation
marcioaltoe Jul 26, 2026
c27c8a1
chore: tidy authorized Go module metadata
marcioaltoe Jul 26, 2026
b8ed2dc
feat: make external skill hash ordering total
marcioaltoe Jul 26, 2026
0b10162
feat: make Repository Skill Set inspection cancellable
marcioaltoe Jul 26, 2026
5cdc5bd
feat: reconcile Doctor readiness contracts
marcioaltoe Jul 26, 2026
fbc2ae4
docs: synchronize Roundfix Doctor guidance
marcioaltoe Jul 26, 2026
a30cad2
docs: qa report for 0051-doctor-readiness-contract-reconciliation (fail)
marcioaltoe Jul 26, 2026
8bef8cb
docs: add Baseline snapshot reconciliation task
marcioaltoe Jul 26, 2026
0ea83ff
chore: reconcile the derived Baseline skill snapshot
marcioaltoe Jul 26, 2026
3f383b2
docs: qa report for 0051-doctor-readiness-contract-reconciliation (pa…
marcioaltoe Jul 27, 2026
817828d
docs: close Doctor readiness QA after full-access proof
marcioaltoe Jul 27, 2026
9a6b7f9
chore: archive Doctor readiness contract reconciliation
marcioaltoe Jul 27, 2026
75795f7
fix: resolve Roundfix batch 001
marcioaltoe Jul 27, 2026
072ae5b
docs: review rounds for pr 37
marcioaltoe Jul 27, 2026
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
46 changes: 45 additions & 1 deletion .agents/skills/golang-testing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ license: MIT
compatibility: Designed for Claude Code or similar AI coding agents, and for projects using Golang.
metadata:
author: samber
version: "1.2.3"
version: "1.2.5"
openclaw:
emoji: "🧪"
homepage: https://github.com/samber/cc-skills-golang
Expand Down Expand Up @@ -57,6 +57,8 @@ This skill guides the creation of production-ready tests for Go applications. Fo
9. Keep unit tests fast (< 1ms), use build tags for integration tests
10. Run tests with race detection in CI
11. Include examples as executable documentation
12. Test files MUST be named after the source file under test, not after the function or method being tested
13. Test functions SHOULD appear in the same order as the functions/methods they test in the source file

## Test Structure and Organization

Expand All @@ -70,6 +72,20 @@ package mypackage
package mypackage_test
```

Name the test file after the source file it tests, not after the function or method under test. Go's convention is one test file per source file (`foo.go` -> `foo_test.go`), because tools (`go test`, coverage reports, IDE "jump to test" navigation, `gotests`) and reviewers all resolve tests by source file, not by symbol. A source file usually declares several functions/methods; splitting its tests by symbol name scatters them across many files and breaks that file-to-file mapping.

```
// ✓ Good — one test file per source file
helloworld.go -> helloworld_test.go // contains TestHelloWorld, TestAbcd, TestXyz, ...

// ✗ Bad — test file named after the function/method instead of the source file
helloworld.go -> abcd_test.go // wrong: should be helloworld_test.go
```

Exception: very large source files MAY be split into multiple `_test.go` files by concern (e.g. `foo_test.go` + `foo_edgecases_test.go`), but each split file's name MUST still be derived from the source file name, never from an individual function name. Prefer keeping a single `_test.go` file per source file even when it grows large — splitting adds navigation overhead and is rarely worth it; reach for the exception only when a single file becomes genuinely unwieldy to browse or review.

Within a test file, order test functions to match the order their tested functions/methods appear in the source file. A reader (human or agent) scrolling `foo.go` alongside `foo_test.go` can then find the matching test by position instead of searching; drift between the two orderings compounds every time either file grows.

Comment thread
coderabbitai[bot] marked this conversation as resolved.
### Naming Conventions

```go
Expand Down Expand Up @@ -124,6 +140,34 @@ func TestCalculatePrice(t *testing.T) {
}
```

## Common Pitfall: Assert Scope Leaking into Subtests

Never create a testify `assert`/`require` instance in the parent test function and reuse it inside `t.Run` closures. `assert.New(t)` captures the exact `*testing.T` it was built with, so if that `t` belongs to the parent, every failure raised inside the subtest gets attributed to the *parent* test in `go test` output — the failing subtest itself still reports `--- PASS`, silently hiding which case broke. This happens whether or not the subtest calls `t.Parallel()`.

```go
// WRONG -- `is` is bound to the parent's t
func TestCalculatePrice(t *testing.T) {
is := assert.New(t)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
is.Equal(tt.expected, CalculatePrice(tt.quantity, tt.unitPrice)) // misattributed on failure
})
}
}

// RIGHT -- each subtest builds its own instance from its own t
func TestCalculatePrice(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
is := assert.New(t)
is.Equal(tt.expected, CalculatePrice(tt.quantity, tt.unitPrice))
})
}
}
```

Verify with a deliberately-broken case: if `go test -v -run TestName` shows `--- FAIL: TestName` but every `--- PASS: TestName/subtest_name` line still says PASS, the assert scope is leaking.

Comment thread
coderabbitai[bot] marked this conversation as resolved.
## Unit Tests

Unit tests should be fast (< 1ms), isolated (no external dependencies), and deterministic.
Expand Down
53 changes: 36 additions & 17 deletions .agents/skills/roundfix/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,32 @@ Task Worktrees, and QA uses its own Agent Session after Tasks settle.
Use the Doctor Command, `roundfix doctor`, to diagnose Run readiness without
installing dependencies, writing config, or changing files. Doctor runs the
shared Node.js, minimum-supported acpx, effective adapter, required Agent Selection
Profiles, and codex runtime hygiene checks and prints one line per check with
status `ok`, `failed`, or `skipped`. Adapter Readiness requires the effective
Codex command to prove official `@agentclientprotocol/codex-acp` lineage at
version `1.1.4` or newer; executable presence and a matching name are not
proof. The `profiles:` line is the selection authority: it exact-proves every
distinct Preferred Selection and fallback through disposable ACP Sessions and
reports affected category references plus one deterministic next action.
Doctor has no separate legacy `agent:` or `model:` authority. Failed checks
include `next: <action>` when Roundfix knows the remediation.
Profiles, Repository Skill Set, and codex runtime hygiene checks and prints one
line per check with status `ok`, `failed`, or `skipped`. Adapter Readiness
requires the effective Codex command to prove official
`@agentclientprotocol/codex-acp` lineage at version `1.1.4` or newer;
executable presence and a matching name are not proof. The `profiles:` line is
the selection authority: it exact-proves every distinct Preferred Selection
and fallback through disposable ACP Sessions and reports affected category
references plus one deterministic next action. Doctor has no separate legacy
`agent:` or `model:` authority. Failed checks include `next: <action>` when
Roundfix knows the remediation.

The blocking `skills:` line runs after, and independently from, `profiles:`.
The running binary's embedded bundle is authoritative for Roundfix-owned
skills; each required external skill must match its `computedHash` in
`skills-lock.json`. Outside a Git repository, Doctor does not inspect the
Repository Skill Set and prints
`skills: failed (Repository Skill Set readiness requires a Git repository; next: run roundfix doctor from a Git repository)`.
Surface a failed `skills:` line and its printed `next:` remediation before work
continues. Owned failures print
`roundfix skills install --target project`; external failures print
`bunx skills experimental_install && bunx skills update -p -y`; mixed failures
print
`roundfix skills install --target project && bunx skills experimental_install && bunx skills update -p -y`.
Doctor is diagnosis-only: it never runs these commands, accesses the network,
installs or updates skills, or writes repository state. Apply remediation only
after explicit workflow authorization, then rerun Doctor.
On macOS, the codex hygiene check resolves `CODEX_PATH` first and then `codex`
on `PATH`, inspects the `com.apple.quarantine` attribute (the real XProtect
trigger), and verifies the binary's code signature (not `spctl --assess`, which
Expand Down Expand Up @@ -112,20 +129,22 @@ unauthorized target. A rejected Sol/high proof never becomes an offer to use
model-managed reasoning.

Use `roundfix doctor` when you only need a read-only readiness report. It runs
the Node.js, minimum-supported acpx, effective adapter, required Agent Selection Profile,
and codex runtime hygiene checks and exits nonzero if any check fails. Adapter
failures name the effective command, package classification, and official
install action. Profile failure names the exact runtime/model/reasoning tuple,
every affected category, bounded adapter evidence, and the next
`roundfix profiles configure` or `roundfix profiles validate` action. A
rejected explicit `high` does not recommend model-managed reasoning. The
command has no flags and mutates nothing.
the Node.js, minimum-supported acpx, effective adapter, required Agent Selection
Profiles, Repository Skill Set, and codex runtime hygiene checks and exits
nonzero if any check fails. Adapter failures name the effective command,
package classification, and official install action. Profile failure names the
exact runtime/model/reasoning tuple, every affected category, bounded adapter
evidence, and the next `roundfix profiles configure` or
`roundfix profiles validate` action. A rejected explicit `high` does not
recommend model-managed reasoning. The command has no flags and mutates
nothing.

```text
node: ok
acpx: ok
adapter: ok (npx -y @agentclientprotocol/codex-acp@1.1.4; package=@agentclientprotocol/codex-acp; version=1.1.4)
profiles: ok (3 distinct tuples; 10 category references)
skills: ok (39 required: 14 Roundfix-owned, 25 external)
codex: ok
```

Expand Down
90 changes: 90 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
language: "en"
early_access: true

knowledge_base:
code_guidelines:
enabled: true
filePatterns:
- "AGENTS.md"
- "**/AGENTS.md"
- "CONTEXT.md"
- "docs/agents/**/*.md"
- "docs/adr/**/*.md"
- ".agents/skills/**/*.md"

reviews:
request_changes_workflow: true
high_level_summary: true
poem: false
review_status: true
collapse_walkthrough: false
sequence_diagrams: true
profile: "assertive"
related_prs: false
tools:
golangci-lint:
enabled: true
path_filters:
# ----- Generated mirrors and local agent state -----
- "!.claude/**"
- "!skills/**"

# ----- IDE / editor / OS noise -----
- "!.vscode/**"
- "!.idea/**"
- "!**/.DS_Store"
- "!**/Thumbs.db"
- "!**/*.swp"
- "!**/*.sw?"

# ----- Build, release, log, and runtime artifacts -----
- "!bin/**"
- "!dist/**"
- "!tmp/**"
- "!**/.cache/**"
- "!**/logs/**"
- "!**/*.log"
- "!**/.tmp/**"
- "!**/*.db"
- "!**/*.db-shm"
- "!**/*.db-wal"
- "!**/*.digest"
- "!**/*.sha256"
- "!**/*.png"
- "!**/*.jpeg"
- "!**/*.pdf"

# ----- Secrets / env -----
- "!**/.env"
- "!**/.env.local"
- "!**/.env.*.local"
- "!**/*.local"
- "!**/*.pem"

# ----- Roundfix source, tests, contracts, docs, and configuration -----
- "**/*.go"
- "**/*.golden"
- "**/*.txt"
- "**/*.stdout"
- "**/*.stderr"
- "**/*.json"
- "**/*.jsonc"
- "**/*.yml"
- "**/*.yaml"
- "**/*.toml"
- ".github/**/*"
- ".agents/skills/**/*"
- ".coderabbit.yaml"
- ".roundfixrc.yml"
- ".gitignore"
- "AGENTS.md"
- "CHANGELOG.md"
- "CONTEXT.md"
- "LICENSE"
- "README.md"
- "go.mod"
- "go.sum"
- "skills-lock.json"
- "cog.toml"
- "Makefile"
- "**/Makefile"
8 changes: 4 additions & 4 deletions .roundfixrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ profiles:
reasoning_effort: high
fallbacks:
- runtime: codex
model: gpt-5.5
model: gpt-5.6-terra
Comment thread
coderabbitai[bot] marked this conversation as resolved.
reasoning_effort: xhigh
backend:
preferred:
Expand All @@ -26,7 +26,7 @@ profiles:
reasoning_effort: high
fallbacks:
- runtime: codex
model: gpt-5.5
model: gpt-5.6-terra
reasoning_effort: xhigh
frontend:
preferred:
Expand All @@ -44,7 +44,7 @@ profiles:
reasoning_effort: high
fallbacks:
- runtime: codex
model: gpt-5.5
model: gpt-5.6-terra
reasoning_effort: xhigh
review:
preferred:
Expand All @@ -53,7 +53,7 @@ profiles:
reasoning_effort: high
fallbacks:
- runtime: codex
model: gpt-5.5
model: gpt-5.6-terra
reasoning_effort: xhigh

review_source:
Expand Down
4 changes: 2 additions & 2 deletions CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ The support command that produces a Release Plan without editing release files,
_Avoid_: Release Command, publish command, cut-release command

**Doctor Command**:
The support command that diagnoses a repository and machine's readiness for Roundfix Runs — Repository Skill Set, minimum-supported acpx, Adapter Readiness, Agent Selection Profile Readiness, and codex runtime hygiene — reporting the detected acpx version against the minimum, each check with a next action, and mutating nothing. Distinct from the Setup Command, which prepares the machine.
The support command that diagnoses a repository and machine's readiness for Roundfix Runs — minimum-supported acpx, Adapter Readiness, Agent Selection Profile Readiness, Repository Skill Set, and codex runtime hygiene. It reports the detected acpx version against the minimum, gives each check a next action, and mutates nothing. It evaluates Repository Skill Set readiness after, and independently from, Agent Selection Profile Readiness; unlike the Doctor Command, the Setup Command prepares the machine.
_Avoid_: Health check run, setup run, environment wizard

**Archive Command**:
Expand Down Expand Up @@ -503,7 +503,7 @@ A shipped agent skill that teaches an external Agent how to start Roundfix or ho
_Avoid_: Runtime, Review Source, plugin

**Repository Skill Set**:
The complete set of Roundfix-owned and externally managed Agent Skills a repository declares for its workflow, with every installed artifact matching its authoritative local source.
The complete set of Roundfix-owned and externally managed Agent Skills required by a repository workflow. Every required installed artifact matches its authoritative local source; unrelated extras do not join the set.
_Avoid_: Installed skills, plugin set, global skill set

**Interactive Input**:
Expand Down
32 changes: 27 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Then make the machine Run-ready and check it:

```bash
roundfix setup # proves adapters and generated profiles before writes
roundfix doctor # read-only adapter and profile readiness; mutates nothing
roundfix doctor # read-only profile and Repository Skill Set readiness
```

## Requirements
Expand All @@ -43,10 +43,32 @@ roundfix doctor # read-only adapter and profile readiness; mutates nothing
- Building from source additionally needs Go 1.26+ and `make`.

`roundfix doctor` diagnoses all of it — including official Codex adapter
identity, exact Agent Selection Profile proof, and macOS codex hygiene — with
one line per check and a `next:` action on failures. Use `roundfix setup` to
provision the minimum supported acpx or official adapter, or migrate a stale
legacy override after authorization.
identity, exact Agent Selection Profile proof, Repository Skill Set readiness,
and macOS codex hygiene — with one line per check and a `next:` action on
failures. The independent Repository Skill Set result follows `profiles:`:

```text
profiles: ok (3 distinct tuples; 10 category references)
skills: ok (39 required: 14 Roundfix-owned, 25 external)
```

The running binary's embedded bundle is authoritative for Roundfix-owned
skills, including the Roundfix Skill. Each required external skill must match
its `computedHash` in the repository's `skills-lock.json`. Missing, outdated,
or invalid required skill state prints `skills: failed (...)`, still runs the
other Doctor checks, and makes Doctor exit `1`.

Doctor checks these authorities locally, without network access or writes. It
ignores unrelated extra skill directories and lock entries, never deletes or
updates skills automatically, and only prints the applicable command:

```bash
roundfix skills install --target project
bunx skills experimental_install && bunx skills update -p -y
```

Use `roundfix setup` to provision the minimum supported acpx or official
adapter, or migrate a stale legacy override after authorization.

## Quickstart

Expand Down
Loading