Skip to content

The Anti-Slop Rules

Slop is prose that reads as generated: label titles, reversals, slogans, hedges, numbers with no source. This page lists the rules HELIX enforces against it when the present mode of the HELIX skill turns governed documents into decks and briefs, where each rule runs, and what it leaves to a person. It assumes you have read that page. After this one you can read a gate report and know which finding means what.

Where the rules run

StageWhat runsTool
StoryboardTitles exist before bodies; the headline pass and the titles-only read run on them firstthe mode contract; check-deliverable.py on the script
Script gateTitle, shape, vocabulary, number, placeholder, visual, limit, density, coverage, and ordering checksscripts/check-deliverable.py (beside the skill)
Prose lintSentence-level rules on the script and on this siteVale with the Helix styles (just lint-prose)
Render gateGeometry checks on the slide file, then every slide as an image, inspectedscripts/deck-qa.py, LibreOffice, pdftoppm
EvalThe gate re-runs on each brief, plus a rubric line that reading only the titles tells the storyevals/briefs.yml

The voice the rules protect

workflows/voice.yml defines two profiles that matter here. Governed documents use artifact-signal: lead with the decision, use exact IDs and paths, name assumptions and non-goals. Decks and briefs use human-facing: open with what it means for the reader, then the evidence, then the ask; make every title a claim; define or drop every HELIX and engineering term, with provenance in an appendix; a source for every number. Its avoid list seeds the rules below: em dashes and filler tokens, rhetorical reversals, rule-of-three padding, bold-label bullets, reader-steering tics, hedges, placeholders, internal shorthand.

The headline pass

Every unit title in a script goes through title_slop. A title is one sentence with a subject, a verb, and one concrete noun; eight words is the target and ten the hard stop. Each rule below names the shape it catches, with a case from the test fixture.

RuleWhat it flagsFlagged example
contrastive reversal“not X, but Y”, “X, not Y”, a trailing “is not”HELIX is a methodology you adopt, not a platform you join
colon lista colon followed by two or more itemsThree failures repeat on every AI-assisted team: drift, local decisions, lost context
colon reveala colon followed by one itemThe best part: it learns
imperative chainthree or more commands in one titleWrite the brief, check alignment, plan the work, run it in your own factory
listicle counta number before a listicle nounFive things change once the catalog ...
stacked negationtwo or more negativesHELIX takes no runtime, no tracker, and no technology choice away from you
rule-of-three list“A, B, and C”the same title as above
flatterycompliments to the readerYour agents can ship with the discipline your best teams already use
pseudo-aphorismslogans: “is the new”, a trailing “matters”Documentation is the new code review
universal claim“teams switch”, “every team”Teams switch when every change traces back to a governing document
mannered phraseidioms from a vendored listDocumentation earns its keep on every review
inventory counta catalog size after a verb like “ships”, “routes”, “with”One skill routes twenty-one modes over those documents
hedgealso, just, simply, really, and similarAlignment simply reads the documents
over-lengthmore than ten wordsEach document layer governs the next one, from vision down to code

Slide titles get six more rules that internal document headings do not: container title (four words or fewer ending in a category noun, such as Firm capabilities or Key considerations), self-justifying section (Why we control it, How to read this slide), shouting label (an all-caps line of four or more words), invented status (Working hypothesis, tbd, in flight), taxonomy code (Zone 6), and marketing register (Leverage the platform layer).

Titles that pass: Agent code drifts from its specs and decisions; One alignment pass finds three affected specs before coding (an evidence count, not an inventory); Each document layer governs the next, from vision to code (ten words exactly); Use cases (a concrete noun, not a container).

Shapes and restatement

