- New function summarize_index() reads canonical index and returns lifecycle, health, and maturity aggregates - Returns None for missing or legacy bare-list index - 4 new tests: aggregates, missing, legacy format, empty items Phase 25-01, Task 1
- TestGetIndexPath: path resolution to indexes/formal-library.json - TestBuildEnvelope: empty/with-items/count-matching/ISO timestamp - TestAtomicWriteIndex: file creation, content correctness, atomicity on interrupt, parent dir creation, overwrite, lock timeout via threading - TestBuildIndexEmpty: empty exports dir and absent exports dir return 0 and write empty envelope - 14 tests passing