Skip to content

Commit 4b18b3d

Browse files
DennisDyalloclaude
andcommitted
chore: handoff — P2 DX docs session, all audit items resolved
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 9b9b1da commit 4b18b3d

2 files changed

Lines changed: 74 additions & 54 deletions

File tree

Plans/federated-coalescing-lampson.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Plan: Unified get_diagnostics + vslsp Integration Test Skill
22

3+
**Status: SHIPPED — v1.4.0 committed 2026-04-08 (8a76946)**
4+
**Remaining: session restart needed to complete integration test; detectLanguage() dir bug open**
5+
6+
---
7+
38
## Context
49

510
Two problems to solve together:

Plans/handoff.md

Lines changed: 69 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
**Date:** 2026-04-08
44
**Branch:** main
5-
**Last commit:** d33079b docs: P2 DX improvements — daemon troubleshooting, port docs, RustMapper pre-advertise
5+
**Last commit:** 8a76946 feat: unify get_diagnostics across C#/Rust/TypeScript (v1.4.0)
66

77
---
88

99
## Session Summary
1010

11-
This session resumed from the v1.3.0 handoff, confirmed CI green with all 20 binary assets published, then completed all remaining P2 DX items: expanded the daemon troubleshooting section with a 5-step diagnostic flow, documented port 7850 and custom port override across README.md and skills/vslsp/SKILL.md, and added a first-time Rust setup callout in the Rust workflow section. A DevTeam Engineer→Reviewer loop caught and fixed two technical errors (a wrong binary dependency claim and a fabricated CLI command) before committing. A final independent review pass returned CLEAN PASS with all 8 technical claims cross-verified against source.
11+
This session unified the three per-language diagnostic tools (`get_diagnostics` C#-only, `get_rust_diagnostics`, `get_ts_diagnostics`) into a single parametrized `get_diagnostics` using discriminant optional fields (`solution`/`manifest`/`project`) with `.refine()` enforcement — reducing the tool count from 10 to 8. A DevTeam Engineer→Reviewer loop caught a `package: rustPackage` variable shadowing bug before it shipped. Tests pass (57 pass, 1 skip, 0 fail), the `vslsp-integration` skill was created, both binaries were rebuilt and installed, and all changes were committed as v1.4.0. Integration test against real codebases was partially completed — Rust and C# `get_code_structure` worked; TS and unified `get_diagnostics({ manifest })` / `get_diagnostics({ project })` require a session restart to pick up the new binary's schema.
1212

1313
---
1414

@@ -17,15 +17,23 @@ This session resumed from the v1.3.0 handoff, confirmed CI green with all 20 bin
1717
### Committed Work (this session — 1 commit on main)
1818

1919
```
20-
d33079b docs: P2 DX improvements — daemon troubleshooting, port docs, RustMapper pre-advertise
20+
8a76946 feat: unify get_diagnostics across C#/Rust/TypeScript (v1.4.0)
2121
```
2222

23-
**Changes in d33079b:**
24-
- `README.md` — expanded "Daemon never becomes ready" to 5-step diagnostic flow (`lsof -i :7850`, `vslsp serve --solution` for stderr, DOTNET_ROOT derivation)
25-
- `README.md` — new "Custom daemon port / port 7850 already in use" troubleshooting entry with all 6 daemon tool calls showing `port` param
26-
- `README.md` — first-time Rust setup callout in Rust workflow section (`vslsp install-mapper rust`)
27-
- `skills/vslsp/SKILL.md` — port 7850 default + override guidance in Key Rules
28-
- `CLAUDE.md` — version string bumped 1.2.0 → 1.3.0
23+
**Changes in 8a76946:**
24+
- `mcp.ts` — removed `get_rust_diagnostics` + `get_ts_diagnostics` registrations; rewrote `get_diagnostics` with discriminant-field schema (`solution`/`manifest`/`project` optional, `.refine()` enforces exactly one); fixed `package: rustPackage` rename to avoid shadowing top-level `import pkg`
25+
- `tests/e2e/mcp-server.test.ts``EXPECTED_TOOLS` trimmed, `toBeArrayOfSize(10)``(8)` (2 occurrences), all `get_ts_diagnostics`/`get_rust_diagnostics` call sites updated to `get_diagnostics`
26+
- `package.json``"version": "1.3.0"``"1.4.0"`
27+
- `CLAUDE.md` — version string, tool count, workflow table, MCP Tool Reference all updated to 8-tool unified API
28+
- `README.md` — 7+ references updated: `get_rust_diagnostics``get_diagnostics({ manifest })`, `get_ts_diagnostics``get_diagnostics({ project })`
29+
- `Plans/federated-coalescing-lampson.md` — plan doc created (committed)
30+
31+
**Also done this session (not a separate commit — bundled above):**
32+
- Rebuilt both binaries from 1.4.0 source:
33+
- `~/.local/share/vslsp/vslsp-mcp` (MCP server)
34+
- `~/.local/share/vslsp/vslsp` (CLI)
35+
- Created `~/.claude/skills/vslsp-integration/SKILL.md` — integration test skill for all 8 tools across 3 real codebases
36+
- Updated `~/.claude/skills/vslsp/SKILL.md` — "10 tools" → "8 tools", workflow tables updated
2937

3038
### Uncommitted Changes
3139

@@ -34,8 +42,9 @@ None. Working tree clean.
3442
### Build & Test Status
3543

3644
- TypeScript type check: **clean** (`bun run tsc --noEmit`)
37-
- Tests: **57 pass, 1 skip, 0 fail**
38-
- v1.3.0 CI: **completed/success**, all 20 binary assets published
45+
- Tests: **57 pass, 1 skip, 0 fail** (`bun test`)
46+
- Binaries: **rebuilt** from 1.4.0 source (both vslsp + vslsp-mcp)
47+
- CI: not yet triggered for v1.4.0 (no git tag pushed)
3948

4049
### Worktree / Parallel Agent State
4150

@@ -45,70 +54,71 @@ None. Single worktree at main.
4554

4655
## Readiness Assessment
4756

48-
**Target:** AI agents (Claude Code, Cursor, Copilot) and developers working on C#, Rust, or TypeScript codebases who need real compilation diagnostics and structured code navigation via MCP — installable in one command, with opt-in mapper download.
57+
**Target:** AI agents (Claude Code, Cursor, Copilot) and developers working on C#, Rust, or TypeScript codebases who need real compilation diagnostics and structured code navigation via MCP — installable in one command, unified API across languages.
4958

5059
| Need | Status | Notes |
5160
|------|--------|-------|
52-
| Install only the mappers you need | ✅ Working | `--mappers` flag, interactive prompt, `vslsp install-mapper <lang>` |
53-
| OmniSharp not downloaded if C# is skipped | ✅ Working | Gated behind `[[ "$MAPPERS" == *"csharp"* ]]` |
54-
| .NET requirement surfaced before install runs | ✅ Working | Callout block at README top; hard error in install.sh if missing |
55-
| Interactive prompt allows Rust/TS without C# | ✅ Working | [1][2][3] numbered — C# default, not forced |
56-
| Post-install verification guidance | ✅ Working | "Verify your install" section with per-binary checks |
57-
| Daemon troubleshooting with diagnostic steps | ✅ Working | 5-step flow: sln path, dotnet, lsof, vslsp serve stderr, DOTNET_ROOT |
58-
| Custom daemon port documented | ✅ Working | Port 7850 default + override pattern in README + SKILL.md |
59-
| RustMapper install pre-advertised at Rust workflow | ✅ Working | Callout in Rust workflow section before first use |
60-
| MCP and /vslsp skill discoverability | ✅ Working | README install section explains auto-registration |
61-
| All C#/Rust/TypeScript primary workflows | ✅ Working | Diagnostics + structure analysis for all three |
62-
| Intel Mac (darwin-x64) binary coverage | ✅ Working | macos-latest cross-compile |
61+
| Get C# diagnostics via `get_diagnostics({ solution })` | ✅ Working | Tested against Yubico.NET.SDK — valid DiagnosticsResult, 705 errors, 202 files |
62+
| Get Rust diagnostics via `get_diagnostics({ manifest })` | ⚠️ Partial | Handler correct in source; schema not live in MCP client until session restart |
63+
| Get TS diagnostics via `get_diagnostics({ project })` | ⚠️ Partial | Same — requires session restart for new binary schema to load |
64+
| `get_code_structure` for Rust (directory) | ✅ Working | `language: "rust"` explicit — 99 files, 1296 types, 4650 methods on octo-rdt-prototype |
65+
| `get_code_structure` for C# (directory) | ✅ Working | 3.4M result on Yubico.NET.SDK |
66+
| `get_code_structure` for TypeScript (directory) | ⚠️ Partial | `language: "typescript"` added to enum in new binary; requires session restart |
67+
| `get_code_structure` auto-detects language from directory | ⚠️ Partial | `detectLanguage()` uses `endsWith(ext)` — only works for file paths, not dirs; fallback: pass `language:` explicitly |
68+
| All 8 tools discoverable at `tools/list` | ⚠️ Partial | New binary exposes 8; MCP client schema cached from pre-rebuild session start |
69+
| `get_diagnostics_summary` (C# daemon summary) | ✅ Working | Unchanged, still C#-only |
70+
| Daemon lifecycle (start/status/stop/notify/verify) | ✅ Working | All unchanged from v1.3.0 |
71+
| No API breakage for existing C# `get_diagnostics` callers | ✅ Working | `solution` param still works identically |
72+
| Install → verify → use in one session | ✅ Working | install.sh, opt-in mappers, vslsp-mcp MCP registration all unchanged |
6373
| Single-command release | ✅ Working | `bun run release <version>` |
64-
| CI builds all 20 binary assets across 4 platforms | ✅ Working | 18-job matrix, green on v1.3.0 |
6574

66-
**Overall:** 🟢 Production — all primary workflows work for all three personas; DX gaps from the audit are resolved. Remaining items are optional/future scope (Go mapper, uninstall, Node.js action versions).
75+
**Overall:** 🟢 Production — unified API correct and tested in source; one session restart required for MCP client to load new schema. All 57 tests pass. C# and Rust structure analysis fully working; TS structure needs restart.
6776

68-
**Critical next step:** No blocking gaps. Next meaningful change is adding the Go mapper if Go support is desired, or bumping GitHub Actions to Node.js 24-compatible versions before September 2026.
77+
**Critical next step:** Restart Claude Code to load the 1.4.0 binary schema, then complete the `/vslsp-integration` run to validate Rust and TS diagnostics end-to-end.
6978

7079
---
7180

7281
## What's Next (Prioritized)
7382

74-
### Optional / Future
83+
1. **[Immediate] Restart Claude Code** — session schema is stale from pre-rebuild binary. After restart, run `/vslsp-integration` to complete the Rust + TS `get_diagnostics` integration test and `get_code_structure({ path, language: "typescript" })`.
7584

76-
1. **Go mapper**Pattern is established. Add `GoMapper` to `src/code-mapping/registry.ts`, CI matrix, and `install.sh` mapper list.
85+
2. **Fix `detectLanguage()` for directories**`src/code-mapping/registry.ts:detectLanguage()` uses `targetPath.endsWith(ext)` which only matches file paths. Directories always fall through to C# fallback. Fix: scan directory for files with matching extension. This would allow `get_code_structure({ path: "/some/ts/dir" })` without requiring explicit `language:` param.
7786

78-
2. **`vslsp uninstall-mapper`**Currently no removal path. If a dev installed all but only needs Rust, they can't clean up.
87+
3. **Tag and release v1.4.0**`bun run release 1.4.0` (triggers CI, publishes 20 binary assets). Not done yet — source and local binaries are at 1.4.0 but no git tag pushed.
7988

80-
3. **Node.js 20 deprecation warnings**`actions/cache@v4` and `softprops/action-gh-release@v2` will break when Node 24 becomes mandatory (September 2026). Bump to Node 24-compatible versions before that deadline.
89+
4. **Go mapper**Pattern is established. Add `GoMapper` to registry.ts, CI matrix, install.sh mapper list.
8190

82-
4. **Deeper daemon troubleshooting** — The 5-step flow is good; a flowchart diagram would improve scanability for complex cases.
91+
5. **`vslsp uninstall-mapper`** — No removal path currently. Complement to `install-mapper`.
92+
93+
6. **Node.js 20 deprecation**`actions/cache@v4` and `softprops/action-gh-release@v2` will break when Node 24 becomes mandatory (September 2026).
8394

8495
---
8596

8697
## Blockers & Known Issues
8798

88-
None. All P0/P1/P2 items from the DX audit are resolved and shipped.
89-
90-
---
99+
- **Session restart required**: The MCP client in the current session cached the pre-1.4.0 binary schema at session start. Binary is rebuilt but schema won't reload until Claude Code restarts. Until then, `get_diagnostics({ manifest })`, `get_diagnostics({ project })`, and `get_code_structure` with `language: "typescript"` will fail schema validation.
91100

92-
## Memory Written This Session
101+
- **`detectLanguage()` directory bug**: `get_code_structure({ path: "/some/directory" })` without an explicit `language:` param silently returns `{ files: 0, types: 0 }` because `detectLanguage()` checks `targetPath.endsWith(ext)` — directories never match. Workaround: always pass `language: "rust"` / `language: "typescript"` / `language: "csharp"` for directory paths. Fix target: `src/code-mapping/registry.ts`.
93102

94-
No new memories written. The feedback memory from the previous session (goal-defeating installer pattern) remains accurate and applies.
103+
- **v1.4.0 release not tagged**: Local source and binaries are v1.4.0 but `gh release` / CI not triggered. CI green from v1.3.0 is the last published set of binaries.
95104

96105
---
97106

98107
## Key File References
99108

100109
| File | Purpose |
101110
|------|---------|
102-
| `README.md` | User docs — .NET prereq callout, daemon workflow, troubleshooting, verify section |
103-
| `skills/vslsp/SKILL.md` | Claude Code `/vslsp` skill — daemon workflow, port docs, Key Rules |
104-
| `CLAUDE.md` | Agent quick-start, full tool reference (version: 1.3.0) |
105-
| `install.sh` | Installer — opt-in mappers, conditional OmniSharp, .NET hard check |
106-
| `scripts/release.ts` | Release ceremony — validate → test → bump → commit → tag → push → deploy |
107-
| `package.json` | Version source of truth |
111+
| `mcp.ts` | All 8 MCP tool registrations — unified `get_diagnostics` at the top |
112+
| `src/code-mapping/registry.ts` | `detectLanguage()` — bug site for directory auto-detection |
108113
| `src/core/defaults.ts` | `DEFAULT_PORT = 7850`, binary paths |
109-
| `src/code-mapping/registry.ts` | Language registry — `binaryName` + `installDir` for install-mapper |
110-
| `mcp.ts` | MCP server — 10 tools, all daemon tools accept `port` param |
111-
| `.github/workflows/release.yml` | 18-job CI matrix; uses `macos-latest` for all Mac targets |
114+
| `tests/e2e/mcp-server.test.ts` | E2E tests — tool list, schema checks, per-language call patterns |
115+
| `CLAUDE.md` | Agent quick-start — v1.4.0, 8 tools, unified workflow |
116+
| `README.md` | User-facing docs — unified `get_diagnostics` patterns |
117+
| `Plans/federated-coalescing-lampson.md` | Design rationale for unified API + z.union SDK constraint |
118+
| `~/.claude/skills/vslsp-integration/SKILL.md` | Integration test skill — targets + coverage matrix |
119+
| `~/.claude/skills/vslsp/SKILL.md` | `/vslsp` Claude Code skill — 8 tools, updated workflows |
120+
| `scripts/release.ts` | Release ceremony — validate → test → bump → commit → tag → push → deploy |
121+
| `package.json` | Version source of truth (currently 1.4.0) |
112122

113123
---
114124

@@ -119,17 +129,22 @@ cd /Users/Dennis.Dyall/Code/other/vslsp
119129

120130
# Verify state
121131
git log --oneline -5
122-
bun run tsc --noEmit
123-
bun test --timeout 60000
132+
bun run tsc --noEmit # must be clean
133+
bun test --timeout 60000 # 57 pass, 1 skip, 0 fail
124134

125-
# Release a new version
126-
bun run release 1.4.0
135+
# Complete the integration test (REQUIRES fresh session for schema)
136+
# In a new Claude Code session, invoke:
137+
# /vslsp-integration
127138

128-
# Add a mapper post-install
129-
vslsp install-mapper rust
130-
vslsp install-mapper typescript
139+
# Fix detectLanguage() for directories (next code task)
140+
# Target: src/code-mapping/registry.ts:detectLanguage()
141+
# Problem: endsWith(ext) only matches files, not directories
142+
# Fix: scan directory for files with matching extensions
143+
144+
# Tag and release v1.4.0
145+
bun run release 1.4.0
131146

132-
# Check CI/release status
147+
# Check CI status after release
133148
gh run list --repo DennisDyallo/vslsp --limit 5
134-
gh release view v1.3.0 --repo DennisDyallo/vslsp
149+
gh release view v1.4.0 --repo DennisDyallo/vslsp
135150
```

0 commit comments

Comments
 (0)