personal memory agent

observe/describe: schema-constrain meeting extraction; drop legacy participant fallback master

- add observe/categories/meeting.schema.json (Draft 2020-12 contract) - _discover_categories() now loads co-located <category>.schema.json - thread json_schema through both Phase 3 batch dispatch sites - drop bare-string participant branch in meeting.format(); add skip+warn guard - prompt reinforcement line in meeting.md - tests/test_meeting_schema.py covers schema validity, accept/reject matrix, loader wiring, dispatcher wiring, formatter guard - tests/test_formatters.py::test_format_screen_meeting updated to dict participants Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>