v0.3.0 — Organization Identity Resolution
canon now resolves entities that appear under different names across documents.
What's new
canon org — deterministic multi-stage identity resolution
The same entity appears as "Wells Fargo & Company" in one document, "Wells Fargo Bank, N.A." in another, and "WFB" in a third. canon org resolves these via a YAML-driven pipeline:
- Block — candidate neighborhood generation (exact view, rare token overlap, shared anchor, registry alias match)
- Edge — typed evidence scoring (must-link, support, cannot-link)
- Solve — staged solver with backbone merges, attachments, and reconciliation
- Audit — validate against frozen evaluation suites with holdout and perturbation stability gates
- Promote — write back to registry aliases and escrow sidecars
- Explain — proof traces for any row, entity, or escrow decision
7 new subcommands: org run, org block, org edge, org solve, org audit, org promote, org explain
6 new refusal codes: E_ORG_INPUT_CONTRACT, E_ORG_BAD_STRATEGY, E_ORG_BAD_SUITE, E_ORG_FIXTURE_INVALID, E_ORG_VERSION_BUMP_REQUIRED, E_ORG_STALE_REGISTRY
Quick start
brew upgrade cmdrvl/tap/canon
# Full pipeline:
canon org run rows.csv \
--strategy strategy.yaml \
--registry registries/org/ \
--suite eval/holdout/
# Or stage-by-stage:
canon org block rows.csv --strategy strategy.yaml --registry registries/org/ > blocks.jsonl
canon org edge rows.csv --strategy strategy.yaml --candidates blocks.jsonl --registry registries/org/ > edges.jsonl
canon org solve rows.csv --strategy strategy.yaml --edges edges.jsonl --registry registries/org/ > result.json
canon org explain result.json --canon-id IC-00042Binaries
Pre-built for 5 targets, signed with cosign, SBOM included:
aarch64-apple-darwin(Apple Silicon)x86_64-apple-darwin(Intel Mac)x86_64-unknown-linux-gnuaarch64-unknown-linux-gnux86_64-pc-windows-msvc