Build the dataset gate that accepts only rows with a stable ID, required values, and no reserved evaluation ID. Every rejection must remain visible.
Required APIdef validate_rows(rows, required_fields, reserved_ids=None):
return {'accepted': [...], 'rejected': [...]} BehaviorThink through the mechanism first if you want the extra reasoning step. It never blocks the editor.
validate_rows([{'id': 'a', 'text': 'hi', 'label': 'bug'}], ['text', 'label'])a valid row crosses the gate with its identity preserved
validate_rows([{'id': 'b', 'text': 'hi'}], ['text', 'label'])bad data is rejected with a stable reason
2 hidden edge tests run after the visible contract passes.
Run Tests to see the contract verdicts here.