Skip to content
All work

OPENLOG·AI RELEASE MANAGER

Changelogs are editorial, but the first draft should not be manual.

OpenLog turns a Git commit range into a polished release note. It selects commits, asks Groq to write a first draft, lets you edit in a rich BlockNote workstation, and publishes straight to GitHub Releases.

Role

Sole author

Language

TypeScript

Model

Groq (Llama 3)

APIs

GitHub REST + GraphQL

OpenLog

Architecture

How the system fits together

Commit selection → Groq draft → BlockNote editor → GitHub Releases API

The problem

Release notes are either lazy or late

Most projects either auto-generate a dump of commit messages or leave the release note empty. Neither helps a user decide whether to upgrade. A good changelog is written by a human, but a human should not have to start from a blank page.

The ideal workflow: machine draft, human edit, one-click publish.

Competitive gap

What existing release tools get wrong

GitHub’s auto-generated release notes dump every commit. Copilot-style tools can write summaries, but they often invent changes that are not in the diff. Manual changelogs are accurate but slow.

OpenLog keeps the human in the loop while automating the blank-page stage: grounded draft, editable, one-click publish.

ApproachWhere it fails
GitHub auto-notesDumps commit messages; hides the signal.
LLM chat draftHallucinates changes; no publish integration.
OpenLogGrounded by the diff, human edits, publishes directly.

The split

Let the model summarize, not invent

OpenLog fetches commits between two refs, filters out noisy ones like “wip” and “fix typo,” and passes the rest to Groq with a strict prompt: group by type, write user-facing summaries, and never invent a change that is not in the diff.

The draft is a starting point, not a final product. The editor is where the real work happens.

StepWho decidesWhat can go wrong
Fetch commitsGitHub APIWrong tag range, missing commits.
Filter noiseHeuristic rulesImportant commits hidden by bad messages.
Draft summariesGroqInvents changes, buries breaking fixes.
Edit + prioritizeHumanSkipped entirely in auto-generated notes.
PublishGitHub Releases APIMarkdown renders wrong, tag mismatch.

Grounding

The prompt is the safety layer

The model is only allowed to summarize diffs it can see. The prompt includes the commit hash, message, and changed files, and explicitly forbids adding external context. If a change is not in the diff, it does not go in the draft.

src/lib/draft.ts
const prompt = `You are writing a changelog draft.
Rules:
- Group into Features, Fixes, Breaking.
- Write user-facing summaries.
- Only describe changes present in the commits below.
- Never mention internal refactoring unless it affects users.

Commits:
${commits.map(c => `- ${c.hash} ${c.message}`).join('\n')}`;

const draft = await groq.chat.completions.create({ model: 'llama3-70b', messages: [{ role: 'user', content: prompt }] });

How it fits together

The release loop

1. Select a tag range. OpenLog pulls commits from GitHub. 2. Groq drafts categories: features, fixes, breaking changes. 3. BlockNote lets you rewrite, reorder, and add context. 4. One click publishes the rendered markdown to GitHub Releases.

The release loop
StepHuman or machine?
Fetch commitsMachine
Draft summariesMachine, with diff grounding
Edit tone and priorityHuman
Publish releaseMachine, after human approval

Results

What the draft saves

On a mid-sized repo with ~80 commits between releases, OpenLog cuts the time from “tag pushed” to “release published” from roughly 25 minutes to under 5. The editor stage is still required, but the blank-page problem is gone.

~5m

Release time

WITH OPENLOG

80+

Commits handled

PER RELEASE

0

Invented changes

WITH DIFF GROUNDING

Source · timed releases on a sample repository

Lessons

What building it taught me

LLMs are reliable at compression but dangerous at prioritization. They will happily list twelve minor fixes before the one breaking change that actually matters. The editor stage is not optional — it is the safety layer.

The best AI-assisted workflow is one where the human only has to say “yes, but differently.”

A generated changelog that skips the editor is just a slower way to write bad release notes.

Still open

Where it is still rough

Commit quality matters

If the team writes “fix” for every commit, the draft is still bad. The tool cannot rescue poor input.

No multi-repo releases

A release that spans several repositories has to be done one repo at a time.

Model choice is a cost knob

Groq is fast and cheap, but larger models produce better summaries. The right trade-off depends on repo size.

In short

What OpenLog came down to

01

Draft, do not publish

The model writes the first pass. A human decides what ships.

02

Ground the summary in the diff

If the model cannot see it in the commits, it cannot write about it.

03

Editor is the safety layer

Prioritization and tone are editorial, not generative.

More work