The same script gate runs shape_slop over every bullet and every text cell in a Visual spec (panel labels, comparison rows, captions, verdicts). A shape gets the label rules plus the closers a title cannot carry: a reversal or aphorism used as a closing line (That is what makes it portable.), flattery, and trailing commentary, a second sentence that explains the first (Verifies citations. Built as the worked example for moving a check between products.). A shape also gets the two rules the voice profile names under negative parallelism and slogan closers: a body-only reversal (rather than, never, a guess instead of a record, not one it makes) and any em dash. Labels that name a part of a figure (a layer, a step, a spoke) only get the shouting-label check.

The document title goes through the title rules, plus a Title Case check and a count check, so PostgreSQL: Primary Data Store Fit Assessment and PostgreSQL meets three of five requirements both block. Which title rules run depends on the flow: a persuasive flow wants claims, and a reference flow that declares heading_style: label (candidate-briefing) wants plain section titles such as Required capabilities and skips the claim and horizontal-logic checks. An owner, date, or likelihood grade in a Visual spec that no Sources row, Brief line, or Assumptions entry states blocks as visual.unsourced. On a brief or one-pager the title unit’s body is the rendered introduction; it gets the shape rules, and a sentence that opens This brief checks or This page names blocks as narration.

Within one slide, the gate compares the title, the on-slide bullets, and the visual cells pairwise. Two shapes whose content words overlap by half or more are a restatement: the bullet that repeats the panel, the verdict that repeats the title. The check is lexical and stays inside one slide.

Horizontal and vertical logic

Horizontal logic is the titles-only read: in order, the titles state the argument and end in the ask. The mechanized part is narrow: consecutive titles must share at least one content word (crude stems, so gates matches gate), which is how a title the reader could reorder without loss gets flagged. Vertical logic, that each body proves its title and nothing else, is a read-through the mode contract requires at the gate; no script checks it.

The full rule list

This page explains the rules. The scripts that enforce them generate the complete deterministic list, every pattern, phrase list, threshold, check id, and severity, at Anti-slop Rules; the site’s drift gate fails when that page and the scripts disagree.

Where the title rules come from

The title and shape rules are a port of the sloptimizer skill’s headline and slide targets, so the gate holds on a host without that skill. The fixture tests/fixtures/validate-deliverable/headline-cases.json comes from the upstream repository unchanged (a note beside it records the commit), and tests/validate-headline-sync.sh runs every case through the port and fails when the two disagree; with the upstream source on the machine it also compares the fixture and the four phrase lists byte for byte. A host with sloptimizer installed can run slop-audit.sh --target slide on the rendered .pptx, whose text it extracts shape by shape; the mode contract names both paths.

The rest of the script gate

Beyond titles, check-deliverable.py blocks on:

  • HELIX vocabulary in a title, body, or notes: artifact IDs such as FEAT-16 or ADR-3, bead, ratchet, work item, acceptance criteria, AC1, artifact graph, frame activity, ddx. They belong in the Sources table.
  • A number in a body that does not appear in the Sources table, single digits excepted. A unit that cites no source, or cites a source row that does not exist.
  • Placeholder text anywhere: [TODO], TBD, [Fill in], [...]. A bracketed capitalized phrase that is not a link is a warning, since it marks a template slot left behind.
  • A visual that is one generic word (chart, diagram, none) or fewer than six words. The spec must say what it shows, its series, and its source.
  • A Visual spec cut short by a period inside a field value (Sept. 2026, e.g.): the fields after it would be read as prose and the figure drawn wrong, so the checker blocks and the renderer reports it.
  • Coverage. The Brief declares breadth as survey or deep-dive; the Story carries a concept coverage table where every group is covered or omitted, and an omitted group has a reason of at least three words. A survey covers at least five groups. Every must-cover concept shares a content word with a covered group; no must-omit concept appears in a title or body.
  • Order. A deck opens with the title pattern and closes with ask-next-steps then appendix-sources. The Render section names a rendered file; a Render section that does not record an inspection is a warning, so a host without the render toolchain can still ship the script and say what it did not produce.

