Skip to main content

Prehistorian

CI PyPI Python Downloads License Stars Issues Last Commit Repo Size Code Size

Prehistorian is a predictive codebase cartographer. It analyzes Git history to uncover hidden, undocumented behavioral dependencies between files and warns you when a change is likely missing a related update.

It is CLI-only, LLM-free, and CPU-only by design.


Why Prehistorian

Static imports and direct references show only explicit dependencies. Real-world teams rely on patterns that rarely show up in the import graph: files that consistently change together across many commits. Prehistorian surfaces those patterns and turns them into practical, low-noise warnings.


At a Glance

  • Signals: Hidden co-change dependencies discovered from Git history.
  • Safety: Pre-commit warnings that never block your commit.
  • Performance: Sparse matrices keep memory use low on large repos.
  • Transparency: Simple, explainable $P(B|A)$ confidence score.

How It Works (Pipeline)

  1. Ingestion: git log --all --name-only --pretty=format:"COMMIT_START:%H"
  2. Filtering:
    • Drop commits touching more than 15 files.
    • Remove noise files (lockfiles, images).
  3. Matrix Creation: Build a sparse commit-file matrix.
  4. Math Engine:
    • mlxtend.fpgrowth finds frequent co-change pairs.
    • Markov co-change confidence: $P(B|A) = \frac{Count(A \cap B)}{Count(A)}$.
  5. Caching: Save the model to .prehistorian/model.joblib.

Features

  • CLI-only workflow, no UI or server required.
  • Sparse data pipeline for large repositories.
  • Fast co-change discovery via fpgrowth.
  • Actionable warnings without blocking commits.

Installation

pip install .

Development dependencies:

pip install .[dev]

Quick Start

prehistorian scan
prehistorian query path/to/file.py
prehistorian hook-install

If the prehistorian command is not on PATH:

python -m prehistorian scan

Guided Usage

1) Build the model

Command:

prehistorian scan

Expected output:

Prehistorian analyzed 842 commits. Found 126 behavioral dependencies. Model saved.

2) Query co-change dependencies

Command:

prehistorian query path/to/file.py

Expected output:

Co-change Dependencies for 'path/to/file.py'
File Path                          Co-change Confidence (%)
src/core/scheduler.py             88.24%
src/core/config.py                75.61%

If there is no model yet:

Model not found. Run `prehistorian scan` first.

3) Install the pre-commit hook

Command:

prehistorian hook-install

Expected output:

Successfully installed pre-commit hook at .git/hooks/pre-commit

4) Pre-commit check (runs automatically)

Manual command (optional):

prehistorian pre-commit-check

Expected warning (commit never blocked):

[PREHISTORIAN WARNING] You are committing 'A', but historically you also change 'B' 85% of the time. Did you forget to stage it?

Commands

Command Description
prehistorian scan Build and cache the co-change model.
prehistorian query <file_path> Show top co-changing files and confidence.
prehistorian hook-install Install a git pre-commit hook.
prehistorian pre-commit-check Warn about missing co-changed files.

Pre-commit Warnings

During git commit, Prehistorian checks the top 2 co-changed files for every staged file. If a highly correlated file is missing (>= 75%), it prints a warning but never blocks the commit.


Testing and CI

python -m pytest

GitHub Actions runs the tests on pushes and pull requests.


Release (PyPI + GitHub)

The release workflow publishes to PyPI and creates a GitHub Release when a version tag is pushed.

For this release, use tag 1.1.2:

git tag 1.1.2
git push origin 1.1.2

Notes and Limitations

  • Must be run inside a Git repository.
  • Commits that touch more than 15 files are skipped.
  • Noise files (lockfiles and images) are filtered out.
  • Delete .prehistorian/ at any time to rebuild the model.

License

MIT License. See LICENSE.

Release files for prehistorian 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prehistorian 1.1.2
File Size Uploaded
prehistorian-1.1.2.tar.gz 12.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prehistorian 1.1.2
File Interpreter ABI Platform
prehistorian-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size:23.1 kB

Release files / prehistorian-1.1.2.tar.gz

Download URL prehistorian-1.1.2.tar.gz
Size 12.2 kB
Tags Source
SHA-256 checksum
How to use checksums
867a10486c578e7048e3a1cbbf467a7a987f56a1c1f7ad0e15e0dfac5c20e973
BLAKE2b-256 checksum
How to use checksums
9a775af3981f61c8aed2683d777fc9a665f30ddb8c9b92dbb303bc08b18dabd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / prehistorian-1.1.2-py3-none-any.whl

Download URL prehistorian-1.1.2-py3-none-any.whl
Size 10.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b784b88b0a71b743c813a55c529019d3c4ae46e38b4cd67d04796124110805f
BLAKE2b-256 checksum
How to use checksums
a53774dc06703325d713609b3cf247c2cae4cc7dcc75c3df197e8d3b5725fe21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page