Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@

## The philosophy

The Ship of Theseus is a thought experiment: if you replace every wooden plank on a ship, is it still the same ship?
The Ship of Theseus is a thought experiment: if you replace every wooden plank on a ship, is it still the same ship?

Software projects do this constantly. A repository can live for decades. The original developers leave, architectures shift, and eventually, the last line of the original commit is deleted. But the repo keeps its name and URL.

This project visualizes that process. It measures codebase churn by tracking when lines of code were written and how long they survive.
This project visualizes that process. It measures codebase churn by tracking when lines of code were written and how long they survive.

People use this to:
- See how quickly a codebase is turning over. A stable architecture holds onto old code, while a frantic rewrite shows a sudden drop.
Expand Down Expand Up @@ -58,7 +58,7 @@ poetry run python -m scripts.add_fossils --update-survivor

### Viewing the chart

Open `index.html` in a browser.
Open `index.html` in a browser.

```bash
# macOS
Expand Down
2 changes: 1 addition & 1 deletion data/archive/tensorflow_data.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion data/archive/tensorflow_graph.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"snapshots":[{"snapshot_date":"2015-12","composition":{"2015":5233}},{"snapshot_date":"2016-03","composition":{"2015":406272,"2016":190838}},{"snapshot_date":"2016-06","composition":{"2015":388769,"2016":443050}},{"snapshot_date":"2016-09","composition":{"2015":253857,"2016":733936}},{"snapshot_date":"2016-12","composition":{"2015":232932,"2016":985824}},{"snapshot_date":"2017-03","composition":{"2015":211490,"2016":767331,"2017":463675}},{"snapshot_date":"2017-06","composition":{"2015":193301,"2016":679999,"2017":736909}},{"snapshot_date":"2017-09","composition":{"2015":189860,"2016":647853,"2017":1029959}},{"snapshot_date":"2017-12","composition":{"2015":186693,"2016":633973,"2017":1385013}},{"snapshot_date":"2018-03","composition":{"2015":178831,"2016":611498,"2017":1230361,"2018":690679}},{"snapshot_date":"2018-06","composition":{"2015":175375,"2016":602011,"2017":1166564,"2018":943312}},{"snapshot_date":"2018-09","composition":{"2015":163305,"2016":582459,"2017":1101846,"2018":1355570}},{"snapshot_date":"2018-12","composition":{"2015":159518,"2016":573263,"2017":1018752,"2018":1704497}},{"snapshot_date":"2019-03","composition":{"2015":155132,"2016":562137,"2017":986615,"2018":1566674,"2019":649383}},{"snapshot_date":"2019-06","composition":{"2015":152073,"2016":545162,"2017":963562,"2018":1474431,"2019":1157030}},{"snapshot_date":"2019-09","composition":{"2015":147796,"2016":404346,"2017":710832,"2018":1246908,"2019":1797488}},{"snapshot_date":"2019-12","composition":{"2015":145771,"2016":400426,"2017":701142,"2018":1219873,"2019":1936178}}],"fossils":{}}
{"snapshots":[{"snapshot_date":"2015-12","composition":{"2015":5233}},{"snapshot_date":"2016-03","composition":{"2015":406272,"2016":190838}},{"snapshot_date":"2016-06","composition":{"2015":388769,"2016":443050}},{"snapshot_date":"2016-09","composition":{"2015":253857,"2016":733936}},{"snapshot_date":"2016-12","composition":{"2015":232932,"2016":985824}},{"snapshot_date":"2017-03","composition":{"2015":211490,"2016":767331,"2017":463675}},{"snapshot_date":"2017-06","composition":{"2015":193301,"2016":679999,"2017":736909}},{"snapshot_date":"2017-09","composition":{"2015":189860,"2016":647853,"2017":1029959}},{"snapshot_date":"2017-12","composition":{"2015":186693,"2016":633973,"2017":1385013}},{"snapshot_date":"2018-03","composition":{"2015":178831,"2016":611498,"2017":1230361,"2018":690679}},{"snapshot_date":"2018-06","composition":{"2015":175375,"2016":602011,"2017":1166564,"2018":943312}},{"snapshot_date":"2018-09","composition":{"2015":163305,"2016":582459,"2017":1101846,"2018":1355570}},{"snapshot_date":"2018-12","composition":{"2015":159518,"2016":573263,"2017":1018752,"2018":1704497}},{"snapshot_date":"2019-03","composition":{"2015":155132,"2016":562137,"2017":986615,"2018":1566674,"2019":649383}},{"snapshot_date":"2019-06","composition":{"2015":152073,"2016":545162,"2017":963562,"2018":1474431,"2019":1157030}},{"snapshot_date":"2019-09","composition":{"2015":147796,"2016":404346,"2017":710832,"2018":1246908,"2019":1797488}},{"snapshot_date":"2019-12","composition":{"2015":145771,"2016":400426,"2017":701142,"2018":1219873,"2019":1936178}}],"fossils":{}}
2 changes: 1 addition & 1 deletion data/processed/claude-code_graph.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"snapshots":[{"snapshot_date":"2025-02","composition":{"2025":315}},{"snapshot_date":"2025-03","composition":{"2025":368}},{"snapshot_date":"2025-04","composition":{"2025":752}},{"snapshot_date":"2025-05","composition":{"2025":847}},{"snapshot_date":"2025-06","composition":{"2025":77617}},{"snapshot_date":"2025-07","composition":{"2025":77977}},{"snapshot_date":"2025-08","composition":{"2025":78851}},{"snapshot_date":"2025-09","composition":{"2025":56419}},{"snapshot_date":"2025-10","composition":{"2025":60375}},{"snapshot_date":"2025-11","composition":{"2025":86353}},{"snapshot_date":"2025-12","composition":{"2025":86746}},{"snapshot_date":"2026-01","composition":{"2025":86493,"2026":716}},{"snapshot_date":"2026-02","composition":{"2026":1694,"2025":86216}},{"snapshot_date":"2026-03","composition":{"2025":86216,"2026":2376}},{"snapshot_date":"2026-04","composition":{"2026":3326,"2025":86210}},{"snapshot_date":"2026-05","composition":{"2025":85997,"2026":11450}},{"snapshot_date":"2026-06","composition":{"2025":85997,"2026":11506}}],"fossils":{"genesis":{"timestamp":1740421074,"file":"SECURITY.md","content":"# Security Policy","year":"2025","commit":"429d03e","view_commit":"429d03e3823d7dfeaf162321f033f2b667c9b554","line":1},"survivor":{"timestamp":1740245022,"file":".devcontainer/devcontainer.json","content":"{","year":"2025","commit":"bd5ca70","view_commit":"main","line":1}}}
{"snapshots":[{"snapshot_date":"2025-02","composition":{"2025":315}},{"snapshot_date":"2025-03","composition":{"2025":368}},{"snapshot_date":"2025-04","composition":{"2025":752}},{"snapshot_date":"2025-05","composition":{"2025":847}},{"snapshot_date":"2025-06","composition":{"2025":77617}},{"snapshot_date":"2025-07","composition":{"2025":77977}},{"snapshot_date":"2025-08","composition":{"2025":78851}},{"snapshot_date":"2025-09","composition":{"2025":56419}},{"snapshot_date":"2025-10","composition":{"2025":60375}},{"snapshot_date":"2025-11","composition":{"2025":86353}},{"snapshot_date":"2025-12","composition":{"2025":86746}},{"snapshot_date":"2026-01","composition":{"2025":86493,"2026":716}},{"snapshot_date":"2026-02","composition":{"2026":1694,"2025":86216}},{"snapshot_date":"2026-03","composition":{"2025":86216,"2026":2376}},{"snapshot_date":"2026-04","composition":{"2026":3326,"2025":86210}},{"snapshot_date":"2026-05","composition":{"2025":85997,"2026":11450}},{"snapshot_date":"2026-06","composition":{"2025":85997,"2026":11506}}],"fossils":{"genesis":{"timestamp":1740421074,"file":"SECURITY.md","content":"# Security Policy","year":"2025","commit":"429d03e","view_commit":"429d03e3823d7dfeaf162321f033f2b667c9b554","line":1},"survivor":{"timestamp":1740245022,"file":".devcontainer/devcontainer.json","content":"{","year":"2025","commit":"bd5ca70","view_commit":"main","line":1}}}
2 changes: 1 addition & 1 deletion data/processed/langchain_graph.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"snapshots":[{"snapshot_date":"2022-12","composition":{"2022":33781}},{"snapshot_date":"2023-03","composition":{"2022":23173,"2023":155877}},{"snapshot_date":"2023-06","composition":{"2022":18477,"2023":757942}},{"snapshot_date":"2023-09","composition":{"2022":15981,"2023":838285}},{"snapshot_date":"2023-12","composition":{"2022":11103,"2023":1557525}},{"snapshot_date":"2024-03","composition":{"2022":10564,"2023":1386240,"2024":568276}},{"snapshot_date":"2024-06","composition":{"2022":7568,"2023":1206697,"2024":654425}},{"snapshot_date":"2024-09","composition":{"2023":1160144,"2022":7143,"2024":746004}},{"snapshot_date":"2024-12","composition":{"2023":733276,"2022":7123,"2024":732133}},{"snapshot_date":"2025-01","composition":{"2023":731790,"2022":7107,"2024":719180,"2025":59154}},{"snapshot_date":"2025-02","composition":{"2023":722523,"2022":6530,"2024":668520,"2025":126752}},{"snapshot_date":"2025-03","composition":{"2023":718523,"2022":6507,"2024":651370,"2025":159375}},{"snapshot_date":"2025-04","composition":{"2023":388277,"2022":5673,"2024":460145,"2025":144485}},{"snapshot_date":"2025-05","composition":{"2023":386269,"2022":5672,"2024":455777,"2025":158148}},{"snapshot_date":"2025-06","composition":{"2023":385741,"2022":5672,"2024":453298,"2025":170247}},{"snapshot_date":"2025-07","composition":{"2023":381504,"2022":5430,"2024":446762,"2025":203623}},{"snapshot_date":"2025-08","composition":{"2023":381147,"2022":5428,"2024":444978,"2025":222608}},{"snapshot_date":"2025-09","composition":{"2023":379381,"2022":5410,"2024":440924,"2025":253200}},{"snapshot_date":"2025-10","composition":{"2023":127952,"2022":3633,"2024":138310,"2025":213219}},{"snapshot_date":"2025-11","composition":{"2023":127614,"2022":3490,"2024":137738,"2025":213381}},{"snapshot_date":"2025-12","composition":{"2023":127352,"2022":3486,"2024":136936,"2025":221811}},{"snapshot_date":"2026-01","composition":{"2023":125495,"2022":3486,"2024":128469,"2025":207615,"2026":12522}},{"snapshot_date":"2026-02","composition":{"2023":125476,"2022":3485,"2024":126788,"2025":198810,"2026":35847}},{"snapshot_date":"2026-03","composition":{"2023":125434,"2022":3476,"2024":126636,"2025":195107,"2026":47775}},{"snapshot_date":"2026-04","composition":{"2023":125390,"2022":3476,"2024":126480,"2025":194170,"2026":71163}},{"snapshot_date":"2026-05","composition":{"2023":125367,"2022":3476,"2024":125964,"2025":192543,"2026":86912}},{"snapshot_date":"2026-06","composition":{"2023":125367,"2022":3476,"2024":125964,"2025":192540,"2026":87375}}],"fossils":{"genesis":{"timestamp":1666666586,"file":"examples/natbot.py","content":"\"\"\"Run NatBot.\"\"\"","year":"2022","commit":"1ef3ab4","view_commit":"1ef3ab4d0e663be147a5bcf542045e1f4a065778","line":1},"survivor":{"timestamp":1666648275,"file":".github/workflows/_lint.yml","content":"jobs:","year":"2022","commit":"18aeb72","view_commit":"master","line":33}}}
{"snapshots":[{"snapshot_date":"2022-12","composition":{"2022":33781}},{"snapshot_date":"2023-03","composition":{"2022":23173,"2023":155877}},{"snapshot_date":"2023-06","composition":{"2022":18477,"2023":757942}},{"snapshot_date":"2023-09","composition":{"2022":15981,"2023":838285}},{"snapshot_date":"2023-12","composition":{"2022":11103,"2023":1557525}},{"snapshot_date":"2024-03","composition":{"2022":10564,"2023":1386240,"2024":568276}},{"snapshot_date":"2024-06","composition":{"2022":7568,"2023":1206697,"2024":654425}},{"snapshot_date":"2024-09","composition":{"2023":1160144,"2022":7143,"2024":746004}},{"snapshot_date":"2024-12","composition":{"2023":733276,"2022":7123,"2024":732133}},{"snapshot_date":"2025-01","composition":{"2023":731790,"2022":7107,"2024":719180,"2025":59154}},{"snapshot_date":"2025-02","composition":{"2023":722523,"2022":6530,"2024":668520,"2025":126752}},{"snapshot_date":"2025-03","composition":{"2023":718523,"2022":6507,"2024":651370,"2025":159375}},{"snapshot_date":"2025-04","composition":{"2023":388277,"2022":5673,"2024":460145,"2025":144485}},{"snapshot_date":"2025-05","composition":{"2023":386269,"2022":5672,"2024":455777,"2025":158148}},{"snapshot_date":"2025-06","composition":{"2023":385741,"2022":5672,"2024":453298,"2025":170247}},{"snapshot_date":"2025-07","composition":{"2023":381504,"2022":5430,"2024":446762,"2025":203623}},{"snapshot_date":"2025-08","composition":{"2023":381147,"2022":5428,"2024":444978,"2025":222608}},{"snapshot_date":"2025-09","composition":{"2023":379381,"2022":5410,"2024":440924,"2025":253200}},{"snapshot_date":"2025-10","composition":{"2023":127952,"2022":3633,"2024":138310,"2025":213219}},{"snapshot_date":"2025-11","composition":{"2023":127614,"2022":3490,"2024":137738,"2025":213381}},{"snapshot_date":"2025-12","composition":{"2023":127352,"2022":3486,"2024":136936,"2025":221811}},{"snapshot_date":"2026-01","composition":{"2023":125495,"2022":3486,"2024":128469,"2025":207615,"2026":12522}},{"snapshot_date":"2026-02","composition":{"2023":125476,"2022":3485,"2024":126788,"2025":198810,"2026":35847}},{"snapshot_date":"2026-03","composition":{"2023":125434,"2022":3476,"2024":126636,"2025":195107,"2026":47775}},{"snapshot_date":"2026-04","composition":{"2023":125390,"2022":3476,"2024":126480,"2025":194170,"2026":71163}},{"snapshot_date":"2026-05","composition":{"2023":125367,"2022":3476,"2024":125964,"2025":192543,"2026":86912}},{"snapshot_date":"2026-06","composition":{"2023":125367,"2022":3476,"2024":125964,"2025":192540,"2026":87375}}],"fossils":{"genesis":{"timestamp":1666666586,"file":"examples/natbot.py","content":"\"\"\"Run NatBot.\"\"\"","year":"2022","commit":"1ef3ab4","view_commit":"1ef3ab4d0e663be147a5bcf542045e1f4a065778","line":1},"survivor":{"timestamp":1666648275,"file":".github/workflows/_lint.yml","content":"jobs:","year":"2022","commit":"18aeb72","view_commit":"master","line":33}}}
2 changes: 1 addition & 1 deletion data/processed/numpy_graph.json

Large diffs are not rendered by default.

Loading
Loading