Implements PostToolUse hook to warn about breaking interface changes:
- Detects changes to plugin.json, hooks.json, .mcp.json, agents/*.md
- Compares with git HEAD to find removed/changed elements
- Warns on: removed hooks, changed matchers, removed MCP servers
- Warns on: plugin name changes, major version bumps
- Non-blocking, configurable via CONTRACT_VALIDATOR_BREAKING_WARN
Depends on #229 (SessionStart auto-validate infrastructure).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The Claude plugin cache at ~/.claude/plugins/cache/leo-claude-mktplace/
holds versioned copies of .mcp.json files. When we update .mcp.json
to use run.sh instead of direct python paths, the cache retains old
versions, causing MCP servers to fail.
Now post-update.sh clears this cache, forcing Claude to read fresh
configs from the installed marketplace on next session start.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The branch permission check was only allowing feat/, feature/, and dev/
prefixes for write operations. This blocked PR creation from fix/*
branches, forcing fallback to direct API calls.
Added patterns:
- fix/, bugfix/, hotfix/ - for bug fixes
- chore/, refactor/ - for maintenance
- docs/, test/ - for documentation and tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace direct python path in .mcp.json with run.sh wrapper scripts
that automatically locate the venv in cache or local directory.
Problem: .venv symlinks are gitignored, causing them to be wiped on
every git operation. The SessionStart hook should recreate them but
this was unreliable, leading to repeated MCP server failures.
Solution: run.sh scripts that:
- First check ~/.cache/claude-mcp-venvs/leo-claude-mktplace/{server}/.venv
- Fallback to local .venv if exists
- Exit with helpful error if neither found
This eliminates dependency on symlinks entirely - the scripts are
tracked in git and will always be present after clone/pull/update.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add missing create_pull_request tool to Gitea MCP server. This completes
the PR lifecycle - previously only had list/get/review/comment tools.
- Add create_pull_request to GiteaClient
- Add async wrapper to PullRequestTools with branch permissions
- Register tool in server.py with proper schema
- Parameters: title, body, head, base, labels (optional)
- Branch-aware security: only allowed on development/feature branches
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace the old approach (create venvs in marketplace directory) with
the new venv-repair.sh approach (symlinks to external cache).
This ensures post-update.sh:
- Instantly restores symlinks if cache exists
- Only does full pip install on first run
- Works correctly after marketplace updates
Flow after this fix:
Update marketplace → post-update.sh → venv-repair → Session works
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Problem:
- Venvs in marketplace directory got deleted on every update
- Users had to manually run setup.sh and wait for full pip install
- This caused MCP servers to fail until manually fixed
Solution:
- Store venvs in external cache (~/.cache/claude-mcp-venvs/)
- Auto-repair symlinks via SessionStart hook (instant operation)
- Only run pip install on first use or when requirements change
Architecture:
Cache (runtime) → Marketplaces → External venv cache
The chain of symlinks ensures all three locations work:
1. ~/.claude/plugins/cache/.../mcp-servers/* (runtime)
2. ~/.claude/plugins/marketplaces/.../mcp-servers/* (install)
3. ~/.cache/claude-mcp-venvs/* (persistent venvs)
Performance:
- First install: ~2-3 min (unchanged)
- After marketplace update: 0.03 sec (was 2-3 min)
Files:
- scripts/venv-repair.sh: Fast symlink restoration for hooks
- scripts/setup-venvs.sh: Full setup with external cache
- plugins/projman/hooks/startup-check.sh: Auto-repair on session start
- .gitignore: Ignore .venv symlinks
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously post-update.sh would only warn when venvs were missing,
requiring a separate setup.sh run. Now it automatically creates
missing venvs and installs dependencies including editable packages.
Also added viz-platform and contract-validator to the update list.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The filter tool was adding an __index_level_0__ column to results
because pandas query() preserves the original index, which gets
converted to a column when storing the DataFrame.
Added .reset_index(drop=True) after query() to drop the preserved
index and create a clean sequential index.
Fixes#203
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The setup script only installed requirements.txt dependencies but not the
local package itself, causing MCP servers to fail with ModuleNotFoundError.
Changes:
- Add `pip install -e .` for servers with pyproject.toml
- Add viz-platform and contract-validator to MCP server setup
- Add symlink verification for new plugins
- Update version banner to v5.0.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /initial-setup command for contract-validator plugin
- Add contract-validator section to README.md (NEW in v5.0.0)
- Update data-platform version tag: *NEW* -> *NEW in v4.0.0*
- Update viz-platform version tag: *NEW* -> *NEW in v4.0.0*
- Add Contract Validator MCP Server section to README.md
- Add contract-validator to test commands table and repo structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update version to 5.0.0 in README.md, marketplace.json, CLAUDE.md
- Convert [Unreleased] to [5.0.0] in CHANGELOG.md
- Add contract-validator to CANONICAL-PATHS.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 34 tests across 3 test modules:
- test_parse_tools.py: 11 tests for README/CLAUDE.md parsing
- test_validation_tools.py: 11 tests for compatibility and agent validation
- test_report_tools.py: 12 tests for report generation and filtering
Coverage: parse_tools 79%, validation_tools 96%, report_tools 89%
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add contract-validator to marketplace.json with proper metadata
- Update CLAUDE.md plugin table and commands list
- Validation passes with ./scripts/validate-marketplace.sh
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 2 autonomous agents:
- full-validation: Complete cross-plugin compatibility validation
triggered by /validate-contracts command
- agent-check: Single agent definition validation triggered
by /check-agent command
Each agent documents capabilities, workflow, validation rules,
and example interactions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 3 user-facing commands:
- /validate-contracts: Full marketplace compatibility validation
- /check-agent: Validate single agent definition
- /list-interfaces: Show plugin interfaces summary
Each command documents usage, workflow, parameters, and available
MCP tools for implementation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add report generation and issue listing tools:
- generate_compatibility_report: Full marketplace validation with
markdown or JSON output, includes summary statistics
- list_issues: Filtered issue listing by severity and type
The report tools coordinate parse_tools and validation_tools to
scan all plugins in a marketplace, run pairwise compatibility
checks, and aggregate findings into comprehensive reports.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add plugins/viz-platform/ directory structure
- Create .claude-plugin/plugin.json with metadata
- Create .mcp.json pointing to viz-platform MCP server
- Create hooks/hooks.json with SessionStart hook
- Create symlink to mcp-servers/viz-platform
- Add plugin to marketplace.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>