Files
msd-core/docs/features/graphify-cli-first-graph-queries.md
Jakub Zych a9a7a328e6 refactor: hard-fork GSD -> MSD (Make Software Done)
Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD
across contents and paths, upstream package/repo coordinates -> @golem15/msd-core
and golem15com/msd-core. Deep links into upstream history, sibling upstream
packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is.

Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line,
package/plugin identity, regenerated lockfile, install-tree fixtures, derived
registries and benchmark baseline; migration checksum baseline re-locked
(MSD keeps its own install state, so no install had applied the old sums);
sort-order and regex-escaped expectations in tests adjusted.
2026-10-06 01:47:40 +02:00

55 lines
3.0 KiB
Markdown

---
id: 4836
title: Graphify CLI Preferred for Planner and Researcher Graph Queries
group: v1.7.0 Features
---
**Purpose:** `msd-planner` gets **one** knowledge-graph query per phase and
`msd-phase-researcher` gets two or three. That single shot decides which modules
the plan treats as related, and therefore how tasks are ordered into waves. It
was spent on the built-in reader, which seeds by case-insensitive **substring**
match over a node's label and description and then expands a hardcoded two hops
— so the phase "User Authentication" seeds on `author`, `authoring`, and
`unauthorized` with exactly the same weight as `authenticate`, and when the
inflated result exceeds `--budget` the trimmer drops edges by confidence tier.
The `graphify` CLI, already a hard dependency of `/msd-graphify build`, ranks
seeds (IDF weighting, trigram fuzzy matching) and applies context filters before
traversal.
**Both prompts now prefer the CLI and fall back to the built-in reader.** The
branch is `command -v graphify`, the same degradation shape the repo already
uses for Context7 → `ctx7` in `references/research-documentation-lookup.md`. No
new config key: a `graph.json` can only exist if `graphify update .` ran, which
requires the binary, so binary presence is a self-satisfying gate. The fallback
covers edge cases — a CI checkout with a committed graph, a binary since removed
— not the common path. No new tool grant either: both agents already have
`Bash`.
**The planner additionally runs `graphify affected`.** The reference states its
own goal as "which subsystems may be affected by changes in this phase", which is
literally reverse traversal by relation. The built-in reader only approximates it
with undirected two-hop expansion, and has no equivalent verb, so `affected` is
skipped on the fallback path.
**`msd-tools graphify status` now returns `graph_path`.** The CLI takes the graph
location as `--graph`, and the prompts must not re-derive
`.planning/graphs/graph.json` for it — that would point the CLI at a
non-existent local mirror in exactly the umbrella multi-repo setup
`graphify.graph_path` (#1825) exists to serve. `status` already resolves the
override, so it now reports the absolute path it resolved, on both the
graph-present and the graph-missing branch. For the same reason the presence gate
in both prompts is now the `status` call itself rather than a bare `ls` of the
default location.
**Known limits:**
- **The two paths return different shapes.** `graphify query` emits prose and has
no `--json` flag; `msd-tools graphify query` emits JSON with per-edge
confidence tiers and `budget_met`/`budget_estimate`. Both are consumed by a
model, and nothing machine-parses this block, but the prompts now say so
explicitly instead of implying a stable shape.
- **`--budget` means different things on the two paths** — rendered output on the
CLI, estimated payload bytes in the built-in reader (#2738). Same flag name,
different unit.
- With `graphify` absent from `PATH` the fallback runs and the injected graph
context is byte-identical to before.