feat(activities): accept participation on sol call activities create
The cogitate `activities_review` talent prompt has been instructing the
LLM to emit `participation[]` on the stdin payload, but the CLI's
`create` handler only read `title`/`activity`/`description`/`details` —
silently dropping the participation field on every new activity.
Extend `apps/activities/call.py::create_record` to:
- Validate an optional `participation[]` per Sprint 1's schema (role ∈
{attendee, mentioned}, source ∈ {voice, speaker_label, transcript,
screen, other}, string name required). Fail fast on the first bad
entry with an indexed stderr error and exit 1 before any record is
written.
- Resolve each entry's `entity_id` read-only via `load_entities` +
`find_matching_entity`, mirroring `talent/participation.py::post_process`.
Unmatched names store `entity_id: null`. Never writes to any entity
file.
- Persist `participation` on the new record only when the caller
provided the key (absent stays absent; empty `[]` is stored as `[]`).
- Append `"participation"` to `edits[0].fields` when the caller opted in.
Eight new CLI-level tests cover the happy path, absent vs empty, every
validation branch, the read-only resolver invariant (st_size +
st_mtime_ns snapshot), and the no-write-on-rejection contract.
No change to `update`, the cogitate prompt, `think/activities.py`, or
`talent/participation.py`.