observe/describe: schema-constrain meeting extraction; drop legacy participant fallback
- 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>