Skip to content

Commit 5a63e8d

Browse files
Version Packages (rc)
1 parent f188c7a commit 5a63e8d

25 files changed

Lines changed: 266 additions & 12 deletions

.changeset/pre.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"changesets": [
2424
"adapter-package-split",
2525
"adapter-split-skills",
26+
"auth-binding-lockstep",
2627
"cli-anonymous-telemetry",
2728
"cli-eql-v3-single-bundle",
2829
"eql-v3-adapter-type-robustness",
@@ -46,6 +47,7 @@
4647
"eql-v3-typed-schema",
4748
"eql-v3-wasm-inline",
4849
"init-pins-runtime-versions",
50+
"migrate-eql-v3",
4951
"prisma-next-0-14",
5052
"prisma-next-joins-release-train",
5153
"release-train-coupling",
@@ -59,6 +61,7 @@
5961
"stash-cli-eql-v3-default",
6062
"stash-cli-skill-refresh",
6163
"stash-drizzle-skill-encrypt-query",
64+
"stash-env-mint-credentials",
6265
"stash-skills-contains-to-matches",
6366
"stash-supabase-contains-substrings",
6467
"supabase-encryption-error",

e2e/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# @cipherstash/e2e
22

3+
## 0.0.3-rc.3
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [8b2551a]
8+
- Updated dependencies [3a86939]
9+
- Updated dependencies [f188c7a]
10+
- @cipherstash/stack@1.0.0-rc.3
11+
- stash@1.0.0-rc.3
12+
- @cipherstash/wizard@1.0.0-rc.3
13+
314
## 0.0.3-rc.2
415

516
### Patch Changes

e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cipherstash/e2e",
3-
"version": "0.0.3-rc.2",
3+
"version": "0.0.3-rc.3",
44
"private": true,
55
"description": "End-to-end tests that exercise built CipherStash binaries and cross-package behaviour.",
66
"type": "module",

examples/basic/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# @cipherstash/basic-example
22

3+
## 1.2.14-rc.3
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [8b2551a]
8+
- @cipherstash/stack@1.0.0-rc.3
9+
- @cipherstash/stack-drizzle@1.0.0-rc.3
10+
- @cipherstash/stack-supabase@1.0.0-rc.3
11+
312
## 1.2.14-rc.2
413

514
### Patch Changes

examples/basic/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@cipherstash/basic-example",
33
"private": true,
4-
"version": "1.2.14-rc.2",
4+
"version": "1.2.14-rc.3",
55
"type": "module",
66
"scripts": {
77
"start": "tsx index.ts"

examples/prisma/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# @cipherstash/prisma-next-example
22

3+
## 0.0.6-rc.3
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [8b2551a]
8+
- @cipherstash/stack@1.0.0-rc.3
9+
- @cipherstash/prisma-next@1.0.0-rc.3
10+
311
## 0.0.6-rc.2
412

513
### Patch Changes

examples/prisma/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@cipherstash/prisma-next-example",
33
"private": true,
4-
"version": "0.0.6-rc.2",
4+
"version": "0.0.6-rc.3",
55
"description": "End-to-end example of @cipherstash/prisma-next: searchable application-layer encryption for Postgres with Prisma Next, using @cipherstash/stack as the SDK.",
66
"type": "module",
77
"scripts": {

packages/bench/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# @cipherstash/bench
22

3+
## 0.0.5-rc.3
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [8b2551a]
8+
- @cipherstash/stack@1.0.0-rc.3
9+
- @cipherstash/stack-drizzle@1.0.0-rc.3
10+
311
## 0.0.5-rc.2
412

513
### Patch Changes

packages/bench/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cipherstash/bench",
3-
"version": "0.0.5-rc.2",
3+
"version": "0.0.5-rc.3",
44
"private": true,
55
"description": "Performance / index-engagement benchmarks for stack integrations (Drizzle, encryptedSupabase, Prisma).",
66
"type": "module",

packages/cli/CHANGELOG.md

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,104 @@
11
# @cipherstash/cli
22

3+
## 1.0.0-rc.3
4+
5+
### Minor Changes
6+
7+
- 3a86939: EQL v3 support for the encryption rollout lifecycle (#648). The `stash
8+
encrypt *` commands (and `@cipherstash/migrate` underneath) now resolve a
9+
column's EQL version and its encrypted counterpart from the **Postgres domain
10+
types** — the EQL v3 types are self-describing, so the `<col>_encrypted`
11+
naming is a convention only, never enforced or relied upon — and follow the
12+
right lifecycle, no new flags:
13+
14+
- **`encrypt backfill`** works on v3 columns unchanged (the engine was always
15+
version-agnostic; pass an `EncryptionV3` client and real v3 envelopes land
16+
in the concrete `eql_v3_*` domain column — verified live against a real
17+
database, including the domain CHECK and a decrypt round-trip). The
18+
manifest records the detected version, the encrypted column's name, and the
19+
v3 target phase, and the command prints v3-appropriate next steps.
20+
- **`encrypt cutover`** on a backfilled v3 column reports "not applicable"
21+
(exit 0) with guidance: v3 has no rename cut-over — the application
22+
switches to the encrypted column by name. Before backfill completes it
23+
exits 1 and says to finish the backfill instead of instructing the switch.
24+
On a database with no `eql_v2_configuration` table (a v3-only install) the
25+
v2 path now explains that instead of surfacing a raw Postgres error.
26+
- **`encrypt drop`** is version-aware: v3 runs from the `backfilled` phase,
27+
**verifies live coverage** (refuses to generate the migration while any row
28+
still has the plaintext set and the encrypted column NULL — the
29+
`countUnencrypted` check), and drops the ORIGINAL plaintext column (there
30+
is no `<col>_plaintext` under v3); v2 behaviour is unchanged. The generated
31+
v3 migration **re-verifies coverage at apply time** — it locks the table,
32+
re-counts, and aborts without dropping if plaintext-only rows appeared
33+
after generation. And because dropping is the one irreversible step, it
34+
requires a positively asserted plaintext↔ciphertext pairing (the
35+
manifest's recorded `encryptedColumn` or the naming convention): a match
36+
found only by being the table's sole EQL column is refused with
37+
instructions, and an ambiguous table (several EQL columns, none
38+
identifiable) fails closed listing the candidates — as does `cutover`.
39+
- **`encrypt status`** classifies each column from the observed domain type
40+
(manifest as fallback), shows `v3` in the EQL column, and no longer raises
41+
the v2-only `not-registered` / `plaintext-col-missing` drift flags for v3
42+
columns. `stash status`'s quest ladder and the `stash init` agent handoff
43+
prompt teach the version-appropriate next step (no more "run cutover" on
44+
v3 columns).
45+
- New `@cipherstash/migrate` exports: `classifyEqlDomain`,
46+
`resolveEncryptedColumn`, `pickEncryptedColumn`, `listEncryptedColumns`
47+
(domain-type resolution — case-exact for quoted/mixed-case table names),
48+
`countEncrypted` / `countUnencrypted` (coverage counts), and manifest
49+
`eqlVersion` + `encryptedColumn` fields. `EqlVersion` is numeric (`2 | 3`),
50+
matching the manifest and the installer. Resolved columns carry `via:
51+
'hint' | 'convention' | 'sole'` so callers can tell a positively asserted
52+
pairing from a by-elimination guess.
53+
- Fixed: `encrypt cutover`/`encrypt drop` precondition failures now actually
54+
exit 1 — the early-return guards previously skipped the exit-code path
55+
entirely, so failed preconditions exited 0. (This also applies to v2
56+
preconditions: scripted pipelines that relied on the erroneous exit 0 will
57+
now see the documented exit 1.)
58+
59+
The `stash-cli` and `stash-encryption` skills and the `@cipherstash/migrate`
60+
README document the two lifecycles (v2: backfill → cutover → drop;
61+
v3: backfill → switch-by-name → drop).
62+
63+
- f188c7a: `stash env` now works: it mints deployment credentials from your device-code
64+
session and prints them as env vars — no dashboard copy-paste. The command
65+
creates a fresh ZeroKMS client and a member-role CipherStash access key (named
66+
via `--name`; the role is pinned in the request and verified on the response —
67+
the CLI deliberately cannot mint admin keys), then emits `CS_WORKSPACE_CRN`,
68+
`CS_CLIENT_ID`, `CS_CLIENT_KEY`, and `CS_CLIENT_ACCESS_KEY`.
69+
70+
Output goes to stdout by default — and stdout is pipe-clean (progress UI is on
71+
stderr), so `stash env --name x > prod.env` and pipes into secret stores are
72+
safe. `--write [path]` writes a file instead (default `.env.production.local`,
73+
enforced mode 0600 even when overwriting), confirming before overwriting and
74+
refusing non-interactively — always _before_ anything is minted, so a refusal
75+
never discards the shown-exactly-once access key. `--json` emits NDJSON; with
76+
`--write` the confirmation event is deliberately secret-free. API responses
77+
are schema-validated so a service change can never print `undefined` into a
78+
credentials file. Creating access keys requires the admin role in the
79+
workspace.
80+
81+
This is also the supported credential path for WASM/edge local development
82+
(Supabase Edge Functions, Cloudflare Workers, Deno), where the runtime cannot
83+
read the `~/.cipherstash` device profile: mint a key and feed it via
84+
`supabase functions serve --env-file` or the platform's secret store.
85+
86+
The `STASH_EXPERIMENTAL_ENV_CMD` gate is removed.
87+
88+
### Patch Changes
89+
90+
- 8b2551a: Fix "Failed to load native binding" on project-local installs of the CLI/SDK
91+
(npm). `@cipherstash/auth` was pinned at 0.41.0 while the six
92+
`@cipherstash/auth-*` platform bindings declared in stack/stash/wizard's
93+
optionalDependencies were pinned at 0.42.0. Because auth pins its bindings as
94+
exact-version optional peer dependencies, the skew made npm nest per-consumer
95+
binding copies that the hoisted `auth` package could not resolve — any command
96+
or import touching auth then died at startup. All seven packages now move in
97+
lockstep at 0.42.0, Dependabot is barred from bumping any of them
98+
independently, and a supply-chain CI test fails on any future skew.
99+
- Updated dependencies [3a86939]
100+
- @cipherstash/migrate@1.0.0-rc.1
101+
3102
## 1.0.0-rc.2
4103

5104
### Patch Changes

0 commit comments

Comments
 (0)