Docs / How it works / Prove a card is doneVIEW .MD

Prove a card is done

A card's done line says what finished looks like. There are two ways to show it: a proof command that land runs for you, or a test that stays in the suite. Most cards need only the first.

A proof command#

Give the card a command when you add it:

SH
ade card add "Add a check" --path mytool/ --done "the check passes" --proof "{python} -m mytool --check"

--proof can be repeated. When the card lands, ADE runs each proof itself, on the merged main, and writes three things to the outcome record: the command, its real exit code, and a hash of its output. An agent's own report of a result never counts, because nothing about the proof is typed in by the agent.

When a proof fails#

A proof that exits non-zero sends main back to where it was before the merge, and the card stops for a decision, with the command and its exit code in the message. A proof that cannot start at all counts the same way: it is a failed proof, not a pass. Fix the change or the proof in the lane, commit, and run the loop again.

If the merge has already been pushed, main is left alone instead, and the stop tells you to fix forward with a new card.

When to keep a test#

A test stays in the suite only if all four of these hold:

  1. It guards a lasting hazard, named in one sentence in a comment above it.
  2. It asserts an outcome, such as a refusal code or a format, never copied text.
  3. It was seen red with the fix taken out, so you know it catches the hazard.
  4. It runs where it belongs: a fast check in the default suite, anything slow or tied to one platform in its own tier.

If one fails, show the proof on the card and do not keep the test. A date's format is a lasting truth; today's date is not, so check the first and never the second.

Literal pins are noted, not blocked#

When a lane adds literal pins to a test file, such as an equality against a large number or a long list, land counts them and prints a note, and the count goes in the outcome record. It never blocks the card; it is there so a suite that is quietly turning into a pile of examples gets noticed.