Skip to content

feat(eql-bindings): produce IntegerEq, BigintEq, RealEq and DoubleEq, and name each type's real blocker - #1241

Merged
coderdan merged 5 commits into
nextfrom
feat/eql-v4-equality-types
Oct 18, 2026
Merged

coderdan merged 5 commits into
nextfrom
feat/eql-v4-equality-types

Conversation

@coderdan

@coderdan coderdan commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Go developers can now store integers and floats in EQL columns they can search by equality: IntegerEq, BigintEq, RealEq and DoubleEq. EQL is the SQL library we install into a customer's PostgreSQL database to store and query encrypted values; Stack Encrypt is our Rust encryption engine, which the Go SDK runs as a WebAssembly guest. The engine could already compute these equality terms under vitaminc 0.6, which is now released, so the only thing holding the four types back was a list in the code generator. This also replaces the stale "wait for vitaminc 0.6" message that stashgen (the Go code generator) showed for every type it still refuses. Each refusal now names the issue that tracks the real blocker.

Changes

eql-codegen and eql-bindings

Tests (packages/eql/tests/encryption)

  • The equality terms follow ADR-0002's semantic baseline: IntegerEq(42) and BigintEq(42) share a term, -0.0 and 0.0 share a term, every NaN shares one term, and an f32 hashes as the f64 it widens to. Each query twin derives the term its stored value holds. The ciphertext still decrypts to the exact value, including -0.0.
  • PostgreSQL: = on each eql_v4_*_eq column finds exactly the expected rows, -0.0 = 0.0 and NaN payloads included.
  • The v4_queries.json fixture gains an equality query for each type, and v4_rows.json gains the four Go-sealed columns. The PostgreSQL test of those Go rows now also checks =.

Go

  • The Profile test model gains Age (IntegerEq), Rank (BigintEq), Weight (RealEq) and Price (DoubleEq). stashgen generates an Eq method on each, and each one's query matches the Rust fixture byte for byte.
  • The README table lists the new types and explains how -0.0 and NaN compare. Tests that listed the producible types or their operators are updated. Added a CHANGELOG entry.

Verification

  • cargo test -p eql-codegen passed (153 unit tests plus the parity tests).
  • mise run types:check passed on the commit.
  • mise run test:encryption passed.
  • mise run test:encryption:postgres passed against a disposable postgres:17 with the v4 bundle built from the tree. That covers postgres_finds_number_equality_rows, postgres_stores_and_queries_rows_the_go_sdk_sealed and postgres_stores_and_queries_every_producible_v4_type.
  • mise run test:crates passed.
  • In languages/golang: go vet ./... and go test ./... -count=1 passed with the guests built, and go generate ./... leaves no diff.
  • Not run locally: the Go live tests against Postgres. CI runs them.

Related

Closes #1239
Refs #1130: this is the equality part of producing the number types. The ordered types wait on #1236.

https://claude.ai/code/session_01BZhkvKLpNtKuzj3HCfMXoL

Summary by CodeRabbit

  • New Features
    • Added equality queries for 32-bit and 64-bit integers, and 32-bit and 64-bit floating-point values.
    • Numeric equality follows PostgreSQL semantics: equal integers match across widths, and signed zero and NaN compare equal.
    • Added Rust and Go support for encrypting and querying these values, including profile fields for age, rank, weight, and price.
  • Documentation
    • Updated language and type references with supported numeric equality types, plaintext mappings, and comparison behavior.

… and name each type's real blocker

vitaminc 0.6 is released, and the engine already derived integer and float
equality over ADR-0002's semantic baseline, so the four number equality
types were held back by nothing but the list in eql-codegen. They join
ENCRYPTION_DOMAINS: one integer value has one term at either width, and a
float's -0.0 and every NaN fold to one value each, which is Postgres's own
float8 equality. The ciphertext keeps the exact value.

