1.9.5
Install
Drop the attached .zip at your repo root without extracting it — the agent unpacks it as the first step. Then type this shortcut phrase as a chat message to your AI agent (Claude Code, Cursor, Codex, Junie, GitHub Copilot, Windsurf, Air, or Warp):
Install Wavefoundry
That is the only operator-typed command — the agent runs the rest of the install. Prerequisites: Python 3.11+, an MCP-aware agent host. Full walkthrough and host-specific notes in the README.
Upgrade
Already running Wavefoundry? Drop the attached .zip at your repo root without extracting it and type this shortcut phrase to your agent:
Upgrade Wavefoundry
The agent unpacks the zip, advances the framework, runs any required migrations and index rebuilds, and reloads the MCP server. Review the version notes below for anything that re-indexes or changes behavior on this upgrade.
Added
wf gpu-doctor. The GPU/provider diagnostics previously reachable only through thewave_gpu_doctorMCP tool now have awf gpu-doctorCLI subcommand, for CLI or no-MCP use. It reuses the same provider detection (no duplicated logic).
Changed
wave_upgradereturns its structuredsummaryon the primary call. Thesummaryblock (versions, files pruned, docs-gate result, index state, and the retired-surface reconciliation findings) is now emitted on the primarywave_upgrade()response, not only on the later cleanup phase — so agents read the computed fields, including the reconciliation list, directly from the main upgrade call.- Retired-surface reconciliation runs on every upgrade. The reconciliation scan (stale
.wavefoundry/bin/*references that should now bewfforms) now runs on any upgrade — including patch bumps and same-version build-successors — rather than only on major/minor bumps, since a patch can change or retire a surface during testing. The scan stays report-only and exclusion-aware. - Secret-scan finding IDs now use the lifecycle format.
docs/scan-findings.jsonfindings use lifecycle-backed<prefix>-secIDs (for example1p8l0-sec) instead of the legacyexc-###sequence — new findings immediately, and existing findings are migrated once (idempotent and lossless) with alegacy_idrecorded for traceability. New and migrated IDs are collision-safe against other lifecycle IDs and findings; the secrets-gate behavior and the file/rule/hash finding re-binding are unchanged, and legacyexc-###IDs are still tolerated. - Reconciliation scan output is cleaner. Host permission/allow-rule files (e.g.
.claude/settings.local.json) are now reported in a separatehost_permission_flagschannel in thewave_upgradesummary — operator-flagged, kept out of the auto-editablereconciliationlist — and the scan no longer false-flagsCHANGELOG.md(at any path) or the generated prompt-surface manifest. - The secret scan always writes its ledger. A clean scan now writes
docs/scan-findings.jsonas an empty[], so the file's presence confirms the scan ran; it changes only when findings change (no repeat-scan churn).
Fixed
- No more flashing console windows on native Windows. Every framework-spawned subprocess — including the indexing, graph, and secret-scanning multiprocessing pools (which the earlier per-spawn fix did not cover) — now runs window-free on Windows: the pools launch via the console-free
pythonw.exe, falling back to serial execution when it is unavailable. No spawn inherits a blocking stdin, which previously could hang the upgrade. - Native-Windows upgrade no longer crashes on encoding or paths. The upgrade uses the platform temp directory instead of a POSIX
/tmpfallback (absent on Windows), forces UTF-8 on stdout at every CLI entry point so a non-ASCII glyph no longer raises aUnicodeEncodeErrorin a cp1252 console, and gives spawned indexer/graph/secrets children their own UTF-8 stdio — fixing the silent index-build failure and the garbled output. wave_install_auditvalidates artifacts correctly. The install-log parser no longer misreads an artifact's description text as a file path, so the install-state check verifies real on-disk artifacts again.- MCP
handler_not_readyduring upgrade/reload. The server now lazily builds its handler from the known repository root, so a started server no longer reportshandler_not_readyin the startup or post-reload window.