Skip to content

Commit bea2770

Browse files
authored
Merge pull request #25 from Litenova-Solutions/feature/v4-finish
v4 finish: launch-ready public face, verification loop, and corpus-v2 benchmarks
2 parents 5edf23d + bb3ea76 commit bea2770

163 files changed

Lines changed: 26115 additions & 4549 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/plans/benchmark_agent_and_peer_layers_7c41fa92.plan.md

Lines changed: 0 additions & 361 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Bug report
2+
description: Report incorrect behavior in Fuse CLI or MCP tools
3+
title: "[Bug]: "
4+
labels: ["bug"]
5+
body:
6+
- type: textarea
7+
id: description
8+
attributes:
9+
label: What happened?
10+
description: What did you expect, and what did Fuse do instead?
11+
validations:
12+
required: true
13+
- type: input
14+
id: version
15+
attributes:
16+
label: Fuse version
17+
description: Output of `fuse --version`
18+
validations:
19+
required: true
20+
- type: textarea
21+
id: repro
22+
attributes:
23+
label: Steps to reproduce
24+
description: Commands, MCP tool calls, or a minimal repository layout
25+
validations:
26+
required: true
27+
- type: dropdown
28+
id: surface
29+
attributes:
30+
label: Surface
31+
options:
32+
- CLI
33+
- MCP server
34+
- Documentation
35+
- Other
36+
validations:
37+
required: true
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Feature request
2+
description: Suggest an improvement to Fuse
3+
title: "[Feature]: "
4+
labels: ["enhancement"]
5+
body:
6+
- type: textarea
7+
id: problem
8+
attributes:
9+
label: Problem
10+
description: What task is hard today with Fuse or without it?
11+
validations:
12+
required: true
13+
- type: textarea
14+
id: proposal
15+
attributes:
16+
label: Proposed behavior
17+
description: What should Fuse do?
18+
validations:
19+
required: true
20+
- type: dropdown
21+
id: area
22+
attributes:
23+
label: Area
24+
options:
25+
- Verification (fuse_check)
26+
- Retrieval / scoping
27+
- .NET wiring graph
28+
- MCP tools
29+
- CLI
30+
- Documentation
31+
- Other
32+
validations:
33+
required: true

AGENTS.md

Lines changed: 8 additions & 8 deletions
Large diffs are not rendered by default.