The reasons stashgen shows for the types it still refuses told Go developers
to wait for vitaminc 0.6. Each now names the issue that tracks the real
blocker: a kind the value enum lacks (#1144), order keys (#1236), text's
order types (#1131), block ORE (#1132) or the JSON index (#1060).

The Go Profile model gains a field of each type. Its generated Eq queries
match the Rust dispatch byte for byte (v4_queries.json), and the rows it
seals are inserted into eql_v4 columns and found with = in PostgreSQL by
the Rust suite (v4_rows.json).

Closes #1239

Claude-Session: https://claude.ai/code/session_01BZhkvKLpNtKuzj3HCfMXoL
@changeset-bot

changeset-bot Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 863240d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes changesets to release 12 packages
Name Type
@cipherstash/eql Minor
stash Patch
@cipherstash/stack-prisma Patch
@cipherstash/basic-example Patch
@cipherstash/e2e Patch
@cipherstash/prisma-example Patch
@cipherstash/stack-drizzle Patch
@cipherstash/stack-supabase Patch
@cipherstash/stack Patch
@cipherstash/wizard Patch
@cipherstash/bench Patch
@cipherstash/test-kit Patch

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4ebdd003-978e-4c79-aa28-aad9847d9213
📥 Commits

Reviewing files that changed from the base of the PR and between 7c8e018 and 863240d.

⛔ Files ignored due to path filters: 2
  • languages/golang/encrypt/guest/Cargo.lock is excluded by !**/*.lock
  • packages/eql/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing: 16
  • .changeset/eql-v4-bindings.md
  • packages/eql/crates/eql-bindings/CHANGELOG.md
  • packages/eql/crates/eql-bindings/Cargo.toml
  • packages/eql/crates/eql-bindings/README.md
  • packages/eql/crates/eql-bindings/src/encryption.rs
  • packages/eql/crates/eql-bindings/src/encryption/plaintext.rs
  • packages/eql/crates/eql-bindings/src/encryption/targets.rs
  • packages/eql/crates/eql-bindings/src/v4/bigint.rs
  • packages/eql/crates/eql-bindings/src/v4/boolean.rs
  • packages/eql/crates/eql-bindings/src/v4/double.rs
  • packages/eql/crates/eql-bindings/src/v4/integer.rs
  • packages/eql/crates/eql-bindings/src/v4/real.rs
  • packages/eql/crates/eql-bindings/src/v4/targets.rs
  • packages/eql/crates/eql-bindings/tests/v4_inventory.rs
  • packages/eql/crates/eql-codegen/src/bindings.rs
  • packages/eql/tests/encryption/tests/v4_types.rs
💤 Files with no reviewable changes: 3
  • packages/eql/crates/eql-bindings/src/encryption.rs
  • packages/eql/crates/eql-bindings/src/encryption/plaintext.rs
  • packages/eql/crates/eql-bindings/Cargo.toml
🚧 Files skipped from review as they are similar to previous changes: 3
  • packages/eql/crates/eql-bindings/CHANGELOG.md
  • packages/eql/crates/eql-bindings/README.md
  • .changeset/eql-v4-bindings.md

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review.

📝 Walkthrough

EQL v4 now produces integer and floating-point equality types from Rust primitives. Stack Encrypt bindings and dispatch use these primitives directly. Go profiles, catalogs, fixtures, and PostgreSQL tests now cover equality encryption and queries.

Changes: Numeric equality catalog and blocker reasons

Layer / File(s) Summary
Producibility catalog and blocker reasons
.changeset/..., languages/golang/encrypt/eql/..., packages/eql/crates/eql-codegen/..., packages/eql/crates/eql-bindings/src/v4/targets.rs
IntegerEq, BigintEq, RealEq, and DoubleEq are marked producible. Remaining unsupported types identify engine, EQL, SDK, ORE, order-key, and JSON-index gaps.
Primitive Stack Encrypt bindings and dispatch
packages/eql/crates/eql-bindings/..., packages/eql/crates/eql-codegen/src/bindings.rs
V4 conversions use i32, i64, f32, f64, and bool directly. Named encryption, decryption, and query dispatch includes the four numeric equality types.
Go profile fields and equality queries
languages/golang/encrypt/internal/testusers/..., languages/golang/encrypt/eql_v4_test.go
Go profiles add Age, Rank, Weight, and Price with equality-capable EQL types and field-level Eq methods.
Equality semantics and database coverage
packages/eql/tests/encryption/..., languages/golang/encrypt/...
Tests and fixtures cover primitive round trips, integer-width equality, signed-zero and NaN equality, committed rows, and PostgreSQL equality queries.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~60 minutes

Change: Feature · Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  participant GoProfile
  participant EQLBindings
  participant PostgreSQL
  GoProfile->>EQLBindings: Encrypt numeric equality field
  EQLBindings->>PostgreSQL: Store equality ciphertext and blind index
  GoProfile->>EQLBindings: Build equality query term
  EQLBindings->>PostgreSQL: Execute equality query
  PostgreSQL-->>GoProfile: Return matching rows
Loading

Suggested reviewers: tobyhede

Merge Risk: ⚪ Minimal · up to 86324

This change makes integer and floating-point equality types usable in EQL v4 and the Go SDK. The supplied evidence shows no concrete merge-blocking risk.

Security architecture risk: 🔵 Low · up to 86324

Numeric equality support intentionally reveals equality relationships for columns that adopt it. The new types reuse existing key, column-context, validation and decryption controls; no supported boundary bypass was identified. Some dependency-owned floating-point behavior remains unverified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The new information exposure concerns numeric columns that adopt equality targets. A party able to observe their deterministic equality terms can group equal values and their frequencies within the applicable derivation scope. This is an intentional query capability, not evidence of plaintext recovery or additional key authority.

Trust Boundaries and Controls

  • observed — The new dispatch arms retain the caller-supplied keyset or opener and column context. Wrong-kind values are rejected before encryption, and wrong-column decryption is covered by a test that expects context rejection before key retrieval. Generated Go callers also retain the shared plan/context checks.

Resilience and Maintainability Implications

  • observed — The equality targets reuse the existing lazy Pending lifecycle. Synchronous validation precedes data-key requests; dropping an unawaited pending performs no I/O, and query terms require no data key. Terminal serialization follows existing settlement behavior, which can already issue a key before a later error. No EQL row persistence or new retry, rollback or concurrency protocol is introduced by these target arms.
Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main changes: producing the four numeric equality types and naming blockers for unsupported types.
Linked Issues check Passed Direct issue [#1239] requires four numeric equality types, updated refusal reasons, regenerated Rust and Go catalogs, and updated tests. ENCRYPTION_DOMAINS now includes IntegerEq, BigintEq, `Rea…
Out of Scope Changes check Passed The changes support [#1239]. Primitive plaintext migration, feature gating, dispatch updates, inventory-test updates, documentation, changelogs, fixtures, and Go profile tests support the new producib…
Docstring Coverage Passed Docstring coverage is 87.50% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 48 functions across 28 files. (3 skipped: 3…
Full details: Linked Issues check

Explanation

Direct issue [#1239] requires four numeric equality types, updated refusal reasons, regenerated Rust and Go catalogs, and updated tests. ENCRYPTION_DOMAINS now includes IntegerEq, BigintEq, RealEq, and DoubleEq. The generated Rust and Go catalogs mark these types as producible and name blockers for unsupported types. The summary reports equality coverage, PostgreSQL = checks, regenerated fixtures, and updated refusal tests. These changes satisfy the coding requirements in [#1239].

Full details: Out of Scope Changes check

Explanation

The changes support [#1239]. Primitive plaintext migration, feature gating, dispatch updates, inventory-test updates, documentation, changelogs, fixtures, and Go profile tests support the new producible equality types and catalog generation. The supplied evidence does not demonstrate an unrelated product change.

Full details: Docstring Coverage

Explanation

Docstring coverage is 87.50% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 48 functions across 28 files. (3 skipped: 3 unsupported.)

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

…lity types

The guest crate pins the producible types and each one's operators
separately from eql-codegen, so it still listed the eight types from before
IntegerEq, BigintEq, RealEq and DoubleEq were produced. Each answers eq
through its equality index, as TextEq does.

Claude-Session: https://claude.ai/code/session_01BZhkvKLpNtKuzj3HCfMXoL

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Persisted equality terms and Rust–WASI–Go compatibility warrant human confirmation of the integration results.

No open issues 🎉

2 files not reviewed
  • languages/golang/encrypt/eql/eql_gen.go: Generated file
  • languages/golang/encrypt/internal/testusers/profile_stash.go: Generated file
What changed in this PR

Enables numeric equality searches through EQL v4’s Rust bindings and Go SDK, addressing #1239 and the equality portion of #1130.

Changes:

  • Enables IntegerEq, BigintEq, RealEq, and DoubleEq.
  • Replaces stale refusal messages with specific blockers.
  • Adds equality semantics, PostgreSQL, and Rust–Go interoperability coverage.
File Description
packages/​eql/​tests/​encryption/​tests/​v4_types.rs Tests numeric equality and interoperability.
packages/​eql/​tests/​encryption/​tests/​targets.rs Updates supported types and refusal expectations.
packages/​eql/​tests/​encryption/​fixtures/​v4_rows.json Adds Go-sealed numeric equality fields.
packages/​eql/​tests/​encryption/​fixtures/​v4_queries.json Adds numeric query fixtures.
packages/​eql/​crates/​eql-codegen/​src/​targets.rs Updates blocker documentation and tests.
packages/​eql/​crates/​eql-codegen/​src/​go_eql.rs Updates refusal-message assertion.
packages/​eql/​crates/​eql-codegen/​src/​bindings.rs Enables equality derives and revises blockers.
packages/​eql/​crates/​eql-bindings/​src/​v4/​targets.rs Regenerates catalog and numeric dispatch.
packages/​eql/​crates/​eql-bindings/​src/​v4/​real.rs Adds float32 equality derives.
packages/​eql/​crates/​eql-bindings/​src/​v4/​integer.rs Adds int32 equality derives.
packages/​eql/​crates/​eql-bindings/​src/​v4/​double.rs Adds float64 equality derives.
packages/​eql/​crates/​eql-bindings/​src/​v4/​bigint.rs Adds int64 equality derives.
packages/​eql/​crates/​eql-bindings/​src/​encryption/​targets.rs Updates refusal assertion.
packages/​eql/​crates/​eql-bindings/​src/​encryption/​plaintext.rs Documents numeric equality semantics.
packages/​eql/​crates/​eql-bindings/​README.md Documents supported types and blockers.
packages/​eql/​crates/​eql-bindings/​CHANGELOG.md Records numeric equality support.
languages/​golang/​stashgen/​refusal_test.go Uses an unsupported ordered type.
languages/​golang/​encrypt/​README.md Documents numeric types and comparisons.
languages/​golang/​encrypt/​query_test.go Checks new equality operators.
languages/​golang/​encrypt/​internal/​testusers/​profiles.go Adds numeric equality model fields.
languages/​golang/​encrypt/​internal/​testusers/​profile_stash.go Regenerates codecs and query methods.
languages/​golang/​encrypt/​guest/​tests/​native_ops.rs Updates guest catalog expectations.
languages/​golang/​encrypt/​guest/​src/​targets.rs Updates supported-type assertions.
languages/​golang/​encrypt/​eql/​eql_test.go Checks numeric type mappings.
languages/​golang/​encrypt/​eql/​eql_gen.go Regenerates availability and blocker messages.
languages/​golang/​encrypt/​eql_v4_test.go Extends cross-language fixture checks.
languages/​golang/​CHANGELOG.md Records equality support and diagnostics.
.changeset/​eql-v4-bindings.md Updates unreleased EQL release notes.

Review effort: Balanced

@coderdan
coderdan marked this pull request as ready for review October 17, 2026 10:55
@coderdan
coderdan requested a review from a team as a code owner October 17, 2026 10:55
@coderdan
coderdan requested a balanced review from Copilot and removed request for a team October 17, 2026 10:55
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T10:58:45.776666Z 7f8cb75 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-17T10:58:53.242730Z 7f8cb75 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@cipherstash-agent cipherstash-agent left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review attestation — source: Claude Code /code-review medium + /cross-check-review-findings, run on head 7f8cb75.

Result: no critical or blocking issues; no findings to report.

Checked:

  • The IntegerEq/BigintEq/RealEq/DoubleEq stored and query structs carry the same stack-encrypt derives and field attrs as the existing TextEq, and use the matching Int32/Int64/Float32/Float64 plaintext newtypes.
  • ENCRYPTION_DOMAINS, encryption_gap and targets.rs agree: the four Eq types are producible, and every remaining gap names a tracking issue (#1131, #1132, #1144, #1236, #1060).
  • No stale "held back / once vitaminc 0.6" wording remains in Rust, Go or Markdown sources (CHANGELOGs excluded).
  • Tests cover the ADR-0002 baseline: one integer term across widths, -0.0/NaN folding, stored vs. query term equality, and exact ciphertext round-trip of -0.0/NaN. The Postgres test is #[ignore]d and needs EQL_TEST_DATABASE_URL.
  • The changeset is present (@cipherstash/eql minor).

Not verified: I did not run the cargo or Go suites, so CI is the check for the generated eql_gen.go and *_stash.go drift guards.


Generated by Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7f8cb75288

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +343 to +345
("integer", "eq"),
("bigint", ""),
("bigint", "eq"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the Go supported-type references

When Go users choose an encrypt_into type from the primary package or generator documentation, languages/golang/encrypt/doc.go:23-25 and languages/golang/cmd/stashgen/README.md:157-166 still list only the storage-only numeric types and omit these newly supported equality variants. That contradicts the generated target table and can steer users toward Integer, Bigint, Real, or Double, which provide no Eq query method; update both references to include the new *Eq types.

Useful? React with 👍 / 👎.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Persistent encrypted-value compatibility across Rust, WASI, Go, and PostgreSQL warrants final human validation despite no identified blocking defects.

No open issues 🎉

2 files not reviewed
  • languages/golang/encrypt/eql/eql_gen.go: Generated file
  • languages/golang/encrypt/internal/testusers/profile_stash.go: Generated file

Review effort: Balanced

…encrypt feature

Only Stack Encrypt produces an EQL v4 value, yet the v4 module compiled
without the feature and every generated derive, stash attribute and doc
line was wrapped in its own cfg_attr on it. The module itself is now gated
in lib.rs, and eql-codegen emits the v4 derives and docs unconditionally.
v4_parity.rs runs under the feature, where test:encryption runs it.

The Go docs listing what encrypt_into takes (encrypt/doc.go and the
stashgen README) now name the four number equality types, and say which
types answer Eq and which are stored and read only.

Claude-Session: https://claude.ai/code/session_01BZhkvKLpNtKuzj3HCfMXoL
@coderdan

Copy link
Copy Markdown
Contributor Author

@coderdan, on the comment at packages/eql/crates/eql-bindings/src/v4/bigint.rs:297. It's still in a pending review, so I'm replying here.

Fixed in 7c8e018:

  • pub mod v4 is now behind #[cfg(feature = "stack-encrypt")] in lib.rs. Previously only v4::targets was gated, and the rest of the module compiled without the feature.
  • eql-codegen emits the v4 derives, stash attributes and plaintext docs with no cfg_attr. The regenerated v4 files lose about 290 lines of gating.
  • tests/v4_parity.rs runs under the feature, which mise run test:encryption already enables.
  • I used a plain comment on the mod line, not a /// doc. A doc comment there moved the module's own intra-doc links out of scope and broke rustdoc.
  • The changeset and the eql-bindings CHANGELOG say the module needs the feature.

Checks: mise run test:crates, mise run test:encryption and mise run types:check all pass, and cargo doc -p eql-bindings with -D warnings is clean with and without the feature.

The same commit also fixes the Codex finding about the Go type lists.

https://claude.ai/code/session_01BZhkvKLpNtKuzj3HCfMXoL

@coderdan

Copy link
Copy Markdown
Contributor Author

Review feedback, all addressed in 7c8e018:

  • v4 feature gating (inline comment on v4/bigint.rs): eql_bindings::v4 is now gated on stack-encrypt once, in lib.rs. eql-codegen emits the v4 derives, stash attributes and docs without per-item cfg_attr.
  • Codex: Go supported-type references: encrypt/doc.go and the stashgen README table now list IntegerEq, BigintEq, RealEq and DoubleEq, and say which types answer Eq and which are stored and read only. (An inline reply could not be posted while a pending review is open on this PR.)

Comment thread packages/eql/crates/eql-bindings/src/v4/bigint.rs Outdated
Comment thread packages/eql/crates/eql-bindings/src/v4/bigint.rs Outdated
Comment thread packages/eql/crates/eql-bindings/tests/v4_inventory.rs
… boolean plaintexts

Integer, Bigint, Boolean, Real and Double, and their equality types, now
take i32, i64, bool, f32 and f64, as the text types take String. The
encryption::plaintext newtypes are gone: the derive and the by-name
dispatch need nothing a primitive lacks, and the dispatch still accepts
only the matching runtime kind.

A typed decrypt now reads a leaf as vitaminc reads it into the primitive:
an integer of another width that fits opens unchanged, and an f64 opens an
f32. A value that does not fit, or of another kind, is still refused. The
newtypes refused every other width, but every writer seals at the type's
width, so that refused only payloads none of them writes.

eql-bindings no longer depends on vitaminc-aead directly.
…gainst v3

A v4 payload is never a v3 one: Stack Encrypt's ciphertext is not
cipherstash-client's. So the v4 checks no longer compare v4 with v3.
v4_parity.rs becomes v4_inventory.rs:

- The inventory, its schema ids and its term keys are still checked
  against the eql-domains catalog.
- Query entries are checked to live in the eql_v4 schema. They are no
  longer required to be the same set as v3's.
- The cross-generation version test becomes a v4 one: a v4 type admits
  "v": 4 and refuses every other version, by type and through the
  inventory. v3's own refusal stays in domain_payload.rs.
@coderdan
coderdan removed this pull request from stack #1247 October 18, 2026 05:50
@coderdan
coderdan merged commit d5e660d into next Oct 18, 2026
45 checks passed
@coderdan
coderdan deleted the feat/eql-v4-equality-types branch October 18, 2026 05:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

stashgen tells Go developers to wait for vitaminc 0.6, which is released: update the EQL v4 unproducible reasons

3 participants