Shell Heuristics · application docs

publisher · enricher-v2 · corpus

Detailed Analysis — How the Precrime Heuristics Were Derived

This document records the full methodology behind the precrime-analysis deliverable: how the three cases were located, how their EDGAR data was pulled, how each Cane-scheme postcrime heuristic was mapped onto a precrime EDGAR signal, and how to reproduce the entire scoring pass from a CIK and a User-Agent string.

The companion files README.md, case-01-rtsl.md, case-02-sgr-energy.md, case-03-gp-solutions.md, and synthesis.md are the user-facing deliverables. This file is the lab notebook.

1. Methodology Narrative

1.1 Case-selection filter

The brief required three 2024–2026 SEC enforcement actions against public companies for pump-and-dump or unregistered-securities conduct, with named individuals, tickers, dollar amounts, scheme mechanics, and government action dates.

The starting corpus was fraud-heuristics/corpus.db — a SQLite/FTS5 database of 37,619 DOJ-SDNY plus SEC litigation-release documents, located at rooot@node-eighteen:/var/lib/fraud-data/corpus.db. The relevant schema columns are:

Column Purpose
documents.id Primary key
documents.title Litigation release headline (e.g., "SEC Charges Rapid Therapeutic Science Laboratories…")
documents.body Full release text
documents.filing_date Date the SEC posted the release
documents.scheme_slug Pre-classified scheme bucket (pump-and-dump, unregistered-securities, insider-trading, etc.)

The selection query, conceptually:

SELECT id, title, filing_date, substr(body, 1, 4000) AS body_preview
FROM documents
WHERE scheme_slug IN ('pump-and-dump', 'unregistered-securities')
  AND filing_date BETWEEN '2024-01-01' AND '2026-05-31'
  AND body LIKE '%CIK%'                       -- proxy for "public-company defendant"
ORDER BY filing_date DESC;

From the returned set, three cases were retained because each (a) named a publicly-traded issuer with a resolvable CIK, (b) named at least one individual defendant by full name, (c) stated a dollar amount in either restitution or alleged proceeds, and (d) described a clear scheme mechanic.

Rejected candidates were dropped for one of: pure-individual defendants with no issuer CIK, foreign issuers without data.sec.gov submissions, sub-$1M dollar amounts, or amendments to pre-2024 cases.

The three retained cases:

  1. RTSL (Rapid Therapeutic Science Laboratories) — 2023-09-18 charging date (within window), pump-and-dump on OTC.
  2. SGR Energy — 2024-07-29 charging date, unregistered Reg-D offering.
  3. GP Solutions — 2026-01-08 charging date, Reg-A pump on dormant cannabis shell.

1.2 Scheme-detail extraction

For each retained case the body of the litigation release plus the publicly-available complaint were read to extract: (i) named individuals, (ii) named entities, (iii) dollar amounts, (iv) scheme mechanic in two sentences, (v) charging date. These five facts were copied into the respective case files in this directory.

1.3 Postcrime → precrime mapping rule

The mapping rule applied to every Cane-scheme fingerprint was:

A postcrime fingerprint is admissible as a precrime signal if and only if it can be observed on data that exists before any government charging document — i.e., on the raw EDGAR submissions JSON or on the raw accession-header text.

Signals that required indictment text, government testimony, or post-investigation press releases were excluded from the precrime catalog. Signals that required body-text scanning of S-1/10-K/10-Q exhibits were retained but tagged "body-text" so they can be scored as a second tier when the body text is available.

The result is the 16-row catalog in README.md. Twelve rows derive directly from Cane-scheme work (heuristics 1–7, 9, 11–14); four were surfaced by these three cases (heuristics 8, 10, 15, 16). Heuristic 6 (going_dark_blackout) was already implicit in the Cane catalog under late_filer_cluster but is broken out explicitly because the SDI/LATI 15-12G/12B/15D pattern is structurally distinct from a chronic late-filer cluster.

2. EDGAR Pull Mechanics

2.1 CIK resolution

The CIK for each issuer was resolved via the edgar-cik-cli tool at *********/edgar-cik-cli/:

cd *********/edgar-cik-cli
bun start lookup "Rapid Therapeutic Science Laboratories"
bun start lookup "SGR Energy"
bun start lookup "GP Solutions"

bun start lookup queries https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&company=<name>&type=&dateb=&owner=include&count=40 and parses the result-set table, returning name+CIK matches. Disambiguation against the complaint's stated state of incorporation and SIC eliminated namesakes.

