Repository navigation
Releases
noir_XPath v0.3.0 — SHA-2 digests, langMatches, TZ(), GROUP_CONCAT, SAMPLE
noir_XPath v0.3.0
Resolves the deferred / future-planned function estate (sq-3kd2g.4, expanded by maintainer directive 2026-07-06; PR #50).
New functions
- SPARQL hash digests
SHA256/SHA384/SHA512—sha256_hex/sha384_hex/sha512_hex(plus*_hex_bytesvariants for([u8; N], len)byte-tuple pipelines), returning the canonical lowercase-hex([u8; 2*D], u32)byte tuple. Digest cores are the official noir-lang libraries, newly vendored with full provenance:vendor/sha256/(tag v0.3.0, MIT) andvendor/sha512/(main @e92ffb4, Apache-2.0 — upstream has no release tags). FIPS 180-4 known-answer vectors verified both on the upstream checkouts and through the wrappers. langMatches—lang_matches, RFC 4647 §3.3.1 basic filtering per SPARQL 17.4.3.6:"*"matches any non-empty tag; otherwise case-insensitive exact match or prefix ending at a-subtag boundary. ASCII case fold (exact per RFC 5646). Empty tag (no language) and empty range match nothing.TZ()—tz_from_datetimeplus the reusabletz_string_from_offset_minutes:"Z"for offset 0,"±HH:MM"otherwise,""for the newTZ_OFFSET_NONE(i16::MIN) no-timezone sentinel. Caveat stated in SPARQL_COVERAGE.md:XsdDateTimecarries no absent-timezone flag, so absence must be encoded via the sentinel; offset-0 values render"Z".GROUP_CONCATstring core —group_concat, joining a bounded member sequence with a separator (empty members keep their positions). Grouping /DISTINCT/ORDER BYremain query-engine concerns, as for all aggregates in this library.SAMPLE—sample_int/sample_int_partial: deterministic FIRST element (a legal implementation-dependent choice per SPARQL 18.5.1.7 — fixed because a prover-chosen nondeterministic sample would not be verifier-re-derivable),(value, present)emptiness convention.
Deliberately NOT added (honesty notes)
- MD5 / SHA1: permanently omitted — both cryptographically broken, no maintained sound Noir implementation exists to vendor, and hand-rolling broken digests into a ZK crypto library is refused by policy. Recorded in SPARQL_COVERAGE.md §17.4.6; these are not stubs counted as implemented.
- Full regex
fn:matches/fn:replace: still deferred (the bounded literal/char-class/anchored subset from sq-y73 remains); a bounded-NFA ZK-regex strategy is tracked as sq-j8shy. xsd:decimalexact arithmetic: still deferred (sq-n5e7p); xs:decimal results remain modelled in IEEE 754 double precision, stated per-row in SPARQL_COVERAGE.md.
Documentation repairs
- Stale coverage rows flipped: the float/double lanes of
abs/round/ceil/floorand the numeric operators have been implemented (vendoredsparq_ieee754) since the float migration — the rows now say so (named unary±lanes remain integer-only and are still marked partial). - Removed the false "ENCODE_FOR_URI deferred" claim (it is implemented).
- Source-of-truth banners updated: README/TESTING/CI no longer direct contributors to the removed in-monorepo
zk/xpathtree. - Collation scope resolved in ARCHITECTURE.md: codepoint collation (the SPARQL requirement) is what
compareimplements; locale/UCA tailoring is out of scope for data-oblivious circuits.
Conformance / CI status
- Test suite (pinned nargo 1.0.0-beta.21): 204
xpathinline tests + 303xpath_unit_tests+ 113/113 real qt3tests-derived packages pass (247 stub-wired excluded by design); KNOWN_FAILING is empty. - New-function tests use computed expected values only: FIPS 180-4 KATs cross-checked against Python hashlib, the SPARQL 1.1 spec's own TZ examples, RFC 4647 cases.
- Security status: unaudited — this is a 0.x release. The vendored digest crates are official noir-lang libraries but have not been independently audited here.
Changes since v0.2.0
Single squashed change: PR #50.
🤖 Released by SPARQ agent (Claude Fable 5) — sq-3kd2g.4 / epic sq-3kd2g (sparq#1591)
v0.2.0
noir_XPath v0.2.0
Lineage note: this release supersedes jeswr/noir_XPath v0.1.0 (2025-12-29, deprecated jeswr-namespace content). The current code is a complete content replacement — the library was re-developed in the sparq-org/sparq monorepo under zk/xpath and published here as a standalone face. v0.2.0 is the first stable release of the new library.
What this library is
noir_XPath is a Noir (ZK circuit) implementation of XPath 3.1 Functions and Operators targeting SPARQL FILTER semantics for use in zero-knowledge query proofs. The library provides the arithmetic, string, date/time, and comparison primitives needed to prove SPARQL FILTER evaluation inside a ZK circuit.
Conformance status
- Test suite: 360 W3C qt3tests-derived test packages, partitioned into REAL (functions with Noir implementations) and STUB-wired (functions returning
assert(false)for features not yet representable in ZK: regex, XML/document model, higher-order functions, format-* operations). - KNOWN_FAILING: currently empty — all packages in the REAL partition pass on nargo
1.0.0-beta.21. - Float backend:
sparq_ieee754vendored from sparq-org/sparqzk/ieee754, synced to commitcef945af(includes the sq-25mgo fix: f128 mul/div flush deep-underflow to signed zero instead of generating an unprovable constraint). - Security status: unaudited — this is a 0.x release. A formal security audit is planned (tracked as sq-qhy4).
Changes since v0.1.0 (legacy jeswr content)
Complete replacement. Developed in sparq-org/sparq; see the sparq PR history for the detailed change record.
CI
nargo test (real suite)runs on push/PR (all real test packages, library inline tests, and unit tests).copilot-review-postedstatus producer is live (fixes sq-umj0p: PRs no longer hard-block on missing status context).
🤖 Released by SPARQ agent — sq-5reoy / GH sparq-org/sparq#1599
v0.1.0
What's Changed
- Add SPARQL 1.1 function coverage documentation and timezone support by @Copilot in #1
- Port CI workflows, gate counting, and agent instructions from noir_IEEE754 by @Copilot in #2
- Add test generation statistics to output by @Copilot in #4
- chore(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #3
- Add 7 missing test suites from qt3tests with 317 auto-generated tests by @Copilot in #5
- Add test packages for XPath type casting functions (stream E) by @Copilot in #11
- Add missing <= and >= comparison operators for all types with mixed-type support by @Copilot in #13
- feat: add support for string operations by @jeswr in #15
- Implement PARALLEL_WORK_ITEMS: duration functions, unary operators, boolean comparisons, and date type by @Copilot in #16
- feat: rounding by @jeswr in #19
New Contributors
- @Copilot made their first contribution in #1
- @dependabot[bot] made their first contribution in #3
- @jeswr made their first contribution in #15
Full Changelog: https://github.com/jeswr/noir_XPath/commits/v0.1.0