Skip to main content

Lint Engine

The linter is a pure function: lint(profile, document, context) → results[]. No network calls, no LLM, no database lookups. It runs nine independent check functions and concatenates their results.

Check functions

FunctionWhat it checksSource
checkLimitsPage and word counts against judge/local rule limitsStanding order + EDNY LR 7.1(c)
checkFormatFont size, margins, line spacingEDNY LR 7.1(b)
checkStructuralRequired document sections (caption, signature, TOC, etc.)FRCP + EDNY LR (21 declarative checks)
checkPrivacyPII redaction (SSN, DOB, minor names, financial accounts)FRCP 5.2(a)
checkWordCountConsistencyCertificate word count vs. actual (5% tolerance)EDNY LR 7.1(c)
checkCourtesyCopiesWhether courtesy copies are requiredStanding order
checkPreMotionConferencePMC requirements, exemptions, letter formatStanding order
checkFilingGateWhether motions must be fully briefed before filingStanding order
checkBundlingWhether papers must be filed togetherStanding order

How limits work

Page limits and word limits are independent constraints — both apply simultaneously. A document can pass the word limit but fail the page limit, or vice versa. When document_scope is brief_opposition, the engine looks up limits under brief_support (opposition briefs share the same limits as support briefs).
brief_support: 25 pages / 8,750 words (EDNY LR)
brief_reply:   10 pages / 3,500 words (EDNY LR)
Judge-specific standing orders may impose stricter page limits (e.g., Brown: 20 pages for support briefs).

Structural checks

The 21 structural checks are defined declaratively with trigger conditions:
TriggerWhen it fires
alwaysEvery filing
motionAny motion filing
Rule_56Summary judgment motions
Rule_12Rule 12 motions
discoveryDiscovery motions
motion_to_amendMotions to amend
motion_in_limineMotions in limine
pages_gte_10Documents with 10+ pages
opposing_pro_se_Rule_56SJ motions against pro se parties
opposing_pro_se_Rule_12Rule 12 motions against pro se parties
If the document section needed for a check is not provided in the input, the check is silently skipped.

Pre-motion conference logic

PMC checking follows a specific decision tree:
  1. If PMC is not required for dispositive motions → skip
  2. If the filing party is pro se and "pro_se" is in exemptions → skip (with INFO message)
  3. If the motion type is in the exemptions list → skip (with INFO message)
  4. If PMC has been completed (pmc_completed: true) → PASS
  5. Otherwise → FAIL with letter format requirements
Some judges also require the opposing party to respond within a set number of days (response_required, response_days).

Result statuses

StatusMeaning
FAILRule violated — document is non-compliant
PASSRule satisfied — included for transparency
ACTION_REQUIREDNot a violation, but requires attention (e.g., “submit courtesy copy”)