personal memory agent

talents/story: migrate conversation/work/event to shared story.schema.json master

Second structured-outputs L3 migration after talents/sense (8c952dc4). Introduces talent/story.schema.json — Draft 2020-12, provider-intersection subset (type, enum, required, additionalProperties, properties, items, minLength, minimum, maximum, maxItems) — shared by the three story talents. Schema enforcement is advisory: schema_validation surfaces on the finish event via existing dispatcher plumbing (think/talent.py and think/talents.py), but never blocks generation or the story post-hook. talent/story.py is unchanged — it remains the authoritative source for normalization (topics lowercase/dedupe/cap, confidence clamp, resolution enum filtering). The schema mirrors its required-field contract: - top-level: body, topics, confidence, commitments, closures, decisions - commitments: 5 required string fields - closures: 5 required string fields + resolution enum {sent, done, signed, dropped, deferred} - decisions: 3 required string fields - additionalProperties: false at every closed object level - topics deliberately permissive (no minItems/uniqueItems/per-item minLength) — the hook does its own normalization Tests: - test_story_schema_file_is_valid_draft_2020_12 - test_story_talents_load_shared_schema (all three talents resolve the shared schema through get_talent) - test_story_schema_mirrors_hook_requirements (asserts required-field parity with talent/story.py and enum parity with ALLOWED_RESOLUTIONS) - test_story_hook_fixtures_validate_against_schema (hook test fixtures stay schema-clean) - All 12 existing test_story_hook.py tests remain green. Stats API baseline refresh: the stats API exposes raw generator frontmatter, so the new `schema` field appears in three generator blocks in tests/baselines/api/stats/stats.json — updated accordingly. Live validation deferred — provider creds not available in this worktree environment, matching the sense migration's disposition. End-to-end wiring is verified by the dispatcher pass-through test plus existing json_schema coverage in tests/test_generate_full.py and tests/test_talent.py. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>