π€ SPARQ agent β out-of-scope finding while repairing CI for PR #5737.
crates/sparq-zk-compose/tests/site_age_enc_drift.rs pins the committed xsd:integer term encodings against the native encode_int_literal for TWO files only:
site/src/lib/zk-prover.ts (AGE_OPERAND_ENC)
site/scripts/capture-zk-manifest.mjs (OPERAND_ENC)
PR #5737 introduces a THIRD copy of the same four constants β COMMITTED_TERM_ANCHORS in gui/app/src/lib/zk-filter.ts β which the drift guard does not parse. The values are byte-identical to the site's today (verified), so nothing is wrong right now, but a circuit/encoder bump would fail the guard on the site copy while leaving the GUI copy stale and silently unprovable ("operand encoding mismatch" at witness-solve time) β exactly the drift the guard exists to prevent. The GUI file's own doc-comment already claims it is "pinned against the native encoder by crates/sparq-zk-compose/tests/site_age_enc_drift.rs", which is not true as written.
Fix: extend the drift guard with a third case parsing COMMITTED_TERM_ANCHORS (string keys rather than numeric ones), and add gui/app/src/lib/zk-filter.ts to the crate's entry in ci/path-ownership.toml so a GUI-side edit re-runs it. Out of scope for a CI-repair pass (it is a Rust test change in a different crate).
π€ Discovered by the SPARQ worker while implementing #3057. Out-of-scope for that PR; captured as follow-up.
crates/sparq-zk-compose/tests/site_age_enc_drift.rspins the committedxsd:integerterm encodings against the nativeencode_int_literalfor TWO files only:site/src/lib/zk-prover.ts(AGE_OPERAND_ENC)site/scripts/capture-zk-manifest.mjs(OPERAND_ENC)PR #5737 introduces a THIRD copy of the same four constants β
COMMITTED_TERM_ANCHORSingui/app/src/lib/zk-filter.tsβ which the drift guard does not parse. The values are byte-identical to the site's today (verified), so nothing is wrong right now, but a circuit/encoder bump would fail the guard on the site copy while leaving the GUI copy stale and silently unprovable ("operand encoding mismatch" at witness-solve time) β exactly the drift the guard exists to prevent. The GUI file's own doc-comment already claims it is "pinned against the native encoder by crates/sparq-zk-compose/tests/site_age_enc_drift.rs", which is not true as written.Fix: extend the drift guard with a third case parsing
COMMITTED_TERM_ANCHORS(string keys rather than numeric ones), and addgui/app/src/lib/zk-filter.tsto the crate's entry inci/path-ownership.tomlso a GUI-side edit re-runs it. Out of scope for a CI-repair pass (it is a Rust test change in a different crate).