feat(jc): pillar 10 (Pflug-Pichler) + sigker crate + pillar 11 stub#348
feat(jc): pillar 10 (Pflug-Pichler) + sigker crate + pillar 11 stub#348AdaWorldAPI merged 1 commit intomainfrom
Conversation
…11 stub
Pillar 10 — Pflug-Pichler 2012 nested-distance Lipschitz on Sigma DN-trees.
Continues the concentration ladder beyond pillars 5/7/8/9 (ℝ → Hadamard →
Hilbert → SPD-path) into the carrier the Sigma DN-tree actually lives in:
discrete-time stochastic processes with branching structure. Certifies that
CAM-PQ tree quantization preserves FreeEnergy within Lε on the nested
distance, AND verifies operationally that Wasserstein-only quantization is
non-tight (the L_W ≥ L_nested check is the test that justifies adding
nested-distance machinery rather than reusing Hamming/Wasserstein on
terminal marginals).
Probe: T=4 binary scenario trees, 32 perturbations of branching parameter
δ, recursive Pflug-Pichler nested distance via 2-way conditional coupling.
Brute force is fine at HORIZON=4 (~milliseconds); auction-algorithm
acceleration from Qu-Tran 2021 is the production path for larger horizons.
Sigker crate — peer to bgz17/deepnsm under the same standalone constitution
(zero deps, opt-in build, workspace-excluded). Provides path-signature
representations:
- signature.rs: truncated Chen-Lyons signature with depth-2 working impl
(Chen's identity test green); structurally supports depth N
- shuffle.rs: shuffle product on multi-indices (multinomial counts verified)
- randomized.rs: Cuchiero-Cuchiero-Schmocker-Teichmann 2021 randomized
signatures — finite-dim universal approximators, the
practical bridge to Vsa16k-comparable carrier widths
- kernel.rs: truncated signature kernel (Cauchy-Schwarz verified);
Goursat-PDE surface stubbed for production extension
(Salvi-Cass-Foster-Lyons-Lemercier 2020)
- codec.rs: CodecRouteSigker enum mirroring lance-graph-contract::cam,
classifies sigker as Index-regime for Path carrier kind
Two examples:
- sig_vs_hamming: correlation bench against bitpacked Hamming
- randomized_signature_demo: universality + reparametrization invariance
Pillar 11 stub — Hambly-Lyons 2010 signature uniqueness on tree-quotient.
Returns DEFERRED until sigker is wired through the workspace (same pattern
as pillars 2/4 in their dormant phase). Header documents the full activation
probe: forward (tree-equivalent paths same signature), converse (non-tree
perturbation differs), and discrimination rate calibration against the
randomized-signature approximation rate k^(-1/(2d)).
Architectural rationale:
- Pflug → pillar (certifies existing CAM-PQ op, zero deps, fits jc constitution)
- Sigker → crate (provides new representation, future deps, has consumers)
- Hambly-Lyons → pillar stub (certifies sigker once it lands; activation mechanical)
Not yet wired into CodecRoute in lance-graph-contract — that's a separate
follow-up that adds one variant + one routing rule, gated on sigker being
benchmarked at production carrier widths.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f8dd307fa1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| s_uv.sort(); | ||
| s_vu.sort(); |
There was a problem hiding this comment.
Make the shuffle test sortable
Running cargo test --manifest-path crates/sigker/Cargo.toml fails before executing the new crate's tests because Vec<(Vec<usize>, f64)> cannot be sorted with sort(): f64 does not implement Ord, so the tuple does not implement Ord either. This blocks the documented opt-in validation path for sigker; sort by the word component or compare grouped maps instead.
Useful? React with 👍 / 👎.
| pub fn signature_kernel(x: &[Vec<f64>], y: &[Vec<f64>], depth: usize) -> f64 { | ||
| let s_x = signature_truncated(x, depth); | ||
| let s_y = signature_truncated(y, depth); | ||
| debug_assert_eq!(s_x.dim, s_y.dim); |
There was a problem hiding this comment.
Enforce matching path dimensions in release builds
When callers pass paths with different point dimensions, this check disappears in release builds, so signature_kernel either silently ignores extra coefficients when x has fewer level entries than y or panics later when x has more. For example, a depth-1 kernel between a 1-D path and a 2-D path returns a value using only the first coordinate instead of rejecting the invalid input; this should be a normal assertion or explicit validation before taking the dot product.
Useful? React with 👍 / 👎.
Append-only block documenting the activation of Pillars 4 and 11 (commits f4bd6bf and c191f23 in this branch). Records: - Pillar 4 empirical result (5.349× step-count ratio, 50/50 problems SOR ≤ Jacobi, ~5 ms runtime) - Pillar 11 empirical result (100/100 forward pairs at exactly 0 distance; 100/100 converse pairs above 0.05 threshold; discrimination ratio = ∞) - Architectural rationale for the feature-flag choice (lib code can't use dev-deps; unconditional dep breaks zero-dep constitution; feature-gated optional dep is the clean middle path) - Two stragglers unmissed by the EULER_GAMMA / GOLDEN_RATIO regex pass (non-blocking, in example + workspace-EXCLUDED research crate) - Updated deferred-pillar inventory (3 → 2 default, 3 → 1 with --features hambly-lyons) - Flagged board-hygiene retrofit for PR #348 / #349 as a separate follow-up (Pillar 10 row, sigker types inventory, per-PR archive) https://claude.ai/code/session_012AUf5NFgeAAQa5aQAKwSgx
#353); append 2026-05-07 CYCLE-ACCUM-1 + LADYBUG-EQUIV-1 + crate inventory 22→23 Rebases the ledger so it begins with current main's content (commit a6797ad with all six 2026-05-06/2026-05-07 dated sections from PRs #345/#346/#347/#348) and then appends a single dated section "2026-05-07 — CYCLE-ACCUM-1 + LADYBUG-EQUIV-1 introductions + crate inventory expansion (post-#353)" containing only the unique findings not already absorbed by those merged PRs: - CYCLE-ACCUM-1 row introduction (per-cadence flush gate, R2, shipped via PR #337, entropy 2) - LADYBUG-EQUIV-1 row introduction (ladybug-rs ↔ lance-graph equivalence map; harvest is empty, entropy 1, full mapping table for clam_path, nsm_substrate, sentence_crystal, spo_harvest, causal_trajectory, gestalt, nsm_primes, crystal_lm, dn-tree) - Crate inventory expanded 22 → 23 (sigker added by PR #348) - Cross-references include PR #109 medcare-rs (?source=lance toggle exercising per-request RlsRewriter+ColumnMaskRewriter pattern) + PR #353 (palantir-parity-cascade-v2 + soa-dto-dependency-ledger) - Open question flagged: .claude/pattern.md (singular, PR #345) vs .claude/patterns.md (plural, this session) filename collision awaiting user resolution State-change blocks for WATCHER-1 / POLICY-1 / MEMBRANE-GATE-1 / SPLAT-1 are NOT duplicated here — the corresponding 2026-05-06 entries from PR #345/#346 already cover those state changes. Original branch authoring is preserved at commit 0dd0f56 for archaeology.
…it had placeholder truncation) Previous commit 74e2d9e accidentally truncated the file to ~2.5 KB (just the rubrics header). This commit restores the full 88 KB rebased ledger: current main content (commit a6797ad with all six 2026-05-06/2026-05-07 dated sections from PRs #345/#346/#347/#348) + the unique 2026-05-07 CYCLE-ACCUM-1 + LADYBUG-EQUIV-1 dated section appended at the end.
Direct commit to main (per user 2026-05-07). Replaces main's ledger with the rebased version that absorbs: - PR #355 (palantir-cascade, merged 13:40 UTC): SPO-1 closure, 8 new rows (ONTOLOGY-REGISTRY-SOA-1 / MUL-THRESHOLD-1 / CASCADE-COLS-1 / OBJECT-VIEW-1 / BUSDTO-BRIDGE-1 / CERT-OFFICER-1 / CONTEXT-ID-1 / DTO-CLASS-CHECK-1), Per-row-context cluster (highest-leverage single-fix unlock, 3 rows entropy 3→2 via 200-300 LOC PR), open- seams update (R6/R0 ontology-as-SoA closed; 2 new open seams). - CYCLE-ACCUM-1 introduction (per-cadence flush gate, R2, shipped via PR #337, entropy 2; companion to collapse_gate per topology I-4). - LADYBUG-EQUIV-1 row (entropy 1, harvest-empty closure with full module mapping for clam_path / nsm_substrate / sentence_crystal / spo_harvest / causal_trajectory / gestalt / nsm_primes / crystal_lm / dn-tree). - Crate inventory expanded 22 → 23 (sigker added by PR #348). Aggregate: 41 rows (2026-05-05 baseline) → 53 rows tracked. Entropy delta from this session work alone: SPO-1 (4→2) and 8 new rows averaging 2.875 (lower than the 3.46 snapshot mean — Wave-3 BLOCKER discipline reflected in the numbers). Pre-existing 2026-05-06/2026-05-07 dated sections from PRs #345/#346/#347/#348 preserved verbatim per APPEND-ONLY governance.
Combined ledger reached 103 KB after PR #345/#346/#347/#348/#353/#355 absorption. Splitting into two files: - ARCHITECTURE_ENTROPY_LEDGER.md (OPEN, ~27 KB) — active concerns: entropy ≥ 3 rows, open seams, active clusters, still-stalled plans. Scannable surface for next sessions to sort by entropy DESC and pick the highest-leverage fix. - ARCHITECTURE_ENTROPY_LEDGER_RESOLVED.md (NEW, ~19 KB) — closures archive: entropy ≤ 2 rows, state-change records (WATCHER-1 4→3, POLICY-1 4→2, MEMBRANE-GATE-1 3→2, TTL-PROBE-5 closed, SPO-1 4→2), closed open seams, resolved new-row introductions (CYCLE-ACCUM-1, EWA-SANDWICH-1, SPLAT-EWA-BRIDGE-1, MOCK-DRIVER-1, ONTOLOGY- REGISTRY-SOA-1, BUSDTO-BRIDGE-1, LADYBUG-EQUIV-1). Total: 46 KB across both files, down from 103 KB single file (~55% reduction). APPEND-ONLY governance preserved on both files; structural content intact, redundant prose / repeated empirical evidence condensed to load-bearing facts only. Cross-references between files add at the head of each. Update protocol amended: state-changes that flip a row to entropy ≤ 2 move the record to RESOLVED file (not edit-in-place per APPEND-ONLY).
Summary
Three additions following the two-hop walk through the Vienna 2023 research report (see EPIPHANY discussion):
crates/jc/src/pflug.rs— nested-distance Lipschitz continuity on Sigma DN-treescrates/sigker/— new standalone crate for path-signature representations (Chen-Lyons + Cuchiero randomized signatures + signature kernels)crates/jc/src/hambly_lyons.rs— DEFERRED, certifies sigker's Index-regime classification once wiredArchitectural rationale
The decision matrix for these three, given the existing jc / bgz17 / deepnsm constitution:
Pillar 10 — Pflug-Pichler (executable)
Pillar 10 continues the concentration ladder beyond pillars 5/7/8/9 into the carrier the Sigma DN-tree actually lives in: discrete-time stochastic processes with branching structure. Two trees are "close" only if both their values and their filtrations (information structure / branching topology) are close.
The probe builds T=4 binary scenario trees, sweeps 32 perturbations of the branching parameter δ, computes the recursive Pflug-Pichler nested distance via 2-way conditional couplings, and verifies three claims:
|ΔV| ≤ L · d_nested(Pflug-Pichler 2012 bound holds)d_nested ≥ d_Wassersteinon every sample (nested dominates the loose comparator)L_wasserstein ≥ L_nested(Wasserstein-only would need a worse Lipschitz constant — the operational reason CAM-PQ on DN-trees needs the nested metric, not Hamming/Wasserstein on terminal marginals)Brute-force recursion is fine at HORIZON=4 (15 nodes per tree, ~ms total). Auction-algorithm acceleration from Qu-Tran 2021 is the production path for larger horizons; documented in the header.
Numerics cross-checked in Python before commit:
T(δ=1.0)vsT(δ=1.2)gives nested = 0.40, Wasserstein = 0.20 — clean dominance, pillar logic should pass.Citation: Pflug & Pichler, "A distance for multistage stochastic optimization models", SIAM J. Optim. 22(1), 2012; full theory in Pflug & Pichler, Multistage Stochastic Optimization, Springer 2014.
Sigker crate
Same constitution as bgz17/deepnsm/jc: zero deps, opt-in build via
--manifest-path, workspace-excluded.signature.rsshuffle.rsrandomized.rskernel.rssignature_kernel_pdesurface stubbed for production extension (Salvi-Cass-Foster-Lyons-Lemercier 2020)codec.rsCodecRouteSigkerenum mirroringlance-graph-contract::cam::CodecRoute; classifies sigker as Index regime forPathcarrier kind, lossless on tree-quotient by Hambly-Lyons uniquenessTwo examples:
sig_vs_hamming.rs— correlation bench against bitpacked Hammingrandomized_signature_demo.rs— universality + reparametrization invariancePillar 11 stub — Hambly-Lyons
Returns
PillarResult::deferred(...)with a fully-documented activation path. Same DEFERRED pattern as pillars 2 and 4 used in their dormant phase. Probe design specified in the doc-comment so when sigker is reachable from jc dev-deps the activation is mechanical: replaceprove()body with the forward (tree-equivalent paths same signature) + converse (non-tree perturbation differs) + discrimination test.What this PR does NOT do
CodecRouteinlance-graph-contract. That's a one-line addition + one routing rule, gated on sigker being benchmarked at production carrier widths. Separate follow-up.cargo check— sandbox didn't have a Rust toolchain. Files follow the exact patterns ofkoestenberger.rsetc. Expect minor lint cleanup on first build.signature_kernel_pdecurrently delegates to depth-4 truncated; surface exists so consumers can wire against it.Diff stats
Two modified (
Cargo.toml,crates/jc/src/lib.rs), eleven new.