You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
stack-encrypt: delete dynamic::Value and Scalar, derive terms through vitaminc, add block ORE, drop Bool order terms #1140
stack-encrypt's dynamic module is the path bindings use: values arrive as
vitaminc Values whose type is known only at runtime.
Problem
Two types restate vitaminc's vocabulary.dynamic::Value wraps FfiValue only to add Clone. dynamic::term::Scalar (term.rs:196)
mirrors FfiValue's variants one for one, to pick a Rust type for the term
crates, and copies text out of Protected to do it.
Bool has order terms (term.rs:444, 467; allowed by kind.rs:62-68).
With two possible values, an order term tells anyone with the column which
rows are true.
TextEq doesn't normalise text, so café written in two Unicode forms
gives two different hashes.
Proposal
Bump the vitaminc pins to 0.6.0:
in the root Cargo.toml, both Go guests, eql-bindings and packages/eql/tests/encryption;
follow the Value rename;
follow the transport tag move in stack-guest-abi and the guests.
Delete dynamic::Value and Scalar. dynamic::term takes &Value and
calls vitaminc-prf and vitaminc-ore. admits keeps only rules that
belong to stack, such as Match taking text only.
Remove Bool order terms. Add a block ORE term kind beside CLLW ORE and
OPE. Remove the direct cllw-ore dependency.
Normalise TextEq to NFC. No stored data depends on the old form.
A known gap from #1214, to close here: ORE and OPE terms still order text as its raw UTF-8, while equality and match terms now derive from the Unicode 16 NFC form (through vitaminc-normalize). On a column with both a TextEq index and an ORE/OPE index, or TextSearchOre once block ORE lands, café written precomposed and cafe + U+0301 are one value under = and two under an ordering or a range. Block ORE should order the same normalized bytes, and CLLW ORE/OPE text should move with it, so that equality and ordering agree on what counts as the same text. ore_of in packages/stack-encrypt/src/dynamic/term.rs and the stack-encrypt CHANGELOG both record the gap.
Activity
coderdan commentedon Oct 17, 2026
A known gap from #1214, to close here: ORE and OPE terms still order text as its raw UTF-8, while equality and match terms now derive from the Unicode 16 NFC form (through
vitaminc-normalize). On a column with both aTextEqindex and an ORE/OPE index, orTextSearchOreonce block ORE lands,caféwritten precomposed andcafe+ U+0301 are one value under=and two under an ordering or a range. Block ORE should order the same normalized bytes, and CLLW ORE/OPE text should move with it, so that equality and ordering agree on what counts as the same text.ore_ofinpackages/stack-encrypt/src/dynamic/term.rsand the stack-encrypt CHANGELOG both record the gap.