cookbook · vertical · finance-disclosure-redact
Recipe · vertical

Pre-disclosure drafts, redacted to a public-safe surface.

A local .kolm file that takes a draft 10-K, 10-Q, or earnings release and returns the version safe to share with PR/IR (MNPI removed, forward-looking statements flagged, named individuals masked) plus a redaction log. Trained on 400 paired drafts/finals from your past filings. Runs on-prem.

base modelqwen2.5-7b-instruct
gold pairs400 (280 train / 120 eval)
k-score floor0.90
artifact size2.6 GB
compile time~52 min (on-prem)
spec sourceredactor + classifier

What this recipe does

The 24 hours before a filing are the worst time for a security incident. A draft circulates between accounting, legal, IR, and exec, and any one inbox is a potential leak surface. This recipe gives every reviewer a redacted version with a per-line redaction log, so MNPI has a smaller blast radius until the filing window opens.

Three verifier levels: regex (numbers ±5% of consensus, employee names from cap-table), classifier (forward-looking statements flagged), and refusal (entire output suppressed if any redaction fails). A clean run produces a redacted draft and a legal-quality log of every change.

The spec

{
  "output_kind": "json",
  "schema": {
    "required": ["redacted_text", "redactions", "flagged_statements"],
    "properties": {
      "redacted_text": { "type": "string" },
      "redactions": { "type": "array", "items": {
        "required": ["original", "replaced_with", "reason", "line"],
        "properties": {
          "original": { "type": "string" },
          "replaced_with": { "type": "string" },
          "reason": { "enum": ["mnpi_number", "mnpi_name", "mnpi_ticker", "forward_looking"] },
          "line": { "type": "integer" }
        }
      } },
      "flagged_statements": { "type": "array", "items": {"type":"string"} }
    }
  },
  "verifier": {
    "redact_before_train": true,
    "redact_patterns": ["mnpi-numbers.regex", "mnpi-names.txt", "mnpi-tickers.txt"],
    "refuse_on_redaction_miss": true,
    "forward_looking_classifier": true
  }
}

Compile

kolm compile "pre-disclosure MNPI redactor for 10-K/10-Q drafts" \
  --base qwen2.5-7b-instruct \
  --pairs ./gold-pairs/ \
  --patterns ./mnpi-{numbers,names,tickers} \
  --verifier refuse-on-miss,forward-looking-classifier \
  --k-floor 0.90 \
  --output finance-disclosure-redact.kolm

ok wrote finance-disclosure-redact.kolm
   k_score=0.94  signature=hmac-sha256
   redaction-recall 100% on synthetic adversarial set (n=240)

K-score gate

K-score 0.94 held-out 120 drafts · redaction-recall 100% (refuses on any miss) · forward-looking-flag precision 92% · reviewer-rated complete 96%

Run-time profile

Hospital server
2.6s
RTX 5090
580ms
Mac mini
3.0s
CPU x86
4.0s

Deploy

# pre-share gate — every external review gets a redacted copy + log:
share = (draft, recipient) => {
  const r = kolm.run('finance-disclosure-redact.kolm', draft);
  vault.attach(draft.id, 'redaction-log', r.redactions);
  email.send(recipient, r.redacted_text, ['redaction-log.json']);
};