sandtable init drafts tools, invariants and tasks, but a draft is a proposal. A test suite is a set of acceptance criteria, and only someone who knows the customer’s rules should decide what they are. The review workflow makes that decision explicit and visible.
Pending items
Everythinginit infers carries review: pending, and invariants and tasks also carry a source pointing at the evidence:
review: pending when they have # TODO(review): notes next to them, such as a 409 condition to encode as a check or a side effect to model.
List what is pending
What to check
Invariants
Invariants
- Does the quote actually say this? Read the sentence around it in the SOP.
- Is it as strict as the SOP, and no stricter? An over-strict rule fails correct agents in every task.
- Does it point at the right table, field and tool argument?
- Does it need an exception, such as
unlesson anever_disclosefor the value the agent legitimately agreed to?
Tasks
Tasks
- Does the expected end state follow the policy, even where the human rep in the transcript did something else?
- Is the hidden goal firm enough to test something (“will not go below $1,600”), and does it avoid needs the agent cannot meet?
- Are seed rows and names fictional?
- Does
sandtable lintsay it is ready, solvable and non-vacuous?
Tools
Tools
- Resolve every
# TODO(review):note: encode error conditions aschecks, addupdateops for side effects, and replace placeholder ops on action endpoints. - Make sure the tool changes the world the way the real API would, closely enough for the end state to be graded.
review: pending to review: accepted, or delete the line. Keep source: it records why the rule exists.
Provisional runs
Runs still work while items are pending, so you can try a draft early. Their results are marked provisional:- the terminal summary prints
⚠ 1 drafted item(s) pending review: results are provisional; - the HTML report shows a “Provisional” banner listing the pending items;
results.jsonlists them underpendingReview.
Enforce it in CI
validate --strict exits 1 while anything is pending:
lint and run in CI, so nothing drafted becomes a release gate without a person having accepted it. See Use it in CI.