Skip to content

DraftHorse: condition list shape is unstated in the spec and unchecked by saddler #35

Description

@dilberryhoundog

Problem

The DraftHorse spec requires step entry and exit conditions to be laid out as lists, but the rule is implied everywhere and stated nowhere. drafthorse-saddler therefore leaves a convoluted single-blob condition untouched — it passes every check that currently exists.

Where the gap is

  • docs/drafthorse/framework/notation.md — "Condition links" defines the AND/OR semantics and shows a bulleted example, but never states that the block must be a list.
  • extensions/skills/drafthorse/references/condition-writing.md — the section is headed "Writing the list", yet only covers conjunction and the **OR these are true:** separator. No guidance on splitting a compound sentence into items.
  • extensions/agents/drafthorse-saddler.md:96-116Condition Checks tests semantics only (state terms, de-hold, checkable, exhaustive, own-step-only, gates compound) plus the **AND**/**OR** notation. Nothing inspects the shape of the condition block. A single convoluted sentence passes if it happens to be checkable.

The machinery headings say "when these are true", which implies plurality and list form, but implication is not a check.

Proposed fix — three files

1. docs/drafthorse/framework/notation.md, under "Condition links" — the rule's home. Add as the first bullet:

  • Every condition is its own list item. A condition block is a markdown list, never a prose sentence or paragraph; a compound clause joined by "and", "once", "unless", or a comma series is multiple conditions and splits into one item each.

2. extensions/skills/drafthorse/references/condition-writing.md, "Writing the list" — the authoring half. Add after the opening paragraph:

  • Split until each item states one observable fact. "A report has arrived and no verdict is recorded, unless a repair was requested" is three facts and an alternative — two lists separated by **OR these are true:**, not one sentence.

3. extensions/agents/drafthorse-saddler.md — the check. Belongs above the === Start conditions === divider so it covers both start and finished blocks. Insert after line 100:

  • One condition per item — a condition block is a markdown list with one observable fact per item. Prose blobs, and items compounding several facts with "and", "once", "unless", or a comma series, are findings: name the split. This is shape, judged before the semantic tests below.

Then extend the mechanical sweep line (drafthorse-saddler.md:228) so it is caught in the cheap pass: add "the condition-block list shape" alongside "the condition-list separator".

Release impact

drafthorse-saddler.md and extensions/skills/drafthorse/ are both symlinked into the agent-tools plugin — a spec change plus a checker change, so this is an agent-tools minor bump via /versioning.

Existing DraftHorse documents will start failing the new check once it lands. The classroom handovers are the likely first casualties.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions