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
Commit 9467cc5
Browse filesBrowse the repository at this point in the historyBrowse files
fix(eql): re-pin the workspace-keyed SteVec selector, and guard its sibling
The SteVec selectors the sqlx suite pins are MACs of (column context,
JSONPath) under the CipherStash workspace keyset. This repo's CI names a
different workspace than the one EQL was developed against, so the pins
re-pinned on the move — no Rust, no SQL and no fixture logic changed.
v3_doc_integer::SELECTOR fce8be75… -> 606a4a44…, the value two independent
runs reported. Its drift guard did its job: one copy-pasteable message
naming the pinned value, the live value and the cause.
Its sibling SEL_HELLO_OP is keyed identically and had no such guard, so its
drift surfaces as wrong ANSWERS — LB3 counting 0 distinct ops, ORDER BY
arms returning insertion order — with the live value nowhere in the output.
v3_jsonb_sel_hello_op_matches_fixture closes that asymmetry. It prints every
op-carrying selector with a row count and op-length profile rather than
inferring the replacement: guessing wrong re-pins to the wrong leaf
silently, which is the bug already in SEL_HELLO_OP's history, where it named
$.number while claiming $.hello and survived because equality-only suites
cannot separate them.
The shards also ran fail-fast, so shard 1 reported 11 failures and skipped
643 of its 710 tests — one environmental fault answered one question per CI
round trip. sqlx-partition.sh now passes --no-fail-fast, which is nextest's
own suggestion in that output; the shards run ~5s tests in parallel, so a
fully-failing shard still finishes in minutes.
Recorded in the plan, including the consequence that these pins are now
coupled to this repo's CI workspace, and that selectors.rs holds five more
workspace-keyed constants with zero consumers and no guard.
Copy file name to clipboardExpand all lines: docs/plans/2026-08-13-eql-monorepo-absorption.md
+17Lines changed: 17 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -144,6 +144,23 @@ EQL's credentialed jobs (`test-eql.yml` lines 133–136 and 601–604) reach Cip
144
144
145
145
There is also a convention mismatch. EQL reads all four values from `secrets`; this repo reads `CS_WORKSPACE_CRN` and `CS_CLIENT_ID` from `vars` and only the key material from `secrets` (`integration-supabase.yml`, `integration-prisma-next.yml`, `prisma-next-e2e.yml`). Port to this repo's convention or `require-cs-secrets` will report the CRN missing.
146
146
147
+
### The credentials change WORKSPACE, not just variable plumbing — and two test constants are keyed to the workspace
148
+
149
+
The finding above treats the credentials as a wiring problem. They are also an *identity* problem, which the first credentialed run found and this plan had not anticipated: `vars.CS_WORKSPACE_CRN` here names a different CipherStash workspace than the one EQL was developed against. Two pinned SteVec selectors are MACs of (column context, JSONPath) **under the workspace keyset**, so they re-pin on the move even though no Rust, no SQL and no fixture logic changed:
150
+
151
+
-`tests/sqlx/src/fixtures/v3_doc_integer.rs::SELECTOR` — `fce8be75…` → `606a4a44…`, reported identically by two independent runs.
152
+
-`tests/sqlx/src/fixtures/v3_ste_vec.rs::SEL_HELLO_OP` — same keying, value not yet observed.
153
+
154
+
This is a known, accepted property rather than a defect: the module comment says supporting multiple workspaces "would require runtime selector resolution, which the static `ScalarType::column_expr()` seam cannot do — out of scope here." The consequence to record is that **these pins are now coupled to this repo's CI workspace**, so rotating `CS_WORKSPACE_CRN` re-pins them again, and a contributor running the suite against their own workspace will see the drift message and must not commit their local value.
155
+
156
+
Three things this cost, all worth fixing rather than absorbing:
157
+
158
+
1.**Only one of the two constants had a drift guard.**`v3_doc_integer` failed with one copy-pasteable "pinned X, live Y" message. `SEL_HELLO_OP` has no such guard, so its drift surfaces as wrong ANSWERS — `LB3` counting 0 distinct ops, ORDER BY arms returning insertion order — with the live value nowhere in the output. `v3_jsonb_sel_hello_op_matches_fixture` closes that asymmetry. It deliberately does **not** infer the replacement: it prints every op-carrying selector with a row count and `op`-length profile and states the discriminator, because guessing wrong re-pins to the wrong leaf silently — the exact bug already recorded in `SEL_HELLO_OP`'s own history, where it named `$.number` while claiming `$.hello` and survived because equality-only suites cannot separate the two.
159
+
2.**The shards ran fail-fast**, so shard 1 reported 11 failures and skipped 643 of its 710 tests. One environmental fault therefore answered one question per CI round trip. `tasks/test/sqlx-partition.sh` now passes `--no-fail-fast` (nextest's own suggestion in that output); the cost is bounded because the shards run ~5s tests in parallel.
160
+
3.**`tests/sqlx/src/selectors.rs` holds five more workspace-keyed constants (`ROOT`, `HELLO`, `N`, `ARRAY_ELEMENTS`, `ARRAY_ROOT`) with zero consumers** — `rg 'Selectors::'` finds no use outside their own definition — and no guard. They are stale against this workspace and nothing says so. Delete them or guard them before anything starts using them; a dead constant that is silently wrong is worse than a missing one. Not done here: it is unrelated to the failure and belongs in its own change.
161
+
162
+
The other selector-shaped constants in the tree are **synthetic and unaffected** — `crates/eql-bindings/tests/*` and `tests/sqlx/tests/payload_schema_tests.rs` pair theirs with hand-made ciphertext literals and touch no keyset, and the `00000…01` / `deadbeef…` / `ffffffff…` literals in `v3_jsonb_tests.rs` are forged by construction.
163
+
147
164
### Three imported release workflows violate the no-caching rule — by omission, not by setting
148
165
149
166
The global constraint is that publish workflows never restore the Actions cache. `release-plz.yml` complies explicitly:
0 commit comments