Major redesign for The Archive v2 search architecture.
- Expression is now a Sendable enum (.anything, .contains, .not, .and,
.or, .keyValue) instead of a protocol + node structs.
- ExpressionEvaluator protocol + iterative evaluate(_:with:) replace the
per-node isSatisfied(by:) API.
- StringContainmentEvaluator ships as the built-in full-text backend.
- New .keyValue case + tokenization for key:value and key:"quoted value"
patterns; \key:value escapes back to plain .contains. keyValueNodes(in:)
lets callers inspect the tree for index dispatch.
- Iterative parser and evaluator; recursion-limit config removed.
- Swift tools 6.2; minimum platform macOS 13.
Source-breaking for any external Expression conformer or callers of
isSatisfied(by:) / StringExpressionSatisfiable / CStringExpressionSatisfiable.