A detailed, permanent record covering the whole arc of this project's
development so far -- requested explicitly, as detailed as possible, to
prevent regression for ever. Seven sections:
1. Performance findings: the file-index O(n^2) treap rewrite, pack_write's
O(n^2) dedup + latent hash-collision correctness bug, and the mount
table's O(n^2) (confirmed, deliberately not fixed, with the reasoning).
2. Environment/tooling limitations: TSan's categorical block (every
workaround actually tried and ruled out, not just the ones that
worked), and both variants of the ASan/UBSan sandbox-startup flake.
3. Project professionalization: version API, SPDX, pkg-config, SECURITY.md,
CHANGELOG.md, the Gitea-not-GitHub migration, and the CODE_OF_CONDUCT
decision.
4. Git identity correction: the filter-branch rewrite, the tag-object
tagger field it missed (found only by a full object-database sweep,
not by re-reading git log), and the exhaustive re-verification.
5. Data-integrity fault injection: test_crash_consistency.c, the real bug
in its own oracle (128 false failures before a progress side-channel
fixed it), and the two real overlay.c bugs found while building the
write-failure test (silent journal failure, torn-record poisoning of
later records).
6. CI as a second, independent reviewer: the memory leak detect_leaks=0
had been masking locally, and the set -e scripting bug -- including
the mistake made while fixing it (reintroducing the same bug in a new
shape), the follow-on bash-variable-blowup bug, the newly-discovered
TSan segfault variant, and the retry-budget gap, each confirmed by
direct reproduction under bash -eo pipefail, not reasoned about.
7. Distilled lessons: ten patterns extracted from the above, written to
be applied to a new problem, not just recognized in this one.
Every figure cited was checked against BENCH.md/CLAUDE.md's own numbers
before writing this, not reproduced from memory.
Cross-referenced from CLAUDE.md's "Repository status", README.md's
"Contributing" section, and CHANGELOG.md -- including two entries CHANGELOG
itself was missing (the set -e CI fix from the previous commit, and this
document), the exact class of gap POSTMORTEM.md section 3 already
describes happening once before with the v0.1.0 tag.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UqJpkdJ6Njnt1pw3CbghzB