Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ This file is canonical. Everything else either points at it or is generated from
| `.github/instructions/<topic>.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.

11 changes: 11 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"mcpServers": {
"fluttersdk": {
"command": "./bin/fsa",
"args": [
"mcp:serve"
],
"cwd": "."
}
}
}
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ This file is canonical. Everything else either points at it or is generated from
| `.github/instructions/<topic>.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.

Expand Down
22 changes: 22 additions & 0 deletions docs/verification-loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down