Resolved CIKs:

Issuer CIK Padded form
Rapid Therapeutic Science Laboratories 1575659 0001575659
SGR Energy 1687025 0001687025
GP Solutions 1424264 0001424264

2.2 Submissions JSON pull

For each CIK the canonical submissions URL is:

https://data.sec.gov/submissions/CIK<10-digit-zero-padded>.json

SEC fair-access policy requires every automated request to carry a User-Agent header that uniquely identifies the requester with a contact email. The header used was:

User-Agent: tankbottoms.eth precrime-research/1.0 [email protected]

Three JSONs were fetched in a single sandboxed ctx_execute JavaScript call (one fetch per CIK, sequential, no concurrency to stay under SEC's published 10 req/s limit). The returned schema (relevant fields only):

{
  "cik": "1575659",
  "name": "Rapid Therapeutic Science Laboratories, Inc.",
  "tickers": ["RTSL"],
  "exchanges": ["OTC"],
  "sic": "2834",
  "sicDescription": "Pharmaceutical Preparations",
  "stateOfIncorporation": "NV",
  "formerNames": [
    {"name": "PowerMedChairs, Inc.", "from": "2013-05-23", "to": "2017-05-09"},
    {"name": "Holly Brothers Pictures, Inc.", "from": "2017-06-07", "to": "2020-01-21"}
  ],
  "filings": {
    "recent": {
      "form":            ["10-K", "10-Q", "8-K", "15-12G", "NT 10-K", ...],
      "filingDate":      ["2023-04-15", "2023-08-14", ...],
      "accessionNumber": ["0001575659-23-000012", ...],
      "primaryDocument": ["rtsl_10k.htm", ...]
    }
  }
}

2.3 Accession-prefix parsing

Every EDGAR accession number has the structure <filer-CIK 10-digit>-<2-digit year>-<6-digit seq>. The filer-CIK prefix identifies who submitted the document, which is not necessarily the issuer. The two cases:

  • Prefix == issuer CIK → self-filed. Material when paired with a capital-raise form (Form D, S-1, 1-A). Heuristic 16 (self_filer_for_material_capital).
  • Prefix != issuer CIK → third-party filer-agent. Cross-reference against the historical Cane-scheme agent list (Cane Clark LLP, O'Neill Taylor LLC, Loev Law, etc.) for heuristic 7 (filer_agent_overlap).

Parsing was a single line per accession:

const [filerCik, yy, seq] = accession.split("-");
const selfFiled = parseInt(filerCik, 10) === parseInt(issuerCik, 10);

2.4 Dormancy and SIC anomaly computation

Dormancy = number of years between the most-recent filing date and the next-most-recent filing date that produced a material form (S-1, 1-A, 8-K Item 5.06, 10-K). For GP Solutions: gap from 2008-01-15 (REGDEX) to 2019-09-20 (1-A) = 11.68 years.

SIC drift = comparison of sicDescription against the issuer's stated line of business in the most recent offering circular or 10-K. Drift fires on a major-group change (first two digits of SIC). Freeze fires when SIC is constant but the offering-circular product description names an unrelated line of business.

3. Heuristic Derivation Log

Each row below records: (a) the Cane-scheme postcrime fact that originated the heuristic, (b) the precrime EDGAR signal it was reduced to, (c) the data source on which the signal is computable, and (d) why the weight was chosen.

3.1 name_recycling (weight 3)

  • Cane origin: Tele-Lawyer → Dynamic Associates → LATI on CIK 878146 across 2001–2010. Three identities on one CIK in nine years.
  • Precrime signal: formerNames[].length ≥ 2 on the submissions JSON.
  • Data: data.sec.gov/submissions/CIK<n>.jsonformerNames.
  • Weight 3: Two or more name changes on a single CIK without a corresponding S-4 merger filing is a near-zero-false-positive marker. Public-issuer name changes are rare and consequential events; serial use is a forensic accelerant.

3.2 shell_reactivation (weight 3)

  • Cane origin: Sedona Software Solutions and the SDI shells — dormant CIKs reactivated through 8-K Item 5.06 (change in shell-company status).
  • Precrime signal: Filing-date gap > 24 months between any two consecutive filings, followed by a registration-class form (S-1, 1-A, 8-K Item 5.06).
  • Data: filings.recent.filingDate[] sorted descending; compute consecutive-gap array.
  • Weight 3: Dormancy reactivation is the signature move of every shell-mill operator. The 24-month threshold is set so that operating companies in distress (which can also go quiet) do not generate noise.

3.3 reverse_merger_chain (weight 3)

  • Cane origin: MW Medical / Davi Skin shell-traffic. The Cane scheme used the 8-K Item 5.06 → 2.01 → 5.03 sequence to launder a shell into a "live" target.
  • Precrime signal: Cluster of 8-K Items 5.06, 2.01, 5.03 within a 90-day window, or any of 8-K12G3 / S-4 / DEFM14A filings.
  • Data: filings.recent.form[] plus filings.recent.primaryDocument[] (for 8-K item parsing).
  • Weight 3: The Item-5.06 → 2.01 → 5.03 sequence is the textbook reverse-merger pattern. False-positive rate is low because the three items rarely cluster outside an RM.

3.4 penny_stock_s1_s8 (weight 2)

  • Cane origin: LVGI and LATI S-8 dump-to-consultant pattern — S-8 (employee/consultant benefit-plan registration) used to issue free-trading stock to insiders within 12 months of an S-1 going effective.
  • Precrime signal: Any S-8 or S-8 POS filed within 12 months of an S-1 effective date.
  • Data: filings.recent.form[] + filings.recent.filingDate[].
  • Weight 2: S-8 dumps on penny-stock issuers are common but not dispositive; weighting at 2 lets the heuristic contribute without overwhelming the score on legitimate equity-comp plans.

3.5 late_filer_cluster (weight 2)

  • Cane origin: LATI chronic NT 10-K cluster preceded Form-5 backdating and Section-16 violations.
  • Precrime signal: Three or more NT 10-K or NT 10-Q filings in any 24-month window.
  • Data: filings.recent.form[] + filings.recent.filingDate[].
  • Weight 2: Many legitimate small-cap issuers file NTs occasionally; the cluster threshold (≥3 in 24 months) suppresses noise.

3.6 going_dark_blackout (weight 2)

  • Cane origin: LATI 15-12G after SEC interest; SDI 15-12B abandonment.
  • Precrime signal: 15-12G, 15-12B, or 15-15D filed within 12 months of the last periodic.
  • Data: filings.recent.form[] + filings.recent.filingDate[].
  • Weight 2: Going-dark is a frequent precursor to or contemporary with enforcement; useful as a confirming signal once another heuristic has fired.

3.7 filer_agent_overlap (weight 3)

  • Cane origin: Cane Clark LLP and O'Neill Taylor LLC served as filer-agent for dozens of Cane-scheme shells. The accession-prefix CIK matched a small closed list of known mill agents.
  • Precrime signal: Accession-number prefix CIK matches a curated list of known shell-mill agent CIKs.
  • Data: Parse first 10 digits of every accession; lookup against a static dictionary.
  • Weight 3: The single most actionable signal in the catalog when the dictionary is current. False-positive rate near zero because legitimate counsel does not file for dozens of unrelated shells. The 2017–2025 dictionary refresh is the highest-leverage catalog improvement available.

3.8 form_d_only_issuer (weight 3) — NEW (SGR Energy)

  • Surfaced by: SGR Energy — single Form D, $21.3M raised over four years, no S-1, no periodics.
  • Precrime signal: Lifetime EDGAR footprint = one or a small number of Form D filings, no S-1, no periodics, no 8-K.
  • Data: filings.recent.form[] length and content distribution.
  • Weight 3: A Form D used as the entire SEC-facing footprint of a material capital raise is structurally an abuse of the Reg-D exemption regime. False-positive rate is acceptably low when paired with a dollar-amount threshold ($1M+).

3.9 reg_s_issuance (weight 2)

  • Cane origin: LATI and Sedona offshore Regulation-S tranches.
  • Precrime signal: Body-text regex hit on Reg(ulation)? S, Rule 904, non-U.S. persons, plus a share-count number within 200 characters.
  • Data: Primary-document text of S-1, 10-K, 10-Q, 8-K. Body-text tier.
  • Weight 2: Reg-S issuance is legitimate when properly documented; weighting at 2 lets the heuristic contribute without overwhelming legitimate offshore raises.

3.10 reg_a_offering (weight 2) — NEW (GP Solutions)

  • Surfaced by: GP Solutions — 1-A on a CIK with 11.7 years of dormancy and only one prior filing.
  • Precrime signal: 1-A or 1-A/A filed on a CIK with ≥ 5 years dormancy and ≤ 5 lifetime filings before it.
  • Data: filings.recent form-and-date distribution.
  • Weight 2: Reg-A+ on a young operating company is legitimate; on a long-dormant shell it is the inverse of the regime's intended use.

3.11 sic_code_drift (weight 2)

  • Cane origin: Derived from name_recycling — Cane-scheme name changes were accompanied by SIC code reassignment to whatever industry the next pump targeted.
  • Precrime signal: SIC major-group changes within a 24-month window OR SIC remains constant while the offering circular markets an unrelated product line (frozen-SIC inverse case from GP Solutions).
  • Data: sic + sicDescription compared against the most recent offering-circular or 10-K product description.
  • Weight 2: Both directions of SIC anomaly score equally — the unifying principle is "SIC inconsistent with current line of business."

3.12 promissory_note_clauses (weight 2)

  • Cane origin: Cane convertible-debt cycle with toxic financiers.
  • Precrime signal: Body-text regex on advance-fee and death-spiral language (specific clauses defined in fraud-heuristics/src/pipelines/extractors/promissory.ts).
  • Data: Primary-document text of 10-K, 10-Q. Body-text tier.
  • Weight 2: Promissory-note language is common; the discriminative power is in the specific death-spiral clauses, which the extractor handles.

3.13 opinion_letter_presence (weight 3)

  • Cane origin: Loev Law and Cane Clark Rule-144 opinion letters as S-1 exhibits.
  • Precrime signal: S-1 exhibit signed by a known shell-network counsel.
  • Data: Exhibit-5 attorney-consent block in the S-1 primary document.
  • Weight 3: Highest-confidence signal in the body-text tier per docs/application/heuristics.md (cited as 1.5 MB highest-quality producer).

3.14 form_144_outlier (weight 2)

  • Cane origin: Cane Form-5 backdating; insider sales timed to material 8-Ks.
  • Precrime signal: Form 144 within 30 days of a material 8-K (Items 1.01, 2.01, 5.02, 8.01).
  • Data: Form 144 (filed by the insider, separate CIK) cross-walked to issuer CIK via holdsSecuritiesOf field; compare against issuer 8-K dates.
  • Weight 2: Requires CIK cross-walk; lower weight reflects implementation complexity, not signal quality.

3.15 sec_staff_action (weight 3) — NEW (GP Solutions)

  • Surfaced by: GP Solutions — SEC STAFF ACTION accession 9999999997-22-002999 posted 2022-05-20, 3.6 years before formal complaint.
  • Precrime signal: Form type SEC STAFF ACTION appears in filings.recent.form[].
  • Data: filings.recent.form[].
  • Weight 3: Dispositive Tier-1 escalator. By the time staff posts a public staff action, the CIK is under active examination; charging within 24 months is the historical norm.

3.16 self_filer_for_material_capital (weight 2) — NEW (SGR Energy)

  • Surfaced by: SGR Energy — accession 0001687025-17-000003 self-filed by issuer for $21.3M Form D raise.
  • Precrime signal: Accession prefix == issuer CIK on a Form D with totalOfferingAmount ≥ $1M.
  • Data: Accession-prefix parse plus Form-D Item 13.
  • Weight 2: Pairs with form_d_only_issuer to flag the private-issuer Cane analog.

4. Reproducibility Appendix

4.1 Inputs

Item Value
RTSL CIK 1575659
SGR Energy CIK 1687025
GP Solutions CIK 1424264
User-Agent tankbottoms.eth precrime-research/1.0 [email protected]
Submissions URL pattern https://data.sec.gov/submissions/CIK%010d.json

4.2 Scoring script (Bun/TypeScript, zero dependencies)

A reference implementation that, given a CIK, fetches the submissions JSON, applies the structural heuristics (1–8, 10, 11, 15, 16), and emits a JSON score record is provided in score-cik.ts alongside this file. Run with:

cd *********/fraud-heuristics/docs/precrime-analysis
bun run score-cik.ts 1575659
bun run score-cik.ts 1687025
bun run score-cik.ts 1424264

Output schema:

{
  "cik": "1575659",
  "name": "Rapid Therapeutic Science Laboratories, Inc.",
  "score": 15,
  "max_score": 38,
  "triggered": [
    {"slug": "name_recycling",       "weight": 3, "earliest_trip": "2017-06-07"},
    {"slug": "shell_reactivation",   "weight": 3, "earliest_trip": "2020-01-21"},
    {"slug": "late_filer_cluster",   "weight": 2, "earliest_trip": "2020-04-15"},
    {"slug": "going_dark_blackout",  "weight": 2, "earliest_trip": "2024-01-16"},
    {"slug": "sic_code_drift",       "weight": 2, "earliest_trip": "2017-06-07"}
  ],
  "earliest_trip_overall": "2017-06-07",
  "tier": 1
}

4.3 Tiering rule

score >= 10                        → Tier 1
score 6..9                         → Tier 2
score 3..5                         → Tier 3
sec_staff_action triggered         → Tier 1 (regardless of score)
form_d_only_issuer triggered ≥ $1M → Tier 1 (regardless of score)

4.4 Body-text augmentation

The structural pass covers heuristics 1–8, 10, 11, 15, 16. To run the full 16-heuristic pass:

  1. For each accession with primary form in (S-1, 10-K, 10-Q, 8-K, 1-A), download the primary document via https://www.sec.gov/Archives/edgar/data/<cik-no-pad>/<accession-no-hyphens>/<primaryDocument>.
  2. Apply the body-text extractors in fraud-heuristics/src/pipelines/extractors/:
    • promissory.ts → heuristic 12 (promissory_note_clauses)
    • convertible.ts → contributes to heuristic 12
    • reverse-merger.ts → confirms heuristic 3
    • beneficial.ts → adjacent to heuristic 14
  3. Apply the reg_s regex set (defined in fraud-heuristics/enrich-worker/src/configs/scheme_classify.ts) → heuristic 9.
  4. Apply the opinion_letter_presence extractor (currently the 1.5 MB highest-quality producer) → heuristic 13.

4.5 Filer-agent dictionary refresh

The single highest-leverage catalog improvement is refreshing the edgarizer_fingerprint.ndjson dictionary against 2017–2025 shell-mill agents. Procedure:

  1. Query corpus.db for all SEC litigation releases 2017–2025 with scheme_slug = 'pump-and-dump'.
  2. For each named issuer, resolve the CIK via edgar-cik-cli lookup.
  3. Pull each issuer's S-1 and 1-A accession prefixes.
  4. Group accession-prefix CIKs by frequency; any prefix appearing across ≥ 3 unrelated issuer CIKs from this set is a candidate agent.
  5. Manually validate the top 50 candidates against the SEC EDGAR filer database.
  6. Add validated CIKs to the dictionary with first_seen, last_seen, and case_count fields.

This pass alone is expected to lift heuristic-7 coverage from approximately 0% on modern cases to a target of 60%+, which would raise mean precrime lead time on the three sample cases from 6.6 years to a projected 7.5+ years.

4.6 Known limitations

  1. Submissions JSON pagination — issuers with >1000 lifetime filings paginate into filings.files[]. The current pull does not follow pagination; for issuers near or above the 1000-filing threshold, augment with the paginated files.
  2. Paper filings — pre-EDGAR paper filings (form REGDEX) carry primaryDocument that points to scanned-image PDFs. Body-text tier extractors will not work on these; structural signals (form presence, dates) still work.
  3. SIC self-reporting — issuers self-report SIC on Form 1-A and S-1; the sic field on submissions JSON reflects the most recent self-report and may lag a true business pivot. The frozen-SIC anti-pattern is a feature of this lag.
  4. Filer-agent dictionary staleness — heuristic 7 fires only when the accession-prefix CIK is in the dictionary. The current dictionary is Cane-scheme-only (2001–2010). Section 4.5 above is the refresh plan.

4.7 Files referenced

File Path
Source corpus rooot@node-eighteen:/var/lib/fraud-data/corpus.db
edgar-cik-cli *********/edgar-cik-cli/
Heuristic catalog (existing) *********/fraud-heuristics/docs/application/heuristics.md
Scheme classify config *********/fraud-heuristics/enrich-worker/src/configs/scheme_classify.ts
Body-text extractors *********/fraud-heuristics/src/pipelines/extractors/
Investigation workflow *********/fraud-heuristics/docs/application/investigation-workflow.md
Precrime deliverable *********/fraud-heuristics/docs/precrime-analysis/