@@ -570,17 +570,33 @@ monorepo, which is where the silent failures are.
570570 ` fixtures::v3_doc_integer::field_op_selector ` and
571571 ` fixtures::v3_ste_vec::hello_op_selector ` , which apply a written rule to the
572572 loaded fixture and fail, listing every candidate, when zero or several
573- selectors match. ` tests/sqlx/tests/selector_literal_guard.rs ` fails on a
574- random-looking standalone 32-hex run anywhere in the crate's source, SQL and
575- escaped JSON strings included, and runs DB-free in ` mise run test:schema ` so
576- fork PRs get it too; a forged selector must be
577- visibly fake (` "00000000000000000000000000000001" ` ). The suite passes against
578- any workspace. That a keyset and path still produce the same selector bytes is
579- pinned separately, in the encryption test crate
573+ selectors match. The jsonb_entry matrix resolves the selector at runtime and
574+ queries the literal ` payload -> '<sel>'::text ` customers write.
575+ ` tests/sqlx/tests/selector_literal_guard.rs ` fails on a random-looking
576+ standalone 32-hex run, in any case, in any ` .rs ` file under the crate's ` src/ `
577+ and ` tests/ ` , SQL and escaped JSON inside Rust strings included, and counts a
578+ string escape (` \n ` , ` \x ` ), a ` 0x ` prefix or an integer suffix (` 0x…u128 ` )
579+ as a boundary. It does not catch a selector split into pieces, such as a
580+ ` [u8; 16] ` array of ` 0x.. ` bytes; the generated
581+ ` fixtures/*.sql ` files hold real selectors and are not scanned. It runs
582+ DB-free in ` mise run test:schema ` so fork PRs get it too; a forged selector
583+ must be visibly fake (` "00000000000000000000000000000001" ` ). The suite passes
584+ against any workspace. That a keyset and path still produce the same selector
585+ bytes is pinned separately, in the encryption test crate
580586 (` packages/eql/tests/encryption/tests/ste_vec_selectors.rs ` , regenerated only
581- with ` EQL_UPDATE_STE_VEC_SELECTORS=1 ` ). It pins the cipherstash-client version
582- the EQL workspace resolves; protect-ffi resolves its own from its own
583- lockfile, so the pin covers protect-ffi's only while the two versions agree.
587+ with ` EQL_UPDATE_STE_VEC_SELECTORS=1 ` , exactly ` 1 ` ). It pins the index config
588+ production really sends for an EQL v3 JSON column, the unrewritten
589+ ` prefix: "enabled" ` sentinel included (#1203 : a fix there changes every stored
590+ v3 JSON selector and is meant to fail the pin). It also records the fake index
591+ key it derives under: a changed key fails first, with a message naming it a
592+ stack-kms test-infrastructure change rather than a stored-data break. It pins
593+ the cipherstash-client and cipherstash-config (the crates that compute the
594+ selectors) the EQL workspace resolves; protect-ffi resolves its own from its
595+ own lockfile, and ` scripts/__tests__/cipherstash-client-parity.test.mjs `
596+ (` pnpm run test:scripts ` , every PR) fails when the two lockfiles disagree on
597+ the version, source or checksum of either, so a protect-ffi bump has to move the EQL pins with it. Primitive
598+ dependencies such as blake3 are not compared, and already differ at patch
599+ level.
584600- ** ` FROZEN_PUBLISHERS ` is what stops this repo publishing a package whose
585601 publisher lives elsewhere, and it is a mechanism, not a status.** ` scripts/release-gate.mjs ` carries a map of every
586602 package that lives here but is published from another repository. For each,
0 commit comments