Optional ReadonlydelegatedBy?: neverOnly an agent delegates; never makes a wrong shape a type error.
Readonlyid: stringReadonlykind: "service"Readonlypurpose: stringReadonlytenantId: stringOptional ReadonlydelegatedBy?: stringThe principal that delegated this run, for agent-to-agent work.
Readonlyid: stringReadonlykind: "agent"Readonlypurpose: stringReadonlytenantId: string
purposeis REQUIRED on every automated kind, not optional as the roadmap sketch had it. The failure being fixed is that fabricated operators "lose provenance"; an optional field would let each new automated path skip the one thing that restores it. A human needs no purpose — the person is the reason.Fields are
readonlybecause a principal is an authorization snapshot, not a mutable record: every consumer re-readskindto decide what the holder may do, so a principal that can change between two reads has no meaning. The modifier is the compile-time half;trustAutomationPrincipalfreezes the runtime half.readonlyis not checked in assignability, so producers may still build one from an ordinary object literal.