Watchman 1.0.2 is the first 1.0 cut with working GitHub release artifacts. v1.0.0 and v1.0.1 did not finish Create Release (no binaries or images).
Watchman 1.0 is the v2 sanctions screening engine. Screening is GET /v2/search. Each result is the list record with match (0 to 1) on the same object.
What 1.0 freezes
- API:
GET /v2/searchwithtype, name, IDs (gov_passport=COUNTRY:NUMBER), dates, and addresses. There is no JSON POST body on that path. - Identity vs evidence: a matching passport, national ID, IMO/MMSI, aircraft serial, or crypto address (with country) can score 1.0. A matching tax number, company registration, email, or phone raises the score; it does not force 1.0. Two IDs of the same type that disagree lower the blended score (
ID_CONFLICT_PENALTY_MULTIPLIER, default 0.70). - Cutoff:
minMatchis policy. 0.80 is the usual production queue (precision ~0.99 on OpenSanctions subject pairs). DefaultminMatchremains 0 so 0.x callers keep the same page of results unless they pass a cutoff. - Ingest: every uploaded row is loaded into the in-memory search index. A per-source checksum avoids scanning the table on every query.
- Ops: authentication belongs at a reverse proxy. Embeddings stay off until you configure a provider (
qwen3-embedding:0.6bvia Ollama is the measured pick). MCP is experimental.
Using Watchman: https://moov-io.github.io/watchman/using-watchman/
For compliance and risk: https://moov-io.github.io/watchman/methodology/for-compliance/
Search
- search: stop forcing 1.0 on tax IDs and contact matches
- search: penalize conflicting government IDs
- search: recast person/business/organization type mismatches (vessel/aircraft stay a hard zero)
- ingest: index all ingested rows with a checksum cache by @adamdecaf in #912
- pkg/recordlink: public
KeysandPrefixesfor hashed blocking by @adamdecaf in #909
Docs and evaluation
- docs: Using Watchman guide, first-search at
minMatch=0.80(OFAC SDN 48603 + passport → 1.0) - docs: compliance briefing, OpenSanctions Pairs tables (precision/recall; drop F1 from public pages)
- research: OpenSanctions Pairs evaluator and results by @adamdecaf in #903
- build: ship Linux and macOS GitHub releases with libpostal
Fixes
- makefile:
DIST_GOTAGSis a make variable, not acleanrecipe (Docker Hub / OpenShiftmake cleanon Create Release) - makefile:
sudo makefor libpostal so data can be written under/usr/local/shareon Ubuntu - ci: install autoconf/automake on macOS before libpostal (
autoreconf) - ci: Create Release matrices use
fail-fast: false - webui: omit request path from wasm compression log (CWE-117)
- deps: rubyzip 3.7.0 (GHSA-47m2-wp7j-p9vc)
- test: split geocoding Success tests into mock and live; keep OFAC methodology page nav
- ci: GitHub releases are latest, not prerelease
Full Changelog: v0.69.0...v1.0.2