0.1.0: the first release
Finished 2026-09-26.
The plan was eleven steps, each ending in a check that could confirm it rather than a judgement that
it looked done.
| Step | Built | Done when | Result |
|---|---|---|---|
| 0 | CMake skeleton that finds libclang on Windows and Linux; CI | CI green on both, and a deliberately failing test turns it red | done |
| 1 | lines of code, from raw text | fixture totals match hand counts; cloc agrees or each difference is explained | done |
| 2 | compilation database loading, libclang parsing, function discovery | every function in a fixture found at the right line | done |
| 3 | cyclomatic complexity, module summaries, thresholds | hand-computed values; lizard agrees on a real repository or each difference is explained | done: 99.0% on Catch2 |
| 4 | include graph, cycles, fan-in and fan-out, coupling, DOT | a fixture with a known cycle reports exactly that cycle | done |
| 5 | Halstead measures | hand-computed volume, difficulty and effort | done |
| 6 | documentation coverage | a fixture’s known documented and undocumented split, exactly | done |
| 7 | coverage import: gcov JSON, llvm-cov JSON, lcov | totals match gcovr and llvm-cov on the same data | done |
| 8 | the report: JSON with a schema, CSV, Markdown | a fixture report reads cleanly and its JSON validates | done |
| 9 | a run on a real system, published as a sample | a report from a public Earthworm checkout, with its module map | done, plus libmseed |
| 10 | self-review in CI, README, a tagged release | a release tag, and CI keeps Tezcatl’s own report | done |
What the plan did not foresee
The runs on real systems found defects every fixture had passed: a build directory that is the
project root excluded the whole project, database entries for Fortran were counted as C parse errors,
test files’ coverage lifted the totals, and which configuration of a file compiled twice survived
depended on the standard library. Each is fixed, tested and in the sabotage log.
Hardening after step 9 made Earthworm’s report 9.2 times faster, from 78.5 s to 8.6 s on Debug
builds, with every output byte-identical at each step. A Release build runs it in 3.5 s at 16
threads and 23.7 s on one (AMD Ryzen 7 7840HS, 2026-09-26).