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
Run-time profile
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']); };