chore: release 2.0.1
Some checks failed
Tests / PR mergeability (push) Successful in 21s
Tests / Base branch health (push) Successful in 11s
Tests / conformance test (macos-latest, 24) (push) Blocked by required conditions
Tests / conformance test (windows-latest, 24, shard 1/3) (push) Blocked by required conditions
Tests / conformance test (windows-latest, 24, shard 2/3) (push) Blocked by required conditions
Tests / conformance test (windows-latest, 24, shard 3/3) (push) Blocked by required conditions
Tests / Required tests (push) Blocked by required conditions
Tests / Detect test scope (push) Successful in 18s
Tests / lint-tests (push) Failing after 1m58s
Tests / plugin-validate (push) Successful in 58s
Tests / test (ubuntu-latest, 24, shard 1/3) (push) Failing after 21s
Tests / test (ubuntu-latest, 24, shard 2/3) (push) Failing after 22s
Tests / test (ubuntu-latest, 24, shard 3/3) (push) Failing after 18s
Tests / test (ubuntu-latest, 24) (push) Failing after 20s
Tests / test (inert CI) (push) Has been skipped
Tests / QA loop walk (smell ratchet) (push) Failing after 19s
Tests / Coverage gate (merged shards) (push) Has been skipped
Tests / Publish emitted-baseline artifact (push) Has been skipped
Dismiss Unauthorized PR Approvals / dismiss-unauthorized-approval (push) Successful in 8s
CI timeout budget report / report (push) Failing after 15s

This commit is contained in:
Jakub Zych
2026-10-11 13:06:11 +02:00
parent 157d5d9d31
commit ec3f670162
41 changed files with 85 additions and 84 deletions

View File

@@ -1,5 +0,0 @@
---
type: Fixed
pr: 2
---
**A passed UAT is no longer discarded or re-requested after gap closure** — a phase whose human UAT passed could loop forever between `/msd-execute-phase` and `/msd-verify-work`: a gap-closure plan (or a later phase editing a covered file) made the report `stale`, the re-run verifier could not see the UAT file, and execute-phase then rewrote `*-UAT.md` with every row back to `[pending]`. The verifier now reads recorded UAT results as evidence (`verification.uat-evidence`) and re-requests only rows whose tested code changed; the UAT file is merged, never overwritten (`verification.seed-uat`); `verify-work` and `progress` re-run the verifier themselves for a stale report instead of routing to `execute-phase`; and `progress` offers every stale-but-executed phase as one re-verify action. `verification.status` now reports `stale_reason`. A real change to covered code still makes the report stale.

View File

@@ -9,7 +9,7 @@
{
"name": "msd-core",
"description": "MSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
"version": "2.0.0",
"version": "2.0.1",
"source": "./",
"author": {
"name": "golem15",

View File

@@ -1,7 +1,7 @@
{
"name": "msd-core",
"displayName": "MSD Core",
"version": "2.0.0",
"version": "2.0.1",
"description": "MSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
"author": {
"name": "golem15",

View File

@@ -6,6 +6,12 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased]
## [2.0.1] - 2026-10-11
### Fixed
- **A passed UAT is no longer discarded or re-requested after gap closure** — a phase whose human UAT passed could loop forever between `/msd-execute-phase` and `/msd-verify-work`: a gap-closure plan (or a later phase editing a covered file) made the report `stale`, the re-run verifier could not see the UAT file, and execute-phase then rewrote `*-UAT.md` with every row back to `[pending]`. The verifier now reads recorded UAT results as evidence (`verification.uat-evidence`) and re-requests only rows whose tested code changed; the UAT file is merged, never overwritten (`verification.seed-uat`); `verify-work` and `progress` re-run the verifier themselves for a stale report instead of routing to `execute-phase`; and `progress` offers every stale-but-executed phase as one re-verify action. `verification.status` now reports `stale_reason`. A real change to covered code still makes the report stale. (#2)
## [2.0.0] - 2026-10-09
First release of MSD, the golem15 hard fork of GSD. It renames everything GSD → MSD, keeps six runtimes (Claude Code, Codex, OpenCode, Cursor, ZCode, Antigravity), and installs and updates from git release tags instead of npm: `curl -fsSL https://msd.golem15.com | bash`. It also includes all GSD changes made after 1.14.0. See **Changed**, **Removed** and **Fixed** below for the fork-specific entries.

View File

@@ -1,7 +1,7 @@
{
"id": "ai-integration",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "AI design contract",
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "antigravity",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Antigravity",
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "assumption-delta",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Assumption-delta architecture checkpoint",
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "audit",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Audit",
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `msd-tools audit-uat` (cross-phase UAT outstanding items) and `msd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "broken-windows",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Broken-windows ledger",
"description": "Cross-phase defect register accumulating stubs, TODOs, skipped tests, unrun verifies, and unmet truths into .planning/WINDOWS.md. When enforcement is enabled, it blocks /msd-ship while any window is open unless explicitly waived with a recorded reason. Operationalizes MSD's no-defer discipline as a tracked artifact (issue #1950).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "claude-orchestration",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Claude orchestration (Workflow backend)",
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the MSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'msd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME msd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in msd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing msd-ultraplan-phase BETA-isolation posture.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "claude",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Claude Code",
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "code-review",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Code review",
"description": "Source-file code review and review-fix workflow support for completed execution work.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "coderabbit",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "CodeRabbit",
"description": "CodeRabbit CLI — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). Reviews the working-tree diff (`coderabbit review --prompt-only`), not the source tree, and accepts neither a prompt nor a model flag; findings are down-weighted in consensus (evidenceClass: diff-only).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "codex",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenAI Codex CLI",
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "cursor",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Cursor",
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "drift",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Drift detection gates",
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "external-job",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Async external-job scheduler adapter",
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies classification at execute:wave:pre and recording at execute:wave:post. This capability still contributes executor guidance at wave:post; execute-phase now renders wave:pre entries and dispatches generic step hooks there independently. Moving external-job classification to wave:pre is a separate capability change, not part of #4148. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "gap-analysis",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Post-planning gap analysis",
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
"tier": "standard",

View File

@@ -1,7 +1,7 @@
{
"id": "graphify",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Knowledge graph",
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /msd-graphify skill.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "intel",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Codebase intelligence",
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `msd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/msd-map-codebase` and `msd-intel-updater`.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "live-dom-uat",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Live-DOM UAT",
"description": "Default-off live-DOM verification (#2856). Confines browser MCP reach to one purpose-built agent (msd-dom-verifier) that carries the browser globs in its own tools: line, registered as an additive step hook at execute:wave:post. agents/msd-executor.md is deliberately NOT widened: for a first-party agent the static tool list is the only control that exists, no capability can grant tools to one (ADR-1244 D2), no hook kind grants tool permissions (ADR-857 D4), and there is no per-dispatch tool override. Gated by activationKey workflow.live_dom_uat (default false), so with the key off the capability resolves inactive and the hook does not render at all. NOTE on the browser profile lock: chrome-devtools-mcp holds an exclusive lock on $HOME/.cache/chrome-devtools-mcp/chrome-profile, and --isolated is a flag on the user's own MCP-server registration that MSD cannot pass. Concurrent execution waves sharing one profile will therefore collide; the step tolerates and reports that (onError: skip, never blocking) rather than pretending to coordinate a resource it does not own.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "llama-cpp",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "llama.cpp",
"description": "llama.cpp server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.llama_cpp_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`llama-cpp`, required by KEBAB_RE); `reviewer.slug` stays snake (`llama_cpp`) to match the shipped roster and the `review.llama_cpp_host` config key (ADR-2782's three-namespace trap).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "lm-studio",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "LM Studio",
"description": "LM Studio local model server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.lm_studio_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`lm-studio`, required by KEBAB_RE); `reviewer.slug` stays snake (`lm_studio`) to match the shipped roster and the `review.lm_studio_host` config key (ADR-2782's three-namespace trap).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "mempalace",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "MemPalace memory",
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "nyquist",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Nyquist validation",
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "ollama",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "Ollama",
"description": "Ollama local model server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.ollama_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "opencode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenCode",
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "pattern-mapper",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Pattern mapping",
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "profile-pipeline",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Developer profiling pipeline",
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `msd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /msd-profile-user skill and msd-user-profiler agent.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "refactor-trigger",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Complexity-triggered refactor",
"description": "Measures the complexity of the code a phase touched and, when a function crosses a configured threshold or jumps past its recorded anchor, surfaces a scoped refactor proposal at .planning/phases/<N>/<NN>-REFACTOR.md. Advisory by default — it never edits code and never blocks. Opt-in strict mode blocks /msd-ship while a proposal is untriaged; a declined proposal is recorded in the broken-windows ledger when that capability is present. Operationalizes 'refactor early, refactor often' as continuous pressure instead of a thing you have to remember (issue #1953).",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "research",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Phase research",
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
"tier": "standard",

View File

@@ -1,7 +1,7 @@
{
"id": "schema-gate",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Schema push detection gate",
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "security",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Security enforcement",
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "tdd",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Test-driven development",
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "ui",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "UI design contracts",
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
"tier": "full",

View File

@@ -1,7 +1,7 @@
{
"id": "vscode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "VS Code",
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
"tier": "core",

View File

@@ -1,7 +1,7 @@
{
"id": "zcode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "ZCode",
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
"tier": "core",

View File

@@ -10,7 +10,7 @@ const capabilities = {
"ai-integration": {
"id": "ai-integration",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "AI design contract",
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
"tier": "full",
@@ -95,7 +95,7 @@ const capabilities = {
"antigravity": {
"id": "antigravity",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Antigravity",
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
"tier": "core",
@@ -258,7 +258,7 @@ const capabilities = {
"assumption-delta": {
"id": "assumption-delta",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Assumption-delta architecture checkpoint",
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
"tier": "full",
@@ -304,7 +304,7 @@ const capabilities = {
"audit": {
"id": "audit",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Audit",
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `msd-tools audit-uat` (cross-phase UAT outstanding items) and `msd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
"tier": "full",
@@ -341,7 +341,7 @@ const capabilities = {
"broken-windows": {
"id": "broken-windows",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Broken-windows ledger",
"description": "Cross-phase defect register accumulating stubs, TODOs, skipped tests, unrun verifies, and unmet truths into .planning/WINDOWS.md. When enforcement is enabled, it blocks /msd-ship while any window is open unless explicitly waived with a recorded reason. Operationalizes MSD's no-defer discipline as a tracked artifact (issue #1950).",
"tier": "full",
@@ -387,7 +387,7 @@ const capabilities = {
"claude": {
"id": "claude",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Claude Code",
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
"tier": "core",
@@ -568,7 +568,7 @@ const capabilities = {
"claude-orchestration": {
"id": "claude-orchestration",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Claude orchestration (Workflow backend)",
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the MSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'msd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME msd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in msd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing msd-ultraplan-phase BETA-isolation posture.",
"tier": "full",
@@ -642,7 +642,7 @@ const capabilities = {
"code-review": {
"id": "code-review",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Code review",
"description": "Source-file code review and review-fix workflow support for completed execution work.",
"tier": "full",
@@ -728,7 +728,7 @@ const capabilities = {
"coderabbit": {
"id": "coderabbit",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "CodeRabbit",
"description": "CodeRabbit CLI — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). Reviews the working-tree diff (`coderabbit review --prompt-only`), not the source tree, and accepts neither a prompt nor a model flag; findings are down-weighted in consensus (evidenceClass: diff-only).",
"tier": "full",
@@ -780,7 +780,7 @@ const capabilities = {
"codex": {
"id": "codex",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenAI Codex CLI",
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
"tier": "core",
@@ -960,7 +960,7 @@ const capabilities = {
"cursor": {
"id": "cursor",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Cursor",
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
"tier": "core",
@@ -1129,7 +1129,7 @@ const capabilities = {
"drift": {
"id": "drift",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Drift detection gates",
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
"tier": "full",
@@ -1230,7 +1230,7 @@ const capabilities = {
"external-job": {
"id": "external-job",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Async external-job scheduler adapter",
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies classification at execute:wave:pre and recording at execute:wave:post. This capability still contributes executor guidance at wave:post; execute-phase now renders wave:pre entries and dispatches generic step hooks there independently. Moving external-job classification to wave:pre is a separate capability change, not part of #4148. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
"tier": "full",
@@ -1313,7 +1313,7 @@ const capabilities = {
"gap-analysis": {
"id": "gap-analysis",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Post-planning gap analysis",
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
"tier": "standard",
@@ -1354,7 +1354,7 @@ const capabilities = {
"graphify": {
"id": "graphify",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Knowledge graph",
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /msd-graphify skill.",
"tier": "full",
@@ -1395,7 +1395,7 @@ const capabilities = {
"intel": {
"id": "intel",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Codebase intelligence",
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `msd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/msd-map-codebase` and `msd-intel-updater`.",
"tier": "full",
@@ -1447,7 +1447,7 @@ const capabilities = {
"live-dom-uat": {
"id": "live-dom-uat",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Live-DOM UAT",
"description": "Default-off live-DOM verification (#2856). Confines browser MCP reach to one purpose-built agent (msd-dom-verifier) that carries the browser globs in its own tools: line, registered as an additive step hook at execute:wave:post. agents/msd-executor.md is deliberately NOT widened: for a first-party agent the static tool list is the only control that exists, no capability can grant tools to one (ADR-1244 D2), no hook kind grants tool permissions (ADR-857 D4), and there is no per-dispatch tool override. Gated by activationKey workflow.live_dom_uat (default false), so with the key off the capability resolves inactive and the hook does not render at all. NOTE on the browser profile lock: chrome-devtools-mcp holds an exclusive lock on $HOME/.cache/chrome-devtools-mcp/chrome-profile, and --isolated is a flag on the user's own MCP-server registration that MSD cannot pass. Concurrent execution waves sharing one profile will therefore collide; the step tolerates and reports that (onError: skip, never blocking) rather than pretending to coordinate a resource it does not own.",
"tier": "full",
@@ -1500,7 +1500,7 @@ const capabilities = {
"llama-cpp": {
"id": "llama-cpp",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "llama.cpp",
"description": "llama.cpp server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.llama_cpp_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`llama-cpp`, required by KEBAB_RE); `reviewer.slug` stays snake (`llama_cpp`) to match the shipped roster and the `review.llama_cpp_host` config key (ADR-2782's three-namespace trap).",
"tier": "full",
@@ -1566,7 +1566,7 @@ const capabilities = {
"lm-studio": {
"id": "lm-studio",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "LM Studio",
"description": "LM Studio local model server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.lm_studio_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`lm-studio`, required by KEBAB_RE); `reviewer.slug` stays snake (`lm_studio`) to match the shipped roster and the `review.lm_studio_host` config key (ADR-2782's three-namespace trap).",
"tier": "full",
@@ -1632,7 +1632,7 @@ const capabilities = {
"mempalace": {
"id": "mempalace",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "MemPalace memory",
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
"tier": "full",
@@ -1806,7 +1806,7 @@ const capabilities = {
"nyquist": {
"id": "nyquist",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Nyquist validation",
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
"tier": "full",
@@ -1856,7 +1856,7 @@ const capabilities = {
"ollama": {
"id": "ollama",
"role": "reviewer",
"version": "2.0.0",
"version": "2.0.1",
"title": "Ollama",
"description": "Ollama local model server — cross-AI /msd:review reviewer lane only; not a MSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.ollama_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq.",
"tier": "full",
@@ -1922,7 +1922,7 @@ const capabilities = {
"opencode": {
"id": "opencode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenCode",
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
"tier": "core",
@@ -2116,7 +2116,7 @@ const capabilities = {
"pattern-mapper": {
"id": "pattern-mapper",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Pattern mapping",
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
"tier": "full",
@@ -2170,7 +2170,7 @@ const capabilities = {
"profile-pipeline": {
"id": "profile-pipeline",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Developer profiling pipeline",
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `msd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /msd-profile-user skill and msd-user-profiler agent.",
"tier": "full",
@@ -2247,7 +2247,7 @@ const capabilities = {
"refactor-trigger": {
"id": "refactor-trigger",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Complexity-triggered refactor",
"description": "Measures the complexity of the code a phase touched and, when a function crosses a configured threshold or jumps past its recorded anchor, surfaces a scoped refactor proposal at .planning/phases/<N>/<NN>-REFACTOR.md. Advisory by default — it never edits code and never blocks. Opt-in strict mode blocks /msd-ship while a proposal is untriaged; a declined proposal is recorded in the broken-windows ledger when that capability is present. Operationalizes 'refactor early, refactor often' as continuous pressure instead of a thing you have to remember (issue #1953).",
"tier": "full",
@@ -2314,7 +2314,7 @@ const capabilities = {
"research": {
"id": "research",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Phase research",
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
"tier": "standard",
@@ -2366,7 +2366,7 @@ const capabilities = {
"schema-gate": {
"id": "schema-gate",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Schema push detection gate",
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
"tier": "full",
@@ -2412,7 +2412,7 @@ const capabilities = {
"security": {
"id": "security",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Security enforcement",
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
"tier": "full",
@@ -2511,7 +2511,7 @@ const capabilities = {
"tdd": {
"id": "tdd",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "Test-driven development",
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
"tier": "full",
@@ -2564,7 +2564,7 @@ const capabilities = {
"ui": {
"id": "ui",
"role": "feature",
"version": "2.0.0",
"version": "2.0.1",
"title": "UI design contracts",
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
"tier": "full",
@@ -2664,7 +2664,7 @@ const capabilities = {
"vscode": {
"id": "vscode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "VS Code",
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
"tier": "core",
@@ -2722,7 +2722,7 @@ const capabilities = {
"zcode": {
"id": "zcode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "ZCode",
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
"tier": "core",
@@ -4089,7 +4089,7 @@ const runtimes = {
"antigravity": {
"id": "antigravity",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Antigravity",
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
"tier": "core",
@@ -4252,7 +4252,7 @@ const runtimes = {
"claude": {
"id": "claude",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Claude Code",
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
"tier": "core",
@@ -4433,7 +4433,7 @@ const runtimes = {
"codex": {
"id": "codex",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenAI Codex CLI",
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
"tier": "core",
@@ -4613,7 +4613,7 @@ const runtimes = {
"cursor": {
"id": "cursor",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "Cursor",
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
"tier": "core",
@@ -4782,7 +4782,7 @@ const runtimes = {
"opencode": {
"id": "opencode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "OpenCode",
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
"tier": "core",
@@ -4976,7 +4976,7 @@ const runtimes = {
"vscode": {
"id": "vscode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "VS Code",
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
"tier": "core",
@@ -5034,7 +5034,7 @@ const runtimes = {
"zcode": {
"id": "zcode",
"role": "runtime",
"version": "2.0.0",
"version": "2.0.1",
"title": "ZCode",
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
"tier": "core",

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@golem15/msd-core",
"version": "2.0.0",
"version": "2.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@golem15/msd-core",
"version": "2.0.0",
"version": "2.0.1",
"license": "MIT",
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "^0.2.84",

View File

@@ -1,6 +1,6 @@
{
"name": "@golem15/msd-core",
"version": "2.0.0",
"version": "2.0.1",
"description": "MSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
"main": ".opencode/plugins/msd-core.js",
"bin": {

View File

@@ -2,7 +2,7 @@
"name": "msd-core-vscode",
"displayName": "MSD Core",
"description": "MSD orchestration engine embedded in VS Code (ADR-1239 IDE profile).",
"version": "2.0.0",
"version": "2.0.1",
"publisher": "opengsd",
"engines": {
"vscode": "^1.105.0"