Release Notes
Added
- A team shares one set of tasks. A git project keeps its tasks in the git ref
refs/openplan/tasks, apart from the code. The ref is not a branch, so
GitHub shows no branch for it and offers no pull request. Every daemon syncs
the ref with the remote every 30 seconds and 2 seconds after each write. Sync
merges with a merge commit. It never rebases and never force-pushes.
- Sync merges two changes to one task by field and by line. Tags,
dependencies, and comments merge as sets. When two people change the same
field or the same lines differently, the task keeps both versions as a git
conflict block, and the published version is in force until someone picks:
- The web UI shows each conflict, with buttons to keep one version, both
versions, or new text.
openplan get warns about conflicts, openplan list marks them, and
openplan lint reports them.
- The API gives a field a
conflict state and each task a conflicts
count. POST /api/projects/{project}/tasks/{id}/resolve settles a block
in the body.
- Two tasks created at the same time under one number both stay. The later
one gets the next free number, and the merge revision says so.
- The daemon finds the problems in the tasks after every change: a reference to
a task that does not exist, a parent or dependency cycle, a tag that is not
registered, a field or a comment log that does not parse, a missing or second
title, and two files with one number. The API gives each task a problems
list, the web UI shows it, and openplan list, show, and get point the
problems out.
- One person can keep the tasks in a local
.plan/ directory instead, with a
history in .plan/.history.sqlite. An edit made by hand becomes a revision
too.
- Every write is a revision with an author, an agent, a time, and a message.
openplan history [key] lists the revisions, and openplan get <key> --revision <id> prints a task as it stood then. The web UI shows the history
of a task, a task at a revision, and the activity of a project.
openplan init --abbreviation <ABC> starts the tasks of a project. In a
clone, the first openplan command fetches the tasks that a teammate already
pushed. openplan init without --abbreviation does the same.
openplan migrate moves a .plan/ directory beside the code into the tasks
ref, with its whole history and its authors.
openplan write <key> --file <path> replaces a whole task file, as
openplan get prints it.
openplan sync syncs now, and openplan sync --status tells how the last
sync went. The web UI shows the sync state in its header.
- A web UI that reconnects gets the changes it missed, not only a full reload.
- A click on a
d2 diagram in the web UI opens it over the whole window. Esc
or the close button closes it.
Changed
- The tasks are no longer files in the checkout. Read and write them with the
openplan CLI or the web UI. A task write needs no worktree and no commit.
- A write through the daemon carries its author and its agent, so each
revision names who made it.
openplan lint reports the problems that the daemon finds, the conflicts,
and agent skill files that differ from the binary. It takes task keys, not
file paths. openplan lint --skills checks only the skill files.
- A
d2 diagram wider than the task column shrinks to fit it. It no longer
scrolls sideways.
Removed
- Branch-aware tasks: the task and branch matrix,
--branch,
--all-branches, openplan branches, and the branch badges and switcher in
the web UI. A task now has one version.
- Rolling updates and
openplan publish. Sync replaces them.
openplan merge-driver. Sync merges the tasks itself.
openplan lint --fix, the check of links from a task into the source code,
and the checks of tag files. The write path now keeps references canonical
and tag files valid.
Install openplan 0.0.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/sukovanej/openplan/releases/download/v0.0.3/openplan-installer.sh | sh
Download openplan 0.0.3