todo: protect/freeze the attributes?
function Intent(subject, op, target, data) {
  this.subject = subject;
  this.op = op;             // create | read | update | delete
  this.target = target;
  this.data = data;
}