Skip to content

fix: correct plugin-system inaccuracies and harden references#2

Merged
kyle-sexton merged 1 commit into
mainfrom
chore/audit-accuracy-fixes
Jun 22, 2026
Merged

fix: correct plugin-system inaccuracies and harden references#2
kyle-sexton merged 1 commit into
mainfrom
chore/audit-accuracy-fixes

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

Full per-file audit of the repo against current official Claude Code docs (re-verified this session per the repo''s fresh-docs mandate). The vast majority of existing content was confirmed accurate; this PR fixes the real inaccuracies found and strengthens references. No code, only manifest/docs.

Real defects fixed

  • marketplace.json — off-schema owner.url. The documented owner object supports only name (required) + email (optional) — url is not a valid owner field. Replaced with the documented contact field using the info@melodicsoftware.com shared inbox (matches the docs'' DevTools Team / devtools@example.com team-alias example; no personal PII). Source: plugin-marketplaces "Owner fields".
  • MIGRATION-PLAYBOOK.md — wrong namespacing. Components are namespaced by the plugin''s own name, not the marketplace name. Corrected /melodic-software:foo/<plugin-name>:foo. Source: plugins-reference (plugin-dev:agent-creator example).

Polish / accuracy

  • marketplace.json — added $schema → published SchemaStore marketplace schema (editor validation; Claude Code ignores it at load time).
  • MIGRATION-PLAYBOOK.mduserConfig types also include directory/file; non-sensitive values stored under pluginConfigs[<id>].options.
  • CLAUDE.md — canonical-docs table made comprehensive (plugin dependencies, slash commands, memory, .claude directory, tools reference) + cited the two SchemaStore JSON Schemas.

Verified-correct (no change needed)

All plugin env vars/paths (CLAUDE_PLUGIN_ROOT/DATA/PROJECT_DIR, cache/data paths), userConfig→keychain storage, hooks/hooks.json, agent shadowing precedence, extraKnownMarketplaces + CLAUDE_CODE_PLUGIN_SEED_DIR headless guidance, claude plugin validate / --plugin-dir, all README commands, and .gitignore (CLAUDE.local.md and .claude/rules/ are both current, documented features).

Validation

claude plugin validate . → passes (exit 0; only the expected "no plugins defined" warning). JSON parses.

🤖 Generated with Claude Code

Audited every file against current official Claude Code docs (verified
this session) and fixed the inaccuracies found:

- marketplace.json: drop off-schema `owner.url` (the documented owner
  object supports only `name` + `email`) and use the documented contact
  field with a role-based shared inbox; add the `$schema` pointer to the
  published SchemaStore marketplace schema for editor validation.
- MIGRATION-PLAYBOOK.md: components are namespaced by the plugin's own
  `name`, not the marketplace name (`/<plugin-name>:foo`); correct the
  prior `/melodic-software:foo` claim. Tighten userConfig detail:
  supported types include directory/file, and non-sensitive values are
  stored under `pluginConfigs[<id>].options`.
- CLAUDE.md: make the canonical-docs table comprehensive (plugin
  dependencies, slash commands, memory, the .claude directory, tools
  reference) and cite the SchemaStore JSON Schemas for the repo's JSON.

Sources: plugins-reference, plugin-marketplaces, sub-agents, memory docs
at code.claude.com; schemas at json.schemastore.org. `claude plugin
validate .` passes (only the expected "no plugins defined" warning).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kyle-sexton
kyle-sexton merged commit bd5c35a into main Jun 22, 2026
1 check passed
@kyle-sexton
kyle-sexton deleted the chore/audit-accuracy-fixes branch June 22, 2026 21:02
@claude claude Bot mentioned this pull request Jul 11, 2026
kyle-sexton added a commit that referenced this pull request Jul 12, 2026
Address two more Codex P2 findings plus the analogous coaching case:

