Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
648 commits
Select commit Hold shift + click to select a range
5742873
docs: correct inaccuracies in scalar encrypted-domain reference
tobyhede Jun 30, 2026
7599bdb
docs: hyphenate one-sentence compound modifier in @brief description
tobyhede Jun 30, 2026
e743689
Merge pull request #330 from cipherstash/docs/dev-cleanup
tobyhede Jun 30, 2026
af5a5fd
chore(codegen): commit generated SQL surface in place; unify drift ga…
tobyhede Jun 30, 2026
73d5539
chore: address CodeRabbit review nits on drift gating
tobyhede Jun 30, 2026
a1caa90
docs(codegen): note codegen:parity regenerates SQL in place
tobyhede Jun 30, 2026
b185890
Merge pull request #332 from cipherstash/chore/commit-sql-surface
tobyhede Jun 30, 2026
f7cfaad
refactor(eql-domains): rename timestamptz catalog/fixture identifiers…
tobyhede Jul 1, 2026
2337ad1
test(eql-domains): rename timestamptz unit tests to timestamp
tobyhede Jul 1, 2026
2cb50f3
test(eql-codegen): rename timestamptz_is_ordered to timestamp_is_ordered
tobyhede Jul 1, 2026
fd265bf
chore(codegen): regenerate eql_v3 timestamp surface (rename from time…
tobyhede Jul 1, 2026
b96137c
test(sqlx): rename timestamptz harness identifiers to timestamp
tobyhede Jul 1, 2026
a7628e8
test(sqlx): rename timestamptz integration-test binaries to timestamp
tobyhede Jul 1, 2026
39a44bd
docs: rename eql_v3 timestamptz to timestamp
tobyhede Jul 1, 2026
5b0f4f6
style: rustfmt the renamed timestamp test assertions
tobyhede Jul 1, 2026
79882c3
test(sqlx): type nulls-ordering plaintext column by PLAINTEXT_SQL_TYPE
tobyhede Jul 1, 2026
1435c29
test(sqlx): type all matrix plaintext temp columns by PLAINTEXT_SQL_TYPE
tobyhede Jul 1, 2026
7f48bbd
ci(release): publish eql-bindings to crates.io via release-plz
freshtonic Jul 1, 2026
79d1b9d
docs(sqlx): explain PG_TYPE vs PLAINTEXT_SQL_TYPE and the timestamp o…
tobyhede Jul 1, 2026
70117a8
ci(release): align release-plz config with cipherstash-suite
freshtonic Jul 1, 2026
7274867
Merge pull request #333 from cipherstash/rename/timestamptz-to-timestamp
tobyhede Jul 1, 2026
30b070e
Merge pull request #334 from cipherstash/james/cip-3224-publish-eql-b…
freshtonic Jul 1, 2026
c6f5304
feat(eql-domains): add Shape discriminant and scalar-family helpers
tobyhede Jul 2, 2026
af6583f
feat(eql-domains): define JSONB DomainFamily and pin shape/terms inva…
tobyhede Jul 2, 2026
0601558
feat(eql-bindings): add OreCllw/Selector newtypes and SteVec mod doc …
tobyhede Jul 2, 2026
05f4296
feat(eql-codegen): skip non-scalar families in bindings gen; Shape-br…
tobyhede Jul 2, 2026
4aa4c44
feat(eql-codegen): skip non-scalar (SteVec) families in SQL generatio…
tobyhede Jul 2, 2026
5d1608d
feat: make binding gates + catalog dump/list-types Shape-aware (scala…
tobyhede Jul 2, 2026
1b19355
feat: filter scalar-matrix/fixture/catalog-unit consumers to scalar f…
tobyhede Jul 2, 2026
b2a7103
feat: add jsonb (SteVec) to CATALOG with hand-written bindings + gene…
tobyhede Jul 2, 2026
f2bbe70
test(eql-bindings): SteVec conformance — envelope/neither-term/strict…
tobyhede Jul 2, 2026
5917e6d
test(sqlx): parse real generated SteVec rows into eql-bindings (real …
tobyhede Jul 2, 2026
c67d5e8
docs(changelog): add jsonb (SteVec) bindings entry
tobyhede Jul 2, 2026
ff2a05a
fix(jsonb): align entry/query domain naming, fix TS optionality, hard…
tobyhede Jul 2, 2026
61cc744
docs(changelog): fill in jsonb bindings PR number (#336)
tobyhede Jul 2, 2026
7c15743
test(jsonb): close PR #336 review coverage/maintainability gaps
tobyhede Jul 2, 2026
a7413bb
fix(ci): update jsonb smoke/splinter to renamed jsonb_query/jsonb_ent…
tobyhede Jul 2, 2026
b0dd27b
fix(eql-bindings): model the k form discriminator on SteVecDocument
tobyhede Jul 2, 2026
fb011d3
fix(jsonb): finish ste_vec_entry_* → jsonb_entry_* aggregate sfunc re…
tobyhede Jul 2, 2026
709b647
docs(jsonb): close parity-audit gaps between jsonb and scalar domain …
tobyhede Jul 2, 2026
4a1bf74
chore(tests): cap postgres container log growth in docker-compose
tobyhede Jul 2, 2026
d4f7830
test(jsonb): add has_ore_cllw branch coverage; fix pre-existing CHANG…
tobyhede Jul 2, 2026
af9e531
refactor(eql-domains): collapse Shape's redundant SteVec variants; dr…
tobyhede Jul 2, 2026
31b9a8e
style: cargo fmt tests/sqlx/tests/v3_jsonb_tests.rs
tobyhede Jul 2, 2026
2e64ca7
Merge pull request #336 from cipherstash/jsonb-domain-bindings
tobyhede Jul 2, 2026
a99f51a
feat(v3): create eql_v3_internal schema (+ uninstall/reset drops)
tobyhede Jul 2, 2026
54a639c
feat(codegen): emit scalar wrappers/blockers/state fns + index-term c…
tobyhede Jul 2, 2026
2261174
refactor(v3): move SEM index-term types + support into eql_v3_internal
tobyhede Jul 2, 2026
c8c21ef
refactor(v3): move shared blocker helpers + jsonb internals into eql_…
tobyhede Jul 2, 2026
16cfde5
docs(v3): document explicit runtime USAGE grant on eql_v3_internal (o…
tobyhede Jul 2, 2026
c6aa0dd
fix(v3): pin search_path on eql_v3_internal functions too
tobyhede Jul 2, 2026
18dacfb
test(v3): gate + allowlist eql_v3_internal in splinter
tobyhede Jul 2, 2026
67a9804
fix(v3): widen eql_v3.lints() coverage to eql_v3_internal
tobyhede Jul 2, 2026
2d60a82
docs(bindings): name eql_v3_internal SEM constructors in term prose
tobyhede Jul 2, 2026
d336e9b
test(v3): requalify SQLx test suite for eql_v3_internal
tobyhede Jul 2, 2026
9ee0e92
docs: record eql_v3_internal schema split (changelog, upgrade note, a…
tobyhede Jul 2, 2026
e251c0a
style(v3): cargo fmt after eql_v3_internal requalification
tobyhede Jul 2, 2026
0d3ca95
fix(v3): address post-review findings on eql_v3_internal split
tobyhede Jul 2, 2026
db90296
test(v3): gate the eql_v3 / eql_v3_internal schema boundary
tobyhede Jul 2, 2026
b3774bd
style(v3): cargo fmt v3_public_surface_tests
tobyhede Jul 2, 2026
6370308
fix(v3): schema-qualify SEM operator DDL to eql_v3_internal
tobyhede Jul 2, 2026
ef86da3
fix(v3): create SEM comparison operators in public, not eql_v3_internal
tobyhede Jul 2, 2026
0425d3c
chore(bindings): regenerate jsonb JSON schemas for eql_v3_internal SE…
tobyhede Jul 2, 2026
292d289
feat(v3): expose public function equivalents for every operator; scop…
tobyhede Jul 2, 2026
729d09c
feat(eql): add CLLW-OPE (op) ordering term across ordered scalar fami…
freshtonic Jul 2, 2026
6d6d0ce
feat(eql)!: bump the eql_v3 envelope version to v: 3
freshtonic Jul 2, 2026
9fa810d
test(sqlx): wire per-type <T>_ord_ope smoke modules into catalog-cove…
freshtonic Jul 2, 2026
9291ce9
fix(ope): make eql_v3.ope_cllw a bytea domain so functional indexes e…
freshtonic Jul 2, 2026
cbc309c
docs(changelog): fill in ord_ope and envelope-bump PR number (#340)
freshtonic Jul 2, 2026
6309622
feat(bindings): thread term_json_keys and parse_value through DomainType
freshtonic Jul 2, 2026
a959395
feat(bindings): add from_v2 — EQL v2.3 → v3 wire payload conversion
freshtonic Jul 2, 2026
70b8726
test(schema): validate from_v2 outputs against the published v3 schemas
freshtonic Jul 2, 2026
7087429
docs(changelog): add the eql_bindings::from_v2 converter entry
freshtonic Jul 2, 2026
c5254e5
refactor(bindings): address from_v2 review feedback
freshtonic Jul 2, 2026
71a9e5a
docs(changelog): fill in from_v2 converter PR number (#341)
freshtonic Jul 2, 2026
52e1b4e
test(v3): correct privilege tests + permissions docs to real grant model
tobyhede Jul 2, 2026
d41a5df
test(sqlx): add the from_v2 fixture conversion seam (v3_convert)
freshtonic Jul 2, 2026
d67a9a0
test(sqlx): route encrypt_store output through the v3 conversion seam
freshtonic Jul 2, 2026
b836bec
test(sqlx): route the proptest-e2e call sites through the encrypt_sto…
freshtonic Jul 2, 2026
67395a3
test(sqlx): assert the v3 envelope across the fixture consumers
freshtonic Jul 2, 2026
ec40d81
fix(test): point fn-oracle harness at public eql_v3 wrappers + fmt
tobyhede Jul 2, 2026
c59ef98
Merge pull request #337 from cipherstash/eql-v3-internal-schema
tobyhede Jul 3, 2026
654a9ec
fix(test): send a v:3 envelope in the clean-install JSON smoke insert
freshtonic Jul 3, 2026
c28e9f8
test(sqlx): add the op term to PLACEHOLDER_PAYLOAD for _ord_ope domains
freshtonic Jul 3, 2026
ce092b6
Merge pull request #343 from cipherstash/feat/sqlx-fixtures-via-from-v2
freshtonic Jul 3, 2026
04fd170
Merge origin/eql_v3 (eql_v3_internal schema split) into feat/eql-v3-o…
freshtonic Jul 3, 2026
76b470c
fix(test): send a v:3 envelope in the clean-install JSON smoke insert
freshtonic Jul 3, 2026
9511f76
test(sqlx): add the op term to PLACEHOLDER_PAYLOAD for _ord_ope domains
freshtonic Jul 3, 2026
045e870
test(v3): extend the public-surface golden with the ord_ope objects
freshtonic Jul 3, 2026
3668089
test(codegen): expect eql_v3_internal.ope_cllw after the schema split
freshtonic Jul 3, 2026
1d717d1
Merge remote-tracking branch 'origin/feat/eql-bindings-from-v2' into …
freshtonic Jul 3, 2026
49dd40b
test(sqlx): regenerate the stale v3-jsonb inventory snapshot
freshtonic Jul 3, 2026
be24017
fix(ci): stop the inventory step swallowing failing task exit codes
freshtonic Jul 3, 2026
76f259f
test(sqlx): trip loudly when the client starts emitting the op term
freshtonic Jul 3, 2026
55cfecc
docs: sweep the scalar-domain reference for ope, v:3, and the schema …
freshtonic Jul 3, 2026
08d2022
Merge pull request #340 from cipherstash/feat/eql-v3-ope-and-v3-envelope
freshtonic Jul 3, 2026
47f3db9
Merge pull request #346 from cipherstash/james/cip-3363-v3-jsonb-inve…
freshtonic Jul 3, 2026
f83ecdd
chore(bindings): bump eql-bindings to 0.2.0
freshtonic Jul 3, 2026
7dcb3ad
Merge pull request #348 from cipherstash/james/cip-3346-bump-eql-bind…
freshtonic Jul 3, 2026
e73c1d1
refactor(catalog): rename scalar families to SQL-standard names
tobyhede Jul 3, 2026
a8dcba6
chore(codegen): regenerate scalar SQL + bindings under SQL-standard n…
tobyhede Jul 3, 2026
35d93d8
test(v3): rename SQLx harness scalar tokens + literals to SQL-standar…
tobyhede Jul 3, 2026
30c3606
test(v3): regenerate matrix snapshots + fixture wiring for SQL-standa…
tobyhede Jul 3, 2026
92847e7
fix(v3): complete rename in eql-codegen + fix double oracle column type
tobyhede Jul 3, 2026
ab7f818
docs(v3): use SQL-standard scalar domain names throughout
tobyhede Jul 3, 2026
ea0bde9
test(v3): address code-review findings on scalar rename
tobyhede Jul 3, 2026
18ad4f1
test(v3): reconcile ope smoke modules + from_v2 consumers with SQL-st…
tobyhede Jul 3, 2026
52892ae
Merge pull request #347 from cipherstash/eql-v3-internal-schema
tobyhede Jul 3, 2026
f977d3a
feat(bindings): catalog-generated DomainPayload enum + typed from_v2
freshtonic Jul 3, 2026
6141670
docs(changelog): add the DomainPayload + from_v2_typed entry (#349)
freshtonic Jul 3, 2026
cd81aed
chore(bindings): bump eql-bindings to 0.3.0
freshtonic Jul 3, 2026
a25ca05
Merge pull request #349 from cipherstash/james/cip-3372-domain-payloa…
freshtonic Jul 3, 2026
69eef7b
feat(bindings): typed query payloads — QueryPayload + from_v2_query_t…
freshtonic Jul 3, 2026
384f195
docs(changelog): fill the PR number (#350) in the Unreleased entry
freshtonic Jul 3, 2026
19207a2
docs: link only public items from the from_v2_query_typed rustdoc (pr…
freshtonic Jul 3, 2026
c28e083
Merge pull request #350 from cipherstash/james/cip-3372-typed-query-p…
freshtonic Jul 3, 2026
0dadea7
docs(fixtures): sweep FIXTURE_SCHEMA.md for the int4→integer rename a…
freshtonic Jul 3, 2026
c6964f5
chore(bindings): bump eql-bindings to 0.4.1
freshtonic Jul 3, 2026
7682b72
Merge pull request #351 from cipherstash/docs/fixture-schema-rename-s…
freshtonic Jul 3, 2026
d7c4047
fix(bindings): silence the ts-rs skip_serializing_if parse warning
freshtonic Jul 3, 2026
9ff784d
chore(bindings): bump eql-bindings to 0.4.2
freshtonic Jul 3, 2026
07f05b3
chore(sqlx): bump cipherstash-client to 0.38.1 (CIP-3348)
freshtonic Jul 3, 2026
9fb71e9
test(sqlx): route the CLLW-OPE op term through the fixture pipeline (…
freshtonic Jul 3, 2026
791622b
test(sqlx): real-ciphertext _ord_ope coverage with a CLLW-OPE determi…
freshtonic Jul 3, 2026
3492d64
test(sqlx): pin the per-test ope inventory (snapshots/ope_tests.txt)
freshtonic Jul 3, 2026
b697637
style(sqlx): rustfmt the CIP-3348 ope coverage files
freshtonic Jul 3, 2026
0129bb1
docs(claude): point to scripted release paths (release:preview + alph…
tobyhede Jul 4, 2026
d453959
fix(v3): convert ore_block_256 opclass-path helpers to plpgsql
coderdan Jul 4, 2026
1d5506d
test: update inlinability guards for the plpgsql opclass-path helpers
coderdan Jul 4, 2026
d8b7e6e
docs(release): lockstep eql-bindings guidance + release-tasks design …
tobyhede Jul 4, 2026
60ba7e9
fix(v3): inline the jsonb_entry CHECK; make the jsonb_query validator…
coderdan Jul 4, 2026
ad93e29
docs: mark the CHECK implementation notes @internal
coderdan Jul 4, 2026
03a3eba
docs(release): harden release-tasks spec after design review
tobyhede Jul 4, 2026
889efbd
docs(release): rework release-tasks spec to CI-native architecture
tobyhede Jul 4, 2026
cd28c82
Merge pull request #357 from cipherstash/dan/cip-3380-v3-opclass-path…
coderdan Jul 4, 2026
1351ef9
Merge remote-tracking branch 'origin/eql_v3' into dan/cip-3381-v3-jso…
coderdan Jul 4, 2026
f697001
docs(release): finalize CI-native release design after 2nd review
tobyhede Jul 4, 2026
d1d7412
Merge pull request #358 from cipherstash/dan/cip-3381-v3-jsonb_entry-…
coderdan Jul 4, 2026
3465021
docs(release): require docs bundle on alphas + add implementation plan
tobyhede Jul 4, 2026
55f42ad
docs(release): harden release plan + spec after 2nd plan review
tobyhede Jul 4, 2026
cf21302
docs: refresh meta files for v3 — rebrand Protect.js → CipherStash St…
coderdan Jul 4, 2026
0b6dbef
Merge pull request #361 from cipherstash/docs/v3-meta-refresh
coderdan Jul 4, 2026
2ee546f
Merge pull request #352 from cipherstash/james/cip-3348-real-cipherte…
freshtonic Jul 5, 2026
098a9c4
ci: refactor alpha release helpers
tobyhede Jul 5, 2026
6f731ea
ci(release): wire alpha release tasks to reusable builds
tobyhede Jul 5, 2026
b3f4ea8
ci: pin alpha release from validated sha
tobyhede Jul 5, 2026
45ff92e
fix release alpha review findings
tobyhede Jul 5, 2026
0cec133
test: preserve public domain columns on v3 uninstall
tobyhede Jul 5, 2026
4ff4c1e
test: require v3 user domains in public
tobyhede Jul 5, 2026
76c2bf7
fix: generate v3 scalar domains in public
tobyhede Jul 5, 2026
872a0a2
fix(bindings): report v3 user domains in public
tobyhede Jul 5, 2026
2d3616c
fix: move v3 jsonb user domains to public
tobyhede Jul 5, 2026
62ca2d2
fix: complete public v3 domain migration
tobyhede Jul 5, 2026
ee2d531
fix: update sqlx test domain casts
tobyhede Jul 5, 2026
552a234
fix actionlint installer version argument
tobyhede Jul 5, 2026
4c56850
fix: include public domains in v3 lints
tobyhede Jul 5, 2026
f15e6f0
Merge pull request #363 from cipherstash/public-domain-types-data-safety
tobyhede Jul 5, 2026
0a1cfec
fix(release): address alpha review feedback
tobyhede Jul 6, 2026
f795d80
docs: sync v3 schema references to public domains
tobyhede Jul 6, 2026
33e4c49
docs(reference): sync reference docs to public/eql_v3/eql_v3_internal…
tobyhede Jul 6, 2026
b63db45
docs(reference): fix broken cross-doc anchor and list-schemas ordering
tobyhede Jul 6, 2026
1ddc23e
ci(release): verify alpha pin signatures
tobyhede Jul 6, 2026
55396ab
Merge pull request #359 from cipherstash/feat/release-tasks
tobyhede Jul 6, 2026
b1f824c
Merge pull request #367 from cipherstash/2026-07-06-doc-sync
tobyhede Jul 6, 2026
09297df
docs: emit a JSON API manifest alongside the Markdown reference
coderdan Jul 5, 2026
8bd430a
docs: include the encrypted domain/variant matrix in the manifest
coderdan Jul 5, 2026
d09852a
docs: source the domain matrix from the Rust catalog, not SQL parsing
coderdan Jul 6, 2026
85ed74d
docs: dump the jsonb domains + per-domain terms/extractors in the man…
coderdan Jul 6, 2026
f35b335
Merge pull request #364 from cipherstash/docs/eql-manifest-generator
coderdan Jul 6, 2026
ab7f84e
address review: fix jsonb schema in docs + hardcode ste_vec terms
coderdan Jul 6, 2026
f1b110d
style: rustfmt stevec_terms() struct literals
coderdan Jul 6, 2026
e00880a
fix(dump): scope SteVec terms to jsonb_entry only
coderdan Jul 6, 2026
6305a68
Merge pull request #368 from cipherstash/docs/eql-manifest-jsonb-terms
coderdan Jul 6, 2026
f3a8661
fix(docs): repair Doxygen SQL extraction — coverage gaps + private split
coderdan Jul 6, 2026
88fdd14
test(docs): cover internal-schema private detection; guard filter args
coderdan Jul 6, 2026
ecae854
Merge pull request #369 from cipherstash/docs/eql-manifest-coverage-p…
coderdan Jul 6, 2026
5f593ee
fix(docs): skip name-dropped CREATE FUNCTION mis-parses
coderdan Jul 6, 2026
d79b672
feat(eql-bindings): v3 scalar query-operand bindings (CIP-3432)
freshtonic Jul 7, 2026
9c62e8c
chore: gitignore .claude session dir
freshtonic Jul 7, 2026
2cdc89c
feat(eql v3 sql): generate public.<name>_query operand domains (CIP-3…
freshtonic Jul 7, 2026
080d752
feat(eql v3 sql): generate query operators binding storage↔query doma…
freshtonic Jul 7, 2026
4b56102
test(eql v3): fresh-encryption conformance for scalar query operands …
freshtonic Jul 7, 2026
b4bcdb6
docs(changelog): scalar query-operand surface (CIP-3432)
freshtonic Jul 7, 2026
b925e26
test(eql v3): add query operators/wrappers to the public surface gold…
freshtonic Jul 7, 2026
1fe7167
test(eql v3): cover every scalar query-operand domain in the matrix (…
freshtonic Jul 7, 2026
9a89fc9
style(eql-codegen): rustfmt the query render functions (CIP-3432)
freshtonic Jul 7, 2026
13e1a3d
test(eql v3): matrix planner_metadata counts the query operators (CIP…
freshtonic Jul 7, 2026
f677e9a
docs(eql v3): address review — query-twin blocker rationale + cast no…
freshtonic Jul 7, 2026
e517fab
Merge pull request #373 from cipherstash/james/cip-3432-eql-v3-query-…
freshtonic Jul 7, 2026
c8a93db
fix(v3): install SEM btree operator classes conditionally (Supabase /…
coderdan Jul 7, 2026
51fbf68
docs(changelog): link the conditional-opclass fix to #375
coderdan Jul 7, 2026
85c2178
feat(v3): COMMENT ON DOMAIN for every encrypted domain type
coderdan Jul 7, 2026
1d2c35d
docs(changelog): add entry for domain-type comments (#377)
coderdan Jul 7, 2026
00cec62
refactor(v3): make domain-type comments terse (one-line in type pickers)
coderdan Jul 7, 2026
fbf32b7
Merge pull request #377 from cipherstash/dan/v3-domain-comments
coderdan Jul 7, 2026
2fa8730
Merge pull request #375 from cipherstash/dan/v3-supabase-conditional-…
coderdan Jul 7, 2026
24bd6f4
feat(eql v3)!: query-operand domains renamed to the query_<name> pref…
freshtonic Jul 7, 2026
c6f5e01
test(eql v3): make the operator-equivalents structural scan non-vacuous
freshtonic Jul 7, 2026
39aee45
feat(eql v3)!: move query-operand domains into the eql_v3 schema (CIP…
freshtonic Jul 8, 2026
6a2ac33
Merge pull request #379 from cipherstash/james/cip-3442-query-domain-…
freshtonic Jul 8, 2026
457f3a7
feat(typescript): scaffold @cipherstash/eql package
tobyhede Jul 7, 2026
0ee038a
feat(typescript): generate npm package types and schemas
tobyhede Jul 7, 2026
35c2188
feat(release): bundle exact SQL in language bindings
tobyhede Jul 7, 2026
0b1599f
ci(release): publish TypeScript bindings to npm
tobyhede Jul 7, 2026
53e23dc
ci(release): resolve language binding targets
tobyhede Jul 7, 2026
a282a3a
ci(release): pin selected language binding packages
tobyhede Jul 7, 2026
2ee4439
ci(release): publish all language bindings from coordinator
tobyhede Jul 7, 2026
f589fbb
chore(release): add language-specific release wrappers
tobyhede Jul 7, 2026
c0dd84a
test(typescript): cover generated EQL package surface
tobyhede Jul 7, 2026
f2240bc
docs(release): describe language binding releases
tobyhede Jul 7, 2026
093202c
docs(release): align runbook, CLAUDE.md, and changelog with language-…
tobyhede Jul 7, 2026
e0a236b
ci(release): harden release-typescript workflow (injection, retry-saf…
tobyhede Jul 7, 2026
2ca76a8
feat(release): adopt changesets as the lockstep version source
tobyhede Jul 7, 2026
cd303db
ci(release): changesets release.yml (npm+SQL+docs); release-plz publi…
tobyhede Jul 7, 2026
221b638
ci(release): guard package workflow caches
tobyhede Jul 8, 2026
4190365
fix(release): publish npm prereleases with dist tag
tobyhede Jul 8, 2026
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
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
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
  •  
  •  
  •  
25 changes: 25 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Changesets

This directory drives EQL's release versioning. `@cipherstash/eql`'s version is
the **single source of truth** for the whole EQL release identity `V`: the SQL
surface (`eql-V`), the Rust crate (`eql-bindings-vV`), and the npm package
(`@cipherstash/eql@V`) are all released at `V`, derived from the version
changesets computes here (see `scripts/sync-lockstep-versions.mjs`).

Because SQL, the crate, and npm are generated from one catalog at one commit,
**every releasable change needs a changeset** — including SQL-only or crate-only
changes — so that `V` moves for all three.

Add one with `pnpm changeset`, or hand-write a `.changeset/<name>.md`:

```md
---
'@cipherstash/eql': minor # patch | minor | major
---

User-facing description of what changed and why.
```

Prereleases (alpha/beta/rc) use changesets pre-mode; see
`docs/development/releasing.md`. See
https://github.com/changesets/changesets for the tool docs.
11 changes: 11 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
5 changes: 5 additions & 0 deletions .changeset/eql-239-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**Per-domain `MIN` / `MAX` aggregates for the encrypted-domain family.** `eql_v3.min(eql_v3.<T>_ord)` / `eql_v3.max(eql_v3.<T>_ord)` (and the `_ord_ore` twin) are generated for every ord-capable scalar variant, giving type-safe extrema on domain-typed columns — comparison routes through the variant's `<` / `>` operator (ORE block term, no decryption). The aggregates are declared `PARALLEL = SAFE` with a combine function (the state function itself — min/max are associative), so PostgreSQL can use partial/parallel aggregation on large `GROUP BY` workloads. Why: the new domain types previously had no equivalent of the composite-type aggregates. The existing `eql_v2.min(eql_v2_encrypted)` / `eql_v2.max(eql_v2_encrypted)` aggregates are **retained** and continue to work on `eql_v2_encrypted` columns; the per-domain aggregates are additive and coexist with them. ([#239](https://github.com/cipherstash/encrypt-query-language/pull/239))
5 changes: 5 additions & 0 deletions .changeset/eql-239-3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': patch
---

**`=` / `<>` on `eql_v2.ore_block_u64_8_256` now declare a `COMMUTATOR`, so equality joins over the ORE term no longer raise.** Both operators set `COMMUTATOR` to themselves (equality and inequality are symmetric, so each is its own commutator). Why: without it the planner raised `could not find commutator for operator` the first time an `ore_block_u64_8_256` equality was used as a join / mergejoin qualifier (e.g. via the inlined `eql_v3.integer_ord_ore` equality wrappers, since the operators carry `MERGES`). This only enables previously-erroring join plans — it cannot change which rows match or their ordering. ([#239](https://github.com/cipherstash/encrypt-query-language/pull/239))
5 changes: 5 additions & 0 deletions .changeset/eql-239.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3` encrypted-domain schema, with the `integer` family as its first member.** Encrypted-domain type families now live in a new, additional `eql_v3` schema (the existing `eql_v2` schema is unchanged — it keeps the core types/operators and stays the documented public API). Four jsonb-backed domains for encrypted `integer` columns: `eql_v3.integer` (storage-only), `eql_v3.integer_eq` (`=` / `<>` via HMAC), and `eql_v3.integer_ord` / `eql_v3.integer_ord_ore` (also `<` `<=` `>` `>=` via ORE block terms). Supported comparisons resolve to inlinable wrappers; the native `jsonb` operator surface reachable through domain fallback is blocked (raises rather than silently mis-resolving). Each domain's `CHECK` requires the EQL envelope (`v`, `i`), the ciphertext (`c`), and the variant's index term(s), and pins the payload version (`VALUE->>'v' = '2'`, matching `eql_v2._encrypted_check_v`) — so a missing key or wrong-version payload is rejected on insert or cast rather than surfacing later at query time. Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors, not an operator class on the domain. The extractors return the searchable-encrypted-metadata index-term types `eql_v3.hmac_256` / `eql_v3.ore_block_256`, which `eql_v3` owns directly (see the self-contained `eql_v3` schema entry below). Why: a type-safe, per-capability encrypted integer column instead of the untyped `eql_v2_encrypted`, namespaced under its own schema. This is the reference scalar implementation for the generated domain family. ([#239](https://github.com/cipherstash/encrypt-query-language/pull/239), supersedes [#225](https://github.com/cipherstash/encrypt-query-language/pull/225))
5 changes: 5 additions & 0 deletions .changeset/eql-241-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': patch
---

**The `eql_v3` ORE block comparator now orders ciphertexts of any block count, not just 8.** `eql_v3.compare_ore_block_256_term` derives the block count `N` from the term length (`octet_length = 49·N + 16`) instead of hardcoding 8, so encrypted types whose native ORE width exceeds 8 blocks — `numeric` (14) and `timestamp` (12) — order, range-query, `ORDER BY`, and `MIN`/`MAX` correctly instead of silently mis-ordering. Malformed terms (length not `49·N + 16` for `N ≥ 1`) now raise instead of returning a bogus comparison. The self-contained `eql_v3` SEM type was renamed `eql_v3.ore_block_u64_8_256 → eql_v3.ore_block_256` to reflect that it is width-agnostic (the `eql_v2` type is unchanged). No effect on existing 8-block types (a no-op for `N = 8`). ([#241](https://github.com/cipherstash/encrypt-query-language/issues/241), [#276](https://github.com/cipherstash/encrypt-query-language/pull/276))
5 changes: 5 additions & 0 deletions .changeset/eql-241.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.numeric` encrypted-domain type family (ordered).** Four jsonb-backed domains for encrypted `numeric` / `decimal` columns — `eql_v3.numeric` (storage-only), `eql_v3.numeric_eq` (`=` / `<>` via HMAC), and `eql_v3.numeric_ord` / `eql_v3.numeric_ord_ore` (also `<` `<=` `>` `>=`, `MIN` / `MAX` via 14-block ORE) — generated from the `numeric` row in `eql-scalars::CATALOG`. cipherstash encrypts `Plaintext::Decimal` at native 14-block ORE width; ordering matches `rust_decimal::Decimal` ordering exactly (equivalent scales such as `1` and `1.0` collide, like Postgres `numeric`). Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors. Why: a type-safe, ordered encrypted decimal column, the first scalar to exercise an ORE term wider than 8 blocks. ([#241](https://github.com/cipherstash/encrypt-query-language/issues/241), [#276](https://github.com/cipherstash/encrypt-query-language/pull/276))
5 changes: 5 additions & 0 deletions .changeset/eql-243.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.smallint` encrypted-domain type family.** Four jsonb-backed domains for encrypted `smallint` columns — `eql_v3.smallint` (storage-only), `eql_v3.smallint_eq` (`=` / `<>` via HMAC), and `eql_v3.smallint_ord` / `eql_v3.smallint_ord_ore` (also `<` `<=` `>` `>=` via ORE block terms, with `MIN` / `MAX` aggregates) — generated from the `smallint` row in `eql-scalars::CATALOG` by the same materializer as the `eql_v3.integer` reference. Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors, not an operator class on the domain. Why: a type-safe, per-capability encrypted `smallint` column, proving the scalar generator generalizes beyond the `integer` reference. ([#243](https://github.com/cipherstash/encrypt-query-language/pull/243))
5 changes: 5 additions & 0 deletions .changeset/eql-252.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**Scalar encrypted-domain types are now defined in a Rust catalog, not TOML manifests; the Python codegen toolchain is removed.** Adding a scalar encrypted-domain type (`integer`, `bigint`, …) is now one row in `eql-scalars::CATALOG` (`crates/eql-scalars/src/lib.rs`) instead of authoring `tasks/codegen/types/<T>.toml`. `mise run build` regenerates the gitignored SQL surface via `cargo run -p eql-codegen` (Rust, std-only) rather than the Python generator. The catalog row's `Fixture` list is the single source of truth for that type's plaintext fixtures: the SQLx test matrix reads it directly as a compile-time-materialised const (`eql_scalars::INT4_VALUES` / `INT2_VALUES`, `ScalarType::FIXTURE_VALUES`), so there is no longer a generated, committed `tests/sqlx/src/fixtures/<T>_values.rs` — a Rust source of truth no longer round-trips through generated Rust. The shipped SQL is unchanged — `release/*.sql` is byte-identical across the cutover — so there is no change for callers installing EQL; this only affects contributors who extend the scalar domain families. The `python` mise tool, the `pytest`-based `test:codegen` (now `cargo test -p eql-scalars -p eql-codegen`), the per-type `mise run codegen:domain` tasks, and the per-type `tests/sqlx/snapshots/<T>_matrix_tests.txt` baselines (collapsed into one catalog-reconciled `tests/sqlx/snapshots/matrix_tests.txt`) are gone. Why: a single compiler-validated source of truth shared by the generator and the SQLx test harness, and one fewer toolchain in the build/test path — building and testing EQL no longer needs Python (Python remains only for the separate docs-markdown tooling). ([#252](https://github.com/cipherstash/encrypt-query-language/pull/252))
5 changes: 5 additions & 0 deletions .changeset/eql-253.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.bigint` encrypted-domain type family.** Four jsonb-backed domains for encrypted `bigint` columns — `eql_v3.bigint` (storage-only), `eql_v3.bigint_eq` (`=` / `<>` via HMAC), and `eql_v3.bigint_ord` / `eql_v3.bigint_ord_ore` (also `<` `<=` `>` `>=` via ORE block terms, with `MIN` / `MAX` aggregates) — generated from the `bigint` row in `eql-scalars::CATALOG` by the same materializer as the `eql_v3.integer` reference. Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors, not an operator class on the domain. Why: a type-safe, per-capability encrypted `bigint` column, extending the scalar generator across the full 64-bit integer width. ([#253](https://github.com/cipherstash/encrypt-query-language/pull/253))
5 changes: 5 additions & 0 deletions .changeset/eql-255.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**Self-contained `eql_v3` schema + standalone `release/cipherstash-encrypt.sql` installer.** The `eql_v3` encrypted-domain surface no longer depends on `eql_v2` at runtime: it now owns its own copies of the searchable-encrypted-metadata (SEM) index-term types — `eql_v3.hmac_256` and `eql_v3.ore_block_256` (with its btree operator class) — so the `eql_v3.eq_term` / `eql_v3.ord_term` extractors return `eql_v3` types and no `eql_v2.<symbol>` appears anywhere in the v3 SQL. The whole v3 surface relocated under a single `src/v3/` tree (`src/v3/sem/` for the hand-written SEM types, `src/v3/scalars/` for the generated domain families). A new build variant ships the `eql_v3` schema on its own as `release/cipherstash-encrypt.sql`, installable into a database with no `eql_v2` present; a CI gate greps that artifact and its dependency closure to keep it `eql_v2`-free. Why: a clean foundation for the per-scalar encrypted-domain model to stand alone, ahead of it replacing the `eql_v2_encrypted` composite column type. This is additive — a new schema and a new artifact — and leaves `eql_v2` byte-for-byte unchanged. ([#255](https://github.com/cipherstash/encrypt-query-language/pull/255))
5 changes: 5 additions & 0 deletions .changeset/eql-256.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.date` encrypted-domain type family.** Four jsonb-backed domains for encrypted `date` columns — `eql_v3.date` (storage-only), `eql_v3.date_eq` (`=` / `<>` via HMAC), and `eql_v3.date_ord` / `eql_v3.date_ord_ore` (also `<` `<=` `>` `>=` via ORE block terms, with `MIN` / `MAX` aggregates) — generated from the `date` row in `eql-scalars::CATALOG` by the same materializer as the `eql_v3.integer` reference. Plaintexts encrypt under the `date` cast and compare via the same ORE block terms as the integer scalars (ORE is plaintext-agnostic — dates order like integers). Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors, not an operator class on the domain. Why: the first **non-integer ordered** scalar encrypted-domain type — a type-safe, per-capability encrypted `date` column — proving the generator and SQLx test matrix generalize beyond fixed-width integers. ([#256](https://github.com/cipherstash/encrypt-query-language/pull/256))
5 changes: 5 additions & 0 deletions .changeset/eql-257.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.timestamp` encrypted-domain type family (ordered).** Four jsonb-backed domains for encrypted `timestamp` columns — `eql_v3.timestamp` (storage-only), `eql_v3.timestamp_eq` (`=` / `<>` via HMAC), and `eql_v3.timestamp_ord` / `eql_v3.timestamp_ord_ore` (also `<` `<=` `>` `>=`, `MIN` / `MAX` via 12-block ORE) — generated from the `timestamp` row in `eql-scalars::CATALOG` by the same materializer as the `eql_v3.date` family. Values are **UTC-normalized** (cipherstash has no timezone-preserving type): plaintexts encrypt under the `timestamp` cast, so the stored value is a UTC instant (Postgres `timestamp with time zone`) wearing the SQL-standard name `timestamp` to match the cipherstash cast / `ColumnType::Timestamp` / `Plaintext::Timestamp` convention. Ordering works because the `eql_v3` ORE block comparator now derives its block count from the ciphertext width (see the comparator entry below) instead of assuming 8. Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` extractors, not an operator class on the domain. ([#257](https://github.com/cipherstash/encrypt-query-language/pull/257))
5 changes: 5 additions & 0 deletions .changeset/eql-260.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.text` encrypted-domain family (`text`, `text_eq`, `text_match`, `text_ord`, `text_ord_ore`, `text_search`).** Adds equality (`=` / `<>` via HMAC), match (`@>` / `<@` via a new self-contained `eql_v3.bloom_filter` SEM index term), and ORE ordering (`<` `<=` `>` `>=`, `min` / `max`) for encrypted text, at parity with EQL v2 text — generated from the `text` row in `eql-scalars::CATALOG` by the same materializer as the `eql_v3.integer` reference. `text` is the first scalar to add a new index `Term` (`Bloom`) and the first non-integer, unbounded ordered kind (lexicographic pivots, hand-written `impl ScalarType`). The combined **`text_search`** domain carries all three capabilities in one type — `=` / `<>` via HMAC, `<` `<=` `>` `>=` / `min` / `max` via ORE, and `@>` / `<@` via bloom filter. Index via a functional index on the `eql_v3.eq_term` / `eql_v3.ord_term` / `eql_v3.match_term` extractors, not an operator class on the domain. Why: brings searchable encrypted text to the namespaced, `eql_v2`-free `eql_v3` surface. Match is exposed as bloom-filter containment on the `text_match` / `text_search` domains — deliberately *not* SQL `LIKE` (no wildcard/anchoring; probabilistic ngram containment) — and never backs equality. **Equality on the ordered text domains (`text_ord`, `text_ord_ore`) and on `text_search` always routes `=` / `<>` through `hm` (exact HMAC), never the ORE term — ORE is not exact-equality for text** (integer ordered domains keep exact ORE equality, which is lossless for them). ([#260](https://github.com/cipherstash/encrypt-query-language/pull/260))
5 changes: 5 additions & 0 deletions .changeset/eql-262.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': patch
---

**An empty ORE term (`ob: []`) is now rejected by the ORE-bearing `eql_v3` domains instead of silently corrupting ordered queries.** Encrypting the empty string `""` as ordered text produces an empty ORE term (`ob: []`) — the only value that does — and previously an `""` row silently dropped out of `ORDER BY`, was wrongly returned by `eql_v3.max`, and threw off range-query counts (the `eql_v3.ore_block_256` extractor collapsed `ob: []` to NULL index terms). The ORE-bearing domains (`_ord` / `_ord_ore`, and text `_search`) now carry a `CHECK` requiring `ob` to be a non-empty array, so casting or inserting an empty-`ob` payload into an ordered column fails loudly with a check violation (SQLSTATE `23514`) rather than producing an unorderable row. This affects only the empty string in an ordered column: every non-empty string and every fixed-width scalar (int / date / numeric / float) always produces a non-empty `ob`. Storage and equality are unaffected — `""` can still be encrypted into a storage-only (`eql_v3.text`) or equality (`eql_v3.text_eq`) column with a real ciphertext (`c`) and HMAC (`hm`). As defense-in-depth for any path that bypasses the domain (e.g. a comparator composite built directly), the comparator also orders a zero-term ORE composite before every non-empty value (empty sorts first); a genuine SQL `NULL` row is unchanged and keeps standard `NULLS FIRST` / `NULLS LAST` semantics (the extractor is `STRICT`). ([#262](https://github.com/cipherstash/encrypt-query-language/issues/262))
5 changes: 5 additions & 0 deletions .changeset/eql-267-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@cipherstash/eql': minor
---

**`eql_v3.min` / `eql_v3.max` aggregates over `eql_v3.jsonb_entry`.** SteVec document entries extracted at a selector (`doc -> 'sel'`) can now be aggregated like ordered scalars: `eql_v3.min(doc -> 'sel')` / `eql_v3.max(...)` return the entry with the smallest / largest ordered leaf. Ordering routes through the entry's `oc` (CLLW ORE) term via `eql_v3.ore_cllw` — the same comparator the entry `<` / `<=` / `>` / `>=` operators use, not the scalar Block-ORE `ord_term`. Only `oc`-carrying entries are orderable: an entry without an `oc` term (`eql_v3.ore_cllw` returns NULL) is non-orderable and is ignored by the aggregate — the same way the `eql_v3.ore_cllw` btree NULL-filters such rows — so a mix of `oc`-carrying and `oc`-less entries yields the extremum of the orderable subset rather than a corrupted result. Declared `PARALLEL = SAFE` with a combine function (the state function itself), so partial / parallel aggregation is available on large `GROUP BY` workloads. Why: brings encrypted-JSONB entry ordering to parity with the scalar encrypted-domain families' `MIN` / `MAX`, and lets the shared scalar behaviour matrix cover entry aggregation. Additive — the document and entry comparison surface is otherwise unchanged. ([#267](https://github.com/cipherstash/encrypt-query-language/pull/267))
Loading
Loading