{
  "schemaVersion": "1.0.0",
  "packageVersion": "0.11.0",
  "name": "SlopSift rule catalogue",
  "url": "https://slopsift.dev/rules/",
  "categories": [
    {
      "id": "evidence",
      "label": "Combined evidence",
      "description": "Several weak signals become persuasive when they cluster across a paragraph or document.",
      "ruleCount": 1
    },
    {
      "id": "significance",
      "label": "Inflated significance",
      "description": "Grand claims about importance, legacy, or “broader trends”.",
      "ruleCount": 4
    },
    {
      "id": "parallelism",
      "label": "Negative parallelism",
      "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”.",
      "ruleCount": 5
    },
    {
      "id": "promo",
      "label": "Promotional puffery",
      "description": "Travel-brochure / press-release language and marketing verbs.",
      "ruleCount": 1
    },
    {
      "id": "vague",
      "label": "Vague attribution",
      "description": "Unnamed “experts”, “studies”, and “observers”.",
      "ruleCount": 8
    },
    {
      "id": "meta",
      "label": "Chatbot voice",
      "description": "Editorialising asides and reader-collaboration filler.",
      "ruleCount": 9
    },
    {
      "id": "ai-vocab",
      "label": "AI vocabulary",
      "description": "Words LLMs reach for far more often than people do.",
      "ruleCount": 2
    },
    {
      "id": "agency",
      "label": "Hidden or false agency",
      "description": "Passive actor hiding and abstractions made to act like people.",
      "ruleCount": 5
    },
    {
      "id": "balance",
      "label": "Hedging seesaw",
      "description": "Relentless “While X… However, Y”, a position never taken.",
      "ruleCount": 1
    },
    {
      "id": "performance",
      "label": "Performed voice",
      "description": "Sincerity narrated at the reader, announced candor, filler intensifiers, staged setups.",
      "ruleCount": 4
    },
    {
      "id": "rule-of-three",
      "label": "Rule of three",
      "description": "Reflexive triads of adjectives or phrases.",
      "ruleCount": 1
    },
    {
      "id": "conjunctions",
      "label": "Formulaic transitions",
      "description": "Sentence-opening “Moreover,”, “Furthermore,”, “In conclusion,”.",
      "ruleCount": 2
    },
    {
      "id": "formatting",
      "label": "Formatting tells",
      "description": "Em-dash spray, mixed quote styles, emoji, leftover chatbot artifacts.",
      "ruleCount": 4
    },
    {
      "id": "rhythm",
      "label": "Uniform rhythm",
      "description": "Sentence lengths and openings fall into a machine-like cadence.",
      "ruleCount": 5
    },
    {
      "id": "load",
      "label": "Reading load",
      "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track.",
      "ruleCount": 9
    },
    {
      "id": "jargon",
      "label": "Jargon",
      "description": "Terms and noun clusters that make readers reconstruct the meaning.",
      "ruleCount": 2
    },
    {
      "id": "directness",
      "label": "Directness",
      "description": "Abstract setup and vague references that delay the concrete point.",
      "ruleCount": 3
    },
    {
      "id": "economy",
      "label": "Economy",
      "description": "Repeated asides and commentary that restate rather than explain.",
      "ruleCount": 1
    }
  ],
  "rules": [
    {
      "id": "ai-style/evidence-cluster",
      "name": "evidence-cluster",
      "title": "Evidence Cluster",
      "description": "Several independent slop signals cluster in one paragraph or across the document.",
      "category": {
        "id": "evidence",
        "label": "Combined evidence",
        "description": "Several weak signals become persuasive when they cluster across a paragraph or document."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/evidence-cluster/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/evidence-cluster.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fevidence-cluster"
    },
    {
      "id": "ai-style/copula-avoidance",
      "name": "copula-avoidance",
      "title": "Copula Avoidance",
      "description": "“stands/serves as a …” dressing up a plain “is a …”.",
      "category": {
        "id": "significance",
        "label": "Inflated significance",
        "description": "Grand claims about importance, legacy, or “broader trends”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/copula-avoidance/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/copula-avoidance.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fcopula-avoidance"
    },
    {
      "id": "ai-style/light-verb-role",
      "name": "light-verb-role",
      "title": "Light Verb Role",
      "description": "“plays a … role”, importance asserted, not shown.",
      "category": {
        "id": "significance",
        "label": "Inflated significance",
        "description": "Grand claims about importance, legacy, or “broader trends”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/light-verb-role/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/light-verb-role.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Flight-verb-role"
    },
    {
      "id": "ai-style/participial-appendage",
      "name": "participial-appendage",
      "title": "Participial Appendage",
      "description": "Trailing “-ing” clause that editorialises the main clause.",
      "category": {
        "id": "significance",
        "label": "Inflated significance",
        "description": "Grand claims about importance, legacy, or “broader trends”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/participial-appendage/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/participial-appendage.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fparticipial-appendage"
    },
    {
      "id": "ai-style/significance-idioms",
      "name": "significance-idioms",
      "title": "Significance Idioms",
      "description": "Fixed “inflated significance” idioms (rich tapestry, testament to …).",
      "category": {
        "id": "significance",
        "label": "Inflated significance",
        "description": "Grand claims about importance, legacy, or “broader trends”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/significance-idioms/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/idioms.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fsignificance-idioms"
    },
    {
      "id": "ai-style/binary-outcome-frame",
      "name": "binary-outcome-frame",
      "title": "Binary Outcome Frame",
      "description": "Mirrored clauses compress a graded process into a polished right-versus-wrong outcome pair.",
      "category": {
        "id": "parallelism",
        "label": "Negative parallelism",
        "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/binary-outcome-frame/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/binary-outcome-frame.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fbinary-outcome-frame"
    },
    {
      "id": "ai-style/corrective-antithesis",
      "name": "corrective-antithesis",
      "title": "Corrective Antithesis",
      "description": "The “X, not Y” staged contrast, a modern-AI cadence that adds no information.",
      "category": {
        "id": "parallelism",
        "label": "Negative parallelism",
        "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/corrective-antithesis/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/corrective-antithesis.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fcorrective-antithesis"
    },
    {
      "id": "ai-style/negative-contrast",
      "name": "negative-contrast",
      "title": "Negative Contrast",
      "description": "A negative declaration followed by a dramatic positive redefinition.",
      "category": {
        "id": "parallelism",
        "label": "Negative parallelism",
        "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/negative-contrast/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/negative-contrast.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fnegative-contrast"
    },
    {
      "id": "ai-style/negative-list-buildup",
      "name": "negative-list-buildup",
      "title": "Negative List Buildup",
      "description": "Repeatedly lists what something is not before revealing the point.",
      "category": {
        "id": "parallelism",
        "label": "Negative parallelism",
        "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/negative-list-buildup/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/negative-list-buildup.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fnegative-list-buildup"
    },
    {
      "id": "ai-style/negative-parallelism",
      "name": "negative-parallelism",
      "title": "Negative Parallelism",
      "description": "“Not (only) X but (also) Y”, a signature LLM cadence.",
      "category": {
        "id": "parallelism",
        "label": "Negative parallelism",
        "description": "“Not only… but also”, “It’s not X, it’s Y”, “X, not Y”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/negative-parallelism/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/negative-parallelism.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fnegative-parallelism"
    },
    {
      "id": "ai-style/promo-idioms",
      "name": "promo-idioms",
      "title": "Promo Idioms",
      "description": "Travel-brochure / press-release idioms (nestled in the heart of …).",
      "category": {
        "id": "promo",
        "label": "Promotional puffery",
        "description": "Travel-brochure / press-release language and marketing verbs."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/promo-idioms/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/idioms.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fpromo-idioms"
    },
    {
      "id": "ai-style/absolute-claim",
      "name": "absolute-claim",
      "title": "Absolute Claim",
      "description": "An absolute or universal claim that may exceed the evidence or omit its scope.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/absolute-claim/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/absolute-claim.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fabsolute-claim"
    },
    {
      "id": "ai-style/claim-evidence-gap",
      "name": "claim-evidence-gap",
      "title": "Claim Evidence Gap",
      "description": "Nearby prose stacks outcome claims without measurements, sources, examples, or a mechanism.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/claim-evidence-gap/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/claim-evidence-gap.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fclaim-evidence-gap"
    },
    {
      "id": "ai-style/undefined-key-term",
      "name": "undefined-key-term",
      "title": "Undefined Key Term",
      "description": "A central term is introduced indefinitely, repeated across the document, and asked about without being defined.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/undefined-key-term/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/undefined-key-term.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fundefined-key-term"
    },
    {
      "id": "ai-style/unsupported-certainty",
      "name": "unsupported-certainty",
      "title": "Unsupported Certainty",
      "description": "Confidence language that asserts a conclusion without showing the evidence.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/unsupported-certainty/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/unsupported-certainty.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Funsupported-certainty"
    },
    {
      "id": "ai-style/unsupported-comparison",
      "name": "unsupported-comparison",
      "title": "Unsupported Comparison",
      "description": "A comparative, superlative, or outcome claim without an explicit benchmark in the phrase.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/unsupported-comparison/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/unsupported-comparison.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Funsupported-comparison"
    },
    {
      "id": "ai-style/vague-attribution",
      "name": "vague-attribution",
      "title": "Vague Attribution",
      "description": "A bare, generic subject asserting a “that …” clause. Name who, or cut it.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/vague-attribution/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/vague-attribution.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fvague-attribution"
    },
    {
      "id": "ai-style/vague-declarative",
      "name": "vague-declarative",
      "title": "Vague Declarative",
      "description": "An abstract announcement or vague “this approach…” claim that may need a concrete subject.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/vague-declarative/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/vague-declarative.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fvague-declarative"
    },
    {
      "id": "ai-style/vague-quantifier",
      "name": "vague-quantifier",
      "title": "Vague Quantifier",
      "description": "A broad population claim without a named sample, source, or scope.",
      "category": {
        "id": "vague",
        "label": "Vague attribution",
        "description": "Unnamed “experts”, “studies”, and “observers”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/vague-quantifier/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/vague-quantifier.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fvague-quantifier"
    },
    {
      "id": "ai-style/chatbot-idioms",
      "name": "chatbot-idioms",
      "title": "Chatbot Idioms",
      "description": "Editorialising / chatbot filler idioms (it’s worth noting …).",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "high",
      "defaultLevel": "error",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/chatbot-idioms/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/idioms.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fchatbot-idioms"
    },
    {
      "id": "ai-style/dramatic-fragment",
      "name": "dramatic-fragment",
      "title": "Dramatic Fragment",
      "description": "A short transition is isolated as a sentence to manufacture drama.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/dramatic-fragment/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/dramatic-fragment.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fdramatic-fragment"
    },
    {
      "id": "ai-style/implementation-detail-pileup",
      "name": "implementation-detail-pileup",
      "title": "Implementation Detail Pileup",
      "description": "A passage piles up identifiers, qualifications, and exceptions before establishing the normal behavior.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/implementation-detail-pileup/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/implementation-detail-pileup.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fimplementation-detail-pileup"
    },
    {
      "id": "ai-style/modal-redundancy",
      "name": "modal-redundancy",
      "title": "Modal Redundancy",
      "description": "Repeats modality after two possibilities already establish the outcome.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/modal-redundancy/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/modal-redundancy.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fmodal-redundancy"
    },
    {
      "id": "ai-style/outline-conclusion",
      "name": "outline-conclusion",
      "title": "Outline Conclusion",
      "description": "A canned “challenges and future prospects” ending instead of a specific conclusion.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/outline-conclusion/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/outline-conclusion.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Foutline-conclusion"
    },
    {
      "id": "ai-style/premature-closure",
      "name": "premature-closure",
      "title": "Premature Closure",
      "description": "A summary aside announces that an explanation is complete even though the paragraph immediately continues.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/premature-closure/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/premature-closure.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fpremature-closure"
    },
    {
      "id": "ai-style/rhetorical-scaffolding",
      "name": "rhetorical-scaffolding",
      "title": "Rhetorical Scaffolding",
      "description": "Announces, dramatizes, or reassures around a point instead of stating it.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/rhetorical-scaffolding/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/rhetorical-scaffolding.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Frhetorical-scaffolding"
    },
    {
      "id": "ai-style/semantic-redundancy",
      "name": "semantic-redundancy",
      "title": "Semantic Redundancy",
      "description": "A nearby sentence or paragraph repeats the same argument without adding concrete support.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/semantic-redundancy/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/semantic-redundancy.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fsemantic-redundancy"
    },
    {
      "id": "ai-style/throat-clearing",
      "name": "throat-clearing",
      "title": "Throat Clearing",
      "description": "“it is important to note that …”. If it matters, just say it.",
      "category": {
        "id": "meta",
        "label": "Chatbot voice",
        "description": "Editorialising asides and reader-collaboration filler."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/throat-clearing/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/throat-clearing.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fthroat-clearing"
    },
    {
      "id": "ai-style/ai-vocabulary",
      "name": "ai-vocabulary",
      "title": "AI Vocabulary",
      "description": "Words LLMs over-use relative to human writers.",
      "category": {
        "id": "ai-vocab",
        "label": "AI vocabulary",
        "description": "Words LLMs reach for far more often than people do."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/ai-vocabulary/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/ai-vocabulary.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fai-vocabulary"
    },
    {
      "id": "ai-style/emerging-slop-phrases",
      "name": "emerging-slop-phrases",
      "title": "Emerging Slop Phrases",
      "description": "Newly common AI-writing phrases, graded as weak evidence in isolation.",
      "category": {
        "id": "ai-vocab",
        "label": "AI vocabulary",
        "description": "Words LLMs reach for far more often than people do."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/emerging-slop-phrases/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/emerging-slop-phrases.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Femerging-slop-phrases"
    },
    {
      "id": "ai-style/agentless-opener",
      "name": "agentless-opener",
      "title": "Agentless Opener",
      "description": "Telegraphic verbless opener spliced with an “and it …” clause, the doer never appears.",
      "category": {
        "id": "agency",
        "label": "Hidden or false agency",
        "description": "Passive actor hiding and abstractions made to act like people."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/agentless-opener/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/agentless-opener.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fagentless-opener"
    },
    {
      "id": "ai-style/agentless-rationale",
      "name": "agentless-rationale",
      "title": "Agentless Rationale",
      "description": "Subjectless verb-led explanations accumulate into implementation-trace cadence instead of ordinary reader-facing prose.",
      "category": {
        "id": "agency",
        "label": "Hidden or false agency",
        "description": "Passive actor hiding and abstractions made to act like people."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/agentless-rationale/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/agentless-rationale.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fagentless-rationale"
    },
    {
      "id": "ai-style/false-agency",
      "name": "false-agency",
      "title": "False Agency",
      "description": "An abstraction is made to act like a person instead of naming the actor.",
      "category": {
        "id": "agency",
        "label": "Hidden or false agency",
        "description": "Passive actor hiding and abstractions made to act like people."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/false-agency/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/false-agency.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Ffalse-agency"
    },
    {
      "id": "ai-style/passive-actor-hiding",
      "name": "passive-actor-hiding",
      "title": "Passive Actor Hiding",
      "description": "A passive clause hides who performed the action.",
      "category": {
        "id": "agency",
        "label": "Hidden or false agency",
        "description": "Passive actor hiding and abstractions made to act like people."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/passive-actor-hiding/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/passive-actor-hiding.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fpassive-actor-hiding"
    },
    {
      "id": "ai-style/passive-voice-density",
      "name": "passive-voice-density",
      "title": "Passive Voice Density",
      "description": "Several nearby sentences rely on passive voice, making the process harder to follow.",
      "category": {
        "id": "agency",
        "label": "Hidden or false agency",
        "description": "Passive actor hiding and abstractions made to act like people."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/passive-voice-density/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/passive-voice-density.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fpassive-voice-density"
    },
    {
      "id": "ai-style/hedging-seesaw",
      "name": "hedging-seesaw",
      "title": "Hedging Seesaw",
      "description": "Relentless “While X… However, Y” balancing, a position never taken.",
      "category": {
        "id": "balance",
        "label": "Hedging seesaw",
        "description": "Relentless “While X… However, Y”, a position never taken."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/hedging-seesaw/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/hedging-seesaw.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fhedging-seesaw"
    },
    {
      "id": "ai-style/filler-intensifiers",
      "name": "filler-intensifiers",
      "title": "Filler Intensifiers",
      "description": "Sincerity adverbs (genuinely, truly, really) doing the believing for the reader.",
      "category": {
        "id": "performance",
        "label": "Performed voice",
        "description": "Sincerity narrated at the reader, announced candor, filler intensifiers, staged setups."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/filler-intensifiers/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/filler-intensifiers.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Ffiller-intensifiers"
    },
    {
      "id": "ai-style/performed-candor",
      "name": "performed-candor",
      "title": "Performed Candor",
      "description": "Announcing your own honesty (“to be transparent”, “I’ll be honest”) instead of enacting it.",
      "category": {
        "id": "performance",
        "label": "Performed voice",
        "description": "Sincerity narrated at the reader, announced candor, filler intensifiers, staged setups."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/performed-candor/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/performed-candor.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fperformed-candor"
    },
    {
      "id": "ai-style/performed-revelation",
      "name": "performed-revelation",
      "title": "Performed Revelation",
      "description": "Repeated questions, metaphors, and compressed payoffs make an explanation sound like prepared revelations.",
      "category": {
        "id": "performance",
        "label": "Performed voice",
        "description": "Sincerity narrated at the reader, announced candor, filler intensifiers, staged setups."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/performed-revelation/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/performed-revelation.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fperformed-revelation"
    },
    {
      "id": "ai-style/setup-fragment",
      "name": "setup-fragment",
      "title": "Setup Fragment",
      "description": "A noun-rooted fragment (“One thing I wanted to …”) that stages a point instead of making it.",
      "category": {
        "id": "performance",
        "label": "Performed voice",
        "description": "Sincerity narrated at the reader, announced candor, filler intensifiers, staged setups."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/setup-fragment/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/setup-fragment.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fsetup-fragment"
    },
    {
      "id": "ai-style/rule-of-three",
      "name": "rule-of-three",
      "title": "Rule of Three",
      "description": "Reflexive triads of modifiers or balanced independent clauses.",
      "category": {
        "id": "rule-of-three",
        "label": "Rule of three",
        "description": "Reflexive triads of adjectives or phrases."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/rule-of-three/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/rule-of-three.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Frule-of-three"
    },
    {
      "id": "ai-style/opening-conjunction",
      "name": "opening-conjunction",
      "title": "Opening Conjunction",
      "description": "Formulaic sentence-opening transitions. Often removable.",
      "category": {
        "id": "conjunctions",
        "label": "Formulaic transitions",
        "description": "Sentence-opening “Moreover,”, “Furthermore,”, “In conclusion,”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/opening-conjunction/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/opening-conjunction.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fopening-conjunction"
    },
    {
      "id": "ai-style/stepwise-sequencing",
      "name": "stepwise-sequencing",
      "title": "Stepwise Sequencing",
      "description": "Formulaic “X then Y” sequencing where “then” narrates an explanation rather than a real order.",
      "category": {
        "id": "conjunctions",
        "label": "Formulaic transitions",
        "description": "Sentence-opening “Moreover,”, “Furthermore,”, “In conclusion,”."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/stepwise-sequencing/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/stepwise-sequencing.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fstepwise-sequencing"
    },
    {
      "id": "ai-style/em-dash-overuse",
      "name": "em-dash-overuse",
      "title": "Em Dash Overuse",
      "description": "Locally clustered or globally habitual em-dash use.",
      "category": {
        "id": "formatting",
        "label": "Formatting tells",
        "description": "Em-dash spray, mixed quote styles, emoji, leftover chatbot artifacts."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/em-dash-overuse/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/formatting.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fem-dash-overuse"
    },
    {
      "id": "ai-style/emoji",
      "name": "emoji",
      "title": "Emoji",
      "description": "Decorative emoji in formal prose.",
      "category": {
        "id": "formatting",
        "label": "Formatting tells",
        "description": "Em-dash spray, mixed quote styles, emoji, leftover chatbot artifacts."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/emoji/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/formatting.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Femoji"
    },
    {
      "id": "ai-style/generation-artifacts",
      "name": "generation-artifacts",
      "title": "Generation Artifacts",
      "description": "Leftover chatbot citation artifacts (oaicite, turn0search0, …).",
      "category": {
        "id": "formatting",
        "label": "Formatting tells",
        "description": "Em-dash spray, mixed quote styles, emoji, leftover chatbot artifacts."
      },
      "confidence": "high",
      "defaultLevel": "error",
      "method": "lexical",
      "methodLabel": "Text pattern",
      "methodDescription": "Matches a word, phrase, punctuation pattern, or other directly observable text signal.",
      "url": "https://slopsift.dev/rules/generation-artifacts/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/formatting.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fgeneration-artifacts"
    },
    {
      "id": "ai-style/mixed-quotes",
      "name": "mixed-quotes",
      "title": "Mixed Quotes",
      "description": "Straight and curly double quotes mixed in one document, a paste seam.",
      "category": {
        "id": "formatting",
        "label": "Formatting tells",
        "description": "Em-dash spray, mixed quote styles, emoji, leftover chatbot artifacts."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/mixed-quotes/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/formatting.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fmixed-quotes"
    },
    {
      "id": "ai-style/comma-splice",
      "name": "comma-splice",
      "title": "Comma Splice",
      "description": "Two independent clauses joined only by a comma; clipped cases can perform breeziness.",
      "category": {
        "id": "rhythm",
        "label": "Uniform rhythm",
        "description": "Sentence lengths and openings fall into a machine-like cadence."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/comma-splice/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/comma-splice.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fcomma-splice"
    },
    {
      "id": "ai-style/headline-fragment",
      "name": "headline-fragment",
      "title": "Headline Fragment",
      "description": "An explanatory passage opens with a noun-heavy headline fragment instead of a complete statement.",
      "category": {
        "id": "rhythm",
        "label": "Uniform rhythm",
        "description": "Sentence lengths and openings fall into a machine-like cadence."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/headline-fragment/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/headline-fragment.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Fheadline-fragment"
    },
    {
      "id": "ai-style/referential-compression",
      "name": "referential-compression",
      "title": "Referential Compression",
      "description": "Several nearby sentences open with bare pronouns instead of carrying the subject forward explicitly.",
      "category": {
        "id": "rhythm",
        "label": "Uniform rhythm",
        "description": "Sentence lengths and openings fall into a machine-like cadence."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/referential-compression/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/referential-compression.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Freferential-compression"
    },
    {
      "id": "ai-style/repeated-sentence-frame",
      "name": "repeated-sentence-frame",
      "title": "Repeated Sentence Frame",
      "description": "Several nearby sentences repeat the same dependency frame and cadence.",
      "category": {
        "id": "rhythm",
        "label": "Uniform rhythm",
        "description": "Sentence lengths and openings fall into a machine-like cadence."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/repeated-sentence-frame/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/repeated-sentence-frame.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Frepeated-sentence-frame"
    },
    {
      "id": "ai-style/uniform-rhythm",
      "name": "uniform-rhythm",
      "title": "Uniform Rhythm",
      "description": "Sentence lengths cluster tightly enough to produce a machine-like drone.",
      "category": {
        "id": "rhythm",
        "label": "Uniform rhythm",
        "description": "Sentence lengths and openings fall into a machine-like cadence."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/uniform-rhythm/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-ai-style/src/rules/uniform-rhythm.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20ai-style%2Funiform-rhythm"
    },
    {
      "id": "reader-first/concept-introduction-burst",
      "name": "concept-introduction-burst",
      "title": "Concept Introduction Burst",
      "description": "A passage introduces many recurring concepts before the reader has time to absorb them.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/concept-introduction-burst/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/concept-introduction-burst.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fconcept-introduction-burst"
    },
    {
      "id": "reader-first/paragraph-load",
      "name": "paragraph-load",
      "title": "Paragraph Load",
      "description": "A long paragraph hides changes of subject or purpose inside one block.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/paragraph-load/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/paragraph-load.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fparagraph-load"
    },
    {
      "id": "reader-first/procedure-thread-detour",
      "name": "procedure-thread-detour",
      "title": "Procedure Thread Detour",
      "description": "Three numbered steps leave an output unused for one step and then resume it, suggesting that the middle step interrupts the procedure handoff.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/procedure-thread-detour/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/procedure-thread-detour.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fprocedure-thread-detour"
    },
    {
      "id": "reader-first/relationship-pileup",
      "name": "relationship-pileup",
      "title": "Relationship Pileup",
      "description": "A passage rapidly changes the relationships among a small set of participants.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/relationship-pileup/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/relationship-pileup.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Frelationship-pileup"
    },
    {
      "id": "reader-first/sentence-load",
      "name": "sentence-load",
      "title": "Sentence Load",
      "description": "A sentence combines enough length, clauses, labels, or asides to overload the main point.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/sentence-load/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/sentence-load.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fsentence-load"
    },
    {
      "id": "reader-first/sustained-buffer-pressure",
      "name": "sustained-buffer-pressure",
      "title": "Sustained Buffer Pressure",
      "description": "The document repeatedly adds active entities and relationships faster than it releases or stabilizes them.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/sustained-buffer-pressure/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/sustained-buffer-pressure.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fsustained-buffer-pressure"
    },
    {
      "id": "reader-first/undefined-decision-stack",
      "name": "undefined-decision-stack",
      "title": "Undefined Decision Stack",
      "description": "The document accumulates decision standards such as relevant or sufficient without saying how a reader or system should apply them.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/undefined-decision-stack/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/undefined-decision-stack.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fundefined-decision-stack"
    },
    {
      "id": "reader-first/unoriented-reactivation",
      "name": "unoriented-reactivation",
      "title": "Unoriented Reactivation",
      "description": "A sentence resumes entities or relationships that have already left the active reading context.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/unoriented-reactivation/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/unoriented-reactivation.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Funoriented-reactivation"
    },
    {
      "id": "reader-first/unresolved-idea-stack",
      "name": "unresolved-idea-stack",
      "title": "Unresolved Idea Stack",
      "description": "The document asks the reader to retain several promised explanations or defers one for too long.",
      "category": {
        "id": "load",
        "label": "Reading load",
        "description": "Passages and documents that introduce, retain, or reconnect more than the reader can comfortably track."
      },
      "confidence": "low",
      "defaultLevel": "info",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/unresolved-idea-stack/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/unresolved-idea-stack.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Funresolved-idea-stack"
    },
    {
      "id": "reader-first/noun-pile",
      "name": "noun-pile",
      "title": "Noun Pile",
      "description": "Four or more common nouns are stacked together without showing how they relate.",
      "category": {
        "id": "jargon",
        "label": "Jargon",
        "description": "Terms and noun clusters that make readers reconstruct the meaning."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "dependency-graph",
      "methodLabel": "Dependency graph",
      "methodDescription": "Matches grammatical relationships between words, not only their order or part of speech.",
      "url": "https://slopsift.dev/rules/noun-pile/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/noun-pile.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fnoun-pile"
    },
    {
      "id": "reader-first/unexplained-initialism",
      "name": "unexplained-initialism",
      "title": "Unexplained Initialism",
      "description": "A repeated initialism appears without a plain-language introduction.",
      "category": {
        "id": "jargon",
        "label": "Jargon",
        "description": "Terms and noun clusters that make readers reconstruct the meaning."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/unexplained-initialism/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/unexplained-initialism.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Funexplained-initialism"
    },
    {
      "id": "reader-first/abstract-reference-chain",
      "name": "abstract-reference-chain",
      "title": "Abstract Reference Chain",
      "description": "Nearby sentences keep referring to generic problems, shapes, paths, or capabilities instead of naming the concrete facts.",
      "category": {
        "id": "directness",
        "label": "Directness",
        "description": "Abstract setup and vague references that delay the concrete point."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/abstract-reference-chain/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/abstract-reference-chain.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Fabstract-reference-chain"
    },
    {
      "id": "reader-first/fragment-chain",
      "name": "fragment-chain",
      "title": "Fragment Chain",
      "description": "Several nearby prose fragments omit their subjects or main clauses and read like compressed notes.",
      "category": {
        "id": "directness",
        "label": "Directness",
        "description": "Abstract setup and vague references that delay the concrete point."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/fragment-chain/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/fragment-chain.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Ffragment-chain"
    },
    {
      "id": "reader-first/label-led-explanation",
      "name": "label-led-explanation",
      "title": "Label Led Explanation",
      "description": "Nearby paragraphs or list items repeatedly open with bold headline fragments before explaining the concrete behavior.",
      "category": {
        "id": "directness",
        "label": "Directness",
        "description": "Abstract setup and vague references that delay the concrete point."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/label-led-explanation/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/label-led-explanation.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Flabel-led-explanation"
    },
    {
      "id": "reader-first/aside-pileup",
      "name": "aside-pileup",
      "title": "Aside Pileup",
      "description": "Explanations sit in brackets or after dashes instead of being stated directly, with nearby asides treated more severely.",
      "category": {
        "id": "economy",
        "label": "Economy",
        "description": "Repeated asides and commentary that restate rather than explain."
      },
      "confidence": "medium",
      "defaultLevel": "warn",
      "method": "document-context",
      "methodLabel": "Document context",
      "methodDescription": "Compares evidence across a paragraph, nearby sentences, or the complete document.",
      "url": "https://slopsift.dev/rules/aside-pileup/",
      "sourceUrl": "https://github.com/NikhilVerma/writinglint/blob/main/packages/rulepack-reader-first/src/rules/aside-pileup.ts",
      "reportUrl": "https://github.com/NikhilVerma/writinglint/issues/new?template=false-positive.yml&title=rule%3A%20reader-first%2Faside-pileup"
    }
  ]
}
