Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1912 commits
Select commit Hold shift + click to select a range
2e9cd6f
ci(release): unify prerelease entrypoint
tobyhede Jul 8, 2026
42123b3
ci(release): consolidate to a single release.yml process
tobyhede Jul 8, 2026
7d20b43
docs(release): replace alpha runbook with comprehensive release doc
tobyhede Jul 8, 2026
25d0bd6
ci(release): harden Multitudes notify and pin image dispatch to the r…
tobyhede Jul 8, 2026
b8df5e4
docs: make Changesets the canonical changelog + version owner
tobyhede Jul 8, 2026
b8d796b
docs(changelog): backfill pending [Unreleased] entries into changesets
tobyhede Jul 8, 2026
da4039d
chore(rebase): reconcile with eql_v3 (query-operand domains + changelog)
tobyhede Jul 8, 2026
25a2001
fix(ci): drop the pnpm dependency from the generated-output gates
freshtonic Jul 8, 2026
13c4a81
docs(claude): note that regenerating committed generated code is a de…
tobyhede Jul 8, 2026
792c78d
fix(release): address review findings — publish guards, marker tighte…
freshtonic Jul 8, 2026
56e67e2
Merge pull request #374 from cipherstash/eql-language-bindings-release
freshtonic Jul 8, 2026
b5c586f
chore(release): eql 3.0.0-alpha.3
freshtonic Jul 8, 2026
7239f91
chore(release): eql 3.0.0-alpha.3 — retry (fix crate-publish dispatch)
freshtonic Jul 8, 2026
07cb738
ci: register release-plz.yml on the default branch (dispatch stub)
freshtonic Jul 8, 2026
3c55825
Merge pull request #383 from cipherstash/james/register-release-plz-w…
freshtonic Jul 8, 2026
cb20b74
chore(release): eql 3.0.0-alpha.3 — retry (trusted publishing configu…
freshtonic Jul 8, 2026
4301cff
chore(release): eql 3.0.0-alpha.3 — retry (fix npm PATH shadowing + b…
freshtonic Jul 8, 2026
e079f6b
chore(release): eql 3.0.0-alpha.3 — retry (API tag creation)
freshtonic Jul 8, 2026
a758894
feat(release): npm prereleases publish under 'latest' until 3.0.0 GA
freshtonic Jul 8, 2026
d71a221
fix(docs): suppress Doxygen auto-linking of `text` in jsonb selector …
coderdan Jul 8, 2026
ca91f1a
Merge pull request #372 from cipherstash/fix/doxygen-schema-name-misp…
coderdan Jul 8, 2026
275c582
Merge pull request #385 from cipherstash/fix/jsonb-warning-doxygen-au…
coderdan Jul 8, 2026
99dc436
feat(install): disable ORE-backed domains loudly on non-superuser ins…
freshtonic Jul 9, 2026
e1e0d0e
fix(install): add the poison constraints NOT VALID + review polish (C…
freshtonic Jul 9, 2026
5ea1271
Merge pull request #388 from cipherstash/james/cip-3468-do-not-instal…
freshtonic Jul 9, 2026
56aa46c
feat(types)!: prefix all public EQL v3 types with eql_v3_ (CIP-3472)
freshtonic Jul 9, 2026
60bc2fe
feat(jsonb)!: switch SteVec ordering from CLLW-ORE (oc) to CLLW-OPE (op)
freshtonic Jul 9, 2026
36e5d7a
style(tests): cargo fmt after ord_ope_term migration
freshtonic Jul 9, 2026
1fd50ed
style(bindings): cargo fmt
freshtonic Jul 9, 2026
a8d9405
test,docs: adopt the eql_v3_-prefixed public type names everywhere (C…
freshtonic Jul 9, 2026
9e3a7d5
docs: review polish — changelog-safe U-004 link, U-003 spacing, gramm…
freshtonic Jul 9, 2026
ce01677
Merge pull request #390 from cipherstash/james/cip-3469-switch-jsonbs…
freshtonic Jul 9, 2026
e88701d
Merge origin/eql_v3 (SteVec CLLW-OPE #390, ore_fallback CIP-3468) int…
freshtonic Jul 9, 2026
baeeea6
chore(release): eql 3.0.0-alpha.4
coderdan Jul 9, 2026
03d97ce
fix(test): norm() must match raw format_type output, not source names
freshtonic Jul 9, 2026
4d1f19c
Merge pull request #391 from cipherstash/james/cip-3472-prefix-all-pu…
freshtonic Jul 9, 2026
e8971ed
feat(v3)!: back the `_ord` domains with CLLW-OPE instead of block-ORE
tobyhede Jul 9, 2026
6cb7279
test(ci): run float_special in CI, gated by self-expiring known-failu…
tobyhede Jul 9, 2026
3561ef5
refactor(v3)!: name the ordering extractors after their domain, not t…
tobyhede Jul 9, 2026
efbe94a
feat(v3)!: back `text_search` with CLLW-OPE; add `text_search_ore`
tobyhede Jul 9, 2026
031d484
fix(ci): update the D4 smoke test for the ord_term/ord_term_ore extra…
freshtonic Jul 9, 2026
4f9086d
test(ore-fallback): poison probes target _ord_ore — _ord is OPE and n…
freshtonic Jul 9, 2026
cbd3850
chore(bindings): reconcile the OpeCllw doc after the rebase; drop res…
freshtonic Jul 9, 2026
e9a0400
fix(rebase): restore resolutions clobbered by later-commit replays
freshtonic Jul 9, 2026
9cf3e3e
fix(test): the _ord query-operand test must encrypt with OPE, not ORE
tobyhede Jul 9, 2026
bf79607
test(jsonb-entry): pin the ord-extractor override as load-bearing
tobyhede Jul 9, 2026
415f1bd
docs: correct claims the CLLW-OPE migration falsified
tobyhede Jul 9, 2026
49d4169
fix(test): the jsonb_entry placeholder must carry `op`, not the remov…
tobyhede Jul 9, 2026
c68e669
docs(crates): SteVec orders by `op` (CLLW-OPE), not `oc` (CLLW-ORE)
tobyhede Jul 9, 2026
06b8f6e
test(ci): run v3_scalar_query_operand_tests in the e2e job
freshtonic Jul 9, 2026
b5bed80
fix(ci): known-failures gate must report an unreferenced marker, not …
freshtonic Jul 9, 2026
ad58637
test(float): pin `=` on `_ord` splitting ±0.0, coupled to #387
freshtonic Jul 9, 2026
d8c7d01
Merge pull request #389 from cipherstash/default-ord-is-ore
freshtonic Jul 9, 2026
6d7e87c
Merge branch 'main' into eql_v3
coderdan Jul 9, 2026
a22184a
chore(release): exit changesets pre-mode so `main` can cut 3.0.0
freshtonic Jul 9, 2026
297daf0
Merge pull request #392 from cipherstash/eql_v3
freshtonic Jul 9, 2026
a35410d
Version Packages
github-actions[bot] Jul 9, 2026
e28cf1d
ci(release-plz): send a User-Agent to the crates.io API
freshtonic Jul 9, 2026
f54ba1f
Merge pull request #393 from cipherstash/changeset-release/main
freshtonic Jul 9, 2026
4119c42
Merge pull request #394 from cipherstash/ci/crates-io-user-agent
freshtonic Jul 9, 2026
a8ec17c
feat(eql_v3): add storage-only public.eql_v3_json; rename JSON family…
tobyhede Jul 14, 2026
6aa8b96
fix: apply CodeRabbit auto-fixes
tobyhede Jul 15, 2026
5890243
fix: correct stale TOC anchor for json-support querying section
tobyhede Jul 15, 2026
89a1da5
test(json): extract real-ciphertext storage fixture + suite from PR #397
tobyhede Jul 15, 2026
e73f6f6
test(json): storage-only eql_v3_json domain — real-ciphertext matrix …
tobyhede Jul 15, 2026
a51c1f4
test(json): isolate storage-reject payload + fix identity in clean-in…
tobyhede Jul 15, 2026
bd8af9d
docs(codegen): fix stale jsonb→json binding refs; generalize mixed-fa…
tobyhede Jul 15, 2026
920ce73
style: rustfmt v3_json_storage_tests
tobyhede Jul 15, 2026
3d342d7
chore(changeset): json storage/rename is a patch (3.0.1)
tobyhede Jul 15, 2026
d4ff8c6
chore(release): open eql-3.0.1 release batching branch
tobyhede Jul 16, 2026
30b2550
Merge pull request #398 from cipherstash/feat/eql-v3-json-storage-and…
tobyhede Jul 16, 2026
18d58e7
feat(eql_v3)!: rename text bloom fuzzy match to `@@` / `eql_v3.matches`
tobyhede Jul 15, 2026
36b9843
refactor(eql-codegen): model operator symbol as OpSymbol enum
tobyhede Jul 15, 2026
f6d5b5e
Merge pull request #406 from cipherstash/eql-v3-rename-text-match-ope…
tobyhede Jul 16, 2026
0aa9f6a
Merge pull request #408 from cipherstash/refactor/eql-codegen-opsymbo…
tobyhede Jul 16, 2026
e0db50c
ci(release): allow prereleases from any non-main branch
tobyhede Jul 16, 2026
e7790ab
chore(release): eql 3.0.1-alpha.0
tobyhede Jul 16, 2026
0d87403
docs(eql_v3): fix stale/inverted CLLW-OPE migration comments (CIP-3490)
freshtonic Jul 14, 2026
4623cab
test(eql_v3): close CLLW-OPE migration coverage gaps (CIP-3491)
freshtonic Jul 14, 2026
fa31d49
ci(splinter): drop 10 stale ore_cllw allowlist rows, add unused-row c…
freshtonic Jul 14, 2026
8cfcdd9
Merge pull request #399 from cipherstash/james/cip-3490-cllw-ope-migr…
freshtonic Jul 16, 2026
49ef541
ci(known-failures): close four fail-open / false-positive paths (CIP-…
freshtonic Jul 14, 2026
bbd4d18
Merge pull request #402 from cipherstash/james/cip-3489-splintersh-10…
freshtonic Jul 16, 2026
87e5aae
Merge pull request #401 from cipherstash/james/cip-3488-harden-the-kn…
freshtonic Jul 16, 2026
f60a564
feat(eql_v3): split json_entry eq_term into eq_entry_term (coalesce) …
tobyhede Jul 16, 2026
48857b2
feat(eql_v3): generate json_entry <-> query_<T>_eq/_ord/_ord_ope cros…
tobyhede Jul 16, 2026
bee1d3f
test(eql_v3): allow json_entry x query_<T> cross-type operators; rege…
tobyhede Jul 16, 2026
7530108
test(eql_v3): json_entry cross-type structural equivalence + ord inde…
tobyhede Jul 16, 2026
ce40706
fix(eql_v3): equality on encrypted JSON via query_<T>_ord (op); drop …
tobyhede Jul 16, 2026
aabfd94
test(eql_v3): surface guard asserts equality via query_<T>_ord + no _…
tobyhede Jul 16, 2026
af1ed4f
test(eql_v3): op-based equality correctness for json_entry cross-type…
tobyhede Jul 16, 2026
bd54115
docs(eql_v3): document json_entry selector-with-constraint queries vi…
tobyhede Jul 16, 2026
9c1b5e3
fix(eql_v3): text json_entry cross-type gets all six operators via or…
tobyhede Jul 16, 2026
8215394
refactor(eql-codegen): derive the json_entry cross surface from the c…
tobyhede Jul 16, 2026
b255a15
test(eql_v3): use real fixture ciphertext for the inert hm in the tex…
tobyhede Jul 16, 2026
4890ec1
style(rust): clean rustfmt and clippy across the workspace
tobyhede Jul 16, 2026
1bedb8c
test(ci): gate doc anchors and the known-failure parser, and fix what…
tobyhede Jul 16, 2026
36c95be
test(ci): raise max_locks_per_transaction for the test Postgres
tobyhede Jul 17, 2026
cfb03bc
test(sqlx): pin the new json_entry cross-type operator surface test
tobyhede Jul 17, 2026
140407e
test(eql_v3): close the json_entry cross-type e2e gap with fresh quer…
tobyhede Jul 17, 2026
d7049da
test(eql_v3): fix SEL_HELLO_OP, which named $.number, and pin text or…
tobyhede Jul 17, 2026
8b4e3cc
style(sqlx): rustfmt the json_entry query-operand e2e tests
freshtonic Jul 17, 2026
fa9a7f2
fix(eql_v3): block json_entry text equality, which returned false pos…
tobyhede Jul 17, 2026
44fb90b
fix(eql_v3): block json_entry equality for bigint and numeric (f64 le…
tobyhede Jul 17, 2026
755b4ea
docs: update renamed JSON domains in Supabase guide
tobyhede Jul 17, 2026
b762f6d
style: format JSON cross-type operator changes
tobyhede Jul 17, 2026
aacb4a5
test(sqlx): size the test Postgres lock table for concurrent uninstalls
freshtonic Jul 17, 2026
1f27727
fix(eql_v3): drop temporal operands from the json_entry cross surface…
coderdan Jul 17, 2026
dee77c5
test(eql_v3): range oracles at a median pivot, unserved-pair raise co…
coderdan Jul 17, 2026
5a57908
docs(upgrading): U-009 — the uninstaller can exceed Postgres's defaul…
coderdan Jul 17, 2026
0afdfa2
Merge pull request #409 from cipherstash/eql-3.0.1
freshtonic Jul 17, 2026
e58adc6
Version Packages
github-actions[bot] Jul 17, 2026
2833f3d
Merge pull request #411 from cipherstash/changeset-release/main
coderdan Jul 17, 2026
66cbb61
feat(v3): SteVec value-inclusive selectors + envelope wire format
coderdan Jul 18, 2026
4964ec2
chore: use cipherstash-client 0.42
coderdan Jul 19, 2026
4346f4c
docs: remove stale v2 surface reference
coderdan Jul 19, 2026
ad94b8b
test: update SteVec v3 CI fixtures
coderdan Jul 19, 2026
713c1bb
test: align SteVec fixtures with client 0.42
coderdan Jul 19, 2026
4aa408b
fix v3 SteVec containment semantics
coderdan Jul 19, 2026
1627b42
fix: align SteVec containment CI coverage
coderdan Jul 19, 2026
1c41d9a
fix: block lossy JSON entry equality
coderdan Jul 19, 2026
f6a8240
fix: close SteVec validation and test gaps
coderdan Jul 20, 2026
884c41f
Allowlist the JSON OPE term extractor
coderdan Jul 20, 2026
d9118c2
Merge pull request #413 from cipherstash/dan/eql-value-selectors
coderdan Jul 20, 2026
cd66ff7
Merge main into JSON entry cross-type operators
coderdan Jul 20, 2026
95ae8c2
Merge pull request #410 from cipherstash/eql-v3-json-entry-cross-type…
coderdan Jul 20, 2026
3ae5178
Version Packages
github-actions[bot] Jul 20, 2026
fabb417
Release EQL 3.0.2
coderdan Jul 20, 2026
045dcc8
Regenerate 3.0.2 release assets
coderdan Jul 20, 2026
52e8cdb
Merge pull request #414 from cipherstash/changeset-release/main
coderdan Jul 20, 2026
e085cf8
Fix release image workflow dispatch
coderdan Jul 20, 2026
73b81da
docs: equality on ordering domains splits on term injectivity
coderdan Jul 23, 2026
031eb47
Merge pull request #418 from cipherstash/docs/database-indexes-ord-eq…
coderdan Jul 23, 2026
dbd8b7c
docs: fix errors and gaps surfaced by a full documentation audit
coderdan Jul 23, 2026
ce132f4
docs: RDS-proper supports the ORE operator class — production-confirmed
coderdan Jul 23, 2026
620714f
fix(v3): guard empty-bloom needle in eql_v3.matches (CIP-3606)
freshtonic Jul 23, 2026
c424e2e
build: harden v3 dep ordering (LC_ALL=C sort, cross-platform cycle ga…
tobyhede Jul 8, 2026
7cf5f40
codegen: emit deterministic topo-ordered manifest for the generated S…
tobyhede Jul 8, 2026
0cb8c63
build: order generated surface from codegen manifest; tsort now a who…
tobyhede Jul 8, 2026
0eabc47
build: add referenced-vs-defined symbol cross-check over the installe…
tobyhede Jul 8, 2026
76fcdc2
ci/docs: gate symbol-order + build-ordering helpers; document codegen…
tobyhede Jul 8, 2026
3455561
build: address review — fail-loud strip_require_lines (propagate grep…
tobyhede Jul 8, 2026
0e72905
style: cargo fmt + silence clippy::type_complexity in property test s…
tobyhede Jul 9, 2026
a7651be
build: teach the symbol-order checker the eql_v3 CREATE DOMAIN form
tobyhede Jul 9, 2026
965dce2
build: order the whole v3 surface from one walk, not two enumerations
tobyhede Jul 9, 2026
fccd712
build: harden the symbol-order gate and correct the ordering diagnostics
tobyhede Jul 9, 2026
8b5a116
test: gate the installer against the order, not just the order agains…
tobyhede Jul 9, 2026
fb7c096
build: drop the one-shot monolith reorder-only check
tobyhede Jul 9, 2026
e8b261b
build: address review — invalidate the build cache on gate edits, fai…
tobyhede Jul 17, 2026
2fd6bd3
build: report what the symbol gate cannot resolve; reject self-edges;…
tobyhede Jul 17, 2026
f9de116
build: describe the query-domain schema split without a private track…
tobyhede Jul 24, 2026
73e412d
Merge pull request #382 from cipherstash/build-ordering-refactor
tobyhede Jul 24, 2026
1e4329f
feat(eql_v3): add grouped_value aggregate
freshtonic Jul 27, 2026
874326f
test(splinter): allowlist eql_v3.grouped_value search_path finding
freshtonic Jul 27, 2026
88dae68
docs(eql_v3): reframe grouped_value docs for users; add DISTINCT test
freshtonic Jul 27, 2026
5e9a649
docs(eql_v3): tighten grouped_value docs per review
freshtonic Jul 27, 2026
cb47ede
Merge pull request #423 from cipherstash/james/cip-3657-re-create-gro…
freshtonic Jul 27, 2026
132c762
fix(ci): scrub private tracker ids and fix rustfmt
freshtonic Jul 27, 2026
6a6a0f4
Merge pull request #421 from cipherstash/james/cip-3606-an-empty-bloo…
freshtonic Jul 27, 2026
c5e3935
Merge pull request #415 from cipherstash/fix/release-image-dispatch-repo
coderdan Jul 27, 2026
7e5e42c
docs: address review feedback on the audit fixes
coderdan Jul 27, 2026
e0cdd9d
docs: JSON is a mixed catalog family; note the _ord shorthand
coderdan Jul 27, 2026
79e0569
Merge pull request #419 from cipherstash/docs/audit-fixes
coderdan Jul 27, 2026
58d9696
chore(release): bump grouped_value changeset to patch
coderdan Jul 27, 2026
62f85b0
Merge pull request #426 from cipherstash/fix/grouped-value-patch-bump
coderdan Jul 27, 2026
1154673
Version Packages
github-actions[bot] Jul 27, 2026
d57a2da
Merge pull request #424 from cipherstash/changeset-release/main
coderdan Jul 27, 2026
c8ee10f
fix(docs): recover symbols the manifest extraction was silently dropping
coderdan Jul 28, 2026
8653d06
fix(docs): keep filtered line numbers stable and stop publishing a tr…
coderdan Jul 28, 2026
d5a2e17
Merge pull request #427 from cipherstash/docs/manifest-extraction-fixes
coderdan Jul 28, 2026
c5967c5
Version Packages
github-actions[bot] Jul 28, 2026
f878f9a
Merge pull request #429 from cipherstash/changeset-release/main
coderdan Jul 28, 2026
2cfadb0
test(v3): property tests for the empty-bloom needle guard (CIP-3665)
freshtonic Aug 4, 2026
4c2bb92
feat(json)!: rename eql_v3.ste_vec_contains to eql_v3.jsonb_document_…
freshtonic Aug 4, 2026
efaa0b1
docs(reference): document eq_term/ord_term for SELECT DISTINCT + ORDE…
freshtonic Aug 4, 2026
4e74bfb
fix(test): rename ste_vec_contains splinter allowlist row to jsonb_do…
freshtonic Aug 4, 2026
63af028
chore(release): regenerate bundled installer SQL for jsonb_document_c…
freshtonic Aug 4, 2026
1a40413
chore(tests): drop private tracker identifiers from public test files…
freshtonic Aug 4, 2026
c4f8e48
Merge pull request #433 from cipherstash/james/cip-3677-document-sele…
freshtonic Aug 5, 2026
a4e8cbf
Merge pull request #432 from cipherstash/james/cip-3353-consolidate-s…
freshtonic Aug 5, 2026
ab6806d
test(v3): append full-length seed before selecting the substring prefix
freshtonic Aug 5, 2026
aab1d12
Merge pull request #431 from cipherstash/james/cip-3665-property-test…
freshtonic Aug 5, 2026
9022e16
build(deps-dev): bump js-yaml from 4.3.0 to 4.3.1
dependabot[bot] Aug 10, 2026
6d664eb
docs(plans): EQL monorepo absorption plan
tobyhede Aug 13, 2026
39c75d6
docs(plans): resolve the EQL absorption's three open decisions
tobyhede Aug 13, 2026
ae463e3
docs(plans): record the path-dep build probe as verified
tobyhede Aug 13, 2026
210529d
Add 'packages/eql/' from commit 'aab1d12d6b078abb62b4eb9b89fb1cbcf51d…
tobyhede Aug 13, 2026
6f3d329
chore(eql): delete duplicated and dead files from the import
tobyhede Aug 13, 2026
ee39124
docs(plans): move the Biome reflow behind the ignore entries
tobyhede Aug 13, 2026
764f02b
chore(biome): exclude the imported EQL generated surfaces
tobyhede Aug 13, 2026
a5d2421
style(eql): reflow the imported tree under Biome 2.5.2
tobyhede Aug 13, 2026
f237956
feat(eql): wire the subtree into the pnpm workspace and turbo graph
tobyhede Aug 13, 2026
12b20c9
docs(plans): record the Phase 2 verification results, including two t…
tobyhede Aug 13, 2026
baacaa9
ci(eql): run the SQLx suite from the root workflow directory
tobyhede Aug 13, 2026
eae282d
ci(eql): port the bench and macro-expand workflows to the root
tobyhede Aug 13, 2026
67632bf
test(eql): assert every cargo check EQL owns is reached by a root wor…
tobyhede Aug 13, 2026
574afe5
chore(deps): monitor the EQL Cargo workspace with Dependabot
tobyhede Aug 13, 2026
3bd9314
docs(plans): record Phase 4, and move two items to Phase 5
tobyhede Aug 13, 2026
4fae876
feat(eql): resolve eql-bindings from the tree, not from crates.io
tobyhede Aug 13, 2026
86c47ea
test(eql): fail the build if EQL resolves from a registry
tobyhede Aug 13, 2026
8e8af4c
docs(plans): record Phase 3, and split its one half-runnable box
tobyhede Aug 13, 2026
1d4d569
fix(eql): let the two checkout-less jobs out of the EQL working direc…
tobyhede Aug 13, 2026
de8378b
fix(eql): build @cipherstash/eql before prisma-next typechecks agains…
tobyhede Aug 13, 2026
c3318be
docs(plans): record the EQL build-structure verification
tobyhede Aug 13, 2026
22e7aa5
test(ci): guard bare pnpm steps on the package graph, not on turbo's …
tobyhede Aug 13, 2026
b58f404
fix(eql): re-pin the workspace-keyed SteVec selector, and guard its s…
tobyhede Aug 13, 2026
4e767aa
fix(eql): re-pin SEL_HELLO_OP to this repo's CI workspace
tobyhede Aug 13, 2026
9ed8ad5
docs(plans): record that workspace:^ moved consumers to EQL's unrelea…
tobyhede Aug 13, 2026
35479a6
feat(eql)!: bump to 4.0.0, and refuse to package SQL under the wrong …
tobyhede Aug 13, 2026
d3977a9
fix(eql): release the rename as 3.0.5, not 4.0.0
tobyhede Aug 13, 2026
ba37039
feat(stack-prisma): bake eql-3.0.5, and re-emit the baseline to keep …
tobyhede Aug 14, 2026
142f41d
fix(json): restore deprecated ste_vec_contains aliases
freshtonic Aug 17, 2026
600a9b2
test(json): use encrypted fixture for legacy aliases
freshtonic Aug 17, 2026
35bce9e
fix(ci): register restored alias coverage
freshtonic Aug 17, 2026
74106c7
Merge pull request #435 from cipherstash/dependabot/npm_and_yarn/js-y…
tobyhede Aug 17, 2026
313eac0
Merge pull request #437 from cipherstash/fix/restore-ste-vec-contains…
freshtonic Aug 17, 2026
c1057af
fix(deps): patch postcss to 8.5.26
tobyhede Aug 17, 2026
4b50483
fix(deps): bump jsonwebtoken to 10.4.0 via stack-auth 0.42.2
tobyhede Aug 18, 2026
6ba124f
fix(deps): keep winapi-util on windows-sys 0.61.2
tobyhede Aug 18, 2026
51732f3
Merge pull request #438 from cipherstash/fix/cip-3807-postcss-patch
tobyhede Aug 18, 2026
2759a17
Merge pull request #439 from cipherstash/fix/cip-3809-jsonwebtoken-patch
tobyhede Aug 18, 2026
4b2d859
Version Packages
github-actions[bot] Aug 18, 2026
91ebf28
Merge pull request #434 from cipherstash/changeset-release/main
tobyhede Aug 19, 2026
c64b9ae
fix(release): make the version hook runnable, and refuse to half-publish
tobyhede Aug 19, 2026
cf57466
ci(eql): hash the new compile input, and give the PG matrix a trigger…
tobyhede Aug 19, 2026
09a3587
test(eql): the cargo-task guard was reading 32 of 73 tasks
tobyhede Aug 19, 2026
16fad5a
fix(eql): close three holes in the registry-pin linter, and record th…
tobyhede Aug 19, 2026
c604028
docs(eql): correct the 3.0.5 blast radius, and cover the stale vendor…
tobyhede Aug 19, 2026
8401793
fix(deps): four security overrides had been overtaken by their own fixes
tobyhede Aug 19, 2026
f61542b
chore(eql): sync subtree to upstream 91ebf28d (3.0.5 release)
tobyhede Aug 19, 2026
ab8f958
fix(biome): align the config schema with the version actually installed
tobyhede Aug 19, 2026
4045d63
fix(eql): re-emit against the published 3.0.5, which kept the old name
tobyhede Aug 19, 2026
3614975
fix(release): drop --offline, which the release job's cold registry c…
tobyhede Aug 19, 2026
6edbe37
fix(eql): the doxygen-leak guard could only ever report OK
tobyhede Aug 19, 2026
78297a1
docs: stop telling agents the release gate is currently blocking
tobyhede Aug 19, 2026
ad033df
fix(skills): stash-prisma never carried the post-upgrade re-plan
tobyhede Aug 19, 2026
3283a9d
Merge origin/main into feat/eql-1-vendor
tobyhede Aug 19, 2026
4422d5c
fix(release): close the audit gaps from the #885 and #915 reviews
tobyhede Aug 20, 2026
981a97a
Merge feat/eql-1-vendor into feat/eql-2-review-fixes
tobyhede Aug 20, 2026
f29626d
fix(release): the gate could not tell our 3.0.5 from npm's 3.0.5
tobyhede Aug 20, 2026
5a77f79
Merge pull request #915 from cipherstash/feat/eql-2-review-fixes
tobyhede Aug 20, 2026
801868d
fix(cli): verify the EQL bundle before running it against a database
tobyhede Aug 20, 2026
32aa9a8
ci(eql): the path filters missed four inputs the gated jobs read
tobyhede Aug 20, 2026
73802de
fix(release): guard the SQL stamp, and stop rewriting a frozen artefact
tobyhede Aug 20, 2026
a3580d9
docs(security): protect-ffi has published from here since 0.32.0
tobyhede Aug 20, 2026
a88ca5b
test(guards): three scans could not see what they claimed to cover
tobyhede Aug 20, 2026
d5115d2
docs(agents): record what this round's guards cover, and what they do…
tobyhede Aug 20, 2026
a598b38
Merge origin/main into feat/eql-1-vendor
tobyhede Aug 21, 2026
1bd5d17
fix(scripts): fix release-gate test fixture tarball on GNU tar
tobyhede Aug 21, 2026
cd876c3
fix(scripts): fix second release-gate fake-registry tar fixture on GN…
tobyhede Aug 21, 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
  •  
  •  
  •  
34 changes: 34 additions & 0 deletions .changeset/cli-install-sql-digest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
'stash': patch
---

Verify the EQL install SQL against its release digest before running it.

`stash eql install` reads the EQL v3 bundle from the resolved
`@cipherstash/eql` in your `node_modules` and executes it against your
database. That read was a bare `readFileSync` — nothing checked that the bytes
on disk were the bundle the resolved release actually ships. A corrupt,
partially-updated, or tampered package installed silently: the database ended
up carrying SQL the version it reports does not define, and the CLI printed
"EQL extensions installed."

The CLI now hashes the bundle and compares it to `installSqlSha256` from the
release manifest that ships alongside it, and **refuses** on a mismatch. The
error names the expected digest, the actual digest, the resolved file path and
the EQL version, so the remedy is visible rather than inferred. Verification
happens before any database connection is opened, so a refusal means nothing
was attempted — not that something was rolled back.

The check covers all three paths that read the bundle: `stash eql install`,
the SQL embedded by `stash eql migration --drizzle` / `--supabase`, and the
expected-surface baseline `stash eql verify` compares your database against.
`@cipherstash/stack-prisma` has verified against this same digest since its v3
migrations landed; this brings the CLI in line.

No healthy install is affected — the SQL and its manifest are produced by the
same build of `@cipherstash/eql`, so a mismatch only ever means a broken
dependency tree.

`skills/stash-cli` documents the new pre-flight alongside the existing
post-install surface check, so an agent reading it does not report a digest
refusal as a failed install.
96 changes: 96 additions & 0 deletions .changeset/eql-3-0-5-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
'@cipherstash/stack-prisma': minor
---

Move the bundled EQL v3 migrations to **eql-3.0.5**, which renames the SQL
function `eql_v3.ste_vec_contains` to `eql_v3.jsonb_document_contains`.

**The blast radius is narrower than a renamed public function suggests.** The
`@>` / `<@` operators on `public.eql_v3_json_search` behave exactly as before,
and so do the two function-form entry points that exist for platforms without
operator support — `eql_v3.jsonb_contains(jsonb, jsonb)` and
`eql_v3.jsonb_contained_by(jsonb, jsonb)` are byte-identical to 3.0.4. Those
are what a PostgREST caller invokes, so PostgREST callers on the documented
surface are **not** affected. The renamed function is the typed implementation
those operators dispatch into.

**And the old name still works.** eql-3.0.5 ships `eql_v3.ste_vec_contains` as
a deprecated delegating alias for both overloads, so hand-written SQL naming it
— an application query, a view, an RLS policy, or a per-function
`GRANT EXECUTE ON FUNCTION eql_v3.ste_vec_contains(…)` — keeps resolving. The
typed overload stays inlinable, so a function-form query through the alias
still matches the same functional GIN index. Migrate to
`jsonb_document_contains` when convenient; nothing forces it at upgrade time.

**Separately — and true of every EQL upgrade, not just this one:** the install
bundle opens with `DROP SCHEMA IF EXISTS eql_v3 CASCADE`, so applying it drops
every object in `eql_v3` / `eql_v3_internal` and everything that depended on
them. **Encrypted data and column types are not affected** — the storage
domains are `public.eql_v3_*`, deliberately outside both dropped schemas, and
their CHECK functions are re-created rather than dropped. What does not survive
is everything else pointing into the schema, which is two actions, neither of
them to do with the rename:

1. **Re-run your grant script.** Every grant on every `eql_v3` /
`eql_v3_internal` object is gone. The schema-wide form EQL documents —
`GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO app_role` — picks up
both the new name and the alias on its own.
2. **Recreate your functional indexes, then `ANALYZE`.** Indexes over
`eql_v3.eq_term(…)` / `ord_term` / `match_term` / `to_ste_vec_query(…)`
depend on the dropped schema and go with it. Nothing errors afterwards:
encrypted predicates keep working and silently fall back to sequential
scans. A migration runner will not redo an already-applied migration, so
this has to be a *new* one. The `stash-indexing` skill documents the
mechanism ("These indexes do not survive an EQL reinstall or upgrade") and
the `EXPLAIN` check that confirms recovery; capturing and restoring them
automatically is tracked in
[cipherstash/stack#918](https://github.com/cipherstash/stack/issues/918).

Any RLS policy, view, or constraint that calls an `eql_v3` function is dropped
by the same CASCADE and needs recreating too. **The rename itself needs no
action — the alias makes it non-breaking.**

Two artefacts carry the new bundle:

- A new upgrade edge, `20260814T0000_upgrade_eql_v3_3_0_5`, carrying the
invariant `cipherstash:upgrade-eql-v3-bundle-3.0.5-v1`. Databases already
running an earlier bundle re-install through this edge on the next
`prisma-next migration plan` followed by `prisma-next migrate`, exactly as
they did for 3.0.2 and 3.0.4. **`migrate` alone is not enough** — the seed
phase that copies a new migration package into your repo runs only from
`migration plan`, so without it the 3.0.5 directory never reaches disk and
`migrate` is a silent no-op that leaves the database on the older bundle.
- The baseline install migration `20260601T0100_install_eql_v3_bundle`, whose
baked bundle moves to 3.0.5 and which gains a fourth no-SQL carrier op for
the new invariant. Fresh databases therefore land on 3.0.5 from the single
all-additive genesis edge, keeping `db init` (additive-only policy) working.

**Action required.** The baseline's bytes — and so its `migrationHash` — have
changed. If your project already has a `migrations/cipherstash/` directory
generated against `@cipherstash/stack-prisma@1.0.0` or `@1.1.0`, delete that
directory and re-run `prisma-next migration plan` (or `migrate`); the 1.1.0
Prisma Next 0.17 upgrade re-anchored the same artefacts, so a space vendored
against either release is stale here. The seed phase regenerates
it byte-identical to the shipped artefacts. Your database keeps its markers, so
already-applied invariants are not re-run — the only new work is the 3.0.5
upgrade edge.

If you skip the delete, nothing warns you: a vendored baseline is stale but
internally intact, so it passes every integrity check. On an existing database
the upgrade still applies correctly; on a **fresh** one, `db init` refuses with
`Operation cipherstash.upgrade-eql-v3-bundle-3.0.5 has class "data" which is
not allowed by policy.` — an error that names neither the directory nor the
remedy. See "Upgrading from 1.0.0" in the package README.

**Why the baseline was re-emitted rather than left frozen.** These artefacts are
content-addressed and normally append-only: an EQL bump ships as a new upgrade
directory and published directories are never rewritten. That rule cannot be
followed here without a second `from: null` genesis edge, because no upgrade
edge can ever be walked by `db init` — every upgrade edge is a self-edge, and
the integrity checker requires a self-edge to carry a `data`-class op, which
`db init`'s additive-only policy refuses. A fresh database must therefore
collect every head-ref invariant from the genesis edge it walks. The
append-only alternative would duplicate the full ~2.6 MB bundle into a new
genesis edge on every EQL release, permanently; re-emitting was taken instead
while 1.0.0 was two weeks old with negligible adoption, and is a decision to be
re-argued on adoption numbers rather than repeated by default.
41 changes: 41 additions & 0 deletions .changeset/eql-exact-runtime-pin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
'@cipherstash/stack-prisma': patch
'stash': patch
---

Pin the packed `@cipherstash/eql` dependency to an exact version, closing a
route by which an installed EQL bundle could drift ahead of the code built
against it.

Both packages declared `"@cipherstash/eql": "workspace:^"` under
`dependencies`. In this workspace that resolves in-tree either way, so nothing
in development or CI could see a difference — but the two specifiers do not
pack the same. pnpm rewrites the protocol when it builds the tarball a customer
actually installs:

"workspace:^" packs as "^3.0.5"
"workspace:*" packs as "3.0.5"

The caret is the problem. `@cipherstash/eql` is still published from
`cipherstash/encrypt-query-language` until the publisher repoint, so a 3.0.x can
reach npm without passing through this repository at all — and `^3.0.5` accepts
it. A customer installing `stash` or `@cipherstash/stack-prisma` would then get
SQL that STORES and queries encrypted payloads at one version, while
`@cipherstash/stack`'s v3 domain types (which EMIT those payloads) and
`stack-prisma`'s baked migrations stayed frozen at the version this repo built
and tested against. The two halves of EQL are released in lockstep precisely
because that skew does not fail at install or in CI — it fails in a database.

`workspace:*` is the only form that closes it. A literal `"3.0.5"` would be an
exact pin too, but it is a registry pin: `pnpm run lint:eql-pins` rejects it,
because resolving EQL from a registry rather than from this repo is the same
drift one layer up.

No API, behaviour or SQL changes. What changes is the dependency range in the
published tarballs, and only in the narrowing direction — the version resolved
today is the version that was already being resolved. Nothing needs to be done
on upgrade.

`@cipherstash/stack` declares the same dependency under `devDependencies` and
is deliberately left alone: pnpm rewrites that range too, but no consumer of the
package ever resolves it.
16 changes: 16 additions & 0 deletions .changeset/prisma-skill-upgrade-replan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
'stash': patch
---

`skills/stash-prisma` now documents the re-plan step that follows an
`@cipherstash/stack-prisma` upgrade: `rm -rf migrations/cipherstash && npx
prisma-next migration plan`, why only `migration plan` vendors new migration
packages, and the exact `db init` refusal a stale vendored directory produces on
a fresh database (`Operation cipherstash.upgrade-eql-v3-bundle-3.0.5 has class
"data" which is not allowed by policy.`).

The package README already carried this; the skill did not — and the skill is
what ships inside the `stash` tarball and gets copied into a user's
`.claude/skills/`, so an agent driving the upgrade hit the refusal with no route
out of it. `packages/stack-prisma/test/v3/stale-vendored-space.test.ts` now pins
both files to the planner's real message so they cannot drift apart again.
35 changes: 35 additions & 0 deletions .changeset/protect-ffi-eql-bindings-in-tree.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
'@cipherstash/protect-ffi': patch
---

Compile `eql-bindings` from this repository rather than from crates.io.

The native binding pinned `eql-bindings = "=3.0.2"` from the registry. It now
resolves by path from `packages/eql/crates/eql-bindings`, which ships at 3.0.5
alongside the `@cipherstash/eql` SQL bundle.

**No behaviour change.** `eql-bindings` is the Rust half of EQL — it EMITS the
encrypted payloads that the SQL half STORES and queries — and its Rust source is
byte-identical across 3.0.2, 3.0.4 and 3.0.5 (`src/`, `bindings/` and `schema/`
compared directly). What 3.0.3 through 3.0.5 changed was SQL, carried on the
shared lockstep version number. So the payloads this binding produces are the
same bytes before and after; what moves is the version stamped on the crate
compiled into `index.node`, from 3.0.2 to 3.0.5.

**Why it is worth a release anyway.** A registry pin let the two halves of EQL
drift apart silently. Nothing asserted they agreed: a mismatched pair compiles,
passes every suite, and fails in a database — because the failure is a payload
the installed SQL cannot read, which no unit test holds both sides of. Resolving
from the tree makes the skew unrepresentable: the emitter and the SQL are now
the same commit, and `pnpm run lint:eql-pins` fails any change that reintroduces
a registry pin on either.

The flip was taken while it was a no-op deliberately. Waiting for the first
release where the two halves genuinely diverge would have turned a provenance
change into a behaviour change that had to be argued under credentialed test.

Verified without credentials: `cargo build -p protect-ffi` clean, the crate test
suite green (310 passed) with `cargo fmt --check` clean, and a
`wasm32-unknown-unknown` build clean — the last of those being the target where a
cross-workspace path dependency would break first, since the EQL workspace never
otherwise builds for wasm32.
37 changes: 37 additions & 0 deletions .changeset/skills-eql-source-and-index-cascade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
'stash': patch
---

Correct two things the bundled agent skills were telling customers wrongly
about EQL.

**`skills/stash-postgres` pointed at the wrong repository.** EQL's source now
lives in `cipherstash/stack` under `packages/eql/`, and that is where operator
gaps and domain-level bugs are filed; only *publishing* still happens from
`cipherstash/encrypt-query-language`, which the skill continues to say. The
skill also cited "the EQL skill" as a source of truth that "ships from
`encrypt-query-language` alongside the bundle" — no such skill ships from
either repository, so the reference is gone and the remaining three sources
(the generated types, the install SQL, and `SELECT eql_v3.version()`) are
renumbered.

**And it claimed the CLI pins an exact `@cipherstash/eql` version, "so a
database is only ever on one bundle."** Neither half holds: the CLI depends on
the workspace package rather than a pinned literal, and a database is on
whatever bundle was last applied to it — the Prisma Next adapter installs and
upgrades the bundle through its own migrations without involving the CLI at
all. Replaced with the guarantee that does hold: one `stash` release carries
one resolved bundle, and the database is the authority on which bundle it has.

**`skills/stash-prisma` hands out the functional-index recipe without saying an
EQL upgrade destroys it.** Installing a bundle begins with `DROP SCHEMA IF
EXISTS eql_v3 CASCADE`, which cascade-drops every index over an `eql_v3.*`
extractor — the PSL expression indexes Prisma Next 0.17 introduced and any
`rawSql` index DDL alike; queries keep working and silently sequential-scan.
Because an applied migration is never replayed, recovery is a NEW one: a PSL
expression index has to change its `name:` (the physical name carries a content
hash of the expression, so re-declaring the same one plans no work), and a
`rawSql` recovery op needs a new `id`. Said where the recipe is given, pointing
at `stash-indexing` for the mechanism and at
[cipherstash/stack#918](https://github.com/cipherstash/stack/issues/918) for
capturing and restoring them automatically.
16 changes: 16 additions & 0 deletions .changeset/stack-prisma-upgrade-from-1-0-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
'@cipherstash/stack-prisma': patch
---

Document the 1.0.0 → 3.0.5 upgrade in the package README: why
`migrations/cipherstash/` must be deleted and regenerated, what each Prisma Next
command does if it is not, and the exact `db init` refusal
(`Operation cipherstash.upgrade-eql-v3-bundle-3.0.5 has class "data" which is
not allowed by policy.`) that a stale vendored directory produces on a fresh
database.

The behaviour worth knowing regardless of version: only `prisma-next migration
plan` copies new migration packages into your repo. Running `migrate` or
`db init` after upgrading this package without planning first silently leaves
the database on the older EQL bundle — a stale vendored directory is internally
intact, so it passes every integrity check and nothing reports a problem.
11 changes: 11 additions & 0 deletions .changeset/supabase-skill-eql-305.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'stash': patch
---

Update the bundled agent skills for eql-3.0.5. `skills/stash-supabase`
re-states the PostgREST query-domain limitations against 3.0.5 (unchanged in
substance — the typed `eql_v3.query_*` operand requirement still stands), and
`skills/stash-postgres` drops one of the two places it claimed the CLI pins
`@cipherstash/eql` to an exact version — a claim that stopped being true when
EQL moved in-tree. The second copy goes in the same release, with the rest of
that skill's EQL source and issue pointers.
6 changes: 6 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@
self-hosted-runner:
labels:
- blacksmith-4vcpu-ubuntu-2404
# Every job in the imported EQL suite. Sixteen of them, and the size is
# deliberate upstream: the sharded SQLx matrix compiles the full Rust
# dependency tree, so the runner is chosen for the compile rather than for
# the tests. Kept as its own label rather than renamed to the 4vcpu one —
# rehoming those jobs is a cost decision, not a lint fix.
- blacksmith-16vcpu-ubuntu-2204
Loading
Loading