Skip to content

Releases: BurntDosa/Checkpoint

v1.2.5 — Updating PyPi Description

Choose a tag to compare

@GenDosa GenDosa released this 14 Mar 11:09

What's Changed

  • Fix PyPI banner image — Use absolute GitHub raw URL for the banner so it renders correctly on PyPI (relative paths don't work outside GitHub).

v1.2.4 — Added a logo to the bot

Choose a tag to compare

@GenDosa GenDosa released this 14 Mar 11:04

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, and CLAUDE.md from the repository index. Added checkpoints/, catchups/, and MASTER_CONTEXT.md to .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

Choose a tag to compare

@GenDosa GenDosa released this 13 Mar 19:26

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() normalizes since_date to UTC via utcoffset() before comparing against entry dates.

v1.2.2 — Filter pre-existing entries from catchups, clean date formatting

Choose a tag to compare

@BurntDosa BurntDosa released this 13 Mar 18:30

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 ## Commit date headers and filter entries. get_checkpoints_since() now applies this filter before returning content.
  • main.pyprocess_catchup() formats the date with strftime("%B %d, %Y") before passing to the CatchupGenerator.

v1.2.1 — Fix catchups including user's own changes

Choose a tag to compare

@GenDosa GenDosa released this 13 Mar 11:47

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.pyget_checkpoints_since() accepts exclude_author param, filters out matching Checkpoint-{author}.md file before reading contents.
  • main.pyprocess_catchup() passes last_commit['author'] as exclude_author.

v1.2.0 — Prompt Quality + Catchup Lifecycle + Folder Split

Choose a tag to compare

@BurntDosa BurntDosa released this 13 Mar 11:04

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.pyCheckpointGenerator accepts commit message/author/date params and scales word count (100–200 trivial, 400–800 substantial). CatchupGenerator removes "What's In Progress" section, caps Critical Changes at 5, uses 2nd person voice, handles superseded changes with inline update notes. MasterContextGenerator adds per-section anti-hallucination rules and accepts readme_content/dependency_manifest. PRSummaryGenerator gets 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_dir field to RepositoryConfig.
  • git_utils.pycatchups/ added to system file exclusion patterns.
  • main.py — Commit path clears stale catchups. Onboard path reads README + dep manifest. --init creates catchups/ 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

Choose a tag to compare

@GenDosa GenDosa released this 13 Mar 03:57

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

Choose a tag to compare

@GenDosa GenDosa released this 12 Mar 11:54

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=false to opt out

Bug Fixes

  • get_diff() returns actual patch text instead of GitPython Diff object repr
  • graph.py no longer resets user's LLM config with a no-arg configure_llm() call
  • Ollama provider no longer blocked by API key check
  • max_tokens inline template default fixed from 2000 to 8000
  • 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 via pathlib

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

Choose a tag to compare

@GenDosa GenDosa released this 12 Mar 10:50

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

v1.0.5

Choose a tag to compare

@GenDosa GenDosa released this 12 Mar 09:59

Fix: update CI template action versions + auto-generate MASTER_CONTEXT.md on first push

  • actions/checkout@v3 → v4
  • actions/setup-python@v4 → v5
  • MASTER_CONTEXT.md is now auto-generated on the first push if it doesn't exist