sum-engine 0.8.1__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {sum_engine-0.8.1/sum_engine.egg-info → sum_engine-0.9.0}/PKG-INFO +12 -9
  2. {sum_engine-0.8.1 → sum_engine-0.9.0}/README.md +9 -6
  3. {sum_engine-0.8.1 → sum_engine-0.9.0}/pyproject.toml +9 -4
  4. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_cli/main.py +1417 -10
  5. {sum_engine-0.8.1 → sum_engine-0.9.0/sum_engine.egg-info}/PKG-INFO +12 -9
  6. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine.egg-info/SOURCES.txt +4 -0
  7. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine.egg-info/requires.txt +2 -2
  8. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/canonical_codec.py +6 -1
  9. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/jose_envelope.py +9 -1
  10. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/frontier.py +128 -0
  11. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/__init__.py +43 -22
  12. sum_engine-0.9.0/sum_engine_internal/research/meaning/chain_receipt.py +215 -0
  13. sum_engine-0.9.0/sum_engine_internal/research/meaning/deterministic_judge.py +251 -0
  14. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/drift_budget.py +4 -1
  15. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/local_judge.py +72 -14
  16. sum_engine-0.9.0/sum_engine_internal/research/study.py +168 -0
  17. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/__init__.py +36 -7
  18. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/__main__.py +59 -12
  19. sum_engine-0.9.0/sum_verify/_chain.py +339 -0
  20. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_meaning.py +6 -3
  21. {sum_engine-0.8.1 → sum_engine-0.9.0}/LICENSE +0 -0
  22. {sum_engine-0.8.1 → sum_engine-0.9.0}/setup.cfg +0 -0
  23. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_cli/__init__.py +0 -0
  24. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_cli/__main__.py +0 -0
  25. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_cli/audit_log.py +0 -0
  26. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine.egg-info/dependency_links.txt +0 -0
  27. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine.egg-info/entry_points.txt +0 -0
  28. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine.egg-info/top_level.txt +0 -0
  29. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/__init__.py +0 -0
  30. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/adapters/__init__.py +0 -0
  31. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/adapters/format_pivot.py +0 -0
  32. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/__init__.py +0 -0
  33. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/bind.py +0 -0
  34. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/mcp_bind.py +0 -0
  35. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/__init__.py +0 -0
  36. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/causal_discovery.py +0 -0
  37. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/chunked_corpus.py +0 -0
  38. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/minhash.py +0 -0
  39. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/predicate_canon.py +0 -0
  40. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/semantic_arithmetic.py +0 -0
  41. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/syntactic_sieve.py +0 -0
  42. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/algorithms/zk_semantics.py +0 -0
  43. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/__init__.py +0 -0
  44. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/_predicates.py +0 -0
  45. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/eu_ai_act_article_12.py +0 -0
  46. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/gdpr_article_30.py +0 -0
  47. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/hipaa_164_312_b.py +0 -0
  48. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/iso_27001_8_15.py +0 -0
  49. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/pci_dss_4_req_10.py +0 -0
  50. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/report.py +0 -0
  51. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/compliance/soc_2_cc_7_2.py +0 -0
  52. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/__init__.py +0 -0
  53. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/automated_scientist.py +0 -0
  54. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/autonomous_agent.py +0 -0
  55. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/causal_triggers.py +0 -0
  56. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/confidence_calibrator.py +0 -0
  57. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/__init__.py +0 -0
  58. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/common_english_2000.txt +0 -0
  59. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/common_english_5000.txt +0 -0
  60. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/epistemic_arbiter.py +0 -0
  61. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/epistemic_loop.py +0 -0
  62. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/extraction_validator.py +0 -0
  63. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/gauge_orchestrator.py +0 -0
  64. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/live_llm_adapter.py +0 -0
  65. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/llm_dispatch.py +0 -0
  66. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/llm_entailment.py +0 -0
  67. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/mass_semantic_engine.py +0 -0
  68. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/ouroboros.py +0 -0
  69. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/s25_interventions.py +0 -0
  70. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/semantic_dedup.py +0 -0
  71. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/slider_renderer.py +0 -0
  72. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/tome_generator.py +0 -0
  73. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/tome_sliders.py +0 -0
  74. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/vector_bridge.py +0 -0
  75. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/ensemble/venn_abers.py +0 -0
  76. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/evidence/__init__.py +0 -0
  77. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/evidence/chain.py +0 -0
  78. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/graph_store/__init__.py +0 -0
  79. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/graph_store/base.py +0 -0
  80. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/graph_store/egglog_store.py +0 -0
  81. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/graph_store/unionfind_store.py +0 -0
  82. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/__init__.py +0 -0
  83. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/akashic_ledger.py +0 -0
  84. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/jcs.py +0 -0
  85. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/key_manager.py +0 -0
  86. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/p2p_mesh.py +0 -0
  87. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/prov_o.py +0 -0
  88. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/provenance.py +0 -0
  89. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/rate_limiter.py +0 -0
  90. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/resource_guards.py +0 -0
  91. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/scheme_registry.py +0 -0
  92. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/state_encoding.py +0 -0
  93. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/telemetry.py +0 -0
  94. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/tome_parser.py +0 -0
  95. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/verifiable_credential.py +0 -0
  96. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/zig_bridge.py +0 -0
  97. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/__init__.py +0 -0
  98. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/__main__.py +0 -0
  99. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/errors.py +0 -0
  100. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/server.py +0 -0
  101. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/merkle_sidecar/__init__.py +0 -0
  102. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/merkle_sidecar/tree.py +0 -0
  103. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/render_receipt/__init__.py +0 -0
  104. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/render_receipt/verifier.py +0 -0
  105. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/__init__.py +0 -0
  106. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/bootstrap/__init__.py +0 -0
  107. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/bootstrap/multiplier_bootstrap.py +0 -0
  108. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/__init__.py +0 -0
  109. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/entropy_baseline.py +0 -0
  110. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/risk_control.py +0 -0
  111. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/split_conformal.py +0 -0
  112. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/lsh/__init__.py +0 -0
  113. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/lsh/bundle_index.py +0 -0
  114. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/conformal_meaning.py +0 -0
  115. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/exchangeability.py +0 -0
  116. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/meaning_loss.py +0 -0
  117. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/perspective_receipt.py +0 -0
  118. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/receipt.py +0 -0
  119. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/__init__.py +0 -0
  120. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/baseline.py +0 -0
  121. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/mmd.py +0 -0
  122. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/__init__.py +0 -0
  123. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/axiom_embedding.py +0 -0
  124. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/pcp.py +0 -0
  125. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sequential/__init__.py +0 -0
  126. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sequential/sprt.py +0 -0
  127. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian.py +0 -0
  128. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v2.py +0 -0
  129. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v3.py +0 -0
  130. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v32.py +0 -0
  131. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/__init__.py +0 -0
  132. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/consistency.py +0 -0
  133. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/predicate_library.py +0 -0
  134. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/spectral_entropy/__init__.py +0 -0
  135. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/research/spectral_entropy/vn_entropy.py +0 -0
  136. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/__init__.py +0 -0
  137. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/format.py +0 -0
  138. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/sign.py +0 -0
  139. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/verifier.py +0 -0
  140. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/__init__.py +0 -0
  141. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/_base.py +0 -0
  142. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/compose.py +0 -0
  143. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/extract.py +0 -0
  144. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/share.py +0 -0
  145. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/transforms/slider.py +0 -0
  146. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/trust_root/__init__.py +0 -0
  147. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_engine_internal/trust_root/verifier.py +0 -0
  148. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_conformal.py +0 -0
  149. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_demo/__init__.py +0 -0
  150. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_demo/jwks.json +0 -0
  151. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_demo/losses_billsum.json +0 -0
  152. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/_demo/meaning_risk_receipt.billsum.golden.json +0 -0
  153. {sum_engine-0.8.1 → sum_engine-0.9.0}/sum_verify/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sum-engine
