- POST/PUT/DELETE /_journal/api/v1/posts fire RecordSaved/RecordDeleted
through cabana.EmitRecordSaved/EmitRecordDeleted, so a slug changed over
MCP reaches subscribers like an admin save
- PUT reports the changed columns and each submitted translation that
changed, read before the write (a translated slug per locale)
- TestAPIRecordEvents covers POST, PUT slug change and DELETE
- journal-post registers a pact.ContentDescriptor (posts controller, Post
morph name, Describe with per-locale URL, title, excerpt, image, words)
- descriptors read through cabana.TxFromContext inside a save
- TestRecordSavedDescribesNewURL: an admin slug change reaches a subscriber
after commit and Describe answers the new URL; a failed save fires nothing