Found while re-planning Q6 against the tree (.claude/plans/frolicking-painting-origami.md, finding R-12). The plan had assumed registering Quadrature.folded_product was a matter of adding an entry; it is blocked on two structural gaps, and neither is reachable by anything the registry currently offers.
[M] at HEAD, folded_product(4, 8):
n_points 16
support 'S^2/sigma_y'
exactness None
degree_of_exactness None
invariance_group None
Compare the four registered families, all of which carry a claim (legendre / uniform(S^2)) on a non-quotient support. folded_product is the only shipped angular family with no exactness claim at all.
The two gaps
1. Stage 2 (V) has no degree to invert or verify. Since 626dc855 the selector checks the claim the built rule carries against the query's; a rule with exactness=None is refused, with the reason "the rule carries no exactness claim, so nothing certifies it integrates anything exactly against ...". That refusal is correct and is gated (test_a_rule_with_no_exactness_claim_at_all_is_refused) — it is what would stop the folded rule being selected on a degree it never claimed.
What the rule needs is a theorem, not a tag: what is the fold's exactness claim on the quotient? The unfolded product(4,8) carries ExactnessClaim(spherical_harmonic, degree=7) via spherical_product_claim, and the quotient by σ_y halves the node set. Whether the claim survives, and against what reference on S²/σ_y, is a derivation.
2. Stage 0 (domain) cannot match a quotient support. AngularSymmetry.support is derived from the spent group and [M] only ever yields [-1,1] (SO2) or S^2 (Trivial). No geometry can equal 'S^2/sigma_y', so the folded rule is refused on domain before anything else runs.
This is the deeper one: it asks whether a geometry can spend a discrete reflection the way it spends a continuous rotation. Today the spent half is continuous (G⁰) and the owed half discrete (Γ); the fold spends a discrete element, which the current split has no slot for.
Why it is not urgent
folded_product is reachable directly (Quadrature.folded_product(...)) and is used that way by the cylindrical fold. Only automatic selection is blocked, and [M] select_quadrature has zero production consumers. Filing so the two gaps are recorded as structural rather than rediscovered as "why does registering this not work".
⚠ Do not attempt to close this by giving the rule a hand-written ExactnessClaim or by widening AngularSymmetry.support to accept a quotient string. The first fabricates a claim; the second makes stage 0 a string match against a vocabulary nothing derives.
Found while re-planning Q6 against the tree (
.claude/plans/frolicking-painting-origami.md, finding R-12). The plan had assumed registeringQuadrature.folded_productwas a matter of adding an entry; it is blocked on two structural gaps, and neither is reachable by anything the registry currently offers.[M]at HEAD,folded_product(4, 8):Compare the four registered families, all of which carry a claim (
legendre/uniform(S^2)) on a non-quotient support.folded_productis the only shipped angular family with no exactness claim at all.The two gaps
1. Stage 2 (V) has no degree to invert or verify. Since
626dc855the selector checks the claim the built rule carries against the query's; a rule withexactness=Noneis refused, with the reason "the rule carries no exactness claim, so nothing certifies it integrates anything exactly against ...". That refusal is correct and is gated (test_a_rule_with_no_exactness_claim_at_all_is_refused) — it is what would stop the folded rule being selected on a degree it never claimed.What the rule needs is a theorem, not a tag: what is the fold's exactness claim on the quotient? The unfolded
product(4,8)carriesExactnessClaim(spherical_harmonic, degree=7)viaspherical_product_claim, and the quotient by σ_y halves the node set. Whether the claim survives, and against what reference onS²/σ_y, is a derivation.2. Stage 0 (domain) cannot match a quotient support.
AngularSymmetry.supportis derived from the spent group and[M]only ever yields[-1,1](SO2) orS^2(Trivial). No geometry can equal'S^2/sigma_y', so the folded rule is refused on domain before anything else runs.This is the deeper one: it asks whether a geometry can spend a discrete reflection the way it spends a continuous rotation. Today the spent half is continuous (
G⁰) and the owed half discrete (Γ); the fold spends a discrete element, which the current split has no slot for.Why it is not urgent
folded_productis reachable directly (Quadrature.folded_product(...)) and is used that way by the cylindrical fold. Only automatic selection is blocked, and[M]select_quadraturehas zero production consumers. Filing so the two gaps are recorded as structural rather than rediscovered as "why does registering this not work".⚠ Do not attempt to close this by giving the rule a hand-written
ExactnessClaimor by wideningAngularSymmetry.supportto accept a quotient string. The first fabricates a claim; the second makes stage 0 a string match against a vocabulary nothing derives.