3
- Version: 0.8.1
3
+ Version: 0.9.0
4
4
  Summary: SUM — bidirectional knowledge distillation with optional cryptographic attestation. Pipe prose, get a CanonicalBundle (HMAC / Ed25519 / W3C VC 2.0), verify anywhere.
5
5
  Author: ototao
6
6
  License: Apache-2.0
@@ -44,11 +44,11 @@ Provides-Extra: research
44
44
  Requires-Dist: numpy>=1.24.0; extra == "research"
45
45
  Requires-Dist: scipy>=1.10.0; extra == "research"
46
46
  Provides-Extra: judge
47
- Requires-Dist: transformers>=4.30.0; extra == "judge"
47
+ Requires-Dist: transformers<5,>=4.30.0; extra == "judge"
48
48
  Requires-Dist: torch>=2.0.0; extra == "judge"
49
49
  Requires-Dist: sentencepiece>=0.1.99; extra == "judge"
50
50
  Provides-Extra: omni-format
51
- Requires-Dist: markitdown==0.1.5; extra == "omni-format"
51
+ Requires-Dist: markitdown==0.1.6; extra == "omni-format"
52
52
  Provides-Extra: dev
53
53
  Requires-Dist: pytest>=7.0.0; extra == "dev"
54
54
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -135,8 +135,10 @@ python -m sum_verify --demo # replays the bundled BillSum golden, of
135
135
  # "scorer": "bidirectional-entailment[minilm-cosine-0.5]",
