patch notes · #153 October
#15 · MCP tools backed by the checked CLI
dewfpga mcp exposes check, new, sim, bit, flash and explain_error over stdio. Build tools return the CLI's structured result; protocol stdout stays clean. The offline catalog ships in the release. Installation creates a pinned, optional SDK environment with staged replacement and ownership-aware removal. No client configuration is registered automatically.
Independent review reproduced unbounded output buffering, contradictory JSON accepted as success, cancellation leaving another process session alive, a missing ownership marker during environment creation, and uninstall racing an active install. The corrected server bounds capture, validates schema/type/status agreement and tracks observed descendant groups. Root integration also refuses the entire CLI uninstall before removing toolchain files while the SDK lock is held.
The root's SDK-backed suite passed 24 tests, 0 failures, 0 skips, including the real JSON CLI, protocol discovery, cancellation and the uninstall lock. The combined installer/uninstaller, JSON, MCP and static checks passed 40/0 before the extra CLI lock case was added; that case separately passed. Independent review also built and removed the real pinned SDK in a temporary FPGA_HOME, with foreign files retained. The unpacked release also served real SDK calls for new, sim and offline error explanation; check correctly reported its temporary home had no toolchain. Both site bundles passed 104 pages, 0 failures. Remote CI requires the SDK instead of accepting skipped protocol tests. The first CI failed in the installer; the correction below passed remote CI. No physical board was programmed.
Process-tree cleanup depends on ps. A daemon that reparents before observation and PID reuse remain limitations. Tool annotations describe effects; they are not an authorization enforcement mechanism. Clients must obtain user authorization for flash.
#15 integration correction · 3 October
The first remote CI run failed before verification: the optional MCP installation used an undefined HERE variable. Installation now resolves its repository path once before using it. The new offline whole-installer tests reproduce that failure with MCP enabled and check success, optional helper failure, and explicit skipping (3/3 passed after correction, 2/3 failed before). The repeated-install test also checks exit status, and ShellCheck checks unassigned uppercase variables.
The combined #14–#16 local run exposed a second regression: without Python on PATH, the new MCP removal hook prevented removal of a CLI-only installation. That path works again; existing SDK or lock entries cause an explicit refusal that preserves all files when ownership cannot be checked. Tests cover both an SDK directory and a dangling lock symlink.
The initial full run was 272 passed, 1 failed, 52 known gaps, with unchanged tested sources. After both corrections, the targeted static, installer, SDK-backed MCP and editor suites passed 6 top-level checks, 0 failures. The corrected combined local tree (also containing pending #16 guidance) passed 273/0 with 52 known gaps in 18 minutes; tested source hashes were unchanged. Remote CI for the correction passed, including clean macOS installation, the full suite and Ubuntu browser tests. The earlier failed runs remain recorded as failures.
previous: #14 Machine-readable CLI results
next: #16 Project instructions and a measured repair experiment
This entry in the full list
The commands this entry names: dewfpga mcp
Every SystemVerilog construct measured so far, next to what Vivado does: the probes, stage by stage