Roadmap
State of postcrime-heuristics as of 2026-05-19. Synthesised from CHANGELOG.md, recent commits, and docs/_overnight-questions.md.
This is the file tankbottoms.eth should pin and edit when prioritising new work.
Done
Federation queue migration (waves 5 + 6)
| Commit | What landed |
|---|---|
6f39b36 |
RabbitMQ broker on swarm (gpumon-owned, vhost federation). |
9d3b8f3 |
Worker shim reachable via fraud_default (drop rabbitmq_net). |
e969525 |
Tear down fraud-side RabbitMQ stack — gpumon owns broker. |
9d26bcd |
Wave 5: fraud-publisher daemon. Sweeps documents.selectSql() → publishes to fraud.rows. |
7fd1e50 |
Wave 6: fraud-enricher-v2 daemon. Consumes fraud.rows, runs workflow, writes via broker. |
6672055 |
Queue-client aligned to gpumon 3-tier spec, writer-backed getJob. |
d7b15e0 |
Rename jobs.fraud.enrich → jobs.docs.enrich (project naming policy). |
af45048 |
One-command rebuild + ship + migrate + redeploy script. |
| New today | broker/src/migrations/2026-05-19-workflow-runs.sql + tests. |
Enrichment expansion (Phases A–E)
| Phase | Status | What |
|---|---|---|
| A | Running | Per-workflow enrich stacks (refetch-pdf, ocr-recover, titles, case-facts, entities) draining residual work. summarize zero-rows under investigation. |
| B | Code-complete | format-title + title_formatted, title_format_source. |
| B+ | Code-complete | link-references + reference_filing_json. |
| C | Complete | UI cleanups: scheme/slug routes, /stats card polish, StatusChip. |
| D | Complete | Four new D3 charts on /stats: calendar heatmap, entity force network, scheme→outcome Sankey, scheme×amount circle pack. |
| E | Complete | scheme-classify workflow + columns + /scheme + /scheme/[slug] + /api/scheme/[slug]/bundle.json. |
| G | Complete | processor/scripts/status.ts single-shot status, run-all-enrich.sh orchestration. |
title-llm (new, 2026-05-19)
- Added to handle the ~45%
fallbackrate of regex/compositeformat-title. - Routes via
gpumon-ingresspool-fraud-triples(qwen3:8b,prefetch=1). - Smoke run: 3/5 high-confidence wins on
litigation_release+complaint+judgment. - See
_overnight-questions.mdQ12.
In flight
case-facts cutover pilot
- The
case-factsworkflow is the validation canary forfraud-enricher-v2. - Selected because: parses against live schema, no PDF/OCR deps, exercises custom
/apply/case-factsendpoint. - Once it matches the legacy stack-enrich-case-facts throughput, scale enricher-v2 to 2–4 replicas, then enable the rest of the workflow set.
Phase F — cross-corpus accomplices
| Commit | What |
|---|---|
0bad7c4 |
cross-corpus-accomplices script + fixture tests + schema doc. |
bf97502 |
Extended canonicalize.ts with normalizeTicker / normalizeCik / nameSignature. |
fe365b8 |
Force-cross-corpus D3 chart + /stats/api/cross-corpus endpoint. |
GAP: edgar-indexer DB is empty on node-eighteen. Join logic is scaffolded with TODO(schema) markers. See docs/refactor/edgar-indexer-schema.md. Blocked on EDGAR side.
Surfaced for review (overnight-questions blockers)
Pull the full text from docs/_overnight-questions.md. Summary table:
| Q | Severity | Owner | Action needed |
|---|---|---|---|
| Q1 | low | engineering | Confirm queue shape (chose option C). |
| Q2 | low | engineering | Confirm envelope fields (doc_id + workflow). |
| Q3 | low | engineering | Confirm schema-migration approach (ALTER documents chosen). |
| Q4 | deferred | ops | Mgmt-UI observability deferred. |
| Q5 | low | engineering | Confirm dual-tail strategy (no changes to legacy loops during wave 5). |
| Q6 (placement) | done | engineering | Fixed: stacks use node.hostname == node-eighteen. Patch docker/stack.yml similarly. |
| Q6 (broker rebuild) | done | engineering | Migration applied. |
| Q7 | needs decision | engineering | 2026-05-18-title-format.sql + 2026-05-18-scheme.sql allowlist-key mismatch. Rename files OR add aliases. |
| Q8 | done | engineering | format-title + link-references source_name → JOIN sources. |
| Q9 | done | ops | scheme-classify column migration applied. |
| Q10 | lesson | docs | Image digests aren't enough — verify routes after broker rebuild. Capture in runbook. |
| Q11 | needs decision | engineering | smoke.ts vs enricher race. Either dedicated fraud.smoke queue or RUNNING_ENRICHER_GUARD env check. |
| Q12 | in progress | engineering | format-title 45% fallback rate. title-llm now handles it (smoke ran today). Composite cleanup still pending. |
| Q13 | needs decision | engineering | Enricher exits 0 on AMQP outage. Stack now uses restart_policy: any. Permanent fix: consume close-handler process.exit(1). |
Goals to flesh out
tankbottoms.eth — this is where to write what you want next. The skeleton:
Investigation tooling
TODO:scripts/cik-signal-join.ts— one command, all four NDJSONs, joined by CIK.TODO:documents.cik_jsoncolumn + extractor workflow so we can stopbody LIKE '%cik%'.TODO:Curated-vs-flagged reconcile script (ciks-banana/roster.json⨝flagged/*.ndjson).TODO:Evidence-pack export — given a CIK or case, build a ZIP + IPFS upload.TODO:Officer-transition heuristic (new workflow) — scan 8-Ks for officer resign + new officer with same address pattern.
Frontend (see frontend.md for full list)
TODO:/entity/[id],/cik/[cik],/person/[slug].TODO:/signal/[name]— surface the NDJSON fingerprints in the UI.TODO:/network/[seed]— graph expansion from a seed.TODO:/timeline/[case-or-cik]— chronological strip.TODO:/money-flow/[case]— Sankey from defendant → instrument → recipient.TODO:/case-facts— sortable table.TODO:/ops— DLQ + queue depth + per-workflow progress dashboard.TODO:/evidence/[case]— evidence-pack export UI.
Infrastructure / hygiene
TODO:Rename migration files to match allowlist keys (Q7).TODO:Permanent fix for Q13 (consume close-handler → exit 1).TODO:Dedicatedfraud.smokequeue or smoke guard (Q11).TODO:Patchdocker/stack.ymlbroker block to usenode.hostname == node-eighteen(it currently still references the non-existentfraud_corpus=truelabel).TODO:Refresh cadence forflagged/*.ndjson— currently 1-week stale.TODO:Wire real health into$lib/synthetic/placeholders.tschips on/stats.
Analytical
TODO:Shell-score composite — single 0–1 metric per CIK that combines all four NDJSON signals.TODO:Same-address officer detection.TODO:Bar-discipline cross-reference (WSBA, state-bar APIs) for opinion-letter signers.TODO:Time-series of new shells per quarter (extending D1).
Documentation / governance
TODO:Decide canonical Cane roster source —ciks-banana/.vercel/output/static/ciks/roster.jsonor restoreciks-banana/cane-network/.TODO:Move the four NDJSON files under a versioned path so we can answer "what changed between refreshes".TODO:Capture the EDGAR-side refresh trigger in this repo's runbook even though the code lives elsewhere.