136
136
  # "not_covered": ["arrangement","sound","connotation","implicature"],
137
137
  # "proxy_caveat": "verified=true is a cryptographic fact ... the proxy
138
- # correlated only modestly (Spearman rho ~0.27-0.33). Not a substitute
139
- # for human review."}
138
+ # correlated only modestly at summary level (Spearman rho ~0.27-0.33 on
139
+ # SummEval; NLI ~0.29 replicates on FRANK; the embedding judge is
140
+ # corpus-dependent, near zero on abstractive FRANK-XSum). Not a
141
+ # substitute for human review."}
140
142
  ```
141
143
 
142
144
  To verify *your own* receipt — or the source goldens from a git checkout — pass the files explicitly:
@@ -146,7 +148,7 @@ python -m sum_verify <receipt.json> --jwks <jwks.json> --losses <losses.json>
146
148
  # from a checkout, the binding-gate goldens live in fixtures/meaning_receipts_billsum/
147
149
  ```
148
150
 
149
- `verified: true` + `replayed: true` means the committed per-pair losses hash to the receipt's anchor and re-certify to its stated bound (≤ 0.6454 at 95%) by exact integer equality — on your machine, against the issuer's JWKS, trusting nobody. **Read the `proxy_caveat`:** that PASS is a *cryptographic* fact, not proof meaning was preserved — the bound is over a proxy that tracks human judgment only modestly. The richer readout (the bound itself, perspective cohorts) is `sum verify-meaning`; for non-extractive rewrites use `--scorer nli` — [`examples/poetry_frontier/`](examples/poetry_frontier/) shows exactly where the embedding judge's blind spot is.
151
+ `verified: true` + `replayed: true` means the committed per-pair losses hash to the receipt's anchor and re-certify to its stated bound (≤ 0.6454 at 95%) by exact integer equality — on your machine, against the issuer's JWKS, trusting nobody. **Read the `proxy_caveat`:** that PASS is a *cryptographic* fact, not proof meaning was preserved — the bound is over a proxy that tracks human judgment only modestly. The richer readout (the bound itself, perspective cohorts) is `sum verify-meaning` (which needs the heavier `pip install "sum-engine[research,receipt-verify]"` — the no-numpy promise above is scoped to `python -m sum_verify`); for non-extractive rewrites use `--scorer nli` — [`examples/poetry_frontier/`](examples/poetry_frontier/) shows exactly where the embedding judge's blind spot is.
150
152
 
151
153
  **The render trust loop (signed provenance).** The other receipt family attests *that* a transformation happened (issuer, inputs, slider position, model, time) — the same JWS verifiable byte-for-byte in three independent runtimes:
152
154
 
