roadkeep
A ROADMAP and a CHANGELOG are formats held together by convention, so they drift the moment someone is in a hurry — or the moment an agent writes to them. roadkeep owns the writes: an entry goes in through a command that checks its shape at the point of insertion, which makes the file a schema rather than a habit. Its desktop app reads every backlog on the machine at once.

Public numbers
- PyPI downloads
- 204
Public numbers from GitHub and PyPI, as of 2026-11-13. The site is rebuilt daily.
Install
/plugin marketplace add alegauss/alegauss.github.io /plugin install roadkeep@alegauss
uvx roadkeep lint
pip install roadkeep
What comes next
From the product's own docs/ROADMAP.md at dd41f01.
Codex integration (one engine, host-specific adapters)
- PartialNo end-to-end evidence shows Roadkeep enforcement inside Codex
- DesignedUsers have no verified Codex adoption or distribution guide
Recently shipped
All 1222 entries →- RK1750 · a994c3ftwo branches that each added a block of their own are refused as prose both sides moved
Block headings each side inserted under labels the other does not use join one frame verbatim, and their lines and sections land under them.
- RK1749 · fb75a57syncing main into a feature is refused when main shipped a line the feature waits on
The driver composes the other side's ledger and store from git's GITHEAD, resolves deps against them and re-derives the annotations the merge moved.
- RK1748 · 49b0e21the renumber the merge driver names derives a destination the other branch already spent
renumber --past REV derives past the ids that revision spent, read through git, and the driver's refusal names it.
- RK1747 · d7149c1the prose merge refuses two branches that each shipped a decision
The prose merge decides record lines by id with the roadmap's rule and keeps them out of the frame, so decisions merge like sections.
- RK1746 · 55c8f7edeclare leaves a new governed file out of a merge driver the project already wired
declare extends .gitattributes to the new file wherever a governed file already merges through the driver, and names the line.
- RK1745 · 0da6b39the prose merge refuses or misplaces sections when one branch added a block
The prose skeleton folds blank runs like the roadmap's, and a section arriving in a block-organised file goes to the end of its own block.
- RK1744 · a244e9ano tested strategy keeps one backlog consistent across parallel long-lived branches
Twenty-one merge scenarios ran against the driver, seven defects were fixed as their own tasks, and the strategy is in the skill.
- RK1743 · 38de24amerge refuses a branch that adds a block while the other only files lines under an existing one
The merge skeleton folds blank-line runs, so a block added on one side merges with lines filed under an existing one on the other.