feat(summarize): give README a machine-readable head master
M3 of the summarize/integrity plan. YAML front matter carrying the same fields as an index row -- id, title, collectionName, dataCenter, access, dates, declared, observed, materialised, parquet_files_found, computed_at, owilix_version -- so a consumer reads one shape whether it comes from the README, stats.json, or the collection index later. The prose below is unchanged. The part worth recording is the interaction, because it would have shipped looking like a feature. Putting computed_at in the README means the M2 unchanged-write comparison can never match, so every README in the mirror would be rewritten on every run -- restoring exactly the write churn 5.10.1 removed, and with it the thing that invalidates a dircache ETag and, before 5.9.0, could empty a listing. The comparison now strips volatile keys from front matter as well as from stats.json and compares the prose literally. Found by re-running the fixture rather than by reading the diff. Two smaller pieces of hardening, both from the same instinct that a describing artifact must not break the thing it describes: a metadata value PyYAML cannot represent becomes its string form instead of raising, and a malformed front matter block is read as "no front matter" so a bad head never costs the body. Verified on the fixture: front matter round-trips through yaml.safe_load, a second --force pass performs zero writes with the timestamp present, and the human section is byte-identical when only the timestamp moves. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017phbSd6D8u4iEQsCAPEw6s