Skip to content
This repository was archived by the owner on Aug 9, 2026. It is now read-only.

v0.5.0 — signed verdicts, standalone verifier, verdict corpus

Choose a tag to compare

@MrPredic MrPredic released this 05 Aug 14:30
· 19 commits to main since this release

Added

  • Signed verdict receipts (signalmap.receipt/1): every distill, fit and
    monitor run 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 plus cryptography. 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 in research/factory/receipts/, each pinning the sha256
    of the report it transcribes and labelled archive_signature — signed, not
    re-run. A suite gate fails if a shipped receipt goes stale.

  • signalmap corpus rebuilds that corpus and prints the traction line.

  • signalmap prove records the permutation-resolution floor of each split and
    reports inconclusive (cannot resolve) instead of null (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
    compositional composer grammar (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 --dataset path. 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 corpus printed 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_loss compared two independently
    initialised models and failed at random (1 in 3 parallel runs); both runs now
    start from the same seed.
  • signalmap map crashed with IndexError on 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 0 reported a missing data source instead of
    naming the real problem, the frame count.
  • causal.py linear-Granger design matrix used an out-of-scope loop variable
    after a rename; caught by the new lint gate.