- codebase-detection case (#2): the eval repo has no real auth-flow
  module, so grounding would fail or reward inventing sources. Reframe to
  the routing + graceful-degradation invariant — resolve to codebase
  mode, discover from live files, and ask the user to point when no
  grounding exists rather than inventing repo sources.
- primary-source case (#5) and coaching case (#4): a fresh topic
  invocation runs the mission interview before teaching, so expecting
  immediate content rewarded skipping the mission gate. Make both
  gate-aware — respect the new-workspace mission flow while asserting the
  grounding / one-question-coaching invariants.
kyle-sexton added a commit that referenced this pull request Jul 13, 2026
… hardening (#138)

Applies the resolved `planning/setup` hardening to `knowledge/setup`'s
`library_dir` seam (same single-directory `userConfig` shape, same
latent issues).

## Changes

**`plugins/knowledge/skills/setup/SKILL.md`**
- **Precedence** — step 1 now resolves the full documented order
(Managed > `--settings` > Local > Project > User), warns when higher
layers are unreadable instead of declaring a lower value authoritative,
and surfaces layer shadowing before the project write.
- **Portability** — step 5 guards the tracked project write: never
propagate a machine-specific personal-layer value into team settings;
route personal-only overrides to `.claude/settings.local.json`
(portability required only for the shared project write).
- **Declared-convention alignment** — inspect the repo's declared
working-notes/artifacts convention even when a value is set; surface
divergence and offer to reconcile.

**`plugins/codebase-audit/skills/setup/SKILL.md`** (partial match —
writes a tracked `.md`, not settings)
- Applied only the precedence/shadowing subset: step 1 reports the
*effective additively-merged* config across user-global → team → local
layers (and warns on unreadable layers), instead of summarizing the team
file alone. Settings-write portability specifics do not apply.

## Deviations (own-flagged)

1. **Fix #3 premise softened for knowledge.** The issue's fix #3
parenthetical assumed knowledge "honors that convention over the config
at write time" (true for planning). Verified via
`skills/youtube/extraction/lib/work-root.js` and the youtube pipeline
that **knowledge resolves `library_dir` directly at write time — no
skill overrides it with a repo convention at runtime.** Documenting that
behavior would be false, so I softened the imported write-time-override
claim: `library_dir` is runtime-authoritative, and setup's job is to
keep it *aligned* with any declared convention. Fixes #1 and #2 are
unaffected.
2. **`codebase-audit` version bump not in issue scope.** Patch-bumped
`0.1.0 → 0.1.1` because its SKILL behavior changed; the issue only
specified the `knowledge` minor bump.

## Verification
- `knowledge` `plugin.json` minor bump `0.2.0 → 0.3.0`; `codebase-audit`
`0.1.0 → 0.1.1`.
- `claude plugin validate` clean on both plugins.
- markdownlint clean on both edited files.

Refs melodic-software/medley#1463

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Changes are limited to plugin skill documentation and version
metadata; no application runtime or security-sensitive code paths are
modified.
> 
> **Overview**
> **Hardens setup skills** for the `knowledge` and `codebase-audit`
plugins so interactive setup reflects layered config reality instead of
treating a single team file as authoritative.
> 
> For **`knowledge/setup`**, step 1 now follows the full Claude Code
precedence chain (Managed → `--settings` → Local → Project → User),
warns when higher layers are unreadable, and calls out when a project
write would stay shadowed. A new step reconciles `library_dir` with
repo-declared working-notes conventions even when a value is already
set. Persistence (step 5) blocks copying machine-specific personal paths
into tracked project settings, routes personal-only overrides to
`.claude/settings.local.json`, and the output section documents honest
pipeline behavior (`book-distill` ignores `library_dir`; YouTube does
not yet honor it). **`knowledge`** bumps **0.2.0 → 0.3.0**.
> 
> For **`codebase-audit/setup`**, step 1 is expanded to summarize the
**effective merged** config across user-global → team → local layers
(including dimension opt-outs via empty source lists), explain that only
the team file is written, and warn when overlays block re-enabling
dimensions. **`codebase-audit`** patch-bumps **0.1.0 → 0.1.1**.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
f13139a. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
kyle-sexton added a commit that referenced this pull request Jul 15, 2026
## Summary

Executes the owner-approved tier-2 restores from the salvage sweep
(items #2#12 plus semantic-drift items D1–D4): pre-migration behavior
and guidance dropped at the cutover, restored and genericized to the
marketplace's repo-agnostic seams. Every touched plugin gets a version
bump and CHANGELOG entry.

| Plugin | Version | Restored |
|---|---|---|
| claude-config-audit | 0.4.0 | Pre-computed context blocks (3 skills) +
`allowed-tools` scoping; all script paths
`${CLAUDE_PLUGIN_ROOT}`-rooted; every `!` command empirically tested
with fallbacks |
| event-storming | 0.3.0 | `--design-level` missing-prerequisite guard
(never fabricate a process model) + eval id 7; bare "memory" refs swept
to the `${CLAUDE_PLUGIN_DATA}/history.jsonl` seam |
| planning | 0.9.0 | Agent-team vs fan-out composition guidance in
/architect Step 4.5 (decompose by context boundary, never lifecycle
role; disjoint file ownership); baseline capture routes to
`/implementation:verify-improvement` SSOT when installed;
devils-advocate regains the `/implementation:verify-changes` pointer |
| session-flow | 0.4.0 | Retro ecosystem-improvement catalog
(`reference/`, 221 lines) — hook-event table reconciled against the
current hooks doc (8 events added, 2 medley errors fixed); handoff
failure-pattern `context/gotchas.md` |
| review-toolkit | 0.5.0 | Normalization-pipeline model assignment
(Stage 0/3 Sonnet, 1–2 deterministic/Haiku, 4 deterministic) + per-stage
heading annotations |
| implementation | 0.5.0 | Optional `tool-pin` version-drift warning in
/lint + ecosystem-commands contract 1.1.0 (additive schema key, per the
contract's own versioning rule); /implement over-correction trap logs to
the session retro when installed |
| codebase-audit | 0.2.0 | Background/unattended Phase 1 fan-out variant
(graceful-degrade framing) |
| code-tidying | 0.4.0 | Stdlib-only frontmatter-fence integrity check
in the self-update lane (pass/fail paths tested) |
| prototype | 0.2.1 | Composition table (fully-qualified marketplace
names, `when installed` gating); named `session-flow:handoff` seam in
the auto-invoke gate |

## Playbook compliance

- Repo-agnostic: coupling grep over all added lines is clean (no medley
paths, no consumer-repo names, no reach-outs); cross-plugin references
use fully-qualified names with graceful "when installed" degrade.
- Fresh-docs: `disable-model-invocation`/frontmatter,
`${CLAUDE_PLUGIN_ROOT}` substitution scope ("Skill and agent content —
anywhere the placeholder appears"), and the hook-event table were
verified against code.claude.com docs this session.
- `docs/conventions/ecosystem-commands/` confirmed repo-owned (not a
standards-managed materialization) before the schema edit.
- All nine plugins pass `claude plugin validate`; catalog passes `claude
plugin validate --strict`; new/changed markdown passes markdownlint-cli2
(0 errors); the new eval validates against `evals.schema.json`.

## Security review note (claude-config-audit 0.4.0)

The pre-computed context blocks add a code-execution-at-skill-load
surface: `!` commands run when the skill is invoked. Scope check per the
plugin-acceptance review: all commands invoke scripts **bundled inside
the plugin** via `${CLAUDE_PLUGIN_ROOT}` (no `../` reach-outs, no
absolute paths), are read-only inventory/count operations, carry `||
echo`-style fallbacks so load never hard-fails, and make no network
calls. The `allowed-tools` entry pre-approves exactly the one bundled
read-only script, nothing broader.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_011xHkkNc7CR98L8Xz9Mu7ZA

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 16, 2026
… follow-ups) (#205)

## Summary

The three follow-ups deliberately deferred out of #204 (recorded in its
PR body), each decision-gated with the maintainer before editing. Net
**−341 lines**; no plugin manifest, schema, or skill behavior touched.

## #1 — Retire the audit snapshots

Delete `docs/evals-coverage.md` and
`docs/extensibility-contract-grading.md`. They were hand-stamped,
point-in-time records that drift the moment a plugin changes (the reorg
already forced a two-layer temporal re-stamp).

**Retire over generate.** The durable policy already lives in
`docs/MIGRATION-PLAYBOOK.md` — the warrant rule + consumer-verify recipe
("Evals — warrant policy and consumer-verify recipe") and the four-seams
contract ("Extensibility contract v2.1"). A generator could derive only
eval *presence* (a live glob) — the minority of one doc and none of the
other; class, contract grades, and medley program state stay irreducibly
hand-graded or externally-owned. Generating only the presence slice
yields a half-generated hybrid that still drifts on its biggest surface.
Retire is the clean fit.

**Gaps captured first.** Two warranted-but-unowned eval gaps were
recorded *only* in the retired snapshot (verified still live against the
tree): `context7/setup` and `planning/wayfind`. Filed durably before
deletion:
- `melodic-software/medley#1537` — evals(context7/setup)
- `melodic-software/medley#1538` — evals(planning/wayfind)

Inbound pointers updated: README doc-index (2 bullets removed) and the
playbook's evals section (now states on-demand verification instead of
pointing at a deleted snapshot). No dangling references remain
(repo-wide grep clean).

## #2 — Reclassify the depth-variant convention tension

The playbook stated a depth/intensity variant "takes an argument, never
a sibling," yet `discovery`'s `explore-deep` / `research-deep` ship as
sibling skills. Inspection shows they are **structural, not depth**:

- `explore-deep` — `context: fork` + `agent: general-purpose`: a
distinct execution *topology* (isolated forked subagent), declared in
frontmatter, not expressible as a runtime argument.
- `research-deep` — a dispatcher to the heaviest isolated tier (workflow
engine, forked subagent, or inline fallback), with its own body and
auto-invocation description.

The convention needed no exception — it needed a sharper
structural/depth test. Amended to classify **execution tier as a
structural axis** (sibling) and bind the `-deep` suffix to that axis, so
the naming no longer reads as a violation and a future reader does not
re-flag it. A true effort knob on one execution path still takes an
argument. No skills renamed.

## #3 — README revisit-condition dedup

Assessed, closed **no-op**. The coupling flagged in #204 is a
documented, directional SSOT+index: `docs/CATALOG-TAXONOMY.md` (L71–73)
declares plugin-scoped revisit conditions are *owned by each plugin's
README* and the taxonomy "Trigger register" lists them "only as
pointers." The READMEs are the single owners of genuine plugin-specific
rationale; the register summarizes them. Nothing to dedup. Confirmed
none of the three sections cross-names the taxonomy doc.

## Verification

- `scripts/validate-plugins.sh`: pass (all manifests + strict catalog
sync)
- `scripts/run-plugin-tests.sh`: 7 passed, 0 failed
- `markdownlint-cli2`: 0 errors on both touched markdown files
- Repo-wide grep for the retired doc names: no remaining references

## Note (not in this PR)

`docs/hook-migration-audit.md` is the same "point-in-time audit" genus
as the two retired here. Left untouched; flagged for a consistency
decision in a later pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_0163dXPBdRYFpx4wTtS648tE

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 22, 2026
Resolve version-collision conflicts with changes that landed on main (#922/#817):

- work-items/.claude-plugin/plugin.json: restack version 0.21.1 -> 0.21.3,
  strictly above main's landed 0.21.2 (avoids a silent version match).
- work-items/CHANGELOG.md: preserve main's [0.21.2] and [0.21.1] entries;
  #818's own entry relabeled to [0.21.3], newest on top.
- work-items/skills/triage/SKILL.md: attention-view bucket #2 kept as the
  dual-axis "Raw marker" wording (both sides made the identical change).
kyle-sexton added a commit that referenced this pull request Jul 23, 2026
…ld (PR #1162 review)

Two Important review findings on the scan-briefing change:

- scan-briefing.md intro declared "four parts" but the template has five
  sections; the omitted one is §4 badge-acceptance heuristics — exactly
  the scan-time calibration this change exists to inject (F4). A caller
  following the stated count could send a briefing without it. Now "five
  parts", heuristics enumerated. (claude review #1 + Codex P2)
- Phase 1.5 gated on candidates that "will carry a Strong badge" and their
  shallow-signal, but at Phase 1.5 only the scan-time confidence field
  exists (strong|worth-exploring|speculative) — the recommendation badge
  is assigned in Phase 2. Gate now keys on `confidence: strong`, and
  Phase 2 states the confidence->badge mapping explicitly, resolving the
  field-name and case-style mismatch. (claude review #2)

Also sharpened the durable artifact's deepening vs shallow-signal field
descriptions with contrasting examples so they aren't filled redundantly
(claude review nit).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 23, 2026
Codex P2: the new step-3 dedup had no eval guard — the full-batch fixture
described collect-then-correct with no dedup, so a regression removing it
(and the reporter->remedy preservation it enables) would still pass the
model-graded check. Adds eval #6 exercising a shared-root-cause session
(multiple correctors flag one from-memory claim) and asserting the merge,
per-reporter remedy keying + per-rank application, and single attributed
report; strengthens eval #2's full-batch expectations to include the dedup
step and the remedy-carrying ledger.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant