talents/entity_observer: schema-constrain + list-shape observations
Migrate entity_observer to an external Draft 2020-12 schema and flip the
observations payload from a dynamic-key dict ({slug: [...]}) to a typed
list of groups ([{entity_id, items: [...]}]). Typed lists validate under
OpenAI strict mode where patternProperties does not (founder decision #4,
2026-04-19 audit).
Clean break: no dict-of-lists fallback in the post-hook; schema + prompt
+ hook flip together. Stats baseline updated to reflect the new schema
field surfacing for this talent (matches the speaker_attribution pattern).
Hook tests rewritten to the new shape; a new schema test file covers
validator + positive/negative payloads.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>