@voltro/sql-mssql 0.66.0 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -39,6 +39,58 @@ _Changes staged for the next release accumulate here (rolled up from
39
39
 
40
40
  ---
41
41
 
42
+ ## [0.67.0] — 2026-09-07
43
+
44
+ ### ⚠ BREAKING
45
+
46
+ - **@voltro/client, @voltro/protocol, @voltro/runtime, @voltro/cli, @voltro/web** — Confirmed optimistic writes now reconcile against a token-bound post-ACK primary snapshot, never an unrelated delta, changed row or timeout. Matching snapshots retire only covered previews; server normalisation and later writers remain authoritative. Same-tick acknowledgements coalesce, and affected cache entries preserve primary consistency across same-subject reconnects. Migration: deploy matching client/server framework versions together and account for an additional subscription read per affected acknowledgement group; affected entries use primary snapshots instead of replica reads/delta-resume for their cache lifetime. Native hooks need no source rewrite. Direct callers of the public `supersedesConfirmedPatches(event, baseBefore, baseAfter)` helper must migrate to `(event, reconciliationToken)` using the token of the post-ACK read, or use the native `SubscriptionCache`; row comparison cannot be mechanically rewritten into causal proof.
47
+
48
+ **`voltro update` carries you across this** — codemod `0.67.0/01_subscription-reconciliation`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
49
+ - **@voltro/cli** — `voltro support sentry <eventId>` is removed. It wrapped `sentry-cli sourcemaps explain`, which sentry-cli 3 dropped in favour of Sentry's in-product source-map debugger; `@voltro/cli` now depends on `@sentry/cli` 3, whose `execute(args, live)` takes a boolean. Migration: delete the invocation from scripts, CI jobs and runbooks and read the event's source-map resolution in Sentry itself. `voltro support collect` is unchanged.
50
+
51
+ **`voltro update` carries you across this** — codemod `0.67.0/03_support-sentry-removed`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
52
+ - **@voltro/cli, @voltro/workflow, @voltro/testing** — `voltro test` runs on vitest 5, and `@voltro/workflow` names `vitest ^5.0.0` as its peer. Migration: set `vitest` and `@vitest/coverage-v8` to `^5.0.0` together in every app that declares them (the coverage provider peer-pins the exact vitest version), install, and run the suite once — vitest 5 clears mocks before each test by default, fails a test whose async assertion was not awaited, and no longer looks a config file up in ancestor directories. Scaffolded templates ship on 5.
53
+
54
+ **`voltro update` carries you across this** — codemod `0.67.0/02_vitest-5`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
55
+
56
+ ### Added
57
+
58
+ - **@voltro/ui-shadcn, @voltro/cli, @voltro/devtools, @voltro/devtools-ui** — Add the opt-in Signal brand stylesheet, accessible `SignalHeader` and pausable `SignalField` with reduced-motion and visibility handling. Development and production builds resolve the stylesheet from the same UI-kit installation; the in-browser devtools use the matching plum/violet palette and declare the Tailwind dependency required to compile their source stylesheet locally.
59
+
60
+ Code blocks use matching light/dark surfaces, code comparisons retain readable contrast, and the shared routes view uses a direct heading.
61
+
62
+ `DocsLayout` supports custom header and introduction slots and an optional desktop sidebar. Its mobile drawer uses native modal focus and Escape behavior; search contains keyboard focus and restores the opener when dismissed.
63
+
64
+ `VoltroWordmark` owns product badges and an operator warning tone. `SignalHeader` shares responsive brand geometry and an optional sticky reading surface; `AppShell` accepts a custom header slot. All first-party product headers and footers use this composition, including the compact local Devtools identity.
65
+
66
+ Shared `SignalPreferences`, `SignalSearch` and `SignalHeaderAction` align header controls across public and operating apps. Signal fields support both themes; `ProfileMenu` accepts a custom trigger and preserves an explicit System choice.
67
+
68
+ ### Changed
69
+
70
+ - **@voltro/cli, @voltro/runtime, @voltro/database, @voltro/protocol, @voltro/voltro, @voltro/sql-mssql, @voltro/sql-turso, @voltro/workflow, @voltro/plugin-sso-saml, @voltro/plugin-sentry** — Dependency refresh: Effect 3.22.1 with the matching `@effect/*` patch releases (`@effect/cluster` 0.60.2, `@effect/sql-mssql` 0.54.0, `@effect/platform` 0.97.1, `@effect/rpc` 0.76.2, `@effect/sql` 0.52.1, `@effect/workflow` 0.19.1), `@libsql/client` 0.18.0 — and `@effect/sql-mssql` 0.54.0 flipped its TLS default to encrypt-and-verify, so the mssql dialect now passes `encrypt: false` explicitly for an unset connection to keep the documented modes (unset → plaintext, `sslmode=require` → encrypt without verification) — `@sentry/cli` 3, `xml-encryption` 6, vite 8.2.2, and the tracked minor/patch lines. The mssql patch for `@effect/cluster` — the four SQL fixes plus the shard-release backoff — was regenerated against 0.60.2 (upstream refactored `SqlMessageStorage`, so the 0.60.0 hunks no longer applied) and ships as `patches/@effect__cluster@0.60.2.patch`; `voltro add mssql` writes the new key. Projects scaffolded by the CLI record the pnpm that ran it, which is 12.x on the framework's own toolchain; pnpm 11+ replaced `onlyBuiltDependencies` with `allowBuilds`, and the framework's workspaces declare it.
71
+
72
+ ### Fixed
73
+
74
+ - **@voltro/cli, @voltro/runtime, @voltro/database, @voltro/voltro** — The tunable readers that take `env = process.env` (`resolveEagerFallbackWarnIntervalMs`, `resolveWorkflowRecordingMode`, `readPollCeilingMs`, and the `SchedulingEnv` / `ReactiveEnv` / `InspectRingsEnv` shapes) accept a bare `NodeJS.ProcessEnv` again. They were typed as all-optional literals, which TypeScript's weak-type check rejects for `Dict<string>` the moment nothing in the compilation augments `ProcessEnv` — an app that compiles framework source with only `@types/node` (a mobile app, which declares no env) failed `tsc` on `dbMetrics.ts`. The parameters now carry an index signature.
75
+ - **@voltro/client, @voltro/web** — The subscription recovery watchdog knows when it was throttled. A browser delays timers in a hidden tab, so the stall timer could fire long after it was due, report the interval it was armed with as the interval waited, warn, and invalidate entries whose deliveries were queued behind the same throttling. It now compares its due time with its fire time: late beyond a tolerance, or firing in a hidden tab, it records one `subscription.recovery-timer-late` per attempt (with `timerLateMs` and `hidden`) and re-arms; the first on-time fire in a visible tab decides. `subscription.recovery-stuck` carries the time actually waited and the number of deferrals.
76
+
77
+ The client runtime yields to the event loop through a `MessageChannel` in the browser instead of `setTimeout`, so tasks queued behind Effect's periodic yield are not held to the hidden-tab timer grid. `runtime.resolved` records the channel in use as `scheduler`.
78
+
79
+ `socket.frames` marks frame-arrival bursts on the raw socket — the first frame after open and each frame that follows a gap of five seconds or more, at most eight per socket — so an export separates a late arrival from late processing.
80
+
81
+ `apiSurface: compatible` — the golden churn in `@voltro/client` and `@voltro/web` is two members added to the `ClientDiagnosticKind` union (`socket.frames`, `subscription.recovery-timer-late`); every existing member is unchanged, the framework is the only producer, and a reader that does not know the new kinds sees two more events it can ignore. Only a switch exhaustive over the vocabulary needs two arms.
82
+ - **@voltro/cli** — Web middleware is precompiled into the server production output and rooted by runtime pruning, preserving its behavior in source-free Docker deployments. Missing transitive imports now fail loudly instead of silently disabling a present middleware; rebuilding after removal clears the previous policy. Runtime tracing also preserves transitive dependencies when a deploy directory is reached through a symlink. Native bundle imports now propagate missing-library and initialization errors instead of returning a circular shim's empty exports. Rebuild and deploy the complete `.framework` output; no application API changes are required.
83
+
84
+ ---
85
+
86
+ ## [0.66.1] — 2026-09-06
87
+
88
+ ### Fixed
89
+
90
+ - **@voltro/cli** — API serve and web start bundles preserve esbuild's caught-import handling: a missing `require()` inside `try/catch` or a caught dynamic import can use its source fallback without a package.json optional-dependency declaration. This fixes the 0.66.0 minified MySQL/MariaDB serve-build regression at mysql2's optional `cardinal` debug highlighter; no direct `cardinal` dependency is needed after upgrading and rebuilding the API. Unhandled missing dependencies and broken installed exports still fail the build. Regression tests execute minified fallback code and build/import production serve bundles for every registered SQL-driver package, plus MariaDB, without requiring database services.
91
+
92
+ ---
93
+
42
94
  ## [0.66.0] — 2026-09-06
43
95
 
44
96
  ### ⚠ BREAKING
@@ -205,7 +205,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
205
205
  SOFTWARE.
206
206
  ```
207
207
 
208
- ## @azure/core-rest-pipeline@1.23.0
208
+ ## @azure/core-rest-pipeline@1.24.0
209
209
 
210
210
  License: MIT
211
211
 
@@ -485,7 +485,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
485
485
  SOFTWARE.
486
486
  ```
487
487
 
488
- ## @effect/sql@0.52.0
488
+ ## @effect/sql@0.52.1
489
489
 
490
490
  License: MIT
491
491
 
@@ -513,7 +513,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
513
513
  SOFTWARE.
514
514
  ```
515
515
 
516
- ## @effect/sql-mssql@0.53.0
516
+ ## @effect/sql-mssql@0.54.0
517
517
 
518
518
  License: MIT
519
519
 
@@ -581,7 +581,7 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
581
581
  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
582
582
  ```
583
583
 
584
- ## @types/node@26.2.0
584
+ ## @types/node@26.4.1
585
585
 
586
586
  License: MIT
587
587
 
package/dist/index.d.ts CHANGED
@@ -99,10 +99,16 @@ export declare interface MssqlConnection {
99
99
  readonly username?: string;
100
100
  readonly password?: string;
101
101
  /**
102
- * TLS on the wire (tedious `encrypt`). Unset = `@effect/sql-mssql`'s own
103
- * default, which is **`false`** — it overrides tedious' `true`
104
- * (`MssqlClient.js:54`), so an mssql connection is plaintext unless something
105
- * asks otherwise.
102
+ * TLS on the wire (tedious `encrypt`). Unset = **plaintext**, and the
103
+ * framework says so EXPLICITLY (`encrypt: false`) rather than leaving it to
104
+ * the driver: `@effect/sql-mssql` defaulted to `false` through 0.53 and
105
+ * flipped to `encrypt: true` + `trustServerCertificate: false` in 0.54.0 —
106
+ * i.e. encrypt AND verify the certificate. Inherited, that flip turned every
107
+ * unset connection into `verify-full`, a mode this dialect deliberately does
108
+ * not offer, and a self-signed instance (the docker fixture, a Developer
109
+ * edition) stopped connecting with "Failed to connect". The documented modes
110
+ * (unset → plaintext, `sslmode=require` → encrypt without verification) are
111
+ * this file's contract, not the driver's default of the month.
106
112
  *
107
113
  * That "something" used to be nothing: `connectionFromConfig` never read
108
114
  * `ConnectionConfig.ssl`, so `DB_URL=mssql://…?ssl=true` or `PG_SSL=require`
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ var R = {
24
24
  ...t.database === void 0 ? {} : { database: n.succeed(t.database) },
25
25
  ...t.username === void 0 ? {} : { username: n.succeed(t.username) },
26
26
  ...t.password === void 0 ? {} : { password: n.succeed(c.make(t.password)) },
27
- ...t.encrypt === void 0 ? {} : { encrypt: n.succeed(t.encrypt) },
27
+ encrypt: n.succeed(t.encrypt ?? !1),
28
28
  ...t.trustServer === void 0 ? {} : { trustServer: n.succeed(t.trustServer) },
29
29
  ...t.maxConnections === void 0 ? {} : { maxConnections: n.succeed(t.maxConnections) }
30
30
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/sql-mssql",
3
- "version": "0.66.0",
3
+ "version": "0.67.0",
4
4
  "description": "SQL Server (mssql) dialect adapter for Voltro's cross-dialect DataStore (OUTPUT-clause returning, OFFSET/FETCH paging, inline reactivity).",
5
5
  "keywords": [
6
6
  "voltro",
@@ -33,14 +33,14 @@
33
33
  "node": ">=24.0.0"
34
34
  },
35
35
  "dependencies": {
36
- "@effect/sql": "^0.52.0",
37
- "@effect/sql-mssql": "^0.53.0",
38
- "@voltro/database": "0.66.0",
39
- "@voltro/logger": "0.66.0",
36
+ "@effect/sql": "^0.52.1",
37
+ "@effect/sql-mssql": "^0.54.0",
38
+ "@voltro/database": "0.67.0",
39
+ "@voltro/logger": "0.67.0",
40
40
  "tedious": "18.6.2"
41
41
  },
42
42
  "peerDependencies": {
43
- "effect": "^3.22.0"
43
+ "effect": "^3.22.1"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"