Files
msd-core/docs/reference/capability-matrix.md
Tom Boucher acb903c2e8 enhance(#3661): make the code-review hook point configurable (#4159)
* feat(#3661): make the code-review hook point configurable

Add `workflow.code_review_point` (`execute:post` default, or
`execute:wave:post`) so a multi-wave phase can run code review once per
wave instead of once at the end, scoped to what changed since the phase's
prior review.

The code-review capability now declares its step at both loop points via a
new generic `pointFrom` step field: `pointFrom` names an enum config key,
and the step is only active at its own `point` when that key resolves to
a matching value. `_resolvePointGate` (capability-activation.cts) is the
single shared implementation consumed identically by loop-resolver.cts and
capability-state.cts, and capability-validator.cjs enforces that `pointFrom`
references an enum key whose values cover the declaring step's own point.

code-review.md's manual-invocation gate now reads `workflow.code_review`
directly instead of probing registry presence at the hardcoded execute:post
point (so manual `/gsd-code-review` keeps working regardless of which
automatic point is configured), and its file-scope tiers narrow to what
changed since the phase's last review commit when one exists.

execute-phase.md's wave-post step dispatch gets a small, precedented
carve-out so the code-review skill still receives its required phase
argument when dispatched generically (caught by the isolated spec review).

Closes #3661

Emitted-Drift-Ack-Growth: code-review.md — #3661 adds a point-aware config gate check and LAST_REVIEW_COMMIT-based incremental scoping to the file-scope tiers.
Emitted-Drift-Ack-Growth: execute-phase.md — #3661 adds one carve-out sentence so the wave-post generic step dispatch passes PHASE_NUMBER to the code-review skill.

* docs: backfill changeset PR number for #3661 (#4159)

* fix: scope tests/io.test.cjs's fs.writeSync fault-injection mocks by fd

Five fault-injection mocks in the "bug #1008" describe blocks intercepted
every fs.writeSync call regardless of file descriptor, and several threw or
truncated unconditionally on the first call. This surfaced as an
intermittent macOS CI failure: node:test's own IPC channel back to the
parent process (which also goes through fs.writeSync internally) could get
a bogus injected error or truncated write if node's internal machinery
called it while one of these mocks was active, corrupting the message
frame the parent tried to deserialize ("Unable to deserialize cloned
data.", location tests/io.test.cjs:1:1, uncaughtException — a whole-file
IPC crash, not a test assertion failure).

Root cause confirmed by a working counter-example already in the same
file: the "#3912 A6" mocks gate on `fd !== 2` before any fault injection
and were never implicated. Applied the same fd-scoped pattern to the five
unscoped mocks (four output()-targeting tests gate on fd 1, one
error()-targeting test gates on fd 2), and added a regression test proving
an unrelated fd passes through untouched while the fault-injection mock is
active.

Found while verifying #3661; unrelated to that change's own diff.

---------

Co-authored-by: sim <sim@local>
2026-09-02 11:01:54 -04:00

11 KiB

Capability matrix reference

Generated file — do not edit by hand. This matrix is generated from the capability registry by scripts/gen-capability-matrix.cjs and kept honest by a drift guard (tests/capability-matrix-sync.test.cjs runs --check). Any manual edit is overwritten on the next generation run. To change a capability's declared metadata, edit the corresponding capabilities/<id>/capability.json and run node scripts/gen-capability-matrix.cjs --write.

See also: ADR-1244 — Capability manifest fields — The capability trust model


Column definitions

Column Description
id Canonical capability identifier; unique across first- and third-party capabilities. Reserved prefixes: gsd-, gsd-core-, anthropic-.
role feature — extends what the loop does; runtime — adapts GSD to a specific AI runtime/IDE; reviewer — declares a cross-AI reviewer lane (ADR-2782). A capability may be both a runtime and a reviewer.
tier core — always active; standard — active when the runtime supports it; full — opt-in or runtime-specific.
engines.gsd Semver RANGE expressing host-version compatibility. A hard gate at install and at load. — means the capability declares no range.
extension points The loop points this capability registers hooks into (from the registry's byLoopPoint index). — means it registers none (typical for runtime capabilities, whose job is surface emission).
hook kinds Which of step, contribution, gate the capability's hooks use. — means none.
source first-party — ships with GSD Core; third-party — installed from an external source via gsd capability install.

On versions. This matrix intentionally omits a per-capability version column. First-party capabilities are versioned in lockstep with the GSD Core package (their capability.json version always equals the GSD release version), so a per-row version would simply repeat the package version and churn the committed file on every release. The stable host-compatibility signal — engines.gsd — is shown instead. A third-party capability's exact version is recorded in the per-runtime ledger (.gsd-capabilities.json) at install time.


Native (first-party) capabilities

First-party capabilities are implicitly trusted: they ship as part of the GSD Core package and are stamped with the package version at release (per ADR-1244 D6). They are not subject to the consent or integrity-pin flow applied to third-party capabilities.

Feature capabilities (role: feature) — 22

Feature capabilities extend what the loop does — contributing research, planning, execution, verification, or ship artefacts at the loop extension points.

id role tier engines.gsd extension points hook kinds source
ai-integration feature full >=1.6.0 plan:pre, verify:pre step, contribution, gate first-party
assumption-delta feature full >=1.6.0 plan:pre contribution first-party
audit feature full >=1.6.0 — — first-party
broken-windows feature full >=1.7.0 ship:pre gate first-party
claude-orchestration feature full >=1.7.0 plan:post, execute:wave:pre contribution first-party
code-review feature full >=1.6.0 execute:wave:post, execute:post step first-party
drift feature full >=1.6.0 plan:pre, execute:wave:post gate first-party
external-job feature full >=1.7.0 plan:post, execute:wave:post contribution first-party
gap-analysis feature standard >=1.6.0 plan:post gate first-party
graphify feature full >=1.6.0 — — first-party
intel feature full >=1.6.0 plan:pre step first-party
live-dom-uat feature full >=1.11.0 execute:wave:post step first-party
mempalace feature full >=1.6.0 discuss:pre, discuss:post, plan:pre, plan:post, execute:wave:post, verify:post, ship:post step, contribution first-party
nyquist feature full >=1.6.0 verify:post step first-party
pattern-mapper feature full >=1.6.0 plan:pre step first-party
profile-pipeline feature full >=1.6.0 — — first-party
refactor-trigger feature full >=1.10.0 execute:post step first-party
research feature standard >=1.6.0 plan:pre step first-party
schema-gate feature full >=1.6.0 plan:pre contribution first-party
security feature full >=1.6.0 plan:pre, verify:post, ship:pre step, contribution, gate first-party
tdd feature full >=1.6.0 plan:pre, execute:post contribution, gate first-party
ui feature full >=1.6.0 plan:pre, execute:wave:post, verify:post step, gate first-party

Runtime capabilities (role: runtime) — 19

Runtime capabilities adapt GSD to a specific AI runtime or IDE — emitting skills, agents, hooks configuration, and surface files for that host. They typically register no loop hooks (their primary responsibility is surface emission), so their extension-point and hook-kind cells are —.

id role tier engines.gsd extension points hook kinds source
antigravity runtime core >=1.6.0 — — first-party
augment runtime core >=1.6.0 — — first-party
claude runtime core >=1.6.0 — — first-party
cline runtime core >=1.6.0 — — first-party
codebuddy runtime core >=1.6.0 — — first-party
codex runtime core >=1.6.0 — — first-party
copilot runtime core >=1.6.0 — — first-party
cursor runtime core >=1.6.0 — — first-party
hermes runtime core >=1.6.0 — — first-party
kilo runtime core >=1.6.0 — — first-party
kimi runtime core >=1.6.0 — — first-party
kimi-code runtime core >=1.7.0 — — first-party
opencode runtime core >=1.6.0 — — first-party
pi runtime core >=1.7.0 — — first-party
qwen runtime core >=1.6.0 — — first-party
trae runtime core >=1.6.0 — — first-party
vscode runtime core >=1.7.0 — — first-party
windsurf runtime core >=1.6.0 — — first-party
zcode runtime core >=1.6.0 — — first-party

Reviewer capabilities (role: reviewer) — 5

Reviewer capabilities declare a cross-AI reviewer lane — one external CLI or model endpoint /gsd-review hands a plan to (ADR-2782 D3). They are not install targets: they emit no skills, agents, hooks or surface files, so their extension-point and hook-kind cells are —. A host that is also a reviewer (Claude, Codex, Cursor, OpenCode, Qwen, Antigravity) keeps one manifest and appears under runtime above, carrying its lane alongside its runtime body; only lanes that GSD never installs into appear here.

Because a lane receives the plan text, requirements, research findings and CONTEXT.md decisions, it is a disclosed executable surface and is consent-gated at install like any other — see the trust model.

id role tier engines.gsd extension points hook kinds source
coderabbit reviewer full >=1.8.0 — — first-party
gemini reviewer full >=1.8.0 — — first-party
llama-cpp reviewer full >=1.8.0 — — first-party
lm-studio reviewer full >=1.8.0 — — first-party
ollama reviewer full >=1.8.0 — — first-party

Third-party capabilities

This matrix is the first-party catalogue: it is generated from the committed registry and therefore lists only the capabilities that ship with GSD Core. Installed third-party capabilities are NOT written into this committed file. Once a user installs one via gsd capability install <spec> it enters the runtime registry overlay (ADR-1244 D2); the overlay-aware view of what is installed on a given machine is gsd capability list (see the gsd capability command reference), which reports first-party and installed third-party capabilities together using the same column fields described below, with source = third-party.

Column values for third-party rows

Column Value
id As declared in capability.json. Must not use reserved prefixes (gsd-, gsd-core-, anthropic-).
role feature, runtime, or reviewer, as declared.
tier core, standard, or full, as declared.
engines.gsd Range from capability.json; verified at install and at each load.
extension points The loop points the capability registers into, validated against the known 12 identifiers.
hook kinds step, contribution, and/or gate as declared. Disclosed in the consent summary at install.
source third-party

Community registry

Whether GSD operates or advertises a central community registry of third-party capabilities is TBD/TBA (PRD). The matrix mechanic and all manifest fields ship regardless of that decision; URL/git/npm/tarball import does not depend on a central registry.


Manifest field reference

The fields below are defined in capability.json and govern how a capability appears in this matrix. For the full schema, see ADR-1244 D1 and the capability manifest reference.

Field Required Type Purpose
version Yes semver string Capability version. The registry rejects manifests without it.
engines.gsd Recommended semver range Host-version compatibility gate. Enforced at install and load.
compatVersions No object: cap-version → gsd-range Graceful-downgrade table for sources that enumerate versions (git tags, registry, npm).
integrity No sha512-<base64> SHA-512 digest of the fetched bundle. Verified before extraction when present; mismatch aborts.
provenance No { sourceRepo, commit } Source provenance; populated in CI for first-party/curated capabilities.