Files
feedBack/.claude/README.md
T
Miguel_LZPFandBret Mogilefsky b45751164f fix: address PR #332 review feedback
Addresses 12 of 13 review comments from Copilot and CodeRabbit on
PR #332. One comment (no-manifests in validate-plugins.yml) is
declined and answered inline; the rest are applied here.

Substantive fixes:

- .github/workflows/validate-plugins.yml — add --noconftest to the
  schema-tests step. tests/conftest.py imports structlog at module
  level, but the CI job only installs requirements-test.txt
  (pytest/httpx/jsonschema), so pytest collection would fail at
  conftest import. The schema tests don't use shared fixtures, so
  skipping conftest is safe and avoids dragging the full runtime
  requirements into a 2 KB validation job. (Copilot)

- schema/plugin.schema.json — tighten the server_files regex on both
  settings.server_files and diagnostics.server_files to match the
  runtime _validate_relpath rules in plugins/__init__.py. The
  previous regex only blocked absolute paths, drive letters,
  backslashes, and "..". The runtime also rejects "//", "./",
  "/./", and leading-dotfile segments. Schema-valid manifests are
  now also load-time-valid. Verified the regex against 12 cases:
  the 3 in-tree manifests still validate. (Copilot)

- .claude/skills/plugin-validate/SKILL.md — add a per-iteration
  plugin_ok flag so we no longer print "OK <path>" after an earlier
  FAIL in the same manifest. Schema-pass + id-mismatch previously
  produced both FAIL and OK lines for one plugin. (CodeRabbit)

- docs/websocket-protocol.md — clarify song_info.tuning array length
  is source-dependent (typically 6 guitar, 4 bass, but extended-range
  GP imports can be 7/8/5/6). Recommend highway.getStringCount() for
  the authoritative count. Line 30 already said this; the table row
  on line 12 was the stale half. (CodeRabbit)

Trivial fixes:

- .claude/rules/plugin-author.md — "wants included" -> "wants to
  include" in the settings.server_files rule. (CodeRabbit)

- Markdown MD040 — add `text` language tags to 7 bare-fence code
  blocks across AGENTS.md, docs/PLUGIN_AUTHORING.md,
  docs/testing-plugins.md, docs/plugin-logging.md, .claude/README.md,
  .claude/agents/slopsmith-reviewer.md, and
  .claude/skills/plugin-validate/SKILL.md (two fences). (CodeRabbit)

Declined:

- .github/workflows/validate-plugins.yml no-manifests -> exit 0
  (CodeRabbit suggested exit 1). Plugins in this repo are in-tree,
  not submodules (no .gitmodules, git submodule status empty), and
  the workflow has a path filter on plugins/**/plugin.json so it
  only runs when a manifest actually changes. Exit 0 is correct.
  Answered inline on the PR.

Verification:
  pytest tests/test_plugin_schema.py -v --noconftest    # 8 passed
  python -c "import json,glob,jsonschema; s=json.load(open('schema/plugin.schema.json')); [jsonschema.validate(json.load(open(p)), s) for p in sorted(glob.glob('plugins/*/plugin.json'))]"
  # ok — all 3 in-tree manifests validate against tightened schema
Signed-off-by: Miguel_LZPF <mgcdreamer@gmail.com>
2026-06-18 00:38:51 -07:00

2.8 KiB

.claude/ — Claude Code surfaces

This directory holds Claude Code artifacts: skills, rules, and subagents. Other AI tools (Cursor, Copilot, Codex, Aider) should read AGENTS.md instead — .claude/ is Claude-Code-specific.

Layout

.claude/
├── agents/                            Subagents (invoked via @<name>)
│   └── slopsmith-reviewer.md          Plugin-aware code review
├── rules/                             Globs-scoped behaviour rules
│   └── plugin-author.md               Rules that fire when editing plugins/**
├── skills/                            Skills (description triggers auto-invocation)
│   ├── plugin-scaffold/SKILL.md       Generate a new plugin skeleton
│   ├── plugin-validate/SKILL.md       Validate a plugin.json against the schema
│   └── speckit-*/                     Spec-kit skills (auto-generated; don't edit)
├── settings.json                      Repo defaults (no hooks enabled by default)
└── README.md                          You are here

Conventions

  • Spec-kit owns skills/speckit-*. Don't edit those manually — they're regenerated by the spec-kit installer (.specify/).
  • Repo skills live alongside spec-kit skills in skills/. New skills should have a kebab-case directory name and a SKILL.md with YAML frontmatter.
  • Hooks are off by default. Hooks in .claude/settings.json run in every contributor's Claude Code session — enabling one imposes work on everyone. The settings file ships with hooks: {} and a commented example so anyone who wants to opt in can copy it locally.
  • Subagent invocation. Use @slopsmith-reviewer to invoke a subagent explicitly. Plain auto-routing isn't currently configured.

Adding a new skill

  1. Create .claude/skills/<kebab-name>/SKILL.md.
  2. YAML frontmatter must include name (must match directory) and description (must read like a sentence — Claude Code matches the description against user intent for auto-invocation).
  3. Body: instructions Claude follows when the skill triggers. Keep it concrete and short — long skills bit-rot.

Adding a new rule

  1. Create .claude/rules/<topic>.md.
  2. Frontmatter may include globs: (array of glob patterns scoping when the rule applies). Without globs, the rule loads for every session.
  3. Body: terse, imperative guidance — "always do X", "never do Y", "if you see Z, …".

Why so little here?

The maintainer's personal Claude Code rules (context-mode routing, RTK, @git-worker, etc.) deliberately do not live in this repo. Those are user-global concerns in ~/.claude/ — keeping them out of the repo keeps the shared surface lean and makes the repo equally useful to contributors using Cursor, Copilot, plain editors, etc.