chore(implementation): consume ecosystem-commands contract — ladder resolution, setup, v0.2.0#100
Conversation
Replace the two divergent per-ecosystem reference tables with one bundled, schema-conformant set of portable defaults at reference/ecosystems/*.yaml, and resolve each ecosystem's build/test/lint commands through the contract's four-rung ladder (consumer .claude/ecosystems/<eco>.yaml authoritative → inference → ask → bundled fallback). Collapse the old build-table lint-cmd and lint-table check-cmd into the contract's check-cmd. Add /implementation:setup — the ladder's re-runnable writer that interviews, infers, and writes the consuming repo's tracked .claude/ecosystems/*.yaml. Data is unified while each skill keeps its scope: /build covers dotnet/python/typescript/bash/powershell/markdown; the lint-only yaml and cross-cutting surfaces (cross-cutting's ** glob) stay /lint-only, per the contract's canonical-verb-vs-context-binding split. Bump plugin.json to 0.2.0; add CHANGELOG.md; document the seam in README. Refs melodic-software/medley#1420 Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_aa01b2ae-ab25-45d4-8895-9a7b1024f285) |
|
Claude finished @kyle-sexton's task in 4m 10s —— View job PR Review: chore(implementation): consume ecosystem-commands contract — ladder resolution, setup, v0.2.0
SummaryThe architecture is sound. Unifying the two divergent reference tables into 8 schema-conformant YAML files, sharing one ladder document between Findings1.
|
There was a problem hiding this comment.
Stale comment
Risk: low. Did not approve because Cursor Bugbot completed with skip status (usage limit reached), so the required automated review did not complete. Human review is needed before merge; no reviewers were assigned because the PR author is the sole repository contributor.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 72bb3b7a02
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Skip any ecosystem whose resolved `enabled` is false in /build and /lint detection (excluded even under `all`), per the contract schema's `enabled` key. Document it in the resolution ladder. Addresses Codex review P2. Refs melodic-software/medley#1420
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_58955375-fd6f-4b44-9e64-842356db5d62) |
|
Claude finished @kyle-sexton's task in 2m 44s —— View job PR Review: chore(implementation): consume ecosystem-commands contract — ladder resolution, setup, v0.2.0
SummaryTwo commits on this branch. The main commit ( Three issues from the previous review pass remain unaddressed in HEAD. No new blockers found. Findings1.
|
There was a problem hiding this comment.
Stale comment
Risk: medium. Did not approve because Cursor Bugbot completed with skip status, so the required automated review did not complete successfully. Human review is needed before merge; no reviewers were assigned because the PR author is the sole human contributor.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_123ee594-1f78-4db0-b3b5-2085127a593c) |
|
Claude finished @kyle-sexton's task in 1m 49s —— View job PR Review: chore(implementation): consume ecosystem-commands contract — ladder resolution, setup, v0.2.0
SummaryThe HEAD sync commit ( Findings1.
|
There was a problem hiding this comment.
Risk: medium. Did not approve because Cursor Bugbot completed with skip status (usage limit reached), so the required automated review did not complete successfully. Human review is needed before merge; no reviewers were assigned because the PR author is the sole repository contributor.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…lls) (#123) ## What Author rich-form `evals/evals.json` for five judgment-bearing skills, one file per skill under `plugins/<plugin>/skills/<skill>/evals/`. Each ships 6 cases covering trigger/routing, the happy path, at least one refusal/guardrail, and at least one must-not-do anti-pattern, with objectively-verifiable `expectations`. - `discovery/explore` - `discovery/explore-deep` - `discovery/research` - `discovery/research-deep` - `claude-config-audit/memory-health` Variant skills exercise their **distinctive** contract rather than re-testing the parent: - **explore-deep** — fork isolation, read-only boundary (must not edit source), summary+artifact-path return (not the full 7-section report), fallback when `CLAUDE_CODE_FORK_SUBAGENT` unset, empty-scope handling, sidecar when EXPLORE.md exists. - **research-deep** — dispatcher behavior: multi-topic → N parallel agents (not one blob on the engine), tier selection, does-not-run-inline, full discipline even on a small task. ## Per-skill warrant verdicts (re-checked against live SKILL.md) | Skill | Verdict | Basis | |-------|---------|-------| | discovery/explore | **WARRANTED** | Judgment-bearing: mode routing, 6-dimension coverage, outcome gate, no-external-research boundary, does-not-execute | | discovery/explore-deep | **WARRANTED** | Fork-isolation + read-only boundary + return-contract are behavioral contracts a model can violate | | discovery/research | **WARRANTED** | 3-phase discipline, source-tier ratio, mandatory falsification, recency + outcome gates | | discovery/research-deep | **WARRANTED** | Dispatcher decisions (multi-topic split, tier selection, no-inline-deep-pass) are judgment calls | | claude-config-audit/memory-health | **WARRANTED** | Scope boundary, contributor-local persistence, fix-gating, consumer-exemption handling are behavioral | No skill in this batch was pure-reference; no skip verdicts. ## Version bumps Both touched plugins bumped `0.1.0` → `0.2.0` (minor — evals are an additive shipped component; a version bump is the only delivery vehicle). Matches the precedent of a minor bump for adding a new shipped component (implementation plugin → v0.2.0 for a setup skill, #100). ## Validation - All 5 files pass `check-jsonschema` against `plugins/skill-quality/reference/evals.schema.json`. - All 5 skills pass `check-skill.sh` (0 errors); no evals-missing WARN, confirming presence is detected. Residual WARNs are pre-existing skill-body items (Gotchas surface / `Use when:` phrasing), out of scope for this evals-authoring task. ## Note on stale issue-body references The claimed issue body cites two paths that do not exist on `main`: `docs/MIGRATION-PLAYBOOK.md` "Evals — warrant policy and consumer-verify recipe" and `docs/evals-coverage.md`. The warrant guidance actually lives in `plugins/skill-quality/skills/skill-quality/SKILL.md` (validate-evals action) — used as the warrant authority here. Flagging for tracker hygiene; not a blocker. Refs melodic-software/medley#1448 <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Additive eval JSON and minor plugin version bumps only; no changes to skill runtime logic or application code paths. > > **Overview** > Adds **rich-form** `evals/evals.json` (six cases each, with `prompt`, `expected_output`, and verifiable `expectations`) for five judgment-bearing skills: **discovery** `explore`, `explore-deep`, `research`, `research-deep`, and **claude-config-audit** `memory-health`. > > The new cases encode each skill’s behavioral contract—happy paths, scope/routing, guardrails (read-only, no auto-fix, no training-recall claims), and variant-specific rules (e.g. fork isolation and sidecar artifacts for `explore-deep`; dispatcher tiering and parallel topic agents for `research-deep`; contributor-local reports and fix gating for `memory-health`). > > **Plugin versions** are bumped as the delivery vehicle for the new shipped eval assets: `claude-config-audit` **0.1.0 → 0.2.0**, `discovery` **0.2.0 → 0.3.0**. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 9406015. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->


Retrofit the
implementationplugin to consume the ecosystem-commands contract (docs/conventions/ecosystem-commands/README.md,ecosystem.schema.json).What changed
skills/build/reference/ecosystem-config.md,skills/lint/reference/ecosystem-config.md) are replaced by schema-conformantreference/ecosystems/<eco>.yaml(8 files, validated against the contract schema). Unified command keys:build-cmd/test-cmd/check-cmd/fix-cmd— the old build-tablelint-cmdand lint-tablecheck-cmdcollapse tocheck-cmd./buildand/lintvia a sharedreference/resolution-ladder.md: consumer.claude/ecosystems/<eco>.yaml(additive over~/.claude/ecosystems/user-global +.local.yamloverlay) → inference → ask → bundled fallback. Malformed consumer file warns + degrades to inference, never hard-stops./implementation:setup— re-runnable ladder writer (interview + infer + write.claude/ecosystems/*.yaml); codebase-auditskills/setupis the shape precedent.plugin.json→ 0.2.0; newCHANGELOG.md; README documents the seam and cites the contract by path.Decisions (pre-baked from the design gate; recorded, not reopened)
yamlandcross-cuttingsurfaces into/build— andcross-cutting's**glob matches every change. Per the contract's canonical-verb-vs-context-binding split, the data unifies while each skill keeps its scope:/buildcovers dotnet/python/typescript/bash/powershell/markdown;yaml+cross-cuttingstay/lint-only.$REPO_ROOT/-prefixed dotnet command for the contract example's<solution-or-project-file>form (the running skill resolves absolute paths)..claude/ecosystems/; bundled defaults rung-4 only; no newuserConfigknob; task-runner deferred (opaque command strings).Verification
check-jsonschemaagainstecosystem.schema.json: all 8 filesok.claude plugin validate ./plugins/implementationandclaude plugin validate --strict .(catalog): both pass.--plugin-dirsmoke in a clean non-source repo (only.git): all 11 skills load, incl. newimplementation:setup.markdownlint-cli2on changed markdown: 0 errors.Gate gap (documented per non-interactive policy): deep
${CLAUDE_PLUGIN_ROOT}runtime asset-read could not be exercised headlessly —claude -psandboxes reads to CWD and does not export the var to a raw tool call. The${CLAUDE_PLUGIN_ROOT}/reference/...idiom matches the establishedcodebase-auditsetup precedent;plugin validateand clean-repo skill discovery pass.Refs melodic-software/medley#1420
Note
Medium Risk
Changes how every repo resolves build/test/lint commands for
/buildand/lint; repos without.claude/ecosystems/may see different defaults or inference paths than the old duplicated tables, though malformed config degrades softly.Overview
Bumps the implementation plugin to 0.2.0 and replaces the split build/lint markdown command tables with a single ecosystem-commands contract: eight schema-conformant
reference/ecosystems/*.yamldefaults plus sharedreference/resolution-ladder.md./implementation:buildand/implementation:lintnow resolve each ecosystem through a four-rung ladder (consumer.claude/ecosystems/*.yamlwith user-global and.local.yamloverlays → infer → ask → bundled defaults), use unified keysbuild-cmd/test-cmd/check-cmd/fix-cmd, and treat malformed consumer YAML as a warn-and-infer fallback./buildstill scopes to six ecosystems;yamlandcross-cuttingstay lint-only socross-cutting's**glob does not affect build detection.Adds re-runnable
/implementation:setupto interview, infer, and write tracked.claude/ecosystems/*.yaml. README and new CHANGELOG document the seam;plugin.jsongains asetupkeyword.Reviewed by Cursor Bugbot for commit 0588f75. Bugbot is set up for automated code reviews on this repo. Configure here.