You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,6 +47,8 @@ Build first, then test with `--no-build`. CI verifies build, test, format, and a
47
47
- Upgrades degrade to a clear message or a rebuild, never an opaque failure. This invariant applies from the first public tag (v4.0.0) onward: v4 ships a clean slate with no deprecation shims and no legacy names, because nothing was ever released to break (Decision D14). From v4 forward, renaming or removing an MCP tool must keep the old name registered as a deprecation shim that returns an actionable message naming the replacement, for one major version; a client that cached the old surface across an upgrade must not see a bare `Unknown tool`. A change to the index extraction contract must either bump `WorkspaceIndexSchema.TargetVersion` or ride the Fuse-version stamp (`fuse_version` in `index_meta`, compared by `FuseBuildInfo.IsCompatible`), so a stale on-disk index rebuilds itself rather than serving stale data. The changelog entry names the reload or rebuild.
48
48
- Capture bundles are versioned and refused when incompatible (C2). A portable capture bundle (`fuse capture --out`, consumed by `fuse index --from-capture`) carries a `CaptureManifest` stamped with a `BundleFormatVersion` and the producing `fuse_version`. A change to the on-disk bundle layout (the manifest shape, the graph serialization, or the compiler-log contents `fuse index --from-capture` depends on) must bump `CaptureManifest.CurrentFormatVersion`; a change to the extraction contract already rides the `fuse_version` major.minor check (`FuseBuildInfo.IsCompatible`). The consumer refuses a bundle whose format version or producing-version is incompatible via `CaptureManifest.IsCompatibleWithRunningBuild` with the actionable `IncompatibilityReason` (re-capture with the running version), so a bundle is never rehydrated into a wrong-shaped store. The changelog entry names the re-capture.
49
49
50
+
Decision D14 is a one-time v4 exception, not a permanent no-shim policy. v4.0.0 is the first public tag, so R1 deleted every pre-release shim and legacy name; there was no install base to protect. From that tag onward, the upgrade invariant binds: renaming or removing an MCP tool registers the old name as a deprecation shim (actionable message naming the replacement) for one major version, so clients cached across upgrades never see a bare `Unknown tool`. Changelog entries still name every behavioral change; only the pre-v4 migration machinery was dropped.
51
+
50
52
## MCP Tools
51
53
52
54
The eight-tool loop surface (U1), plus `fuse_reduce` as the one out-of-loop utility. Each tool is one mental act, so the loop is teachable in a tool description (after an edit, `fuse_check`; before a signature change, `fuse_impact`; before done, `fuse_review`):
@@ -92,7 +94,7 @@ All numbers come from `tests/benchmarks/results` (the recorded data) and the ben
92
94
93
95
## Working a plan item
94
96
95
-
Forward work is organized as a dependency-ordered program in [roadmap/v4-plan.md](roadmap/v4-plan.md) (the live program; the original oracle-wave plan is archived at the end of the same file). That file is the execution law; this section is the pointer plus the guardrails inline so they are read before any edit.
97
+
Forward work is organized as a dependency-ordered program in [roadmap/v4-plan.md](roadmap/v4-plan.md) (the live program; the original oracle-wave plan is archived at the end of the same file). Post-4.1 hardening tails from the architecture review live in [roadmap/v4.2-plan.md](roadmap/v4.2-plan.md). That file is the execution law; this section is the pointer plus the guardrails inline so they are read before any edit.
96
98
97
99
-**Reading order for a fresh session.** The plan's Execution protocol section in full, then its Decision records, its Metrics dictionary, its Master checklist (the single source of item status), then the item you are about to work including its Preconditions and Gate.
98
100
-**Item lifecycle.** Status lives only in the Master checklist: `[ ]` todo, `[>]` in progress, `[x]` done (gate recorded green in the progress log), `[!]` blocked (progress log names the blocker), `[-]` descoped (progress log names the written decision). Never record status inside item bodies.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+39Lines changed: 39 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,45 @@
2
2
3
3
All notable changes to Fuse are documented here. The format is based on Keep a Changelog. Fuse 4.0.0 is the first public release; it carries the whole product and there is no prior public version to migrate from.
4
4
5
+
## [Unreleased]
6
+
7
+
Planned for 4.2.0 (see [roadmap/v4.2-plan.md](roadmap/v4.2-plan.md)):
8
+
9
+
- Split `WorkspaceIndexStore` into narrow stores; profile the index hot path first.
10
+
- Semantic-tier provider seam (C# behind an interface; no second language in 4.2).
11
+
- Unify Fusion and Retrieval scoping; delete the retired flat FTS generator.
12
+
- CI job for `RequiresSdk` tests; finish `briefing.md` drift cleanup.
- Fuse brand icon (`assets/fuse-icon.png`, `assets/fuse-icon.svg`) on the NuGet package gallery, MCP Registry manifest, WinGet locale, site favicons, and the repository README.
21
+
- Host RPC threat-model documentation (`internals/host-rpc`) describes the local-trust IPC model: predictable per-root pipe or socket, handshake session token, and served-root binding on RPC methods that carry a `root` argument. The page documents `fuse/check` and `fuse/checkOverlay`.
22
+
- Opt-in MCP metrics via `FUSE_METRICS=1` (`fuse.tool.duration`, `fuse.index.mode`, `fuse.reconcile.stamped`) using `System.Diagnostics.Metrics` (no OpenTelemetry dependency).
23
+
-`WorkspacePathResolver` confines MCP file arguments (`fuse_check`, `fuse_test`, `fuse_reduce`, `fuse_context`, and related paths) to the workspace root.
24
+
-`fuse.json` / `.fuserc` parse failures write a warning to stderr with the file path instead of failing silently.
25
+
-`FUSE_MCP_INSTALL_HOME` redirects user-scope MCP install paths for isolated testing; user-scope install coverage for Cursor and Copilot.
- Derived key-value cache data (reduction cache and per-file analysis index) now lives in `.fuse/fuse-cache.db` instead of sharing `.fuse/fuse.db` with the semantic index. Existing cached entries in `fuse.db` are not migrated; rerun with `--use-cache` or `--use-persistent-index` to rebuild the derived cache. The semantic index in `fuse.db` is unchanged.
31
+
-`ExperimentalOptions` now carries only focus/change scoping and emission-shaping knobs the fusion pipeline consumes (`CentralityWeight`, `TieredEmission`, `SketchHugeFiles`, `DowngradeBeforeDrop`, `ProximityEdges`, `ProjectGraph`). Query-path retrieval levers were removed from this type; open-ended localize and related lexical ranking live in `Fuse.Retrieval`.
32
+
- Host RPC methods that carry a `root` argument reject calls where the root differs from the daemon's served root (the `--directory` the `fuse host` process started with).
33
+
- Syntax indexing routes exclusively through `SemanticIndexer` and language syntax providers; the standalone `SyntaxIndexer` type is removed.
34
+
- The retired flat FTS candidate generator is gated behind `FUSE_FLAT_FTS=1` diagnostic mode; shipping default remains `LexicalCandidateGenerator` only.
35
+
- Performance documentation and README warm-latency figures align with `tests/benchmarks/results/performance.json` and `resident-latency.json`.
36
+
-`briefing.md` opening reflects nine MCP tools, no VS Code extension (D15), and corpus-v2 localize recall (37.7 percent).
37
+
- The fuse.codes landing page uses a centered hero with terminal-style install commands, benchmark stats, and a shared site footer; WinGet manifests are included in `set-version.ps1` and `verify-version.ps1`.
38
+
39
+
### Fixed
40
+
41
+
- When FTS5 is unavailable at index init, the store persists `fts_available=false` in index meta, names it in `fuse_workspace` status and the availability header, and `fuse_find kind=task` refuses with an actionable message instead of returning empty hits.
42
+
-`SqliteKeyValueStore` corruption recovery refuses to delete the semantic index database; only `fuse-cache.db` is recreated on corruption.
0 commit comments