It warns on pattern limits from slide-patterns.yml (bullets, words per bullet, body words, title words), more than two consecutive units of one pattern, more than twelve content slides, a missing export list, and methodology terms an audience would need defined (concern, stop trigger, autonomy level, quality floor, framing, mode).

Prose lint

Vale with the Helix styles runs on the hand-authored site pages and on every deliverable script. Errors, which fail the check: em dashes, and filler tokens such as delve, leverage, seamless, robust, landscape, unlock, in summary. Warnings: hedges, passive voice, sentences over thirty words, reader-steering tics (worth noting, the real problem), and wordy phrases with a shorter form (in order to).

The visual gate

deck-qa.py reads the slide file’s shapes and reports per slide. Blocking: a shape past the slide edge, a text box that needs more height than it has, an autofit box whose shrink would land below twelve points, two text shapes that overlap, a table that grows past the bottom margin. Warnings: an autofit box that fits after a shrink that stays above twelve points, a shape inside the half-inch margin, type below twelve points outside the footer band, text crossing another shape’s edge, a line through text, a table taller than declared, and a slide with the same layout as the one before it. It also notes any typeface the deck names that the host lacks, since the raster substitutes it and text fit there is approximate. With LibreOffice and pdftoppm present it renders every slide to an image and a labeled contact sheet; the mode requires a person to look at those images before the deck passes. The renderer itself refuses to be silent: a table row that cannot fit, text that cannot fit at the floor, or a cut Visual spec is reported and the render exits non-zero after writing the file, so the file can still be inspected.

What the rules do not catch

The rules match shapes and words. They do not catch a paraphrase of a slogan, a title that is a claim but the wrong one, a figure that is in the Sources table and still misreads its section, or a slide that passes every rule and should not exist. Fidelity to the sources, vertical logic, and the decision to cut a unit stay with a person, who reviews the script like any other artifact before it goes out.

Innsigle seal: mixed by HELIX

The signature covers the markdown source of this page, not these HTML bytes. This page quotes that seal; verify it against the source file.

Composition
mixed
Issuer
HELIX helix
Signing key
ed25519:d5a0b2d95482db5ff68fc8318a1ad4de (human key)
Signed source
use/anti-slop.md
Signed
2026-09-22T19:20:30Z
Content digest
sha256:6edad2e6…bad95a02

Human-controlled key, held outside CI; the signature is not a detector and not a truth guarantee.

Raw attestation JSON
{
  "payload": {
    "innsigle": "1",
    "type": "https://innsigle.dev/claim/colophon/v1",
    "issued_at": "2026-09-22T19:20:30Z",
    "issuer": {
      "id": "helix",
      "name": "HELIX",
      "key_id": "ed25519:d5a0b2d95482db5ff68fc8318a1ad4de",
      "key_url": "https://documentdrivendx.github.io/helix/.well-known/innsigle/keys.json"
    },
    "subjects": [
      {
        "uri": "https://documentdrivendx.github.io/helix/use/anti-slop/",
        "digest": {
          "alg": "sha256",
          "value": "6edad2e6c896feab312c0dced2435f91f75df94eeacdb9a49014830fbad95a02"
        }
      }
    ],
    "colophon": {
      "schema_version": "1",
      "composition": "mixed",
      "ingredients": [
        {
          "kind": "human",
          "name": "operator",
          "role": "outline"
        },
        {
          "kind": "model",
          "name": "Claude",
          "role": "expand"
        },
        {
          "kind": "human",
          "name": "operator",
          "role": "final-edit"
        }
      ],
      "notes": null
    }
  },
  "payload_encoding": "json",
  "signatures": [
    {
      "key_id": "ed25519:d5a0b2d95482db5ff68fc8318a1ad4de",
      "alg": "ed25519",
      "sig": "OLVv4twZXN2U-WUJ-CL9y_r91PSLN33gnmMlcGAnYQyYakmQdZmHZAfwCbXIL5paGyw2THzwF3movxhQvByGBg",
      "signed_at": "2026-09-22T19:20:30Z"
    }
  ]
}