sum-engine 0.8.0__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.
- {sum_engine-0.8.0/sum_engine.egg-info → sum_engine-0.9.0}/PKG-INFO +52 -12
- {sum_engine-0.8.0 → sum_engine-0.9.0}/README.md +49 -9
- {sum_engine-0.8.0 → sum_engine-0.9.0}/pyproject.toml +13 -4
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_cli/main.py +1526 -20
- {sum_engine-0.8.0 → sum_engine-0.9.0/sum_engine.egg-info}/PKG-INFO +52 -12
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine.egg-info/SOURCES.txt +9 -1
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine.egg-info/requires.txt +2 -2
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/automated_scientist.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/autonomous_agent.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/epistemic_loop.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/gauge_orchestrator.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/mass_semantic_engine.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/ouroboros.py +13 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/canonical_codec.py +20 -3
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/jose_envelope.py +32 -9
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/render_receipt/verifier.py +2 -2
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/frontier.py +128 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/__init__.py +43 -22
- sum_engine-0.9.0/sum_engine_internal/research/meaning/chain_receipt.py +215 -0
- sum_engine-0.9.0/sum_engine_internal/research/meaning/deterministic_judge.py +251 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/drift_budget.py +4 -1
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/local_judge.py +72 -14
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/perspective_receipt.py +18 -10
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/receipt.py +67 -8
- sum_engine-0.9.0/sum_engine_internal/research/study.py +168 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/verifier.py +1 -1
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/trust_root/verifier.py +1 -1
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_verify/__init__.py +39 -6
- sum_engine-0.9.0/sum_verify/__main__.py +227 -0
- sum_engine-0.9.0/sum_verify/_chain.py +339 -0
- sum_engine-0.9.0/sum_verify/_demo/__init__.py +9 -0
- sum_engine-0.9.0/sum_verify/_demo/jwks.json +12 -0
- sum_engine-0.9.0/sum_verify/_demo/losses_billsum.json +71 -0
- sum_engine-0.9.0/sum_verify/_demo/meaning_risk_receipt.billsum.golden.json +28 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_verify/_meaning.py +64 -11
- sum_engine-0.8.0/sum_verify/__main__.py +0 -110
- {sum_engine-0.8.0 → sum_engine-0.9.0}/LICENSE +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/setup.cfg +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_cli/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_cli/__main__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_cli/audit_log.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine.egg-info/dependency_links.txt +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine.egg-info/entry_points.txt +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine.egg-info/top_level.txt +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/adapters/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/adapters/format_pivot.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/bind.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/agent_surface/mcp_bind.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/causal_discovery.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/chunked_corpus.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/minhash.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/predicate_canon.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/semantic_arithmetic.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/syntactic_sieve.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/algorithms/zk_semantics.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/_predicates.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/eu_ai_act_article_12.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/gdpr_article_30.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/hipaa_164_312_b.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/iso_27001_8_15.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/pci_dss_4_req_10.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/report.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/compliance/soc_2_cc_7_2.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/causal_triggers.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/confidence_calibrator.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/common_english_2000.txt +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/data/common_english_5000.txt +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/epistemic_arbiter.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/extraction_validator.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/live_llm_adapter.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/llm_dispatch.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/llm_entailment.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/s25_interventions.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/semantic_dedup.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/slider_renderer.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/tome_generator.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/tome_sliders.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/vector_bridge.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/ensemble/venn_abers.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/evidence/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/evidence/chain.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/graph_store/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/graph_store/base.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/graph_store/egglog_store.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/graph_store/unionfind_store.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/akashic_ledger.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/jcs.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/key_manager.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/p2p_mesh.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/prov_o.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/provenance.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/rate_limiter.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/resource_guards.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/scheme_registry.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/state_encoding.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/telemetry.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/tome_parser.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/verifiable_credential.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/infrastructure/zig_bridge.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/__main__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/errors.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/mcp_server/server.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/merkle_sidecar/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/merkle_sidecar/tree.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/render_receipt/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/bootstrap/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/bootstrap/multiplier_bootstrap.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/entropy_baseline.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/risk_control.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/conformal/split_conformal.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/lsh/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/lsh/bundle_index.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/conformal_meaning.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/exchangeability.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/meaning/meaning_loss.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/baseline.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/mmd/mmd.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/axiom_embedding.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/robust_pca/pcp.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sequential/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sequential/sprt.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v2.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v3.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/sheaf_laplacian_v32.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/consistency.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/smt_consistency/predicate_library.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/spectral_entropy/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/research/spectral_entropy/vn_entropy.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/format.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transform_receipt/sign.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/_base.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/compose.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/extract.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/share.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/transforms/slider.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_engine_internal/trust_root/__init__.py +0 -0
- {sum_engine-0.8.0 → sum_engine-0.9.0}/sum_verify/_conformal.py +0 -0
- {sum_engine-0.8.0 → 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.
|
|
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
|
|
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.
|
|
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"
|
|
@@ -76,8 +76,24 @@ Dynamic: license-file
|
|
|
76
76
|
[](https://www.python.org/downloads/)
|
|
77
77
|
[](LICENSE)
|
|
78
78
|
|
|
79
|
+
**What it is, plainly.** SUM is a knowledge **distiller**: drop in a text and a slider renders it anywhere from a single tag to a full tome — and it hands back a *signed, offline-checkable receipt of how much of the original meaning survived*. So you can vouch for AI-transformed text to a skeptic without asking them to trust you. The distiller is the long-term aim; the signed receipt is the rung that makes lossy distillation trustworthy enough to build on.
|
|
80
|
+
|
|
79
81
|
> **SUM lets people and agents transform knowledge without losing the ability to verify what changed, what stayed the same, who signed it, and what remains unproven.**
|
|
80
82
|
|
|
83
|
+
**See what an AI transform silently dropped.** `sum meaning-diff` reads out, per document, which source claims survived a rewrite and which vanished. Here it is on a shipped fixture — a four-clause lease notice rewritten as verse:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
$ sum meaning-diff examples/poetry_frontier/source.txt examples/poetry_frontier/sonnet.txt --scorer nli
|
|
87
|
+
preservation: 55% (loss 0.450)
|
|
88
|
+
source claims: 4 — 1 preserved, 3 DROPPED:
|
|
89
|
+
✗ Late payment after the fifth day incurs a 50 dollar fee.
|
|
90
|
+
✗ The landlord must give 24 hours notice before entering the unit.
|
|
91
|
+
✗ Either party may terminate this lease with 30 days written notice.
|
|
92
|
+
added / unsupported claims: none ✓
|
|
93
|
+
(measured for THIS document under the named NLI judge — a per-document MEASUREMENT,
|
|
94
|
+
not a guarantee; for a (1−δ) corpus bound use a signed meaning_risk receipt)
|
|
95
|
+
```
|
|
96
|
+
|
|
81
97
|
Every transformation — extract triples from prose, render a tome at a controlled slider position, compose bundles across documents, share a render — emits a cryptographically-signed receipt that any third party can verify offline. The receipt attests *that the transformation happened and what its inputs were*. Separate per-axis benchmarks attest *how much the transformation preserved meaning*. Both are kept honest by separate proof discipline — and the project never blurs the line between them.
|
|
82
98
|
|
|
83
99
|
*Live trust loop:* https://sum-demo.ototao.workers.dev — three runtimes (Python, Node, modern browsers) produce byte-identical Ed25519 signatures over the same JCS-canonical bytes; verify offline against `/.well-known/jwks.json`. Mechanically proven; locked in CI on every PR.
|
|
@@ -110,14 +126,37 @@ SUM is built to be that layer **in the open**: Apache-2.0, offline-verifiable by
|
|
|
110
126
|
|
|
111
127
|
## Verify it yourself in 60 seconds
|
|
112
128
|
|
|
113
|
-
The
|
|
129
|
+
**The differentiator — replay a meaning-loss bound, fully offline.** SUM's flagship receipt is a *signed, replayable* certificate over a named meaning-loss proxy. The verifier is dependency-light (`cryptography` + `joserfc` only — no numpy / scipy / torch, no GPU, no network), and a real binding-gate golden over public-domain text (BillSum, CC0) **ships inside the wheel** — so this works straight from `pip`, no clone:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
pip install 'sum-engine[verify]' # cryptography + joserfc only
|
|
133
|
+
python -m sum_verify --demo # replays the bundled BillSum golden, offline
|
|
134
|
+
# → {"verified": true, "schema": "sum.meaning_risk_receipt.v1", "replayed": true,
|
|
135
|
+
# "scorer": "bidirectional-entailment[minilm-cosine-0.5]",
|
|
136
|
+
# "not_covered": ["arrangement","sound","connotation","implicature"],
|
|
137
|
+
# "proxy_caveat": "verified=true is a cryptographic fact ... the proxy
|
|
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."}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
To verify *your own* receipt — or the source goldens from a git checkout — pass the files explicitly:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
python -m sum_verify <receipt.json> --jwks <jwks.json> --losses <losses.json>
|
|
148
|
+
# from a checkout, the binding-gate goldens live in fixtures/meaning_receipts_billsum/
|
|
149
|
+
```
|
|
150
|
+
|
|
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.
|
|
152
|
+
|
|
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:
|
|
114
154
|
|
|
115
155
|
```bash
|
|
116
|
-
#
|
|
156
|
+
# JWKS — single Ed25519 OKP JWK, application/jwk-set+json
|
|
117
157
|
curl -sS https://sum-demo.ototao.workers.dev/.well-known/jwks.json | jq .
|
|
118
|
-
# → {"keys":[{"crv":"Ed25519","kty":"OKP","x":"...","alg":"EdDSA","use":"sig","kid":"sum-render-2026-04-27-1"}]}
|
|
119
158
|
|
|
120
|
-
#
|
|
159
|
+
# Render — tome + render_receipt (signed JWS over JCS payload)
|
|
121
160
|
curl -sS -X POST https://sum-demo.ototao.workers.dev/api/render \
|
|
122
161
|
-H 'content-type: application/json' \
|
|
123
162
|
-d '{"triples":[["alice","graduated","2012"],["alice","born","1990"]],
|
|
@@ -125,7 +164,7 @@ curl -sS -X POST https://sum-demo.ototao.workers.dev/api/render \
|
|
|
125
164
|
| jq '.render_receipt | {schema, kid, payload, jws_segments: (.jws | split(".") | length)}'
|
|
126
165
|
```
|
|
127
166
|
|
|
128
|
-
A
|
|
167
|
+
A render receipt attests the *render*, not the truth of its content (trust scope in [`docs/RENDER_RECEIPT_FORMAT.md`](docs/RENDER_RECEIPT_FORMAT.md) §5); a minimal Node verifier using `jose` + `canonicalize` is in §A.5, and the same format is reachable from Python (`joserfc` + `jcs`), Go, and Rust per §3.
|
|
129
168
|
|
|
130
169
|
---
|
|
131
170
|
|
|
@@ -143,6 +182,7 @@ A minimal Node verifier using `jose` + `canonicalize` is in [`docs/RENDER_RECEIP
|
|
|
143
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). |
|
|
144
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. |
|
|
145
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`). |
|
|
146
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). |
|
|
147
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`. |
|
|
148
188
|
|
|
@@ -194,7 +234,7 @@ echo "Alice likes cats. Bob owns a dog." \
|
|
|
194
234
|
| sum attest --extractor=sieve > bundle.json
|
|
195
235
|
|
|
196
236
|
sum verify --input bundle.json
|
|
197
|
-
# → 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))
|
|
198
238
|
|
|
199
239
|
sum render < bundle.json > tome.md
|
|
200
240
|
# → bundle's axioms re-emitted as canonical prose; round-trips to the same state integer
|
|
@@ -216,7 +256,7 @@ Add cryptographic attestation with one flag:
|
|
|
216
256
|
# Ed25519 / W3C VC 2.0 (eddsa-jcs-2022)
|
|
217
257
|
python -m scripts.generate_did_web --domain your.example --private-key-out keys/issuer.pem
|
|
218
258
|
sum attest --ed25519-key keys/issuer.pem < prose.txt | sum verify --strict
|
|
219
|
-
# → hmac=absent, ed25519=verified
|
|
259
|
+
# → hmac=absent, ed25519=verified, extractor=sieve (verifiable)
|
|
220
260
|
```
|
|
221
261
|
|
|
222
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.
|
|
@@ -295,7 +335,7 @@ Less-surfaced but shipped:
|
|
|
295
335
|
|
|
296
336
|
### Internal research surfaces (NOT shipped, present in repo)
|
|
297
337
|
|
|
298
|
-
- **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT-tenant
|
|
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.
|
|
299
339
|
|
|
300
340
|
---
|
|
301
341
|
|
|
@@ -332,7 +372,7 @@ This roadmap names only unshipped work. Items already landed live in [`CHANGELOG
|
|
|
332
372
|
|
|
333
373
|
**Platform surface (post-hardening)**
|
|
334
374
|
|
|
335
|
-
Source anchoring in the bundle schema, bundle explorer / viewer, `sum
|
|
375
|
+
Source anchoring in the bundle schema, bundle explorer / viewer, `sum tutorial` onboarding, shareable bundle URLs `/b/{hash}`, PWA-installable demo, `sum attest <url>` fetch mode. Each item names its dependency in [`docs/NEXT_SESSION_PLAYBOOK.md`](docs/NEXT_SESSION_PLAYBOOK.md).
|
|
336
376
|
|
|
337
377
|
---
|
|
338
378
|
|
|
@@ -5,8 +5,24 @@
|
|
|
5
5
|
[](https://www.python.org/downloads/)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
+
**What it is, plainly.** SUM is a knowledge **distiller**: drop in a text and a slider renders it anywhere from a single tag to a full tome — and it hands back a *signed, offline-checkable receipt of how much of the original meaning survived*. So you can vouch for AI-transformed text to a skeptic without asking them to trust you. The distiller is the long-term aim; the signed receipt is the rung that makes lossy distillation trustworthy enough to build on.
|
|
9
|
+
|
|
8
10
|
> **SUM lets people and agents transform knowledge without losing the ability to verify what changed, what stayed the same, who signed it, and what remains unproven.**
|
|
9
11
|
|
|
12
|
+
**See what an AI transform silently dropped.** `sum meaning-diff` reads out, per document, which source claims survived a rewrite and which vanished. Here it is on a shipped fixture — a four-clause lease notice rewritten as verse:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
$ sum meaning-diff examples/poetry_frontier/source.txt examples/poetry_frontier/sonnet.txt --scorer nli
|
|
16
|
+
preservation: 55% (loss 0.450)
|
|
17
|
+
source claims: 4 — 1 preserved, 3 DROPPED:
|
|
18
|
+
✗ Late payment after the fifth day incurs a 50 dollar fee.
|
|
19
|
+
✗ The landlord must give 24 hours notice before entering the unit.
|
|
20
|
+
✗ Either party may terminate this lease with 30 days written notice.
|
|
21
|
+
added / unsupported claims: none ✓
|
|
22
|
+
(measured for THIS document under the named NLI judge — a per-document MEASUREMENT,
|
|
23
|
+
not a guarantee; for a (1−δ) corpus bound use a signed meaning_risk receipt)
|
|
24
|
+
```
|
|
25
|
+
|
|
10
26
|
Every transformation — extract triples from prose, render a tome at a controlled slider position, compose bundles across documents, share a render — emits a cryptographically-signed receipt that any third party can verify offline. The receipt attests *that the transformation happened and what its inputs were*. Separate per-axis benchmarks attest *how much the transformation preserved meaning*. Both are kept honest by separate proof discipline — and the project never blurs the line between them.
|
|
11
27
|
|
|
12
28
|
*Live trust loop:* https://sum-demo.ototao.workers.dev — three runtimes (Python, Node, modern browsers) produce byte-identical Ed25519 signatures over the same JCS-canonical bytes; verify offline against `/.well-known/jwks.json`. Mechanically proven; locked in CI on every PR.
|
|
@@ -39,14 +55,37 @@ SUM is built to be that layer **in the open**: Apache-2.0, offline-verifiable by
|
|
|
39
55
|
|
|
40
56
|
## Verify it yourself in 60 seconds
|
|
41
57
|
|
|
42
|
-
The
|
|
58
|
+
**The differentiator — replay a meaning-loss bound, fully offline.** SUM's flagship receipt is a *signed, replayable* certificate over a named meaning-loss proxy. The verifier is dependency-light (`cryptography` + `joserfc` only — no numpy / scipy / torch, no GPU, no network), and a real binding-gate golden over public-domain text (BillSum, CC0) **ships inside the wheel** — so this works straight from `pip`, no clone:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip install 'sum-engine[verify]' # cryptography + joserfc only
|
|
62
|
+
python -m sum_verify --demo # replays the bundled BillSum golden, offline
|
|
63
|
+
# → {"verified": true, "schema": "sum.meaning_risk_receipt.v1", "replayed": true,
|
|
64
|
+
# "scorer": "bidirectional-entailment[minilm-cosine-0.5]",
|
|
65
|
+
# "not_covered": ["arrangement","sound","connotation","implicature"],
|
|
66
|
+
# "proxy_caveat": "verified=true is a cryptographic fact ... the proxy
|
|
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."}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
To verify *your own* receipt — or the source goldens from a git checkout — pass the files explicitly:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python -m sum_verify <receipt.json> --jwks <jwks.json> --losses <losses.json>
|
|
77
|
+
# from a checkout, the binding-gate goldens live in fixtures/meaning_receipts_billsum/
|
|
78
|
+
```
|
|
79
|
+
|
|
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.
|
|
81
|
+
|
|
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:
|
|
43
83
|
|
|
44
84
|
```bash
|
|
45
|
-
#
|
|
85
|
+
# JWKS — single Ed25519 OKP JWK, application/jwk-set+json
|
|
46
86
|
curl -sS https://sum-demo.ototao.workers.dev/.well-known/jwks.json | jq .
|
|
47
|
-
# → {"keys":[{"crv":"Ed25519","kty":"OKP","x":"...","alg":"EdDSA","use":"sig","kid":"sum-render-2026-04-27-1"}]}
|
|
48
87
|
|
|
49
|
-
#
|
|
88
|
+
# Render — tome + render_receipt (signed JWS over JCS payload)
|
|
50
89
|
curl -sS -X POST https://sum-demo.ototao.workers.dev/api/render \
|
|
51
90
|
-H 'content-type: application/json' \
|
|
52
91
|
-d '{"triples":[["alice","graduated","2012"],["alice","born","1990"]],
|
|
@@ -54,7 +93,7 @@ curl -sS -X POST https://sum-demo.ototao.workers.dev/api/render \
|
|
|
54
93
|
| jq '.render_receipt | {schema, kid, payload, jws_segments: (.jws | split(".") | length)}'
|
|
55
94
|
```
|
|
56
95
|
|
|
57
|
-
A
|
|
96
|
+
A render receipt attests the *render*, not the truth of its content (trust scope in [`docs/RENDER_RECEIPT_FORMAT.md`](docs/RENDER_RECEIPT_FORMAT.md) §5); a minimal Node verifier using `jose` + `canonicalize` is in §A.5, and the same format is reachable from Python (`joserfc` + `jcs`), Go, and Rust per §3.
|
|
58
97
|
|
|
59
98
|
---
|
|
60
99
|
|
|
@@ -72,6 +111,7 @@ A minimal Node verifier using `jose` + `canonicalize` is in [`docs/RENDER_RECEIP
|
|
|
72
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). |
|
|
73
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. |
|
|
74
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`). |
|
|
75
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). |
|
|
76
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`. |
|
|
77
117
|
|
|
@@ -123,7 +163,7 @@ echo "Alice likes cats. Bob owns a dog." \
|
|
|
123
163
|
| sum attest --extractor=sieve > bundle.json
|
|
124
164
|
|
|
125
165
|
sum verify --input bundle.json
|
|
126
|
-
# → 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))
|
|
127
167
|
|
|
128
168
|
sum render < bundle.json > tome.md
|
|
129
169
|
# → bundle's axioms re-emitted as canonical prose; round-trips to the same state integer
|
|
@@ -145,7 +185,7 @@ Add cryptographic attestation with one flag:
|
|
|
145
185
|
# Ed25519 / W3C VC 2.0 (eddsa-jcs-2022)
|
|
146
186
|
python -m scripts.generate_did_web --domain your.example --private-key-out keys/issuer.pem
|
|
147
187
|
sum attest --ed25519-key keys/issuer.pem < prose.txt | sum verify --strict
|
|
148
|
-
# → hmac=absent, ed25519=verified
|
|
188
|
+
# → hmac=absent, ed25519=verified, extractor=sieve (verifiable)
|
|
149
189
|
```
|
|
150
190
|
|
|
151
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.
|
|
@@ -224,7 +264,7 @@ Less-surfaced but shipped:
|
|
|
224
264
|
|
|
225
265
|
### Internal research surfaces (NOT shipped, present in repo)
|
|
226
266
|
|
|
227
|
-
- **`api/quantum_router.py` + `quantum_main.py`** — FastAPI surface with 26+ endpoints (branchable knowledge graph, ZK semantic proofs, federated KG sync, JWT-tenant
|
|
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.
|
|
228
268
|
|
|
229
269
|
---
|
|
230
270
|
|
|
@@ -261,7 +301,7 @@ This roadmap names only unshipped work. Items already landed live in [`CHANGELOG
|
|
|
261
301
|
|
|
262
302
|
**Platform surface (post-hardening)**
|
|
263
303
|
|
|
264
|
-
Source anchoring in the bundle schema, bundle explorer / viewer, `sum
|
|
304
|
+
Source anchoring in the bundle schema, bundle explorer / viewer, `sum tutorial` onboarding, shareable bundle URLs `/b/{hash}`, PWA-installable demo, `sum attest <url>` fetch mode. Each item names its dependency in [`docs/NEXT_SESSION_PLAYBOOK.md`](docs/NEXT_SESSION_PLAYBOOK.md).
|
|
265
305
|
|
|
266
306
|
---
|
|
267
307
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sum-engine"
|
|
7
|
-
version = "0.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
140
|
+
"markitdown==0.1.6",
|
|
136
141
|
]
|
|
137
142
|
dev = [
|
|
138
143
|
"pytest>=7.0.0",
|
|
@@ -207,6 +212,10 @@ exclude = ["Tests*", "Tests.*", "scripts*", "api*", "single_file_demo*"]
|
|
|
207
212
|
# Bundled frequency-table assets used by the slider renderer's
|
|
208
213
|
# audience-axis classifier (Phase E.1 STATE 5b).
|
|
209
214
|
"sum_engine_internal.ensemble.data" = ["*.txt"]
|
|
215
|
+
# The `python -m sum_verify --demo` golden — a real binding-gate
|
|
216
|
+
# meaning-risk receipt (BillSum, CC0) + JWKS + losses, so a pip-only
|
|
217
|
+
# user can replay a bound offline with zero git clone.
|
|
218
|
+
"sum_verify._demo" = ["*.json"]
|
|
210
219
|
|
|
211
220
|
[tool.ruff]
|
|
212
221
|
line-length = 100
|