security(identity): purge repo-tracked sol/, route writes through write_identity()
Per-owner identity files (self.md, agency.md, partner.md, awareness.md,
pulse.md, pulse_output.md, identity_pulse.md, history.jsonl, news/*) were
being written into a repo-tracked sol/ directory and committed/pushed to
the public AGPL repo by talent/heartbeat.md. This is an active privacy
leak that violates sol pbc Article IV.
Five coupled moves in one pass:
1. git rm -r sol/ at repo root; /sol/ added to .gitignore.
2. {journal}/sol/ → {journal}/identity/ everywhere (code, tests, fixtures,
docs); ensure_sol_directory → ensure_identity_directory.
3. New write_identity() helper in think/identity.py — single write path
with per-directory fcntl.LOCK_EX, atomic tmpfile + os.replace, 0o600
perms, hash-based history.jsonl audit log (no diffs).
4. talent/heartbeat.md: deleted "Path notes" block; Step 6 is now a no-op
close. Other talents (awareness_tender, pulse, naming) updated to use
identity/ paths and stripped of any commit/push instructions.
5. think/prompts.py: removed SOL_DIR and the repo-root read branch;
template vars are now $identity_* loaded only from {journal}/identity/.
Acceptance greps all return 0. New tests cover write_identity()
atomicity, lock serialization, history schema, 0o600 mode, and missing-
file first writes. CLI surface (sol call identity ...) unchanged.
No data migration code (Jer is sole user, resets identity on deploy).
No backward-compat shims. Clean break.