diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index f61a4cf..9c8c7cc 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -71,7 +71,7 @@ This file is canonical. Everything else either points at it or is generated from | `.github/instructions/.instructions.md` | generated from those rules with `applyTo:` frontmatter, so Copilot's PR review applies the same rules | | `docs/verification-loop.md` | how a change is proven: static, visual, and dusk E2E | -Other agent infrastructure: skills under `.claude/skills/` (`frontend-design`, `make-component`, `design-first-workflow`), the `component-visual-reviewer` reviewer under `.claude/agents/`, design-culture references under `docs/design-culture/` (Apple HIG, Material 3, Refactoring UI, WCAG, motion, Wind responsive), and the component inventory at `docs/component-registry.md`. +Other agent infrastructure: skills under `.claude/skills/` (`frontend-design`, `make-component`, `design-first-workflow`), the `component-visual-reviewer` reviewer under `.claude/agents/`, design-culture references under `docs/design-culture/` (Apple HIG, Material 3, Refactoring UI, WCAG, motion, Wind responsive), and the component inventory at `docs/component-registry.md`. `.mcp.json` wires `./bin/fsa mcp:serve` as a project MCP server, which is the same dusk, telescope and artisan surface `docs/verification-loop.md` drives from the shell, offered as tools instead. That entry is the POSIX shape, since `bin/fsa` is a `sh` script: on Windows, run `dart run :dispatcher mcp:install` to rewrite it into a shape that machine can spawn. After editing this file or any rule, run `bin/sync-instructions` to regenerate the `.github/` mirrors. CI fails when they are out of date. diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..ee2317d --- /dev/null +++ b/.mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "fluttersdk": { + "command": "./bin/fsa", + "args": [ + "mcp:serve" + ], + "cwd": "." + } + } +} diff --git a/AGENTS.md b/AGENTS.md index 27697ef..08ada0d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -69,7 +69,7 @@ This file is canonical. Everything else either points at it or is generated from | `.github/instructions/.instructions.md` | generated from those rules with `applyTo:` frontmatter, so Copilot's PR review applies the same rules | | `docs/verification-loop.md` | how a change is proven: static, visual, and dusk E2E | -Other agent infrastructure: skills under `.claude/skills/` (`frontend-design`, `make-component`, `design-first-workflow`), the `component-visual-reviewer` reviewer under `.claude/agents/`, design-culture references under `docs/design-culture/` (Apple HIG, Material 3, Refactoring UI, WCAG, motion, Wind responsive), and the component inventory at `docs/component-registry.md`. +Other agent infrastructure: skills under `.claude/skills/` (`frontend-design`, `make-component`, `design-first-workflow`), the `component-visual-reviewer` reviewer under `.claude/agents/`, design-culture references under `docs/design-culture/` (Apple HIG, Material 3, Refactoring UI, WCAG, motion, Wind responsive), and the component inventory at `docs/component-registry.md`. `.mcp.json` wires `./bin/fsa mcp:serve` as a project MCP server, which is the same dusk, telescope and artisan surface `docs/verification-loop.md` drives from the shell, offered as tools instead. That entry is the POSIX shape, since `bin/fsa` is a `sh` script: on Windows, run `dart run :dispatcher mcp:install` to rewrite it into a shape that machine can spawn. After editing this file or any rule, run `bin/sync-instructions` to regenerate the `.github/` mirrors. CI fails when they are out of date. diff --git a/docs/verification-loop.md b/docs/verification-loop.md index 6fff9dc..a785bc5 100644 --- a/docs/verification-loop.md +++ b/docs/verification-loop.md @@ -49,6 +49,28 @@ improvement, rather than looping on the same finding. reads the Semantics tree as a YAML snapshot with stable `[ref=eN]` handles and dispatches real gestures through a six-check actionability gate. +Every verb below has a second face. `.mcp.json` wires `./bin/fsa mcp:serve` as a +project MCP server, so an agent whose client reads that file gets the same dusk, +telescope and artisan surface as tools rather than as shell commands. Both routes +drive the same running app through the same per-project state under +`~/.artisan/sessions/`, so they are interchangeable and can be mixed within one +walk. This file stays written in CLI form because that is the form that can be +pasted into a terminal and read back in a log. + +That entry is machine-shaped, and the committed one is the POSIX shape. **On +Windows, run `dart run :dispatcher mcp:install`**: `bin/fsa` is a `sh` script, so +`mcp:install` skips that shape on Windows by design and falls back to a `dart run` +command it can spawn. Regenerating is the fix rather than hand-editing the file, +because the tool already knows which of its three shapes a machine has, and it is +idempotent and preserves any other server entry. + +It is committed in the fast shape because that is what the fast path is for: +measured here, `./bin/fsa list` is 0.63s against 5.21s for +`dart run :dispatcher list`, and a dusk walk pays that per command rather than +once. `bin/fsa` keys its build cache on `pubspec.lock`, which this repo does not +track, so its first run after a clone rebuilds the binary; that clone needs +`flutter pub get` before either route works, which is already the first step. + Boot the backend, then the app: ```sh