v0.5.0 — signed verdicts, standalone verifier, verdict corpus
Added
-
Signed verdict receipts (
signalmap.receipt/1): everydistill,fitand
monitorrun emits versioned JSON — claim, verdict
(INCLUDED/EXCLUDED/PASS/REFUSED), evidence, input hashes, Ed25519 signature.
The signing key lives in~/.signalmap/signing_key(0600) and never enters
the repo; only the public key travels in the receipt. -
tools/verify_receipt.py: standalone verifier that imports nothing from
signalmap — stdlib pluscryptography. Checks signature, schema and internal
consistency (a REFUSED verdict may not carry a deploy spec). -
Verdict corpus: the eight preregistered premium-family verdicts (rqa,
coherence, envelope over six banks; 2 included, 6 honest exclusions) shipped
as signed receipts inresearch/factory/receipts/, each pinning the sha256
of the report it transcribes and labelledarchive_signature— signed, not
re-run. A suite gate fails if a shipped receipt goes stale. -
signalmap corpusrebuilds that corpus and prints the traction line. -
signalmap proverecords the permutation-resolution floor of each split and
reportsinconclusive(cannot resolve) instead ofnull(no evidence) when
a p could never have cleared the threshold at that group count. -
signalmap qualify(source profiling and method-family routing) and the
compositionalcomposergrammar (composer-v2). -
Published to PyPI:
pip install signalmap. Releases upload through GitHub
Actions via PyPI trusted publishing (OIDC), so no API token is stored
anywhere. -
Test coverage for the seven product modules that had none —
train,
visualize,embed, the sinks, the store,discover, the simulator and the
fit --datasetpath. 116 -> 172 tests, coverage 78% -> 89%. -
Lint gate in CI (ruff, pinned version, explicitly selected rules).
-
README section "Signed verdicts, verifiable without us": the receipt, the
standalone verifier and the shipped corpus in three commands.
Fixed
signalmap corpusprinted the absolute path of every receipt, so a pasted
listing carried the maintainer's home directory. Paths under the working
directory now print relative to it.- The CI job that proves standalone verification ran from the checkout root,
where the source tree is importable through cwd: its "signalmap must not be
importable" assertion fired on every run and the verifier was never
exercised. It now runs outside the checkout. test_training_reduces_reconstruction_losscompared two independently
initialised models and failed at random (1 in 3 parallel runs); both runs now
start from the same seed.signalmap mapcrashed withIndexErroron a single-recording dataset: the
2D projection returned one column when the data could not span two. It now
always returns two, and skips UMAP below three points.signalmap train --synthetic 0reported a missing data source instead of
naming the real problem, the frame count.causal.pylinear-Granger design matrix used an out-of-scope loop variable
after a rename; caught by the new lint gate.