Skip to content

Release: web parallelism icons, SSMS extension, connect-dialog DB, hardening#365

Merged
erikdarlingdata merged 10 commits into
mainfrom
dev
Jun 12, 2026
Merged

Release: web parallelism icons, SSMS extension, connect-dialog DB, hardening#365
erikdarlingdata merged 10 commits into
mainfrom
dev

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Release merge of dev into main.

Included

Testing

CI build-and-test green on dev. Web parallelism icons verified end-to-end via dev server and published static host.

🤖 Generated with Claude Code

erikdarlingdata and others added 9 commits June 2, 2026 19:59
The signing step previously degraded to unsigned binaries when
SIGNPATH_API_TOKEN was absent, only emitting a ::warning::. Two problems:

- A genuinely missing/broken token would silently ship unsigned binaries
  and the release would still succeed — discovered only via user SmartScreen
  reports.
- Because GitHub echoes the full run: script into the log, the literal
  "releasing unsigned binaries" text appears in every run's log regardless
  of which branch executes, making `grep`-ing the log for signing status
  misleading (the warning never actually fired on signed releases).

Make signing required instead: if the token is missing the job fails loudly
(::error:: + exit 1). The Upload/Sign/Replace steps now run unconditionally
(this workflow only fires on maintainer dev->main release merges, where the
secret is always available). Secret is read via env: rather than inline
${{ }} interpolation into the script.

Also bump microsoft/setup-msbuild@v2 -> @V3 to move off the deprecated
Node 20 runtime (v3 runs on Node 24).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a high-quality 128x128 gallery icon (downscaled from the app's
EDD.icns DD mark) and an ARM64 InstallationTarget so ARM64 SSMS users
can install the extension. Verified by building the VSIX with MSBuild
and confirming the icon, <Icon> manifest entry, both amd64/arm64
targets, and the png content-type registration are all packaged.

SSMS target version left at [17.0,) to keep supporting SSMS 18/19/20/21.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Connect to Server dialog always tested connections against master and
enumerated sys.databases to populate the database dropdown. For Azure SQL DB
or Just-In-Time access the login often can't open master, so the test failed
and the dropdown never populated, leaving no way to reach Connect.

Add an optional "Initial database" field. When set, Test Connection connects
directly to that database instead of master, ensures it stays selectable even
under restricted permissions, and pre-selects it in the database dropdown.
When empty, behavior is unchanged (connect to master, enumerate, pick). The
database name is persisted on ServerConnection and restored for saved
connections.

Mirrors the DatabaseName field already used in PerformanceMonitor's
Add/Edit Server dialog.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR #359 added an optional "Initial database" field to the Connect dialog
and was meant to persist it on ServerConnection. BuildServerConnection set
it and ApplySavedConnection restored it, but ConnectionStore.AddOrUpdate
dropped it: the update branch copies fields onto the existing record one by
one and never assigned DatabaseName. So the field was only saved on the very
first connect to a brand-new server (the add branch persists the whole
object) and silently discarded on every reconnect to a known server.

That is exactly the reopened follow-up on #358: reconnecting to a previously
used server left the Initial database field empty even though server name and
credentials were remembered. It also meant a saved server could never have
its initial database changed.

Assign existing.DatabaseName from the incoming connection in the update
branch so the field round-trips on every save.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Prerequisites section listed the .NET 10 SDK as "required to build
and run," contradicting the Download section's note that the pre-built
binaries are self-contained and need no SDK. The SDK is only required
when building from source; running the released zips does not need it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Clarify .NET SDK is only needed to build from source (#361)
Parallel sub-agent review surfaced several real bugs; this batch fixes the
high-confidence, self-contained ones (each verified individually; build and
all 77 Core tests green):

Crashes / DoS:
- ShowPlanParser: guard recursion depth in ParseRelOp/ParseStatementAndChildren
  and contain the tree walk, so hostile deeply-nested plan XML yields a
  ParseError instead of an uncatchable StackOverflowException.
- Program.cs: single-instance file forwarding never worked (the mutex was
  disposed as the method returned, so it always launched a duplicate). Detect
  the running instance via the named pipe instead.
- MainWindow: add backoff to the pipe listener's catch so a second instance
  can no longer spin it at 100% CPU.
- QuerySessionControl.Format: add a catch to the Format_Click async void
  handler so a formatter exception no longer crashes the app.

Correctness:
- PlanAnalyzer: the "Cursor Missing LOCAL" rule looked for LOCAL before the
  CURSOR keyword (where it is never legal) and fired on every cursor, including
  ones already declared LOCAL. Match qualifiers between CURSOR and FOR.
- DarkTheme: define the missing ForegroundMutedBrush (#B0B6C0) referenced by
  five call sites, and fix the code-behind fallback (was full foreground).
- HtmlExporter: detect all spill warning types ("Spill to TempDb"/"Spill
  Occurred", not just "* Spill"), and lowercase severity with ToLowerInvariant
  so the CSS classes survive non-invariant locales.

Security:
- PlanShare: generate share IDs with RandomNumberGenerator instead of
  Random.Shared; the 8-char id is the only access control on a shared plan.
- CLI ConnectionHelper: keep Encrypt=Mandatory regardless of --trust-cert;
  --trust-cert previously downgraded the connection to Optional (MITM-able).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rdening

Fix crashes, DoS, and security issues from Fable code review
PlanIconMapper returns subtype-specific icon names (parallelism_gather_streams,
parallelism_distribute_streams, parallelism_repartition_streams) added in #283,
but PlanViewer.Web/wwwroot/icons held a hand-copied snapshot that never received
those three files, so the web app rendered broken image links for every
Parallelism operator.

wwwroot/icons must hold physical copies: Blazor's static web asset pipeline only
serves files present under wwwroot at evaluation time (both linking from Core and
copy-at-build fail to serve through the dev server). Add the three PNGs plus a
build-time parity guard that fails the build if Core gains an operator icon not
copied into wwwroot/icons, so this drift cannot recur.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Minor bump for the dev->main release: web Parallelism icon fix, connect-dialog
initial database, SSMS extension VSIX gallery icon + ARM64 target, code-signing
requirement, and Fable code-review hardening. Updates the version in all three
tracked locations (Directory.Build.props, SSMS AssemblyInfo.cs, vsixmanifest).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit 34eea8c into main Jun 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant