Each item exists in the repository today. “Method” says whether it is rules, software or a language model, and whether a person reviewed it. None of this is Damien’s work or opinion, and none of it implies his endorsement.
Rule-based, automaticField normalization at import
Country codes (USA to US, UK to GB), US state codes, penalty amounts as numbers, URL-safe record ids, and the federal / state / international level and US circuit derived from the court name.
- scripts/import-charlotin-csv.mjs: normalizeCountry, inferState, inferCircuit, inferJurisdiction, parseAmount
Rule-based, automaticTags, sanction types, policy gaps and “editorial impact”
Keyword rules over the imported outcome and hallucination text assign failure tags (fake citations, fabricated quotes, misrepresented authority), sanction types, control gaps, and a four-level editorial impact (low to career-ending). The impact level is AI Vortex's own heuristic, not Charlotin's classification and not a legal finding.
- scripts/import-charlotin-csv.mjs: inferTags, inferSanctionTypes, inferSeverity, inferPolicyGaps
Automatic, testedAutomatic refresh with change tracking
Re-imports from the database, links a renamed or re-dated record to the same URL so ids and first-seen dates survive, reports what was added, removed or corrected upstream, and fails a freshness check when the corpus is more than 48 hours old.
- lib/corpus-sync.mjs
- lib/first-seen.mjs
- scripts/check-freshness.mjs
- scripts/test-corpus-sync.mjs
Rule-based, automaticAI tool name normalization
The database records tools as free text (“Claude AI”, “MS Copilot”, “GPT-4o”). A canonical vocabulary of 21 tools groups those variants so filters, counts and tool pages do not split the same product. Stored values are untouched; the mapping is applied when reading. Tools outside the vocabulary keep their raw text.
- lib/ai-tools.ts
- scripts/test-ai-tools.ts
Rule-based, automaticSearch with court and jurisdiction aliases
Searches accept court shorthand (D.N.J., S.D.N.Y.) and jurisdiction aliases (US, USA, United States), show why each result matched, and disclose a broader fallback instead of silently substituting results.
- lib/filtering.ts
- lib/mcp/query.ts
- lib/cases.ts: queryCases, getCaseMatchReason, getCaseFallbacks
Rule-based, automaticSource-tier labelling
Each case link is classed as official court or government, docket mirror or free legal archive, publisher archive, or secondary report, from the link's host. It says where the link points. It is not a verification of the case.
LLM-assisted, not human-reviewedAutomated reading of the linked documents
A language model (Gemini 2.5 Flash through the KIE API) reads the linked document and drafts a structured summary: judicial reasoning, decision context, practical implications and an evidence status. 1,621 of 2,202 records have extracted judicial reasoning; 1,599 are marked primary-document-verified by that automated pass. These are AI-drafted, not human-reviewed (human-reviewed records: 0). Some fields are template text built from the imported record.
- scripts/enrich-case-intelligence-kie.mjs
- data/case-intelligence.json
- lib/case-intelligence.ts
Rule-based extraction, with quoted evidenceJudge identification
The database does not record judges. Where the linked opinion names the deciding judge, a deterministic extractor stores the name with the page locator and a quote. This covers 54 of 2,202 records, so judge pages are partial.
- scripts/extract-local-judge-candidates.mjs
- data/judge-enrichment.json
- lib/cases.ts
Generated from the corpusCourt, judge, country, state, tool, failure-mode and consequence pages
902 generated profile pages group the records by those dimensions, with counts, related entities and print-ready reports. Pages below an evidence threshold are kept out of search indexes.
- lib/entity-pages.ts
- lib/entity-intelligence.ts
- app/courts, app/judges, app/tools, app/countries, app/states, app/failure-modes, app/consequences
Computed from the corpusAnalytics, map and related cases
Counts by year, country, court and tool; an interactive map; and related-case links scored from shared court, state, tags and tool. Counts describe the tracked corpus, not usage-adjusted rates.
- lib/corpus-analytics.ts
- components/SanctionsMapV2.tsx
- lib/cases.ts: getRelatedCases
AutomaticDataset export with manifest and checksum
JSON and CSV exports of the normalized records with a versioned manifest, record count and checksum, carrying the Charlotin attribution and license notice.
- app/api/dataset/route.ts
- app/api/dataset/manifest/route.ts
- lib/public-dataset.ts
SoftwareMCP server with 26 read-only tools
Lets ChatGPT, Claude, Cursor and other MCP clients search the corpus, pull case detail, build jurisdiction and tool-risk briefs and pre-filing packets. Every response carries the Charlotin attribution.
- lib/mcp/server.ts
- app/mcp/route.ts
- scripts/test-mcp-regression.ts
SoftwareCase briefs, review workflows and reports
Per-case briefs, a pre-filing gate, a filing-integrity scanner, a control-maturity profile and a policy studio, plus printable and downloadable reports. These are AI Vortex tools built on the records.
- app/cases/[slug]/brief
- app/filing-gate
- app/filing-integrity-scanner
- app/control-maturity
- app/policy-studio
- lib/artifacts.ts
SoftwareWeekly new-cases digest and alert signup
A digest builder for cases added in the last week and a signup form. The builder only writes files; sending is a separate step.
- scripts/build-weekly-digest.mjs
- lib/alert-signup.ts