Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
a113447
build(deps): bump the rust-host group with 3 updates
dependabot[bot] Oct 14, 2026
5111721
build(deps): bump toml in /src/editors/zed in the rust-zed group
dependabot[bot] Oct 14, 2026
5950d3f
build(deps): clobber-merge dependabot/cargo/src/editors/zed/dependabo…
github-actions[bot] Oct 14, 2026
70e2a3b
build(deps): bump the github-actions group with 6 updates
dependabot[bot] Oct 14, 2026
114737a
build(deps): bump @playwright/test in /src/website in the website group
dependabot[bot] Oct 14, 2026
fe12a1a
build(deps): clobber-merge dependabot/github_actions/dependabot-upgra…
github-actions[bot] Oct 14, 2026
e98ea93
build(deps): clobber-merge dependabot/npm_and_yarn/src/website/depend…
github-actions[bot] Oct 14, 2026
c42ca83
build(deps-dev): bump the vscode-extension group
dependabot[bot] Oct 14, 2026
9929b5f
build(deps): clobber-merge dependabot/npm_and_yarn/src/editors/vscode…
github-actions[bot] Oct 14, 2026
92573de
Bump the dotnet-sidecars group with 8 updates
dependabot[bot] Oct 14, 2026
62966f6
build(deps): clobber-merge dependabot/nuget/dot-config/dotnet/dependa…
github-actions[bot] Oct 14, 2026
62da612
Razor phase 4 (in progress): MVC tag helper names, scope and attribut…
MelbourneDeveloper Oct 20, 2026
eb2bb24
build(deps): bump tokio from 1.53.2 to 1.53.3 in the rust-host group
dependabot[bot] Oct 20, 2026
f7fc972
build(deps): bump the website group in /src/website with 3 updates
dependabot[bot] Oct 20, 2026
fd11d88
build(deps): clobber-merge dependabot/npm_and_yarn/src/website/depend…
github-actions[bot] Oct 20, 2026
b341de9
build(deps-dev): bump the vscode-extension group
dependabot[bot] Oct 20, 2026
fa27869
Bump the dotnet-sidecars group with 1 update
dependabot[bot] Oct 20, 2026
256f250
build(deps): clobber-merge dependabot/npm_and_yarn/src/editors/vscode…
github-actions[bot] Oct 20, 2026
471d8d6
build(deps): clobber-merge dependabot/nuget/src/sidecars/SharpLsp.Sid…
github-actions[bot] Oct 20, 2026
dbbf3e2
build(deps): bump the github-actions group with 4 updates
dependabot[bot] Oct 20, 2026
1003b38
build(deps): clobber-merge dependabot/github_actions/dependabot-upgra…
github-actions[bot] Oct 20, 2026
8618ad1
Merge branch 'main' into feature/397-razor-phase4
MelbourneDeveloper Oct 20, 2026
052d32c
Razor: Pages and MVC, F# in Razor, editing features, collocated files…
MelbourneDeveloper Oct 21, 2026
79838e2
Upgrade rustls-webpki, webpki-roots and the website's markdown-it pas…
MelbourneDeveloper Oct 21, 2026
68dd798
Compare the F# Razor rename's files as the file system does
MelbourneDeveloper Oct 21, 2026
0b5c5f0
Prove a .NET Framework run by the code the program wrote, not only th…
MelbourneDeveloper Oct 21, 2026
7a517d9
Prove a .NET Framework run by the code the program wrote, not only th…
MelbourneDeveloper Oct 21, 2026
a37a787
Complete Razor review fixes and stabilize Windows test execution
MelbourneDeveloper Oct 21, 2026
f42e5a0
Refresh the test tree automatically after builds
MelbourneDeveloper Oct 22, 2026
1227c2f
Merge dependency updates while preserving current security pins and b…
MelbourneDeveloper Oct 22, 2026
ad2a7a7
Cover native build monitoring over the LSP protocol
MelbourneDeveloper Oct 22, 2026
e2e838a
Verify build monitoring across workspace folders and active shutdown
MelbourneDeveloper Oct 22, 2026
ed8c9c0
Patch audited tooling vulnerabilities and cover omitted dependency trees
MelbourneDeveloper Oct 22, 2026
539b34b
Preserve build-refresh mode in discovery test instrumentation
MelbourneDeveloper Oct 22, 2026
57f7eae
Patch critical and high Rider build-tool vulnerabilities
MelbourneDeveloper Oct 22, 2026
e6b0d42
Default tests to Debug and incrementally build selected project graphs
MelbourneDeveloper Oct 22, 2026
96f66d3
Exercise completion acceptance and hot reload through real LSP sessions
MelbourneDeveloper Oct 22, 2026
0c6dffb
Route F# completion resolution back to FCS
MelbourneDeveloper Oct 22, 2026
469e7c0
Preserve MSBuild diagnostics when background package restore fails
MelbourneDeveloper Oct 23, 2026
658e44b
Finish multi-root discovery before refreshing completed builds
MelbourneDeveloper Oct 23, 2026
3d516e2
Render inferred local hover types with nullable flow context
MelbourneDeveloper Oct 23, 2026
35a729f
Use the actual project file in build graph ownership assertions
MelbourneDeveloper Oct 23, 2026
8e02a5b
Verify dedicated formatter ownership through both language servers
MelbourneDeveloper Oct 23, 2026
9bb8dd0
Cover asynchronous tuple result hover details
MelbourneDeveloper Oct 23, 2026
13667e1
Preserve compiler diagnostics and prove fresh builds through test pro…
MelbourneDeveloper Oct 23, 2026
f3b37d1
Exercise restore convergence and classify F# function symbols
MelbourneDeveloper Oct 23, 2026
832d5ee
Align CI installer pins and format hot reload fixture
MelbourneDeveloper Oct 23, 2026
38039a2
Document owning-project builds for MTP test runs
MelbourneDeveloper Oct 23, 2026
d4177ec
Track Windows attach stack inspection limitation
MelbourneDeveloper Oct 23, 2026
dd07cec
Prove Debug rebuilds only selected test dependency graphs
MelbourneDeveloper Oct 23, 2026
3e27ccb
Exercise native LSP sessions across configuration navigation and fail…
MelbourneDeveloper Oct 23, 2026
97537a4
Dispose build discovery observers when language server startup fails
MelbourneDeveloper Oct 23, 2026
e6d39ae
Keep compiler failure details out of persisted test logs
MelbourneDeveloper Oct 23, 2026
5c50959
Avoid persisting compiler output from Debug test failures
MelbourneDeveloper Oct 23, 2026
1509b8e
Verify coverage runs only the selected owning project graph
MelbourneDeveloper Oct 23, 2026
a5b86cc
Copy SDK fixture contents through installation directory links
MelbourneDeveloper Oct 23, 2026
e569428
Stop every test host owned by a debug invocation
MelbourneDeveloper Oct 23, 2026
72f2a02
Verify diagnostic truth and cancellation through real native sessions
MelbourneDeveloper Oct 23, 2026
f182120
Exercise stale diagnostic snapshots and invalid requests through nati…
MelbourneDeveloper Oct 23, 2026
b4c9558
Fix solution-wide diagnostic accuracy and reactive refresh
MelbourneDeveloper Oct 23, 2026
e386037
Validate copied apphost bytes in native startup fixtures
MelbourneDeveloper Oct 23, 2026
726ea01
Align coverage shard documentation with selected project scope
MelbourneDeveloper Oct 23, 2026
3022d97
Clarify solution diagnostic scope in configuration docs
MelbourneDeveloper Oct 23, 2026
b2549e2
Restore exact NETFX Run exit-code assertions
MelbourneDeveloper Oct 23, 2026
90d813f
Verify workspace diagnostics for unopened Razor SDK components
MelbourneDeveloper Oct 23, 2026
8440bf9
Update diagnostic transport and record remaining cancellation work
MelbourneDeveloper Oct 23, 2026
240c59a
Document the active analyzer diagnostic setting
MelbourneDeveloper Oct 23, 2026
b87bd2d
Update shared diagnostic coverage regression checks
MelbourneDeveloper Oct 23, 2026
33af8e9
Preserve reactive diagnostic state while file-based restore runs
MelbourneDeveloper Oct 23, 2026
3c0f6ed
Handle editor EOF and drain active sidecar requests during shutdown
MelbourneDeveloper Oct 23, 2026
8383665
Verify analyzer opt-out and live configuration through real compiler …
MelbourneDeveloper Oct 23, 2026
21253bc
Match diagnostic project filters relative to the selected solution
MelbourneDeveloper Oct 23, 2026
3f208b1
Verify diagnostic retirement across real selected solution changes
MelbourneDeveloper Oct 23, 2026
81da7b2
Verify idle compiler restore notifications refresh real pull clients
MelbourneDeveloper Oct 23, 2026
7f1ba78
Verify live diagnostic configuration preserves responsive FSharp editing
MelbourneDeveloper Oct 23, 2026
9321d87
Verify SDK input reloads preserve unsaved FSharp diagnostic truth
MelbourneDeveloper Oct 23, 2026
f4c5ef7
Apply diagnostic severity and per-file limits across both languages
MelbourneDeveloper Oct 23, 2026
ee42c87
Verify error-only diagnostics retain automatic package restore conver…
MelbourneDeveloper Oct 23, 2026
3ced38c
Track verified diagnostics release controls and remaining checks
MelbourneDeveloper Oct 23, 2026
f827fe9
Ignore nonexistent selected targets when registering native watchers
MelbourneDeveloper Oct 23, 2026
0c8953e
Restore compiler inputs before answering after a sidecar restart
MelbourneDeveloper Oct 23, 2026
bb2a3d9
Honor live diagnostic refresh debounce settings
MelbourneDeveloper Oct 23, 2026
8b32549
Report project-level compiler failures once at their owning project
MelbourneDeveloper Oct 23, 2026
836f731
Verify compiler crash recovery preserves overlays and analyzer policy
MelbourneDeveloper Oct 23, 2026
7f021da
Document live diagnostic refresh timing in every locale
MelbourneDeveloper Oct 23, 2026
d625645
Verify live diagnostic refresh timing and rejected configuration cont…
MelbourneDeveloper Oct 23, 2026
84e3f80
Make native recovery process inspection available on every test platform
MelbourneDeveloper Oct 23, 2026
b8996e9
Verify version command failure when its output consumer closes
MelbourneDeveloper Oct 23, 2026
33cfa88
Honor workspace restore policy in both compiler engines
MelbourneDeveloper Oct 23, 2026
57e4a44
Verify generated compiler errors through analyzer reference changes
MelbourneDeveloper Oct 23, 2026
c9352f1
Keep F# script diagnostics aligned with current references
MelbourneDeveloper Oct 23, 2026
2a59dd1
Signal successful compiler workspace completion over negotiated IPC
MelbourneDeveloper Oct 23, 2026
8ebf3b6
Honor platform-owned suites in full local editor tests
MelbourneDeveloper Oct 23, 2026
0b6e267
Honor diagnostic retrigger responses in real compiler regressions
MelbourneDeveloper Oct 23, 2026
58f04cf
Keep diagnostics current for projects outside the selected solution
MelbourneDeveloper Oct 23, 2026
9b2ef43
Schedule external project diagnostic regressions in both editor CI legs
MelbourneDeveloper Oct 23, 2026
a69d7a8
Verify adopted project diagnostics follow external SDK source changes
MelbourneDeveloper Oct 23, 2026
d959222
Exercise F# script and project diagnostic lifecycles through real IPC
MelbourneDeveloper Oct 23, 2026
d583089
Repair unreadable SDK assets before restoring workspaces
MelbourneDeveloper Oct 23, 2026
e40d30a
Verify F# owning restore refreshes the idle compiler protocol
MelbourneDeveloper Oct 23, 2026
5675efa
Verify F# owning restore refreshes closed-file Problems
MelbourneDeveloper Oct 23, 2026
43bb377
Restore structurally invalid SDK assets before opening compiler works…
MelbourneDeveloper Oct 23, 2026
ac79e76
Exercise live diagnostic project filters through real mixed SDK sessions
MelbourneDeveloper Oct 23, 2026
529947c
Verify NuGet project selection and rejected edits through real SDK se…
MelbourneDeveloper Oct 23, 2026
cc770cd
Reload newly created SDK sources from native diagnostic events
MelbourneDeveloper Oct 23, 2026
5dc7b7c
Verify ownership diagnostics with actual editor document closure
MelbourneDeveloper Oct 23, 2026
0e266ae
Verify native diagnostic repair after preparing real SDK inputs
MelbourneDeveloper Oct 23, 2026
b326ee7
Record verified repository regressions and earned Rust coverage floor
MelbourneDeveloper Oct 23, 2026
06ed862
Record combined diagnostic and F# repository lifecycle regression proof
MelbourneDeveloper Oct 23, 2026
99fe3e2
Reject false-clean diagnostics before compiler readiness
MelbourneDeveloper Oct 23, 2026
8f7109a
Verify F# diagnostics with independent owner references
MelbourneDeveloper Oct 23, 2026
03902a3
Reject unavailable Razor compiler snapshots
MelbourneDeveloper Oct 23, 2026
7e7b5f6
Verify package edits preserve SDK projects when compilers are disabled
MelbourneDeveloper Oct 23, 2026
9b81d04
Use compiler-owned fixtures for diagnostic protocol smoke tests (#471)
MelbourneDeveloper Oct 23, 2026
77637df
Resolve actual compiler identities in recovery fixtures (#472)
MelbourneDeveloper Oct 23, 2026
81a03b9
Cover parser diagnostics across project adoption and repair
MelbourneDeveloper Oct 23, 2026
27c11d4
Verify restore spawn failures against real SDK projects
MelbourneDeveloper Oct 23, 2026
09acd28
Fix diagnostic freshness, cancellation and restore accuracy
MelbourneDeveloper Oct 25, 2026
5c17f71
Record final diagnostic qualification and CI infrastructure status
MelbourneDeveloper Oct 25, 2026
d019473
Merge remote-tracking branch 'origin/main' into feature/429-test-expl…
MelbourneDeveloper Oct 26, 2026
e7a7161
Merge feature/397-razor-phase4 (already squash-merged into main as #422)
MelbourneDeveloper Oct 26, 2026
c4ef22f
Satisfy clippy's assert_is_empty lint in host e2e assertions
MelbourneDeveloper Oct 26, 2026
c57377d
Agents: minimise GitHub Actions spend
MelbourneDeveloper Oct 26, 2026
b5a4715
Point lspkit at the merged shared-profiler-ui branch
MelbourneDeveloper Oct 26, 2026
ae9a4ff
Run the generated-model checks where the extension's dependencies are…
MelbourneDeveloper Oct 26, 2026
f76d788
Retrigger a superseded raw diagnostic pull in the refactor kit
MelbourneDeveloper Oct 26, 2026
2d7932c
Assert the spec'd unavailable-inputs warning for a failed netfx F# de…
MelbourneDeveloper Oct 26, 2026
116c377
Point lspkit at the branch that holds every crate to SharpLsp's lints
MelbourneDeveloper Oct 26, 2026
c3d97e8
Point lspkit at its Linux-clean lint commit
MelbourneDeveloper Oct 26, 2026
ed14cfd
Resolve VSTest coverage file names against the Cobertura source base
MelbourneDeveloper Oct 26, 2026
740472f
Point lspkit at main after the consolidated branch merged (Nimblesite…
MelbourneDeveloper Oct 26, 2026
2305516
Restore the solution-documents fixture once per class and size the si…
MelbourneDeveloper Oct 26, 2026
2c7d629
Point lspkit at main with deterministic profiler coverage (Nimblesite…
MelbourneDeveloper Oct 26, 2026
6c1c4e0
Take F# Compile items from MSBuild's evaluation, not the raw project …
MelbourneDeveloper Oct 26, 2026
cbf910f
Cite the pull-diagnostics section that specifies retriable supersession
MelbourneDeveloper Oct 26, 2026
a131114
Reload watched-file changes off the foreground LSP loop
MelbourneDeveloper Oct 26, 2026
cd10d27
Report editorconfig-promoted IDE rules and link analyzer findings to …
MelbourneDeveloper Oct 26, 2026
f010946
Refuse, never misread, an F# project MSBuild cannot open under a held…
MelbourneDeveloper Oct 26, 2026
2f5a773
Hold the netfx unavailable-inputs check to lines the sidecar states
MelbourneDeveloper Oct 26, 2026
e38639f
Analyse the test fixtures as users' projects, not under SharpLsp's li…
MelbourneDeveloper Oct 26, 2026
7d57eb6
Split the SDK diagnostic-truth suites out of the fsharp chunk
MelbourneDeveloper Oct 26, 2026
c780e0a
Keep a failing Rust shard's sidecar logs
MelbourneDeveloper Oct 26, 2026
c5ab92a
Serialize workspace opens per sidecar so a reload never reopens a sup…
MelbourneDeveloper Oct 26, 2026
1352f81
Complete pulls across compiler workspace changes; supersede them when…
MelbourneDeveloper Oct 26, 2026
386aac6
Build the host's e2e fixtures as users' projects, not under SharpLsp'…
MelbourneDeveloper Oct 26, 2026
55b0d70
Never let a superseded F# owner adoption join a replacement workspace
MelbourneDeveloper Oct 26, 2026
757fb25
Reload restore outputs without restoring again; publish a framework s…
MelbourneDeveloper Oct 26, 2026
0f426ae
Restore when an inherited restore input disappears
MelbourneDeveloper Oct 27, 2026
8f8cb94
Contain reactive test discovery failures instead of rejecting unhandled
MelbourneDeveloper Oct 27, 2026
37eb8f7
Reload the compiler when an inherited NuGet configuration changes
MelbourneDeveloper Oct 27, 2026
8dca8e0
Reload what each compiler opened, replay only its graph, skip its own…
MelbourneDeveloper Oct 27, 2026
28fcc81
Move the configuration tests beside config.rs
MelbourneDeveloper Oct 27, 2026
a41a4b2
Keep the server's and sidecars' own logs with every VS Code shard
MelbourneDeveloper Oct 27, 2026
0dcaa89
Name every diagnostic when the workspace policy count is wrong
MelbourneDeveloper Oct 27, 2026
b6f1409
Bring the duplication score back under the ratchet
MelbourneDeveloper Oct 27, 2026
934320e
Split the files this branch grew past the 500-line ceiling
MelbourneDeveloper Oct 27, 2026
8f8a9ca
Build the cancellation fixture's analyzer with the SDK the sidecar's …
MelbourneDeveloper Oct 27, 2026
9f1f831
Retry a superseded pump pull in the legacy push session test
MelbourneDeveloper Oct 27, 2026
64cfe4a
Reload only the compilers whose loaded graph a watched change concerns
MelbourneDeveloper Oct 27, 2026
b9c590a
Restore with the SDK the workspace selects, and bound every restore s…
MelbourneDeveloper Oct 27, 2026
50c78a4
Answer a stop request the debug adapter exits before answering
MelbourneDeveloper Oct 27, 2026
f9fcf33
Load an adopted owner under the spelling its restore recorded
MelbourneDeveloper Oct 27, 2026
71ee482
Abandon a design-time build whose project is removed while it runs
MelbourneDeveloper Oct 27, 2026
b9193e3
Restore a respawned compiler without a workspace that no longer exists
MelbourneDeveloper Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .deslop.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# agent-pmo:a72c926
[threshold]
max_duplication_percent = 6.48
max_duplication_percent = 5.95

[defaults]
exclude = [
Expand Down
16 changes: 14 additions & 2 deletions .github/actions/build-platform/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,18 @@ runs:
if: ${{ inputs.archive == 'true' }}
shell: bash
run: make _build-coverage-tools
- name: Stage the precompiled source-builder tests
if: ${{ inputs.archive == 'true' }}
shell: bash
run: make _build-lint-source-tests DOTNET_TESTS_PREBUILT=1
- name: Cache the source builder and verified upstream archive
if: ${{ inputs.archive == 'true' }}
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: lint-source-builder
retention-days: 1
if-no-files-found: error
path: target/lint-source-builder
- name: Cache coverage report tools
if: ${{ inputs.archive == 'true' }}
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand Down Expand Up @@ -130,11 +142,11 @@ runs:
include-hidden-files: true
path: target/netcoredbg/${{ inputs.vsix-platform }}/netcoredbg

- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
if: ${{ inputs.archive == 'true' }}
with:
tool: cargo-llvm-cov
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
if: ${{ inputs.archive == 'true' }}
with:
tool: nextest
Expand Down
12 changes: 12 additions & 0 deletions .github/actions/vsix-shard/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,18 @@ runs:
name: coverage-vsix-shard-${{ inputs.platform }}-${{ inputs.chunk }}
retention-days: 1
path: target/coverage-vsix-shard-${{ inputs.platform }}-${{ inputs.chunk }}.lcov
- name: Collect server and compiler logs
# The host and both sidecars log beneath the system temp folder, where the
# extension host's logs never reach: a compiler request that stops
# answering is visible only there. [DIST-CI-VSIX-SHARDS]
if: always()
shell: bash
run: |
logs="$(node -e 'process.stdout.write(require("os").tmpdir())')/sharplsp-logs"
if [ -d "$logs" ]; then
mkdir -p "${{ inputs.user-data-dir }}/logs"
cp -R "$logs" "${{ inputs.user-data-dir }}/logs/sharplsp-logs"
fi
- name: Upload extension-host diagnostics
# A chunk that fails or HANGS is exactly what the split exists to isolate,
# so keep the extension-host logs for triage. Keep them for a GREEN chunk
Expand Down
31 changes: 31 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,37 @@ updates:
applies-to: security-updates
patterns: ["*"]

# Local video tooling has native image dependencies too.
- package-ecosystem: npm
directory: "/src/website/tools/video"
target-branch: "dependabot-upgrades"
schedule:
interval: weekly
open-pull-requests-limit: 5
labels: ["dependencies"]
groups:
video-tooling:
applies-to: version-updates
patterns: ["*"]
video-tooling-security:
applies-to: security-updates
patterns: ["*"]

- package-ecosystem: gradle
directory: "/src/editors/rider"
target-branch: "dependabot-upgrades"
schedule:
interval: weekly
open-pull-requests-limit: 5
labels: ["dependencies"]
groups:
rider-build:
applies-to: version-updates
patterns: ["*"]
rider-build-security:
applies-to: security-updates
patterns: ["*"]

# ── GitHub Actions: all workflows ───────────────────────────────────
# Version-only: GitHub publishes no Dependabot security advisories for
# actions, so there is no security channel to group.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
toolchain: stable
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
with:
tool: cargo-audit
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/ci-test-dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
# PHASE 4 — TEST. The .NET sidecar leg.
#
# EVERY TEST RUNS EXACTLY ONCE. The Ubuntu job runs the whole sidecar solution.
# The Windows job runs ONLY the classes whose behaviour is platform-dependent -
# named-pipe connection setup and the real sidecar handshake over those pipes
# The Windows job runs ONLY tests whose behaviour is platform-dependent -
# named-pipe connection setup, the real sidecar handshake, NTFS-held compiler reads
# and project metadata sharing with editor saves
# ([DIST-CI-WIN-TRANSPORT]).
#
# It used to run the entire SharpLsp.Sidecar.Common.Tests project instead, which
Expand All @@ -24,7 +25,13 @@ jobs:
test-dotnet:
name: Sidecars
runs-on: ${{ vars.UBUNTU_RUNNER || 'ubuntu-latest' }}
timeout-minutes: 12
# The whole sidecar solution runs here (Common + C# + F# in parallel) under
# code coverage. The C# assembly alone is 833 real-SDK cases: ~4m15s on a
# 10-core host without coverage, so the 4-core runner with coverlet, a cold
# NuGet cache for the Razor/ASP.NET fixtures and the concurrent restore
# suites needs headroom above the old 12-minute cap (PR #494 hit it while
# main's smaller suite finished in 6m47s).
timeout-minutes: 20
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand Down Expand Up @@ -91,7 +98,7 @@ jobs:
- uses: ./.github/actions/dotnet-tests
with:
artifact: win-lsp-binaries-tests
- name: Test win32 named pipes and linked paths
- name: Test win32 named pipes, linked paths, compiler cancellation and editor saves
# Only the platform-dependent classes. The full-solution `dotnet restore`
# that used to precede this existed to cache the FCS nuspec for the
# dependency-consistency tests, which are platform-agnostic and now run
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci-test-editors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ jobs:
with:
toolchain: stable
components: llvm-tools-preview
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
with:
tool: cargo-llvm-cov
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
with:
tool: nextest
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
Expand Down
20 changes: 15 additions & 5 deletions .github/workflows/ci-test-rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
strategy:
fail-fast: false
matrix:
shard: [1, 2]
shard: [ 1, 2 ]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand All @@ -39,10 +39,10 @@ jobs:
with:
toolchain: stable
components: llvm-tools-preview
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
with:
tool: cargo-llvm-cov
- uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 # v2.87.28
- uses: taiki-e/install-action@8cca0918f8471c33515202b73f56ab27f2bed283 # v2.87.29
with:
tool: nextest
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
Expand All @@ -54,8 +54,7 @@ jobs:
with:
path: "~/.nuget/packages"
key: >-
${{ runner.os }}-nuget-${{ hashFiles('src/sidecars/**/*.csproj',
'src/sidecars/Directory.Build.props') }}
${{ runner.os }}-nuget-${{ hashFiles('src/sidecars/**/*.csproj', 'src/sidecars/Directory.Build.props') }}
restore-keys: "${{ runner.os }}-nuget-"
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
Expand Down Expand Up @@ -87,6 +86,17 @@ jobs:
run: tar -xzf target/rust-fixtures.tar.gz
- name: Test Rust shard with coverage
run: env VSIX_PREBUILT=1 CARGO_TESTS_PREBUILT=1 make _test-rust-shard SHARD=${{ matrix.shard }} SHARD_COUNT=2
- name: Upload sidecar logs
# The e2e sidecars log beneath the temp folder. A failing shard keeps them,
# so a compiler failure only this runner shows is read, not guessed.
# [DIST-CI-RUST-SHARDS]
if: failure()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: rust-sidecar-logs-shard-${{ matrix.shard }}
retention-days: 3
if-no-files-found: ignore
path: /tmp/sharplsp-logs
- name: Upload shard coverage
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
Expand Down
13 changes: 11 additions & 2 deletions .github/workflows/ci-test-tooling.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
# refusals: a digest mismatch must fail, must unpack nothing, and must NOT fall
# back to compiling from source.
#
# Node's built-in runner, so this leg installs no dependencies and needs no
# artifact from PHASE 2. It reports in well under a minute.
# Node's built-in runner executes the source builder compiled in PHASE 2.
# This consumer installs its runtime but never compiles the builder or product.
name: CI / Test / Tooling
'on':
workflow_call: {}
Expand All @@ -31,5 +31,14 @@ jobs:
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '20'
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 10.0.303
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: lint-source-builder
path: target/lint-source-builder
- name: Test the build tooling
env:
TOOLING_TESTS_PREBUILT: '1'
run: make _test-tooling
8 changes: 3 additions & 5 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ on:
inputs:
gate:
description: >-
When true, fail the job on any High/Critical finding so the calling
workflow (release.yml) blocks publishing. PR and weekly runs leave this
false and stay advisory (the PR check-failure threshold governs merges).
When true, fail the job on any High/Critical finding so the calling workflow (release.yml) blocks publishing. PR and weekly runs leave this false and stay advisory (the PR check-failure threshold governs merges).
type: boolean
default: false

Expand Down Expand Up @@ -70,15 +68,15 @@ jobs:
with:
submodules: true
- name: Initialize CodeQL
uses: github/codeql-action/init@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
uses: github/codeql-action/init@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# Query suite and test-code exclusions live in the shared config so the
# PR, weekly, and gated release scans stay identical. [DIST-CI-SECURITY]
config-file: ./.github/codeql/codeql-config.yml
- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
uses: github/codeql-action/analyze@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
category: "/language:${{ matrix.language }}"
# Drop the SARIF on disk so the gate step can read it. `upload` stays on
Expand Down
11 changes: 6 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ F# ahead of C# on every new feature. F# never takes the back seat.
# Workflow

- **Sub agents are illegal.** Delegate by spawning `pi` sessions — you are responsible for their output
- **Plans (`docs/plans/`) are the backlog.** Work toward checking off their items; delete a plan once it is complete
- **Plans (`docs/plans/`) are the backlog and GitHub issues is for problem tracking.** Work toward checking off their items; delete a plan once it is complete
- **Closing a GitHub issue requires testing a released, published version** No closing issues as you fix the bug
- ⛔️ **Never attribute a commit to yourself**: no `Co-Authored-By`, no agent name. *Never overridable*
- **Coordinate with other agents** through Too Many Cooks or built-in messaging: lock the files you edit, and never edit a file another agent has locked
- **Never kill VS Code processes** — desktop or browser. They belong to the user
Expand All @@ -28,6 +29,7 @@ F# ahead of C# on every new feature. F# never takes the back seat.
- **No SharpLsp code is "legacy".** Code that doesn't match the specs is deleted, never copied — move files, don't duplicate them
- **All screens must be 100% reactive** to data changes. Manage state with Signals in the VSIX and other extensions
- **Zero code duplication.** Run Deslop (see *Duplication*) before adding code and after editing
- **Minimize GitHub spend** Check that action usage isn't unnecessarily spending money
- **Paths are handled in *one* place per tier** — [SHARPLSP-ARCHITECTURE-PATHS]. Every path-string operation
(normalise, compare, key, case rule, resolve, split, extension test, URI conversion) lives only in that
tier's path module: `SharpLsp.Sidecar.Common.NativePaths` (sidecars), `src/sharplsp/src/paths.rs` (host),
Expand Down Expand Up @@ -64,9 +66,8 @@ F# ahead of C# on every new feature. F# never takes the back seat.

- Run clippy and fmt routinely; fix violations immediately
- All lints at highest strictness (Cargo.toml `[lints]`)
- **`unsafe` is forbidden** (`unsafe_code = "deny"`)
- **`unwrap()` is always a violation** — use `?` with proper error types
- **No `panic!`, `todo!`, `unimplemented!`** — return `Result<T,E>`
- **`unsafe`, `unwrap()` is forbidden** (`unsafe_code = "deny"`)
- **No `panic!`, `todo!`, `unimplemented!`** — return `Result<T,E>` and use `?`

## .NET Sidecar Quality Standards

Expand Down Expand Up @@ -106,7 +107,7 @@ F# ahead of C# on every new feature. F# never takes the back seat.

# Git

> ⛔️ **Don't make git changes like creating new branches** unless the user asks or a skill demands it.
> ⛔️ **Don't make git changes like creating new branches or worktrees** unless the user asks or a skill demands it.
- Commit and push to submodules before commiting and pushing the feature branch
- Commit and push after each major change
- **One feature branch**, never `git worktree`. Work the open one; several open → merge them immediately
Expand Down
Loading
Loading