@@ -180,6 +182,7 @@ A render receipt attests the *render*, not the truth of its content (trust scope
180
182
  | Replay-defense window (`signed_at_out_of_window`) | shipped | opt-in `max_age_seconds` parameter across all four verifier surfaces (Python render / Python transform / JS render / JS transform). Default-off preserves archival use; receivers opt in per use-case (agent-swarm 60s, real-time 600s, newsletter 1d, legal-discovery no window). |
181
183
  | `sum verify --explain` layered output | shipped | Per-dimension report (`sum.verify_explained.v1`): cryptographic integrity / canonical reconstruction / axiom consistency / extraction provenance / source evidence coverage / semantic preservation / truth of content. Each carries `epistemic_status` (`provable` / `certified` / `empirical-benchmark` / `not-asserted`). Truth of content is ALWAYS `not_asserted` — locked by test. |
182
184
  | Meaning-loss receipts + `sum_verify` SDK | shipped on PyPI ≥ 0.8.0 | `sum.meaning_risk_receipt.v1` — a signed, replayable, distribution-free bound on a *named meaning-loss proxy* (`pip install 'sum-engine[verify]'` → `import sum_verify` / `python -m sum_verify`, dependency-light: no numpy/scipy/torch). Plus `sum meaning-diff` (per-document "what was kept / dropped / added"), `sum drift-budget` (compose meaning-loss across a transform chain), and `sum exchangeability` (advisory: is a bound applicable to *your* text?). Research-flagged; the affirmative contribution behind arXiv Paper-1. |
185
+ | Certified chains + transparency log | on main; shipping in 0.9.0 | `sum.chain_receipt.v1` binds ordered hop receipts (by canonical hash + an order-binding `chain_id`) into an integer-exact Bonferroni budget with a joint confidence (`sum mint-chain`; verify with `python -m sum_verify … --hops`). The first REAL certified chain over public-domain text is committed at [`fixtures/chain_receipts_billsum/`](fixtures/chain_receipts_billsum/): BillSum (CC0), 2 real hops — the dataset's own reference summary, then deterministic lead-N extractive compression — under the strict NLI judge; budget ≤ 1.3546 at joint confidence 0.90. Honest by construction: the budget bounds the *sum* of per-hop expected losses, **not** the end-to-end loss (a directed loss, not a metric, so no triangle inequality holds), and the mandatory `budget_scope` field says exactly that. Every committed golden is witnessed in an append-only [`transparency/log.jsonl`](transparency/log.jsonl) (`python scripts/witness_receipt.py verify`). |
183
186
  | Negative-control corpus (T5 of bench-hardening) | shipped | 20 hand-authored documents across 5 failure modes (ambiguous coref / predicate-alias / contradictions / entity-resolution-adversarial / non-extractable). Runner exits 1 if observed failures don't match annotations. Baseline at [`fixtures/bench_receipts/negative_control_2026-05-17.json`](fixtures/bench_receipts/negative_control_2026-05-17.json). |
184
187
  | Compliance validators (six regimes) | shipped | `sum compliance check --regime <id> --audit-log <path>` — EU AI Act Article 12, GDPR Article 30, HIPAA § 164.312(b), ISO/IEC 27001 A.8.15, SOC 2 CC 7.2, PCI DSS v4.0 Req 10. All six produce the same `sum.compliance_report.v1` schema; per-regime docs at `docs/COMPLIANCE_*.md`. |
185
188
 
@@ -231,7 +234,7 @@ echo "Alice likes cats. Bob owns a dog." \
231
234
  | sum attest --extractor=sieve > bundle.json
232
235
 
233
236
  sum verify --input bundle.json
234
- # → sum: ✓ verified 2 axiom(s), state integer matches (hmac=absent, ed25519=absent)
237
+ # → sum: ✓ verified 2 axiom(s), state integer matches (hmac=absent, ed25519=absent, extractor=sieve (verifiable))
235
238
 
236
239
  sum render < bundle.json > tome.md
237
240
  # → bundle's axioms re-emitted as canonical prose; round-trips to the same state integer
@@ -253,7 +256,7 @@ Add cryptographic attestation with one flag:
253
256
  # Ed25519 / W3C VC 2.0 (eddsa-jcs-2022)
254
257
  python -m scripts.generate_did_web --domain your.example --private-key-out keys/issuer.pem
255
258
  sum attest --ed25519-key keys/issuer.pem < prose.txt | sum verify --strict
256
- # → hmac=absent, ed25519=verified
259
+ # → hmac=absent, ed25519=verified, extractor=sieve (verifiable)
257
260
  ```
258
261
 
259
262
  The same bundle bytes verify under `sum verify` (Python), `node standalone_verifier/verify.js` (WebCrypto), and the in-browser demo (SubtleCrypto). [`docs/DID_SETUP.md`](docs/DID_SETUP.md) walks the did:key / did:web issuer setup. [`docs/PROOF_BOUNDARY.md`](docs/PROOF_BOUNDARY.md) §1.3.1 documents what the cross-runtime Ed25519 contract proves.
@@ -332,7 +335,7 @@ Less-surfaced but shipped:
332
335
 
333
336
  ### Internal research surfaces (NOT shipped, present in repo)
334
337
 
335
- - **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT-tenant knowledge OS). 1,684 LOC; 58/58 tests pass; runs locally via `uvicorn quantum_main:app`. **NOT in the PyPI wheel** (`pyproject.toml` excludes `api*`), **NOT in the live Worker**, **NOT in the dogfood quickstart**. The substrate it composes is load-bearing for the shipping surfaces above; only the FastAPI HTTP layer is internal-research. Promote to a shipping `[api]` extra only if a named buyer or grant deliverable explicitly references one of the endpoint clusters. See top-of-file banner in `api/quantum_router.py` for the full triage rationale.
338
+ - **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT multi-tenant API). 1,684 LOC; 58/58 tests pass; runs locally via `uvicorn quantum_main:app`. **NOT in the PyPI wheel** (`pyproject.toml` excludes `api*`), **NOT in the live Worker**, **NOT in the dogfood quickstart**. The substrate it composes is load-bearing for the shipping surfaces above; only the FastAPI HTTP layer is internal-research. Promote to a shipping `[api]` extra only if a named buyer or grant deliverable explicitly references one of the endpoint clusters. See top-of-file banner in `api/quantum_router.py` for the full triage rationale.
336
339
 
337
340
  ---
338
341
 
@@ -64,8 +64,10 @@ python -m sum_verify --demo # replays the bundled BillSum golden, of
64
64
  # "scorer": "bidirectional-entailment[minilm-cosine-0.5]",
65
65
  # "not_covered": ["arrangement","sound","connotation","implicature"],
66
66
  # "proxy_caveat": "verified=true is a cryptographic fact ... the proxy
67
- # correlated only modestly (Spearman rho ~0.27-0.33). Not a substitute
68
- # for human review."}
67
+ # correlated only modestly at summary level (Spearman rho ~0.27-0.33 on
68
+ # SummEval; NLI ~0.29 replicates on FRANK; the embedding judge is
69
+ # corpus-dependent, near zero on abstractive FRANK-XSum). Not a
70
+ # substitute for human review."}
69
71
  ```
70
72
 
71
73
  To verify *your own* receipt — or the source goldens from a git checkout — pass the files explicitly:
@@ -75,7 +77,7 @@ python -m sum_verify <receipt.json> --jwks <jwks.json> --losses <losses.json>
75
77
  # from a checkout, the binding-gate goldens live in fixtures/meaning_receipts_billsum/
76
78
  ```
77
79
 
78
- `verified: true` + `replayed: true` means the committed per-pair losses hash to the receipt's anchor and re-certify to its stated bound (≤ 0.6454 at 95%) by exact integer equality — on your machine, against the issuer's JWKS, trusting nobody. **Read the `proxy_caveat`:** that PASS is a *cryptographic* fact, not proof meaning was preserved — the bound is over a proxy that tracks human judgment only modestly. The richer readout (the bound itself, perspective cohorts) is `sum verify-meaning`; for non-extractive rewrites use `--scorer nli` — [`examples/poetry_frontier/`](examples/poetry_frontier/) shows exactly where the embedding judge's blind spot is.
80
+ `verified: true` + `replayed: true` means the committed per-pair losses hash to the receipt's anchor and re-certify to its stated bound (≤ 0.6454 at 95%) by exact integer equality — on your machine, against the issuer's JWKS, trusting nobody. **Read the `proxy_caveat`:** that PASS is a *cryptographic* fact, not proof meaning was preserved — the bound is over a proxy that tracks human judgment only modestly. The richer readout (the bound itself, perspective cohorts) is `sum verify-meaning` (which needs the heavier `pip install "sum-engine[research,receipt-verify]"` — the no-numpy promise above is scoped to `python -m sum_verify`); for non-extractive rewrites use `--scorer nli` — [`examples/poetry_frontier/`](examples/poetry_frontier/) shows exactly where the embedding judge's blind spot is.
79
81
 
80
82
  **The render trust loop (signed provenance).** The other receipt family attests *that* a transformation happened (issuer, inputs, slider position, model, time) — the same JWS verifiable byte-for-byte in three independent runtimes:
81
83
 
@@ -109,6 +111,7 @@ A render receipt attests the *render*, not the truth of its content (trust scope
109
111
  | Replay-defense window (`signed_at_out_of_window`) | shipped | opt-in `max_age_seconds` parameter across all four verifier surfaces (Python render / Python transform / JS render / JS transform). Default-off preserves archival use; receivers opt in per use-case (agent-swarm 60s, real-time 600s, newsletter 1d, legal-discovery no window). |
110
112
  | `sum verify --explain` layered output | shipped | Per-dimension report (`sum.verify_explained.v1`): cryptographic integrity / canonical reconstruction / axiom consistency / extraction provenance / source evidence coverage / semantic preservation / truth of content. Each carries `epistemic_status` (`provable` / `certified` / `empirical-benchmark` / `not-asserted`). Truth of content is ALWAYS `not_asserted` — locked by test. |
111
113
  | Meaning-loss receipts + `sum_verify` SDK | shipped on PyPI ≥ 0.8.0 | `sum.meaning_risk_receipt.v1` — a signed, replayable, distribution-free bound on a *named meaning-loss proxy* (`pip install 'sum-engine[verify]'` → `import sum_verify` / `python -m sum_verify`, dependency-light: no numpy/scipy/torch). Plus `sum meaning-diff` (per-document "what was kept / dropped / added"), `sum drift-budget` (compose meaning-loss across a transform chain), and `sum exchangeability` (advisory: is a bound applicable to *your* text?). Research-flagged; the affirmative contribution behind arXiv Paper-1. |
114
+ | Certified chains + transparency log | on main; shipping in 0.9.0 | `sum.chain_receipt.v1` binds ordered hop receipts (by canonical hash + an order-binding `chain_id`) into an integer-exact Bonferroni budget with a joint confidence (`sum mint-chain`; verify with `python -m sum_verify … --hops`). The first REAL certified chain over public-domain text is committed at [`fixtures/chain_receipts_billsum/`](fixtures/chain_receipts_billsum/): BillSum (CC0), 2 real hops — the dataset's own reference summary, then deterministic lead-N extractive compression — under the strict NLI judge; budget ≤ 1.3546 at joint confidence 0.90. Honest by construction: the budget bounds the *sum* of per-hop expected losses, **not** the end-to-end loss (a directed loss, not a metric, so no triangle inequality holds), and the mandatory `budget_scope` field says exactly that. Every committed golden is witnessed in an append-only [`transparency/log.jsonl`](transparency/log.jsonl) (`python scripts/witness_receipt.py verify`). |
112
115
  | Negative-control corpus (T5 of bench-hardening) | shipped | 20 hand-authored documents across 5 failure modes (ambiguous coref / predicate-alias / contradictions / entity-resolution-adversarial / non-extractable). Runner exits 1 if observed failures don't match annotations. Baseline at [`fixtures/bench_receipts/negative_control_2026-05-17.json`](fixtures/bench_receipts/negative_control_2026-05-17.json). |
113
116
  | Compliance validators (six regimes) | shipped | `sum compliance check --regime <id> --audit-log <path>` — EU AI Act Article 12, GDPR Article 30, HIPAA § 164.312(b), ISO/IEC 27001 A.8.15, SOC 2 CC 7.2, PCI DSS v4.0 Req 10. All six produce the same `sum.compliance_report.v1` schema; per-regime docs at `docs/COMPLIANCE_*.md`. |
114
117
 
@@ -160,7 +163,7 @@ echo "Alice likes cats. Bob owns a dog." \
160
163
  | sum attest --extractor=sieve > bundle.json
161
164
 
162
165
  sum verify --input bundle.json
163
- # → sum: ✓ verified 2 axiom(s), state integer matches (hmac=absent, ed25519=absent)
166
+ # → sum: ✓ verified 2 axiom(s), state integer matches (hmac=absent, ed25519=absent, extractor=sieve (verifiable))
164
167
 
165
168
  sum render < bundle.json > tome.md
166
169
  # → bundle's axioms re-emitted as canonical prose; round-trips to the same state integer
@@ -182,7 +185,7 @@ Add cryptographic attestation with one flag:
182
185
  # Ed25519 / W3C VC 2.0 (eddsa-jcs-2022)
183
186
  python -m scripts.generate_did_web --domain your.example --private-key-out keys/issuer.pem
184
187
  sum attest --ed25519-key keys/issuer.pem < prose.txt | sum verify --strict
185
- # → hmac=absent, ed25519=verified
188
+ # → hmac=absent, ed25519=verified, extractor=sieve (verifiable)
186
189
  ```
187
190
 
188
191
  The same bundle bytes verify under `sum verify` (Python), `node standalone_verifier/verify.js` (WebCrypto), and the in-browser demo (SubtleCrypto). [`docs/DID_SETUP.md`](docs/DID_SETUP.md) walks the did:key / did:web issuer setup. [`docs/PROOF_BOUNDARY.md`](docs/PROOF_BOUNDARY.md) §1.3.1 documents what the cross-runtime Ed25519 contract proves.
@@ -261,7 +264,7 @@ Less-surfaced but shipped:
261
264
 
262
265
  ### Internal research surfaces (NOT shipped, present in repo)
263
266
 
264
- - **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT-tenant knowledge OS). 1,684 LOC; 58/58 tests pass; runs locally via `uvicorn quantum_main:app`. **NOT in the PyPI wheel** (`pyproject.toml` excludes `api*`), **NOT in the live Worker**, **NOT in the dogfood quickstart**. The substrate it composes is load-bearing for the shipping surfaces above; only the FastAPI HTTP layer is internal-research. Promote to a shipping `[api]` extra only if a named buyer or grant deliverable explicitly references one of the endpoint clusters. See top-of-file banner in `api/quantum_router.py` for the full triage rationale.
267
+ - **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT multi-tenant API). 1,684 LOC; 58/58 tests pass; runs locally via `uvicorn quantum_main:app`. **NOT in the PyPI wheel** (`pyproject.toml` excludes `api*`), **NOT in the live Worker**, **NOT in the dogfood quickstart**. The substrate it composes is load-bearing for the shipping surfaces above; only the FastAPI HTTP layer is internal-research. Promote to a shipping `[api]` extra only if a named buyer or grant deliverable explicitly references one of the endpoint clusters. See top-of-file banner in `api/quantum_router.py` for the full triage rationale.
265
268
 
