Shell Heuristics · application docs

publisher · enricher-v2 · corpus

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.enrichjobs.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% fallback rate of regex/composite format-title.
  • Routes via gpumon-ingress pool-fraud-triples (qwen3:8b, prefetch=1).
  • Smoke run: 3/5 high-confidence wins on litigation_release + complaint + judgment.
  • See _overnight-questions.md Q12.

In flight

case-facts cutover pilot

  • The case-facts workflow is the validation canary for fraud-enricher-v2.
  • Selected because: parses against live schema, no PDF/OCR deps, exercises custom /apply/case-facts endpoint.
  • 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_json column + extractor workflow so we can stop body LIKE '%cik%'.
  • TODO: Curated-vs-flagged reconcile script (ciks-banana/roster.jsonflagged/*.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: Dedicated fraud.smoke queue or smoke guard (Q11).
  • TODO: Patch docker/stack.yml broker block to use node.hostname == node-eighteen (it currently still references the non-existent fraud_corpus=true label).
  • TODO: Refresh cadence for flagged/*.ndjson — currently 1-week stale.
  • TODO: Wire real health into $lib/synthetic/placeholders.ts chips 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.json or restore ciks-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.