Skip to content

chore: add AgentReady scaffolding for AI-assisted development#3415

Open
joejstuart wants to merge 10 commits into
conforma:mainfrom
joejstuart:agentready-scaffolding
Open

chore: add AgentReady scaffolding for AI-assisted development#3415
joejstuart wants to merge 10 commits into
conforma:mainfrom
joejstuart:agentready-scaffolding

Conversation

@joejstuart

Copy link
Copy Markdown
Contributor

What:

Add repository scaffolding to improve AI-assisted development readiness: conventional commit enforcement, single-file verification docs, Claude Code configuration, PR template, and minor hygiene fixes.

Why:

Improving the repo's AgentReady score to Gold certification. These are the lightweight changes (gitignore, linting, docs, templates, hooks). Heavier items (ADRs, design docs, threat model) are tracked separately in EC-2000 and EC-2001.

Tickets:

EC-1859

joejstuart and others added 7 commits July 15, 2026 19:08
cover.out, coverage.txt, editor swap files, and .DS_Store were not
ignored, causing them to show up in git status after test runs and
on macOS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The existing check-commit-message hook validates format but isn't
recognized by standard tooling. Adding commitlint with
@commitlint/config-conventional makes conventional commit enforcement
explicit and interoperable with other tools.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Blocks import of deprecated io/ioutil package (removed in Go 1.16).
depguard can be extended with additional rules to enforce import
boundaries between internal packages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Documents how to lint and format individual Go files without running
the full test suite. Useful for fast feedback during development and
for AI agents verifying changes file-by-file.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The README documented building and testing but not how to install a
pre-built binary from a release. Adding this makes the project more
approachable for new users.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prompts contributors for what changed, why, and a Jira ticket link.
Matches the existing GitLab MR template format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Path-scoped rule for acceptance/** surfaces test conventions (Godog,
Testcontainers, snapshot testing) only when editing acceptance tests,
keeping the default context lean.

PostToolUse hook auto-runs gofmt on edited .go files for immediate
formatting feedback during AI-assisted development.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:14 AM UTC · Completed 12:19 AM UTC
Commit: 87c4a29 · View workflow run →

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Enterprise

Run ID: 97763391-3c3b-4713-912e-fcf708785fea

📥 Commits

Reviewing files that changed from the base of the PR and between db897d8 and ebe9a83.

📒 Files selected for processing (1)
  • .pre-commit-config.yaml
💤 Files with no reviewable changes (1)
  • .pre-commit-config.yaml

📝 Walkthrough

Walkthrough

Adds contributor documentation and pull request guidance, configures Go formatting and lint enforcement, normalizes a pre-commit hook, and expands ignored local or generated files.

Changes

Repository workflows

Layer / File(s) Summary
Contributor guidance
README.md, .claude/rules/acceptance-tests.md, AGENTS.md, .github/pull_request_template.md
Documents CLI installation, acceptance test execution, single-file verification, and pull request submission fields.
Development quality automation
.claude/settings.json, .golangci.yaml, .pre-commit-config.yaml, .gitignore
Adds automatic Go formatting after edit/write operations, rejects io/ioutil, normalizes the commit hook identifier, and ignores coverage, swap, and macOS metadata files.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adding AgentReady scaffolding for AI-assisted development.
Description check ✅ Passed The description accurately summarizes the repository scaffolding and hygiene updates in the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/settings.json:
- Line 9: Update the Go handling in the PostToolUse command to iterate over each
path in CLAUDE_FILE_PATHS rather than treating the entire value as one filename,
and run gofmt -w on Go files so they are formatted automatically. Ensure the
hook reliably reports formatting failures if formatting cannot be applied, while
preserving the existing non-Go path behavior.

In @.commitlintrc.yaml:
- Around line 1-2: Add the repository-standard license header at the beginning
of .commitlintrc.yaml, before the extends configuration, without changing the
existing commitlint settings.

In @.gitignore:
- Around line 173-175: Add coverage-acceptance.out to the Go coverage output
section of .gitignore, or use an appropriate coverage-*.out pattern, so make
acceptance artifacts are ignored.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Enterprise

Run ID: cdfa220d-361e-4d70-af84-1d57e92a0258

📥 Commits

Reviewing files that changed from the base of the PR and between 33b9c36 and f373489.

📒 Files selected for processing (9)
  • .claude/rules/acceptance-tests.md
  • .claude/settings.json
  • .commitlintrc.yaml
  • .github/pull_request_template.md
  • .gitignore
  • .golangci.yaml
  • .pre-commit-config.yaml
  • AGENTS.md
  • README.md

Comment thread .claude/settings.json Outdated
"hooks": [
{
"type": "command",
"command": "if echo \"$CLAUDE_FILE_PATHS\" | grep -q '\\.go$'; then gofmt -l \"$CLAUDE_FILE_PATHS\" 2>/dev/null; fi"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make the Go hook format or fail reliably.

gofmt -l only prints unformatted files and still exits successfully, so this PostToolUse hook neither applies formatting nor enforces it. Quoting the entire CLAUDE_FILE_PATHS value also makes multiple edited paths a single invalid filename. Iterate over the paths and use gofmt -w for automatic formatting, or explicitly fail when gofmt -l reports files.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/settings.json at line 9, Update the Go handling in the PostToolUse
command to iterate over each path in CLAUDE_FILE_PATHS rather than treating the
entire value as one filename, and run gofmt -w on Go files so they are formatted
automatically. Ensure the hook reliably reports formatting failures if
formatting cannot be applied, while preserving the existing non-Go path
behavior.

Comment thread .commitlintrc.yaml Outdated
Comment thread .gitignore
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review — #3415

Verdict: approve

Summary

This PR adds repository scaffolding to improve AI-assisted development readiness: Claude Code configuration (path-scoped rules, gofmt PostToolUse hook), PR template, .gitignore hygiene, depguard lint rule for deprecated io/ioutil, a trailing-whitespace fix in .pre-commit-config.yaml, and documentation additions (single-file verification in AGENTS.md, installation section in README.md).

The changes are low-risk: no Go source code is modified, no build logic changes, and no existing behavior is altered. The depguard lint rule is safe because no existing code imports io/ioutil (verified via grep).

Dimension assessment

Dimension Finding
Correctness No logic changes. All additions are configuration/documentation. The depguard rule is correctly structured for golangci-lint v2 format.
Security The .claude/settings.json PostToolUse hook runs gofmt -w on edited .go files — benign formatting operation. No secrets, credentials, or sensitive paths are introduced.
Intent & coherence The PR description accurately reflects the diff. The commit titled "Remove conventional commit enforcement" shows commitlint was added then reverted — only a trailing-whitespace fix remains in .pre-commit-config.yaml. Clean scope.
Style/conventions Follows existing project patterns. The depguard entry is alphabetically ordered in the enable list. PR template uses the project's existing What/Why/Tickets convention.
Documentation currency AGENTS.md and README.md additions are accurate. golangci-lint run internal/evaluator/evaluator.go and gofmt -l commands are valid.
Cross-repo contracts No API, schema, or interface changes.

Findings

Low — redundant .gitignore entries (style/conventions)

The existing .gitignore already contains *.out (line 148, under "Output of the go coverage tool") which covers cover.out. Similarly, the Vim template patterns on lines 155–160 ([._]*.s[a-v][a-z], [._]*.sw[a-p]) already cover .swp and .swo files (Vim swap files always start with .). The explicit *.swp, *.swo, and cover.out entries are harmless but redundant. coverage.txt is the only genuinely new pattern.

Not blocking — intent-documenting duplicates are a stylistic choice.


Protected paths detected — this PR modifies files under one or more
protected paths. The review agent cannot approve PRs that touch these paths.
A human reviewer must approve this PR.

Protected files in this PR:

  • .claude/rules/acceptance-tests.md
  • .claude/settings.json
  • .github/pull_request_template.md
  • .pre-commit-config.yaml
  • AGENTS.md

Labels: PR adds developer tooling config, documentation, and lint rules

Previous run

Review

Verdict: approve · Low-risk scaffolding PR — all changes are to configuration, documentation, and tooling files. No production code is modified.

Summary

This PR adds repository scaffolding for AI-assisted development readiness:

  • Claude Code config (.claude/rules/acceptance-tests.md, .claude/settings.json): Contextual rules for acceptance test files and a PostToolUse hook that runs gofmt on edited .go files. The hook correctly filters by file extension and uses 2>/dev/null to suppress errors on non-Go files.
  • Conventional commit enforcement (.commitlintrc.yaml, .pre-commit-config.yaml): Adds commitlint as a commit-msg stage pre-commit hook with @commitlint/config-conventional. The pre-commit hook manages its own environment via additional_dependencies, so no changes to package.json are needed. Also fixes a trailing space on the existing check-commit-message hook entry.
  • PR template (.github/pull_request_template.md): Standard What/Why/Tickets structure matching the format used in this PR's own body.
  • .gitignore hygiene: Adds explicit patterns for Go coverage output (cover.out, coverage.txt), vim swap files (*.swp, *.swo), and .DS_Store.
  • Linter hardening (.golangci.yaml): Enables depguard to block io/ioutil imports (already deprecated since Go 1.16). No existing usages in the codebase — this is a preventive guardrail.
  • Documentation (AGENTS.md, README.md): Adds single-file verification commands and a quick-start Installation section with a link to pre-built release binaries.

Findings

Low — .gitignore redundancy · The added cover.out pattern on line 173 is already matched by the existing *.out glob on line 149 (under the "Go coverage tool" comment). The explicit entry doesn't cause any problem and improves readability under the new # Go coverage output comment, but it is technically redundant. Similarly, *.swp and *.swo overlap with the existing vim swap patterns on lines 155–160 ([._]*.s[a-v][a-z], [._]*.sw[a-p]), though the new entries are slightly broader since they don't require the [._] prefix.

Low — Minor README.md overlap · The new "Installation" section mentions make builddist/ec, which overlaps with the existing "Building" section immediately below. The overlap is small and the Installation section adds genuine value (links to pre-built binaries), so this is acceptable as-is.

All findings are low severity. The changes are safe to merge.


Protected paths detected — this PR modifies files under one or more
protected paths. The review agent cannot approve PRs that touch these paths.
A human reviewer must approve this PR.

Protected files in this PR:

  • .claude/rules/acceptance-tests.md
  • .claude/settings.json
  • .github/pull_request_template.md
  • .pre-commit-config.yaml
  • AGENTS.md
Previous run (2)

Review — approve

Scope: 9 files changed (96 additions, 1 deletion) — tooling scaffolding, docs, and developer-experience improvements for AgentReady Gold certification.

Changes reviewed

File What
.claude/rules/acceptance-tests.md New Claude Code rule scoped to acceptance/** with test-running guidance
.claude/settings.json PostToolUse hook to run gofmt -l on edited Go files
.commitlintrc.yaml Conventional-commit enforcement via @commitlint/config-conventional
.github/pull_request_template.md Structured PR template (What / Why / Tickets)
.gitignore Additional ignores: coverage output, Vim swap files, .DS_Store
.golangci.yaml Added depguard linter denying deprecated io/ioutil package
.pre-commit-config.yaml Added commitlint pre-commit hook; fixed trailing whitespace on existing line
AGENTS.md Added "Single-File Verification" section with golangci-lint and gofmt examples
README.md Added "Installation" section with binary and build-from-source instructions

Assessment

Correctness: No runtime code changes. All configuration files use correct syntax and structure. The .golangci.yaml uses the v2 format (version: "2") and the depguard rule structure (rules.main.deny[].pkg) is compatible with depguard v2. The .commitlintrc.yaml correctly extends @commitlint/config-conventional. The pre-commit hook additions are well-formed.

Security: No security concerns. The .claude/settings.json hook runs gofmt -l which is a read-only formatting check. No secrets, credentials, or elevated permissions introduced.

Intent & coherence: The changes align with the stated goal of AgentReady scaffolding. The check-commit-message hook (from conforma/hooks) and the new commitlint hook are complementary — the former requires a ticket reference line, while the latter enforces conventional-commit format on the subject line.

Documentation: The AGENTS.md addition is useful. The README "Installation" section adds a quick-start entry point for new users.

Observations

  • Redundant .gitignore patterns: The new *.swp and *.swo entries (lines 179–180 in the result) are already covered by the existing Vim template patterns at lines 155–160 ([._]*.s[a-v][a-z], [._]*.sw[a-p]). Similarly, cover.out is already matched by *.out at line 148. The comment says "explicit patterns for tooling detection" which is a defensible rationale if some tools don't understand bracket-glob notation, but they are technically redundant.

  • README section overlap: The new "Installation" section mentions make build for building from source, and the existing "Building" section immediately below also starts with make build. Consider consolidating or cross-referencing to avoid duplication.

Both observations are low-severity and do not block the change.


Protected paths detected — this PR modifies files under one or more
protected paths. The review agent cannot approve PRs that touch these paths.
A human reviewer must approve this PR.

Protected files in this PR:

  • .claude/rules/acceptance-tests.md
  • .claude/settings.json
  • .github/pull_request_template.md
  • .pre-commit-config.yaml
  • AGENTS.md

Labels: PR adds developer tooling configuration and documentation scaffolding

Previous run (3)

Review — approve

Straightforward scaffolding PR adding developer tooling configuration and documentation. All changes are additive or minimally modify existing config files. No production code is altered, and the changes align with the stated goal of improving AI-assisted development readiness.

Changes reviewed

File Assessment
.claude/rules/acceptance-tests.md ✅ Path-scoped rules accurately reflect existing acceptance test conventions from AGENTS.md
.claude/settings.json ✅ PostToolUse hook correctly uses gofmt -l (list, not write) as a check gate
.commitlintrc.yaml ✅ Minimal config extending the conventional commit standard
.github/pull_request_template.md ✅ Clean template with What/Why/Tickets sections
.gitignore ✅ Adds useful patterns; minor redundancy noted below
.golangci.yaml depguard with io/ioutil denial is sound — confirmed zero existing usages in the codebase
.pre-commit-config.yaml ✅ Fixes trailing whitespace; commitlint hook at commit-msg stage is correct
AGENTS.md ✅ Single-file verification section is useful and accurately documented
README.md ✅ Installation section fills a real gap in the existing docs

Observations

.gitignore — minor redundancy (low): cover.out is already matched by the existing *.out pattern (line 148). The *.swp/*.swo entries partially overlap with the existing Vim swap class [._]*.sw[a-p] (line 157), though they broaden coverage to bare filenames without a leading ./_ prefix. The commit message's rationale ("explicit patterns for tooling detection") is reasonable — this is cosmetic, not functional.

Pre-commit hook overlap (low): The new commitlint hook runs alongside the existing check-commit-message hook from conforma/hooks. The commit message explains these are complementary (the existing hook isn't recognized by standard tooling), so this appears intentional. Worth confirming they don't produce conflicting guidance on the same commit.

Correctness

No logic changes. Config additions are syntactically valid. The depguard rule correctly targets the deprecated io/ioutil package, and grep confirms zero existing imports — enabling this linter will not break CI.

Security

No secrets, credentials, or executable production code introduced. The .claude/settings.json hook executes gofmt, a standard Go SDK tool, scoped to .go files only. No concerns.

Intent & scope

The PR delivers exactly what it describes: gitignore hygiene, conventional commit enforcement, linter hardening, Claude Code configuration, PR template, and doc improvements. Scope is well-bounded. Heavier items (ADRs, design docs, threat model) are correctly deferred to separate tickets (EC-2000, EC-2001).


Protected paths detected — this PR modifies files under one or more
protected paths. The review agent cannot approve PRs that touch these paths.
A human reviewer must approve this PR.

Protected files in this PR:

  • .claude/rules/acceptance-tests.md
  • .claude/settings.json
  • .github/pull_request_template.md
  • .pre-commit-config.yaml
  • AGENTS.md

Labels: PR adds AI agent configuration, developer tooling (commitlint, depguard, pre-commit hooks), and documentation updates

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment agentic tooling documentation Improvements or additions to documentation labels Jul 16, 2026
@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
acceptance 54.26% <ø> (+<0.01%) ⬆️
generative 16.80% <ø> (ø)
integration 27.97% <ø> (ø)
unit 71.74% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CI lint requires Apache 2.0 license headers on all tracked files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:38 AM UTC · Completed 12:44 AM UTC
Commit: 87c4a29 · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment and removed requires-manual-review Review requires human judgment labels Jul 16, 2026
gofmt -l only lists unformatted files without formatting them. Switch to
gofmt -w to auto-format. Also iterate over CLAUDE_FILE_PATHS line by line
instead of passing the whole value as a single filename argument.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:51 AM UTC · Completed 12:56 AM UTC
Commit: 87c4a29 · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment and removed requires-manual-review Review requires human judgment labels Jul 16, 2026
Comment thread .commitlintrc.yaml Outdated
The agentready conventional_commits assessor only checks for tooling
presence, not commit format. Our changelog pipeline uses PR titles
from the GitHub API, not commit message prefixes. Conventional commit
prefixes waste subject line real estate without serving any purpose
in this workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@joejstuart
joejstuart requested a review from st3penta July 16, 2026 16:52
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 4:52 PM UTC · Completed 4:57 PM UTC
Commit: 87c4a29 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment and removed requires-manual-review Review requires human judgment labels Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentic documentation Improvements or additions to documentation requires-manual-review Review requires human judgment size: M tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants