v0.15.0: install semantics & honest status (S0+S1)#16
Draft
typelicious wants to merge 11 commits into
Draft
Conversation
added 11 commits
June 12, 2026 12:07
- McpConfigPatcher gates every entry build on RuntimeResolver: unmet runtime raises RuntimeUnavailableError with install hint, before any backup or config write (korotovsky/karldane regression class) - go.mod wins over package.json in entry auto-detection — Go projects are never configured as npx/node, and npm-deps install is skipped for Go packages with stray docs package.json - cap install aborts with the hint on first gated adapter (0 writes); --skip-runtime-check propagates via CAPACIUM_SKIP_RUNTIME_CHECK - doctor --deep: .venv-missing is no longer reported for uvx/pipx-based packages (ephemeral envs, V5 false positive)
- SKILL_LAYER_KINDS contract in models: only skill/prompt/template/ workflow/tool/resource may materialize as skills-dir links - create_framework_symlinks filters non-skill-layer kinds — fixes the Antigravity regression where --all-frameworks fanned mcp-servers (mempalace/perplexity/slack) out as skills links - FrameworkAdapter.install_capability: bundle/connector-pack roots are containers (no client artifacts); removal stays tolerant for legacy links - bundle member installs now honor --all-frameworks (threaded through _install_bundle_members/_install_single_sub_cap)
- _RemovalSnapshot records every write surface before mutation: client config files (byte-exact), skills-dir links (incl. owner-prefix and .md command links), package trees (parked via rename, purged only on commit), registry rows and bundle memberships - registry change happens strictly after all adapter steps; any failure restores the complete pre-remove state and reports the rollback - bundle member removal journals into the same snapshot (depth-first) - missing client dirs remain a skip, never a crash (V14)
/v2/submit returns 202 + {job_id, canonical_hint, status} — the CLI
assumed a synchronous schema and printed 'unknown' for every field
(lum1104 case). cap submit now polls /v2/submit/{job_id} until
completed/failed, decorates with kind/trust from the listing detail,
and shows the raw response with a warning on unknown schemas instead
of fabricated values. Legacy synchronous schema still parses.
- holds.json under ~/.capacium records reason, version and fingerprint at hold time; cap update skips held packages with a notice - fingerprint drift (local patch) without a hold suppresses the newer-version force-reinstall and points to 'cap hold' instead of silently wiping local modifications - CLI: cap hold <cap> [--reason] [--list], cap unhold <cap>
…STAB-001/V13) - infer_multi_skill_members detects skills/*/SKILL.md, plugin layouts (<dir>/skills/*/SKILL.md) and >=2 sibling SKILL.md dirs; manifest detection and auto-generated manifests model these repos as bundles with member skills instead of one undiscoverable root skill - 3-part IDs (owner/repo/skill, owner/repo::skill) install only the member subtree: correct owner/name/version layout, member-sized package, direct links, correct registry row (V13b) - static guard: kind=skill without root SKILL.md is refused when nested member skills exist (mis-modeled multi-skill repo) and warned otherwise — no more dead root links (V13a)
…V10) - install builds bin/<name> via 'go build' (entrypoint by cmd/<name>, first cmd/* with main.go, or root main.go) — korotovsky parity with the manual 2026-06-11 build - entry builder prefers the built binary; 'go run ...@latest' is rewritten to the local package (never a network fetch) - missing toolchain stays a hard error unless --skip-runtime-check; no brew calls from the build step (provisioning is preflight-only, CAPACIUM_SANDBOX-safe)
- cursor resolves project paths ONLY from an explicit project root (cap install --project / CAPACIUM_PROJECT_ROOT) — never Path.cwd(); without it, skills are cached with a notice and MCP entries go to the global ~/.cursor/mcp.json (regression: mcp.json/.bak files written into package dirs whenever cwd contained a .cursor folder) - framework skills-dir map: cursor registered only with a project root; opencode is global (~/.opencode/skills) — no more links in foreign repo cwds via the omni-symlink fan-out - also: align P0-005 ExchangeClient fixture with capacium-mcp v0.3.0 kwarg (exchange_url) — pre-existing drift surfaced by the env
- manifest mcp.env blocks are sanitized into every client config entry:
empty values become ${KEY} indirections, secret-looking keys with
literal values are redacted to ${KEY} (static guard — no plaintext
secret ever lands in a client config; resolution via launchd/envctl)
- install warns when a declared env var never appears in the package
source (korotovsky class: manifest SLACK_BOT_TOKEN vs server
SLACK_MCP_XOXP_TOKEN — silently unauthenticated servers)
- dev machine: korotovsky manifest corrected to SLACK_MCP_XOXP/XOXB_TOKEN
- cap block <cap> --reason [--issue]: per-adapter status 'blocked' with the upstream reason; cap unblock clears it - cap list --details shows blocked + reason; doctor's handshake check reports blocked caps separately (expected non-responders) instead of counting them as failed probes — blocked (upstream) != broken (capacium) - dev machine: karldane/slack-mcp (go.mod replace on author machine) and elementeer/elementeer-mcp (@elementeer/shared unpublished) blocked
Two tests passed on macOS local but failed on Linux CI: - TestCursorAdapterSkills::test_skills_dir_created asserted the old cwd-write behavior removed by STAB-006; now uses the explicit project_root fixture (passed locally only via a stale repo .cursor/) - transactional-remove installed_mcp fixture hardcoded the macOS claude-desktop config path; on Linux the adapter writes to ~/.config/Claude. Derive the path from ClaudeDesktopAdapter ._resolve_config_path() so it is platform-correct.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v0.15.0 — Install semantics & honest status (S0+S1 of ops-stabilization-v0143)
Review-only integration PR. Do not merge until VER-002 (attended 8-client
walkthrough) passes — the v0.15.0 version bump + tag + brew release are the
attended release step that follows this merge.
Scope (10 tasks, GS0+GS1 automated gates PASSED)
.venvfixcap hold/unhold+ update drift guard--project)Verification
96aac5ea…)Companion PRs
Attended remainder (not in this PR)
(draft:
.skillweave/release/v0.15.0-changelog.md), tag + brew release.skillweave/handoff/up-001-pr-draft.md)