feat(didbot-policy)!: carry before/after values in a write's diff master
Diff now holds Change entries (path, before, after) instead of bare paths, with absence itself a value. This resolves the create/delete asymmetry a path-only diff forced onto evaluators (a delete always tripping a path guard regardless of changed_paths, while creates were trusted to report their own) semantically instead of by special-casing WriteAction: "may not change to a different value" is before.is_some() && after != before, correct on every action with no WriteAction::Delete arm. The empty-diff-for-delete allowance is gone; the contract is now exact, and it is the server's to enforce since it already holds both sides of the write. Subject::Write also gains agent_attributes (currently just the agent's handle), an explicit and extensible set the write path populates and evaluators read. It is what lets an "allowlist" policy — e.g. displayName may be set only to the agent's own handle — stay a deny rule: deny when the new value doesn't match, which subtracts from what is permitted like every other policy and reintroduces no allow variant. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Change-Id: Ibfda3b5fbca36f08342b02e536e75ff857f95f73