CHANGELOG.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ The server exposes a loop-shaped surface of eight tools, each one mental act, pl
1515
- **`fuse_context`** - emit scoped, reduced source with a semantic manifest and per-file provenance for selected seeds.
1616
- **`fuse_impact`** - blast radius for a symbol (callers, implementers, referencing types) from the persisted graph; also a NuGet upgrade break set via `package:{id,fromVersion,toVersion}`.
1717
- **`fuse_check`** - typecheck a proposed single-file edit and return the diagnostics it would produce, with repair packets on API-shape errors. The verification-grade ladder means it never shrugs: oracle-grade against the build-captured compilation when tier-1 is available, else build-grade by running `dotnet build` scoped to the owning project, abstaining only when even the toolchain cannot run.
18-
- **`fuse_test`** - run the covering tests for a symbol (the tests that reach it through the persisted `tests` edges), scoped by filter so the whole suite never runs.
18+
- **`fuse_test`** - run the covering tests for a symbol (the tests that reach it through the persisted `tests` edges), scoped by filter so the whole suite never runs. Candidate racing (`candidates`): speculatively typecheck several proposed single-file edits against one resident compilation and get a per-candidate verdict plus a winner by strict dominance (a clean candidate beats any with errors; ties reported), so an agent weighing plausible fixes learns which survives without picking on vibes.
1919
- **`fuse_refactor`** - compiler-executed, verify-gated refactors staged as a diff: rename, add/remove/reorder-parameter, add-cancellation-token, extract-interface, move-type, apply-codefix. Each recompiles and returns the diff only when no new diagnostic is introduced, else abstains.
2020
- **`fuse_review`** - diff-first change impact and packed context, opening with a public API delta and carrying a paste-ready PR handoff packet (`handoff=true`) gated on a clean check session.
2121
- **`fuse_reduce`** - compact a known set of files or raw content; the one utility outside the loop.
@@ -24,7 +24,7 @@ The MCP server also exposes playbook prompts (anchored plans that teach the veri
2424

2525
### Verification and honesty
2626

27-
- **The verification-grade ladder.** Every `fuse_check` answer is stamped `oracle` (a speculative in-memory typecheck against the tier-1 build-captured compilation), `build` (the real `dotnet build` toolchain scoped to the owning project, parsed into the same shape), or `abstain` (only when even the toolchain cannot run, always naming the missing prerequisite). The build-grade path never writes the working tree; it mirrors the owning project to a temporary directory with the one file replaced and project references rewritten to absolute paths.
27+
- **The verification-grade ladder.** Every `fuse_check` answer is stamped `oracle` (a speculative in-memory typecheck against the tier-1 build-captured compilation), `build` (the real `dotnet build` toolchain scoped to the owning project, parsed into the same shape), or `abstain` (only when even the toolchain cannot run, always naming the missing prerequisite). The build-grade path never writes the working tree; it mirrors the owning project to a temporary directory with the one file replaced and project references rewritten to absolute paths. Because a rehydrated compilation is analyzed, never emitted, strong-name signing is neutralized before its diagnostics are read, so a captured relative key-file path that does not resolve in the rehydration sandbox never surfaces as a spurious signing error (CS7027) nor drops a cleanly building strong-named repository below tier-1.
2828
- **Delta mode and persisted sessions.** Pass a `session` id with no content and `fuse_check` returns the diagnostics your on-disk edits introduced or resolved since the session baseline. Baselines persist to the store, so a restarted process resumes intact; `markGreen` resets the baseline and `full` returns the whole current set. Delta mode never runs a build; it reads whole-state diagnostics from a live resident workspace and abstains when none serves the root.
2929
- **Repair packets.** An API-shape diagnostic (a missing member, an unknown type, a missing argument, a wrong-type assignment) carries a machine-applicable fix (the offending token and the nearest recorded name to substitute), rendered as an `apply: replace 'X' with 'Y'` line, drawn from the persisted symbol table so the fix costs no round-trip.
3030
- **Analyzer and nullable parity.** When a resident workspace serves the root, `fuse_check` also runs the repository's configured analyzers and nullable warnings against the overlay at the editorconfig severities, so a green check matches what CI's build step enforces. On by default for the single-file verify, off for the hot per-edit delta path.
@@ -46,7 +46,7 @@ One `fuse host` daemon per repository can hold the resident workspace as a share
4646

4747
- **The persistent index.** A single SQLite database at `.fuse/fuse.db` (WAL mode) holds files, projects, symbols, chunks, a typed semantic graph, routes, and an FTS5 full-text index. The workspace loads through MSBuild and Roslyn with a syntax-only fallback; re-indexing is incremental per changed file, and no read tool serves silently stale data (a warm store is reconciled against the current on-disk content before it answers).
4848
- **The wiring analyzers.** The semantic analyzers resolve DI registration and constructor injection (including keyed DI), MediatR request-to-handler, ASP.NET route-to-action, options binding, EF Core, Scrutor decoration, factory and hosted-service registration, pipeline behaviors, minimal-API, gRPC, and SignalR. Persisted `references` and DI-resolved `tests` edges back `fuse_impact` and covering-test selection.
49-
- **Retrieval.** A deterministic lexical channel (BM25F over the FTS5 table) with offline subword, stem, and comment bridges plus dependency-centrality and git co-change priors. No model is fetched or shipped. Ranked task localization is the fallback mode; the precise path is an anchor (symbol, route, service, request, config, git base) resolved through the graph.
49+
- **Retrieval.** A deterministic lexical channel (BM25F over the FTS5 table) with offline subword, stem, and comment bridges plus a dependency-centrality prior. No model is fetched or shipped. Ranked task localization is the fallback mode; the precise path is an anchor (symbol, route, service, request, config, git base) resolved through the graph. The git co-change prior is off by default: its semantic-mode re-adjudication on corpus v2 recorded it as net-negative to ranking (MRR 0.434 with the prior versus 0.489 without), so it was dropped from the shipping default; the ranking gate keeps it measured behind a diagnostic config.
5050
- **Multi-language syntax tier.** A provider seam drives the syntax tier; C# is first-party, and Python and JavaScript/TypeScript are supported at the syntax tier. Each indexed file carries a `language` tag. The deep typed graph is C#/Roslyn only.
5151
- **Tier-1 build capture is default-on and the worker is bundled.** The oracle is the product: the build-capture worker ships inside the global tool (under `build-capture/` beside `fuse`) and is discovered with no configuration, and tier-1 build capture is attempted by default. It degrades cleanly when no build target exists or a build fails (to the MSBuild and syntax tiers), and opts out with `FUSE_BUILD_CAPTURE=0`. In `fuse mcp serve` the cold start is syntax-first with a supervised background upgrade to the semantic/tier-1 graph, so the first reads return in seconds while the build runs behind them; the availability header names when a build is running for tier-1, and `FUSE_BG_UPGRADE=0` opts back into a synchronous first read. `fuse index` on the CLI is always synchronous.
5252
- **Portable capture bundles.** `fuse capture --out <bundle>` builds once and packages the compiler log, the extracted graph, and a versioned manifest; `fuse index --from-capture <bundle>` rehydrates the semantic graph and answers `fuse_check` at oracle grade on a machine that cannot restore or build, with no build. The bundle never ships the MSBuild binary log, and a planted secret fails the capture closed. An in-repo GitHub Action captures a bundle on `main`. `fuse capture --merge <dir>` assembles a bundle from per-project fragment binary logs (a build-target channel), equal in extracted graph to a direct capture; the bundle format is backward-compatible (a newer Fuse reads an older bundle; a bundle newer than the running Fuse is refused with an actionable message).

LAUNCH.md

Lines changed: 0 additions & 74 deletions
This file was deleted.

0 commit comments

Comments
 (0)