Releases: berkayturanci/keel
Releases · berkayturanci/keel
Release list
Release v1.29.0
Highlights
- You can watch keel runs inside Claude Code. The optional
keel-progressmod (0.2.0) shows the livekeel shipruns across the repository's worktrees above the prompt, and a/keel-progresspane, without a second terminal. Click a run to open it in full, or expand the band to see every run with its whole branch. - A merged run no longer reads as "waiting on the merge window" forever:
keel mergenow records the landed merge in the run's checkpoint. - The jury gate goes by the panel's consensus and reuses the panel already posted for the head, and a reviewer who gave no verdict no longer counts as approving.
Full notes: CHANGELOG.md
What's Changed
- docs(cli): keel merge --hotfix's help names the gates-pass check it skips by @berkayturanci in #1441
- fix(jury): the jury gate reads the panel's consensus, and a silent reviewer is not an approval by @berkayturanci in #1442
- fix(swarm): swarm-status shows each cluster's review by @berkayturanci in #1443
- feat(mods): keel-progress — the live keel run inside Claude Code (#1444) by @berkayturanci in #1445
- fix(ship): keel ship reuses the head's posted jury panel instead of convening another by @berkayturanci in #1453
- fix(merge): keel merge writes the landed merge into the run's checkpoint (#1448) by @berkayturanci in #1449
- feat(mods): keel-progress shows every live keel run across the repo's worktrees (#1450) by @berkayturanci in #1451
- fix(mods): keel-progress shows a run once, marks the session's own, and lets you open a run and expand the band (#1455) by @berkayturanci in #1456
- release: 1.29.0 by @berkayturanci in #1454
Full Changelog: v1.28.0...v1.29.0
Release v1.28.0
Highlights
keel swarm-review(experimental, opt-in): keel dispatches each cluster pull request's own reviewer seats, read-only in a checkout of its head, and posts their verdicts — a rejection is always posted and holds the merge. It has run once, on a sandbox repository, with single-vendor review seats.- A jury verdict now satisfies the jury requirement only when its consensus approves: a panel that requests changes, abstains or never reached a consensus holds
keel merge, and no keel template or renderer writes an approval nobody gave. - The
external promisesCI check no longer reads a rate limit or a server error as a missing tag or repository.
Full notes: CHANGELOG.md
What's Changed
- feat(swarm): keel swarm-review dispatches each cluster PR's reviewer seats and posts their verdicts by @berkayturanci in #1427
- docs(swarm): swarm-review has run once — say so, and keep "experimental" by @berkayturanci in #1431
- fix(evidence): a jury verdict satisfies the jury requirement only when its consensus approves by @berkayturanci in #1432
- fix(tests): external promises reads only 404/410 as absent; a rate limit or a 5xx is 'could not check' by @berkayturanci in #1434
- release: 1.28.0 by @berkayturanci in #1435
Full Changelog: v1.27.0...v1.28.0
Release v1.27.0
Highlights
- A review verdict now counts toward landing only when it approves: a reviewer's change request at the head holds
keel merge, and the refusal names who asked for changes. - The experimental swarm landed end to end once, on a sandbox repository: a live worker labels its pull request and records its gates-pass itself, and
swarm-landcloses the landed issues as/keel:shipdoes. Review still happens outside the swarm. knobs.swarm_review_evidenceis deprecated (it has had no effect since swarm landing went throughkeel merge), and the revert-check article says exactly what the gate counts.
Full notes: CHANGELOG.md
What's Changed
- feat(swarm): the consent a live run delegates is in the run ledger, and consent-verify reads it (#1400) by @berkayturanci in #1417
- docs(website): the revert-check article says what the gate excludes by @berkayturanci in #1419
- chore(config): knobs.swarm_review_evidence is deprecated, and config.py says so by @berkayturanci in #1418
- fix(swarm): a live worker labels its PR and records its gates-pass, and keel merge names every cause by @berkayturanci in #1421
- docs(swarm): a live landing has run — say so, and keep "experimental" for the review it still lacks by @berkayturanci in #1424
- fix(swarm): a landed cluster's issues are closed as /keel:ship closes one by @berkayturanci in #1425
- fix(evidence): a verdict counts only if it approves, and a change request holds the merge by @berkayturanci in #1428
- release: 1.27.0 by @berkayturanci in #1430
Full Changelog: v1.26.0...v1.27.0
Release v1.26.0
Highlights
- The experimental swarm has a live path:
swarm-run --livehas each cluster's implementer seat write the change under consent the operator delegates, and keel commits, gates, pushes and opens one pull request per cluster;swarm-landmerges those pull requests throughkeel mergeitself once each has its review verdicts. - The implementer cannot reach the remote or tamper with keel's own git steps, the run persists the plan it executes, each issue's scope comes from the issue, and a dependent wave is refused rather than rebased.
- Run-ledger readers skip a record kind they do not know instead of refusing the ledger, and keel-ship.dev explains what 100 % coverage cannot tell you.
Full notes: CHANGELOG.md
What's Changed
- fix(swarm): a dependent wave is reported honestly and swarm-land refuses it (#1276, part 1) by @berkayturanci in #1395
- fix(swarm): each issue's scope comes from the issue, and an issue without one conflicts with everything (#1274) by @berkayturanci in #1401
- feat(swarm): a live worker implements its cluster through the delegate seat, under consent the operator delegates (#1400, first slice) by @berkayturanci in #1402
- fix(swarm): swarm-run persists its plan and swarm-land lands exactly that plan (#1275, core) by @berkayturanci in #1405
- fix(swarm): the implementer cannot reach the remote or tamper with keel's own git steps (#1400, slice 2) by @berkayturanci in #1406
- docs(website): a revert-check write-up, what 100 % coverage cannot tell you (#1403) by @berkayturanci in #1404
- fix(ledger): a reader skips a record kind it does not know instead of refusing the ledger by @berkayturanci in #1407
- feat(swarm): swarm-land merges each cluster's pull request through keel merge (#1287) by @berkayturanci in #1409
- fix(keel-visual): the swarm view reads the persisted plan and draws the real DAG (#1275) by @berkayturanci in #1411
- fix(swarm): worktrees are pruned, removed honestly and recoverable (#1278) by @berkayturanci in #1412
- fix(swarm): a worker reports its wave, stage and elapsed time (#1280) by @berkayturanci in #1413
- fix(swarm): a cluster PR arms the evidence gate at creation, and the docs say what landing needs by @berkayturanci in #1414
- docs(swarm): the live path exists — every surface says what a live swarm does now by @berkayturanci in #1415
- release: 1.26.0, with keel-visual 0.10.0 by @berkayturanci in #1416
Full Changelog: v1.25.0...v1.26.0
keel-visual-v0.10.0
What's Changed
- fix(swarm): a dependent wave is reported honestly and swarm-land refuses it (#1276, part 1) by @berkayturanci in #1395
- fix(swarm): each issue's scope comes from the issue, and an issue without one conflicts with everything (#1274) by @berkayturanci in #1401
- feat(swarm): a live worker implements its cluster through the delegate seat, under consent the operator delegates (#1400, first slice) by @berkayturanci in #1402
- fix(swarm): swarm-run persists its plan and swarm-land lands exactly that plan (#1275, core) by @berkayturanci in #1405
- fix(swarm): the implementer cannot reach the remote or tamper with keel's own git steps (#1400, slice 2) by @berkayturanci in #1406
- docs(website): a revert-check write-up, what 100 % coverage cannot tell you (#1403) by @berkayturanci in #1404
- fix(ledger): a reader skips a record kind it does not know instead of refusing the ledger by @berkayturanci in #1407
- feat(swarm): swarm-land merges each cluster's pull request through keel merge (#1287) by @berkayturanci in #1409
- fix(keel-visual): the swarm view reads the persisted plan and draws the real DAG (#1275) by @berkayturanci in #1411
- fix(swarm): worktrees are pruned, removed honestly and recoverable (#1278) by @berkayturanci in #1412
- fix(swarm): a worker reports its wave, stage and elapsed time (#1280) by @berkayturanci in #1413
- fix(swarm): a cluster PR arms the evidence gate at creation, and the docs say what landing needs by @berkayturanci in #1414
- docs(swarm): the live path exists — every surface says what a live swarm does now by @berkayturanci in #1415
- release: 1.26.0, with keel-visual 0.10.0 by @berkayturanci in #1416
Full Changelog: v1.25.0...keel-visual-v0.10.0
Release v1.25.0
Highlights
- An opt-in
revert-checkgate asks what coverage cannot: it reverts each change on the branch alone and requires a test to fail as an assertion, naming every change no test notices. keel cost-reportcan say "measured": hosted-API delegate runs record the token usage the provider reports.- The README, the site, the command adapters and the reference pages were audited against the code and now match it, and
swarm-landsays plainly that it is a local merge.
Full notes: CHANGELOG.md
What's Changed
- fix(keel-visual): absolute PyPI links, a tag guard, and every template shipped and checked (#1371) by @berkayturanci in #1383
- feat(cost): hosted-API delegate runs record their real token usage (#1373) by @berkayturanci in #1384
- docs(site): keel-ship.dev claims only what keel does (docs audit 2026-09-29) by @berkayturanci in #1386
- fix: the Ship watermark, the VS Code merge-window bar, doctor skips, scratch-dir and the ledger arming signal say what happened (docs audit 2026-09-29) by @berkayturanci in #1387
- docs: SECURITY, CONTRIBUTING, keel-visual and the swarm pages match the code (docs audit 2026-09-29) by @berkayturanci in #1388
- docs(adapters): the command adapters use the flags, contracts and helpers keel has (docs audit 2026-09-29) by @berkayturanci in #1389
- docs(keel): the CLI, evidence and release pages match the code (docs audit 2026-09-29) by @berkayturanci in #1390
- docs(keel): configuration, parameter reference, extensions and models match the code (docs audit 2026-09-29) by @berkayturanci in #1391
- docs(keel): the jury relaxation, the implementer chain, delegate labels and the run ledger match the code by @berkayturanci in #1392
- feat(gates): an opt-in revert-check gate — a change no test notices is named (#1289) by @berkayturanci in #1385
- fix(gates): revert-check's leftovers after #1385 by @berkayturanci in #1393
- fix(swarm): the worker timeout follows the project's gate timeout (#1279, item 1) by @berkayturanci in #1394
- docs(swarm): swarm-land's landing is a local merge (#1287, first slice) by @berkayturanci in #1396
- fix(swarm): landing refuses a dirty tree and returns you to your branch (#1279, item 3) by @berkayturanci in #1397
- refactor(gates): the gate runner returns one tuple shape by @berkayturanci in #1398
- release: 1.25.0 by @berkayturanci in #1399
Full Changelog: v1.24.3...v1.25.0
Release v1.24.3
Highlights
- A gate that cannot judge no longer reads as a pass: an unconfigured build or lint gate, or a jury with no
juryCLI, is reported as such, and a plan in which nothing judges the change blocks the merge. - A first live run works or says what is missing:
keel setupno longer writes amake testgate for a project without one, andkeel doctorchecksghand which agent hosts are installed. keel cost-reportsays when its figures are estimates, and the README, the site and the PyPI page claim only what keel does, with a real recording of keel stopping and clearing a change.
Full notes: CHANGELOG.md
What's Changed
- docs(site): a shared link previews the README's pitch; the search title keeps its terms (#1297) by @berkayturanci in #1315
- fix(swarm): swarm-status exit codes, a held badge, bounded child output, no dead parser (#1280) by @berkayturanci in #1316
- fix(keel-visual): the swarm page escapes every value it interpolates by @berkayturanci in #1317
- docs: the README, docs and site claim only what keel does (launch cleanup) by @berkayturanci in #1344
- fix(website): the simulator's Pause, Resume and Reset say what they act on (Palette #1347) by @berkayturanci in #1358
- build: release-lock and CodeQL bumps together (Dependabot #1348-#1352) by @berkayturanci in #1356
- perf(ledger): keep one record per pull request in one pass (Bolt #1355) by @berkayturanci in #1357
- docs(readme): a first screen that says who does the work and gets you to a first issue by @berkayturanci in #1360
- ci: CodeQL v4.38.2 (Dependabot #1352) by @berkayturanci in #1362
- fix(website): the coverage page shows the coverage run's figures, not typed ones (#1320) by @berkayturanci in #1363
- fix: a stackless project's build gate blocks with the knob to set, and doctor checks gh auth and agent hosts (#1328, #1334) by @berkayturanci in #1365
- docs(release): the PyPI page describes keel as it is, and each release opens with highlights (#1340, #1342) by @berkayturanci in #1366
- fix(gates): a gate that cannot judge never reads as a pass, and stops the loop (#1364) by @berkayturanci in #1368
- docs: the ship adapter and jury.py stop calling a missing jury harmless; the README lists every CLI write (#1361) by @berkayturanci in #1367
- release(keel-visual): 0.9.0 ships keel-visual swarm, on a keel core floor of 1.15.0 by @berkayturanci in #1370
- test(docs): import unittest.mock one way (CodeQL py/import-and-import-from) by @berkayturanci in #1372
- fix(cost): cost-report says when its figures are estimated, and the site stops advertising cost tracking (#1359) by @berkayturanci in #1374
- test(site): the coverage page's render tests read the page once it has settled (#1375) by @berkayturanci in #1376
- docs: Cursor is labelled partial, a long-runs write-up, and the site drops metering it does not have (#1332, #1338) by @berkayturanci in #1379
- fix(gates): a jury gate that cannot run reads SKIPPED, and blocks when it is the only gate (#1369) by @berkayturanci in #1380
- docs(readme): a real ~30-second recording of keel stopping and clearing a change (#1330) by @berkayturanci in #1381
- release: 1.24.3 by @berkayturanci in #1382
Full Changelog: v1.24.2...v1.24.3
keel-visual-v0.9.0
What's Changed
- docs(site): a shared link previews the README's pitch; the search title keeps its terms (#1297) by @berkayturanci in #1315
- fix(swarm): swarm-status exit codes, a held badge, bounded child output, no dead parser (#1280) by @berkayturanci in #1316
- fix(keel-visual): the swarm page escapes every value it interpolates by @berkayturanci in #1317
- docs: the README, docs and site claim only what keel does (launch cleanup) by @berkayturanci in #1344
- fix(website): the simulator's Pause, Resume and Reset say what they act on (Palette #1347) by @berkayturanci in #1358
- build: release-lock and CodeQL bumps together (Dependabot #1348-#1352) by @berkayturanci in #1356
- perf(ledger): keep one record per pull request in one pass (Bolt #1355) by @berkayturanci in #1357
- docs(readme): a first screen that says who does the work and gets you to a first issue by @berkayturanci in #1360
- ci: CodeQL v4.38.2 (Dependabot #1352) by @berkayturanci in #1362
- fix(website): the coverage page shows the coverage run's figures, not typed ones (#1320) by @berkayturanci in #1363
- fix: a stackless project's build gate blocks with the knob to set, and doctor checks gh auth and agent hosts (#1328, #1334) by @berkayturanci in #1365
- docs(release): the PyPI page describes keel as it is, and each release opens with highlights (#1340, #1342) by @berkayturanci in #1366
- fix(gates): a gate that cannot judge never reads as a pass, and stops the loop (#1364) by @berkayturanci in #1368
- docs: the ship adapter and jury.py stop calling a missing jury harmless; the README lists every CLI write (#1361) by @berkayturanci in #1367
- release(keel-visual): 0.9.0 ships keel-visual swarm, on a keel core floor of 1.15.0 by @berkayturanci in #1370
Full Changelog: v1.24.2...keel-visual-v0.9.0
Release v1.24.2
What's Changed
- docs(community): the issue chooser's "Ask a question" goes to Discussions Q&A by @berkayturanci in #1299
- fix(scripts): the absolutizer handles data: srcsets and multi-line anchors, and its guards stop blaming it (#1294) by @berkayturanci in #1300
- fix(scaffold): a Python project gets gates it can run (#1297) by @berkayturanci in #1301
- ci: test on Python 3.14 and declare it (#1297) by @berkayturanci in #1302
- fix(swarm): a live swarm hands its workers --live (#1269) by @berkayturanci in #1304
- fix(swarm): a failed checkout stops the landing instead of merging elsewhere (#1270) by @berkayturanci in #1306
- fix(swarm): a contended merge lock holds the wave; a bad state file is unreadable, not fatal (#1272, #1273) by @berkayturanci in #1307
- fix(swarm): a worker that raises is a failed cluster, not a failed run (#1271) by @berkayturanci in #1308
- fix(swarm): a failed wave no longer skips the next one (#1268) by @berkayturanci in #1312
- fix(swarm): a rebalanced plan drops the failed issue's edges too (#1277) by @berkayturanci in #1310
- fix(swarm): scope paths keep their dots and brackets; swarm-land says it needs issues (#1279) by @berkayturanci in #1311
- fix(swarm): configured base, honest --help, one child at a time in a shared checkout (#1262, #1263, #1288) by @berkayturanci in #1309
- release: 1.24.2 by @berkayturanci in #1313
Full Changelog: v1.24.1...v1.24.2
Release v1.24.1
What's Changed
- docs(launch): four things a first-time visitor meets now say what is true by @berkayturanci in #1296
- release: 1.24.1 by @berkayturanci in #1298
Full Changelog: v1.24.0...v1.24.1