Releases: BurntDosa/Checkpoint
Release list
v1.2.5 — Updating PyPi Description
v1.2.4 — Added a logo to the bot
What's Changed
- Bot identity — CI commits now use the [Checkpoint-Bot](https://github.com/Checkpoint-Bot) GitHub account instead of a generic email, so automated commits show a proper avatar and profile link.
- Self-skip — The checkpoint workflow no longer runs on the source repo itself — only on repos where Checkpoint is installed.
- Repo cleanup — Removed tracked checkpoints, tests,
.DS_Store, andCLAUDE.mdfrom the repository index. Addedcheckpoints/,catchups/, andMASTER_CONTEXT.mdto.gitignore. - Updated README — New banner, renamed to Checkpoint, refreshed docs to match current CLI and config.
v1.2.3 — Fix timezone mismatch in checkpoint entry filtering
Bug Fix
Catchups returned "No checkpoints found" despite checkpoints existing
After the v1.2.2 date filtering fix, catchups in repos where committers use non-UTC timezones (e.g. IST +05:30) would return no results. All checkpoint entries were being filtered out.
Root cause: Checkpoint entry dates are written with datetime.now() on the GitHub Actions runner (UTC), but git commit datetimes carry the committer's local timezone. A developer committing at 2026-03-14 00:19 IST produces a cutoff date of March 14, but the checkpoint entry created at that same moment on the UTC runner is dated March 13. The filter March 13 >= March 14 evaluates to False, so every entry gets dropped.
Fix: _filter_entries_after() now converts since_date to UTC via utcoffset() before extracting the date for comparison, so both sides use the same timezone.
Changes
- storage.py —
_filter_entries_after()normalizessince_dateto UTC viautcoffset()before comparing against entry dates.
v1.2.2 — Filter pre-existing entries from catchups, clean date formatting
Bug Fixes
Catchups included commits from before the user joined the repo
When generating a catchup for a developer, the system was including checkpoint entries that existed before the developer ever made their first commit. For example, if Developer A joined the repo at 22:21 and the React frontend was committed at 20:38, their catchup would say they "missed" the frontend — but it was already there when they started.
Root cause: get_checkpoints_since() returned entire checkpoint files without filtering individual entries by date. Each checkpoint file is a living document with multiple ## Commit entries, and all of them were sent to the LLM regardless of when they were created.
Fix: get_checkpoints_since() now parses each entry's ## Commit \hash` — YYYY-MM-DD` header and only returns entries dated on or after the user's last active date. Pre-existing entries are excluded before the LLM ever sees them.
Ugly raw datetime in catchup titles
Catchup headings showed the raw datetime with timezone offset: Since 2026-03-13 20:38:27+05:30. Now formatted as Since March 13, 2026.
Changes
- storage.py — Added
_filter_entries_after()to parse checkpoint files by## Commitdate headers and filter entries.get_checkpoints_since()now applies this filter before returning content. - main.py —
process_catchup()formats the date withstrftime("%B %d, %Y")before passing to theCatchupGenerator.
v1.2.1 — Fix catchups including user's own changes
Bug Fix
Catchup summaries were incorrectly including the requesting developer's own commits as changes they "missed." For example, if Developer A committed a cosmic particles demo, their catchup would tell them about their own work alongside changes from other developers.
Root cause: get_checkpoints_since() returned all checkpoint files without filtering out the requesting user's own Checkpoint-{author}.md file. The LLM received the user's own checkpoint content and included it in the briefing.
Fix: get_checkpoints_since() now accepts an exclude_author parameter. When generating a catchup, the user's own checkpoint file is skipped so the briefing only contains changes made by other developers.
Changes
- storage.py —
get_checkpoints_since()acceptsexclude_authorparam, filters out matchingCheckpoint-{author}.mdfile before reading contents. - main.py —
process_catchup()passeslast_commit['author']asexclude_author.
v1.2.0 — Prompt Quality + Catchup Lifecycle + Folder Split
Highlights
Smarter LLM prompts — All four generator prompts (Checkpoint, Catchup, Master Context, PR Summary) rewritten with anti-hallucination guards. The LLM now distinguishes confirmed changes from inferred impact, avoids inventing file names or line numbers, and uses consistent direct technical voice throughout.
Catchup lifecycle — Catchup files now live in their own catchups/ directory (previously mixed into checkpoints/). When a developer commits, their catchup file is automatically deleted — they're caught up. The CI workflow handles both additions and deletions via git add -A catchups/.
Richer context for onboarding — --onboard now reads README.md and the first-found dependency manifest (pyproject.toml, package.json, requirements.txt) and passes them to the LLM. Individual checkpoint truncation raised from 2000 to 4000 chars.
Changes
- agents.py —
CheckpointGeneratoraccepts commit message/author/date params and scales word count (100–200 trivial, 400–800 substantial).CatchupGeneratorremoves "What's In Progress" section, caps Critical Changes at 5, uses 2nd person voice, handles superseded changes with inline update notes.MasterContextGeneratoradds per-section anti-hallucination rules and acceptsreadme_content/dependency_manifest.PRSummaryGeneratorgets matching guards. - storage.py — New
CATCHUP_DIR = "catchups"constant,Catchup_file prefix,get_existing_catchup(),delete_catchup()functions. - graph.py — Passes commit metadata (message, author, date) to
CheckpointGenerator. - config.py — Added
catchup_dirfield toRepositoryConfig. - git_utils.py —
catchups/added to system file exclusion patterns. - main.py — Commit path clears stale catchups. Onboard path reads README + dep manifest.
--initcreatescatchups/directory. - templates/checkpoint.yml — All CI commit steps now include
git add -A catchups/.
Migration
Existing catchup files in checkpoints/ (named Checkpoint_*.md) will be ignored by the new code. They can be safely deleted — fresh catchups will be generated in catchups/ on the next --catchup-all run.
v1.1.1
What's New in v1.1.1
Checkpoint system files filtered from diffs
get_diff() and get_diff_between_refs() now exclude checkpoint-agent's own files (.checkpoint.yaml, .github/workflows/checkpoint.yml, checkpoints/, MASTER_CONTEXT.md) before sending to the LLM. Checkpoints and PR summaries now only describe your project's actual code — never the checkpoint tool itself.
MASTER_CONTEXT.md regenerates on push
Previously, MASTER_CONTEXT.md only regenerated on PR merge (Job 3). Repos that push directly to main were stuck with the boilerplate placeholder forever. The push workflow now regenerates it whenever real checkpoints exist.
v1.1.0
Changelog
What's New
The first commit after checkpoint --init no longer wastes LLM credits describing its own config files. --init now writes a boilerplate MASTER_CONTEXT.md, and the CI workflow skips config-only commits. Real content populates after meaningful code is merged.
Security
- Shell injection via PR titles — PR title was interpolated directly into bash; now passed through
env:block - SSL verification on by default — set
CHECKPOINT_SSL_VERIFY=falseto opt out
Bug Fixes
get_diff()returns actual patch text instead of GitPythonDiffobject reprgraph.pyno longer resets user's LLM config with a no-argconfigure_llm()call- Ollama provider no longer blocked by API key check
max_tokensinline template default fixed from2000to8000- Whitespace typo in
config.py(config. model_dump)
Improvements
- Diffs over 12k chars truncated before LLM call
- Workflow concurrency groups cancel redundant runs
- Catchup generation skipped when no checkpoints exist yet
- Rate limit between catchup users reduced from 60s to 5s
- API key pre-flight check in CI — fails fast with clear error message
- Windows
get_file_tree()fallback viapathlib
Cleanup
- Removed dead config flags:
vector_db,git_hook - Removed deprecated functions:
get_active_authors,generate_file_dependency_mermaid,generate_class_hierarchy_mermaid
v1.0.6
feat: --init now does everything — workflow + config in one command
- checkpoint --init installs the GitHub Actions workflow and creates a default .checkpoint.yaml
- Removed the interactive setup wizard entirely — no more API key prompts locally
- Updated CI template to actions/checkout@v4 and setup-python@v5
- MASTER_CONTEXT.md is now auto-generated on first push if it doesn't exist
- Fixed dspy import error in llm_diagrams.py (replaced with direct LiteLLM calls)
- Updated README to reflect new setup flow