266
269
  ---
267
270
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sum-engine"
7
- version = "0.8.1"
7
+ version = "0.9.0"
8
8
  description = "SUM — bidirectional knowledge distillation with optional cryptographic attestation. Pipe prose, get a CanonicalBundle (HMAC / Ed25519 / W3C VC 2.0), verify anywhere."
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -117,7 +117,12 @@ research = ["numpy>=1.24.0", "scipy>=1.10.0"]
117
117
  # A local sentence-embedding model run offline in eval mode — fixes the
118
118
  # F18 lexical-scorer paraphrase misranking without any paid API. Heavy
119
119
  # (torch); strictly optional, lazy-imported.
120
- judge = ["transformers>=4.30.0", "torch>=2.0.0", "sentencepiece>=0.1.99"]
120
+ # transformers <5: the DeBERTa-v3 slow-tokenizer path the default NLI
121
+ # judge loads is not guaranteed across the next major, and this extra's
122
+ # code path never runs in the per-PR suite — a break would ship silently.
123
+ # Lift the ceiling only with a green judge-smoke run
124
+ # (.github/workflows/judge-smoke.yml).
125
+ judge = ["transformers>=4.30.0,<5", "torch>=2.0.0", "sentencepiece>=0.1.99"]
121
126
  # Omni-format adapter. Markdown is the canonical pivot for the
122
127
  # attest pipeline: any input format -> markdown -> existing
123
128
  # extract/state/bundle path. Source URI anchors to the original
@@ -129,10 +134,10 @@ judge = ["transformers>=4.30.0", "torch>=2.0.0", "sentencepiece>=0.1.99"]
129
134
  # What this base extra brings in: HTML / DOCX-via-mammoth-not-
130
135
  # included / plaintext / EPUB-without-pandoc / .ipynb / .json.
131
136
  # For PDF/DOCX/XLSX/PPTX, install the matching markitdown extra
132
- # (`pip install 'markitdown[pdf,docx,xlsx,pptx]==0.1.5'`) on top.
137
+ # (`pip install 'markitdown[pdf,docx,xlsx,pptx]==0.1.6'`) on top.
133
138
  # Pinned hard to keep markdown output byte-identical for receipts.
134
139
  omni-format = [
135
- "markitdown==0.1.5",
140
+ "markitdown==0.1.6",
136
141
  ]
137
142
  dev = [
138
143
  "pytest>=7.0.0",