Changelog¶
All notable changes to Établi are recorded here. The kit is installed whole, so one version covers every skill. Set the date on a release's heading when tagging it.
[Unreleased]¶
- A documentation site, https://ancelin-code.github.io/etabli/, built with
Zensical and published from
develop. The guides move there from the README, which keeps a quickstart. - The GitHub-only requirement is now stated and recorded
(ADR-012):
the status, snapshot and publishing helpers ask
ghwhich pull requests exist. A forge-agnostic version is planned. - Lane session logs are written to
.logs/in the worktree root, beside the lane worktrees (../lanes/<repository>/.logs/by default), instead of.lanes/logs/in the checkout. They live outside every repository, so nothing needs ignoring and a log survives the removal of its worktree.--log-dirstill overrides it. A project that ran lanes before can delete its.lanes/directory. - Milestones are the default of a full route:
etabli-decomposeplans them before the epics and cuts only the first. Only the user can decide against them, recorded as a**Milestones:** noneline in the summary. The validator warns, without failing, when the summary has neither.
[0.1.0] - 2026-11-04¶
First public release, under the name Établi (établi, French for workbench).
- Six skills that take a project from requirements to draft pull requests:
etabli-orchestrator,etabli-spec,etabli-decompose,etabli-implement,etabli-refineandetabli-status. - Parallel implementation lanes with claims made by create-only git pushes, so
git is the only state. A lane's branch pushes to itself: a plain
git pushfrom a lane worktree reachestask/<id>, never the default branch. - Every lane is two sessions:
etabli-implement, thenetabli-refine, which reviews the change on the tier above, fixes what it finds, simplifies it without changing its behaviour, re-validates, and adds a Refinement section to the pull request body. A tier can name its ownreviewerintiers.conf;--no-refineskips the second session (ADR-011). - Tasks name a capability
tier(plan,buildorchore) instead of a vendor's model. Atiers.confmaps a tier to a harness and a model; with none, the harness picks its own default. Reasoning effort is left to the harness's own settings. - Milestones: a large project is cut and run one end-to-end slice at a time,
with a reviewed note closing each before the next is cut.
where.shandfollow.shstop at each boundary (ADR-010). - Requirement coverage: requirements carry ids, tasks list the ids they cover
in full or in part, and
coverage.shreports what is left of each. - A status snapshot that external tools can project into their own views, including milestones and coverage.
- An install split between
.claude/skills/and.agents/skills/, asnpx skills updatecan leave, is reported bywhere.shasNEXT repair-install, and the lane launcher refuses to start withoutetabli-implementoretabli-refine. The README explains how to install so this cannot happen, and how to repair it. - The helpers are POSIX
sh: no bash is required, and they run on dash, macOS's ownshand BusyBox (ADR-007). - Harness adapters for Claude Code, Copilot CLI, Codex, OpenCode and Pi, and a
DELIVERY_LANE_CMDtemplate for any other (ADR-008). - Multi-repository projects planned once and landed where each change belongs.
follow.sh --exit-on-humanends the loop with exit code 4 when a lane publishes or fails, so any harness learns a person is expected from the command ending, with no background-output support needed.- The direct implement path now says
etabli-refineruns in a separate session frometabli-implement, so the reviewer did not write the change, andetabli-implement's report names it as the next step. - Licensed under Apache-2.0.