Skip to content

v0.12.0

Latest

Choose a tag to compare

@lezli01 lezli01 released this 03 Nov 11:55
2f2003d

0.12.0 (2026-11-03)

Features

  • add handoffs, exclusive issue claims and the handoff actor (task 137.4) (6e024a6)
  • agent: add the unregistered copilot adapter (138.5) (d42acd6)
  • agent: carry the vincent MCP server into copilot runs (138.8) (2edd185)
  • agent: probe copilot's effort catalog and classify a logged-out stop (138.6) (d23b407)
  • agent: register copilot in the daemon, config, TUI and CLI (0bc31a0)
  • api: accept merge_back on chat handoff (134.15) (9da3251)
  • api: add issue ready/unready routes and a delivery's ready (08d239d)
  • apiclient: add MarkIssueReady/MarkIssueUnready and delivery readiness (49d829b)
  • apiclient: decode issue_has_live_chat and pin issue-chat wire fields (task 140.10) (ef5c419)
  • api: expose the handoff marker on issues and ?handoff= (d0058bd)
  • api: POST /v1/handoffs, the read routes and their MCP tools (8a86ad3)
  • api: refuse work on a moved main task and end its ranges at end_sha (134.12) (45d1378)
  • api: serve handoff_id, issue handoffs and the marker's paused fact (a8ac1a0)
  • api: serve the issue occupant state, side and merge-back counts, and merge_source_task_id (afba1a5)
  • chat: open a chat on an issue in its main worktree (task 140) (28526b1)
  • chatrun: record a copilot chat turn's own token share (05d7a08)
  • ci: shard testci by test name (03528ce)
  • cli: add issue ready/unready and task deliver --ready (64d52c0)
  • cli: expose side worktrees and merge-back on task add, show and chat handoff (da7233e)
  • cli: show and filter by the issue lane in vincent issue ls and show (c241738)
  • cli: show the handoff marker in the LANE cell and add --handoff (158cbea)
  • cli: vincent handoff start, ls and show (5c67697)
  • config: add tui.tabs, the ordered list of the TUI's main tabs (0058e5c)
  • copilot: implement FileMentioner and pin copilot as no SkillInvoker (5ee50a1)
  • copilot: map restricted onto --available-tools without a shell (edab556)
  • copilot: normalize the rich stream events and pin the absent ones (898e993)
  • copilot: resume with --resume=<id> and classify a lost session (97fa66d)
  • deliver resolve workflows through vincent task deliver (task 137.3) (00aa054)
  • examples: ship four example handoff workflows with unarmed triggers (3a13d88)
  • gate automated forge writes behind a handoff grant (2bf594c)
  • give handoff workflows their items (6e76fa9)
  • issues: bind an issue's main branch to its main-role tasks at creation (14db920)
  • issues: derive an issue's lane and attention and serve them on the API (e76a457)
  • mcp: accept an array for a repeated query parameter and describe the issue lane (fa20562)
  • record each handoff item's outcome with deliver, return, wait and release (c715677)
  • record what a task delivered (task 137.2) (8ce4fe8)
  • scheduler: admit at most one in-progress main task per issue (e909add)
  • skill: report copilot reading the published-skill store (d6b6aaa)
  • store: derive an issue's handoff marker and filter by it (1c94bb3)
  • store: hand an issue's main worktree to its next main task (134.12) (ea99b3e)
  • store: issue_id on task events and a durable issue.lane_changed (d7e55ea)
  • store: name the issue on every event of a chat opened on one (task 140.9) (22e9e31)
  • store: record the state a task was archived from (ba42822), closes #750
  • store: select and list handoffs, and validate a grant (5d65ef4)
  • store: store readiness on deliveries and derive hand_off from it (20552c5)
  • taskrun: cut side tasks from the issue's main branch without fetching (86e2a41)
  • taskrun: hand an issue's main worktree to its next main task (134.12) (846bca9)
  • taskrun: merge a finished side task back into its issue's main worktree (7abb234)
  • taskrun: stamp readiness at done from the snapshot's hand_off (314af45)
  • trigger: fire a type: issues trigger on an issue's lane change (b5013e0)
  • trigger: let a create_task action ask for merge_back (task 134.15) (32d51b3)
  • trigger: start handoffs from triggers with select and grant, and handoff_changed (0f13b13)
  • tui: add shared wrapText and scrollPane, help sheet first (0ff510e)
  • tui: draw the main-tab strip in the app header, with click-to-switch (8621d4d)
  • tui: give issue titles room on the issues list and add paging keys (a8ed3a7), closes #796
  • tui: land on the first configured tab and send takeovers back to it (d3a1793), closes #789
  • tui: open a chat on an issue with T from the issue screens (task 140.9) (4af5e7b)
  • tui: page the Steps timeline and hold its window still (#799 W11) (e76b998)
  • tui: render the issues list as a board of the four derived lanes (0419dff)
  • tui: show handoffs on the issue screens and the Overview (418f98b)
  • tui: show the main worktree occupant, roles and merge-backs on issues (8369353)
  • tui: size popups to the terminal, page their lists, lead the footer with its status (90f95c5)
  • tui: switch between main tabs with tab and shift+tab (0f2226b)
  • tui: sync a project's issues from the issues list with S (9da5b8e)
  • workflow: add the hand_off key and its editor row (bfdef75)

Bug Fixes

  • agent: let copilot's exit code decide, not a session.error (review F1) (978001e)
  • api: answer user-fixable issue-chat placement failures with 409 and their reason (review F7) (9432315)
  • api: ask the forge-write grant for a handoff verb's close and comment (review F1) (15c8ecc)
  • api: fail the task detail when its handoff cannot be read (review F6) (c9ae5ec)
  • api: name a chat occupant in the creation hint and on the client (review F3) (cbc31bc)
  • api: refuse role: handoff on a follow-up and a return's side task (review F2) (47d19dc)
  • api: report permission on a start_handoff trigger's list row (review F3) (2a0fdf3)
  • api: stamp an issue chat's end_sha only once archive lets go, and announce lane moves on its delete (review F8) (3dae5e8)
  • ci: clear every stale testci report before a run (review F2) (f0140b7)
  • ci: run testci's plain and race passes concurrently (review F1) (3de155f)
  • ci: scale the rerun failure limit to a split package's share (review F1) (8ccbe38)
  • cli: describe closing a chat opened on an issue in chat close (review F6) (03fca68)
  • cli: give chat handoff --issue so --merge can work (review F2) (6ad14af)
  • cli: refuse handoff start --max below 1 (review F4) (1b3c076)
  • copilot: re-capture restricted writes outside the worktree (review F1) (8fc98b9)
  • copilot: strip an inherited COPILOT_ALLOW_ALL from the child (review F2) (693de64)
  • deps: bump the Go toolchain to go1.26.10 (0c3651e)
  • docs: repaint the palette's ghost border before three screenshots (1fe0cc0), closes #743
  • examples: read merge-train's merge from .pull (review F2) (882fcc5)
  • examples: release merge-train items that are not a change (review F3) (30ccf3b)
  • fakeagent: read every --available-tools value in the widening guard (review F3) (2339be3)
  • gate: assert copilot's tokens reach the step row now that 138.7 reports them (review F1) (ff276c4)
  • issues: delete an issue GitHub deleted, and sweep on sync now (9fd5e2c)
  • keymap: keep tab and shift+tab global fixed keys (review F1) (7b0c599)
  • procx: quote batch-file command lines for cmd /c (review F1) (d2ea79f)
  • report codex as reading published skills from the store (#891) (e83fa1a)
  • scheduler: count this walk's own admissions in the working-directory claim (47a3f6f), closes #749
  • scheduler: re-check for a live issue chat inside the admission transaction (review F2) (2cb58a0)
  • screenshots: press s once in the tui-issues tape to show the done lane (review F3) (f78fc25)
  • scripts: match owns' needle on the fields each / filter matches (review F3) (b6438a6)
  • skill: do not report a stale store copy as served to copilot (review F2) (af1f120)
  • skill: follow the store symlink before calling copilot served (review F3) (b0ae902)
  • store: bind a later main task as an adopted branch so it queues (review F1) (c057c77)
  • store: clear end_sha when a main task receives a worktree again (review F4) (929093c)
  • store: drop an imported task's issue role with its issue link (review F4) (2c0a8a2)
  • store: keep a merge-back's insert from vetoing its side task's done (review F4) (c38c043)
  • store: keep merge-backs outside the branch claim (review F1) (a3b3e06)
  • store: never refuse a merge-back on a claimed issue (review F1) (f8cb46e)
  • store: refuse deleting an issue chat that holds the issue's worktree or main branch (review F1) (e39448f)
  • store: refuse renaming a main branch another main task shares (review F2) (0509839)
  • store: refuse the issue worktree transfer while the predecessor has an open chat (review F5) (0f90d29)
  • store: stop offering archive as the way past issue_has_live_main_task (review F6) (45b57a9)
  • taskrun: abort a merge-back's merge whenever it ends without merging (review F1, F2, F3) (bc036b7)
  • taskrun: block when an agent resolver leaves conflict markers (fc37e92), closes #756
  • taskrun: create no merge-back for a side branch already on the main branch (review F5) (c5018ba)
  • taskrun: decide an issue main branch's owner from the issue's line (review F1) (067d046)
  • taskrun: keep branch_exists for a first main task's foreign branch (review F3) (6b6f50f)
  • taskrun: remove a handed-on main task's container (review F2) (4075d41)
  • tui: adopt the neighbour as the selection when the task is gone (review F16) (0e53c61)
  • tui: align pull request rows, name the listed state, wrap notes (7c2c927)
  • tui: align the chats board's columns and keep its prompt's answers (cbd1b17)
  • tui: append the aborted Overview's outcome separator only with a card (review F14) (548c4c4)
  • tui: cap the chat footer to the pane (review F22) (633a89a)
  • tui: clear the archived board's selection on esc before leaving (review F11) (0b7071e)
  • tui: count entries, not headers, in grouped popups' cues (review F2) (1afd25d)
  • tui: count the composer's word-wrapped rows (review F6) (fa7f8da)
  • tui: count the more cues before pinning the answer popup's question (review F2) (5e12c7b)
  • tui: cut a wrapText prefix or indent that leaves the text no room (review F10) (d6b1da1)
  • tui: draw an issue's handoff rows under Handoff only (review F5) (0d5ff21)
  • tui: draw no scroll cue in a one-row pane (review F11) (8d55b00)
  • tui: drop a chat send result for a chat the view has left (review F4) (4e354ed)
  • tui: drop the handoff form's x toggle and count 137.11 in the status (ff93185)
  • tui: drop the separator after a footer status with nothing behind it (review F3) (a62e759)
  • tui: fit issue prompts by their key line, on the list too (review F10, F11) (f3e058d)
  • tui: fit the collapsed failure card's headline to the width (review F8) (b2acc3a)
  • tui: fit the projects and daemon views to 80x24 and route their sub-mode footers (7743cfa)
  • tui: fit the root chrome to the terminal (2ada3f6), closes #793
  • tui: give the archived boards their own header, columns and keys (4040651)
  • tui: give the connection screen its own help and palette context (review F4) (e9c43bf)
  • tui: give the project form's field editing its own keys (review F7) (7a6b63d)
  • tui: give the workflow inspector one field per row (20338b0)
  • tui: keep a middle-elided path within its width on wide runes (review F9) (3086f6b)
  • tui: keep a pull request's branch beside its glyph on the detail line (review F18) (7260d99)
  • tui: keep ctrl+p from opening the palette over a destructive prompt (review F3) (1493cc4)
  • tui: keep identity suffixes, align fact labels, polish workspace tabs (#800) (00756c0)
  • tui: keep paste, ctrl+v and clicks from the view behind a connection screen (review F3) (f225ff3)
  • tui: keep text typed while a chat send is in flight (review F8) (d713543)
  • tui: keep the board's cursor on screen when the table shrinks (review F21) (c62403a)
  • tui: keep the diff's sideways pan across moves and folds (review F19) (7154066)
  • tui: keep the in-progress issue card within the 80-column floor (review F2) (20fc693)
  • tui: keep the issue shown after returning it (review F5) (c892536)
  • tui: keep the task board's cursor visible and on its task (88c5861)
  • tui: keep what the pending-switch key does when the key moves first (review F5) (ec3b055)
  • tui: land a failed answer on the put-away chat form (review F5) (09baf14)
  • tui: land a project switch on the workspace on the human's tab (review F2) (c475334)
  • tui: let issue detail enter act only on an on-screen row (review F6) (c295383)
  • tui: let popup editors take newlines, wrap popup prose, pin the answer hint (0366d54)
  • tui: let prompts hold the keyboard and keep refused chat drafts (02d9c63), closes #790
  • tui: let the pull requests unlink question hold the keyboard (review F2) (b74ff51)
  • tui: make the issue detail scroll-first and give both issue screens the mouse (#792) (296780a)
  • tui: make the prompt footer's answers clickable hints (review F13) (c34a9ea)
  • tui: match issue operations before the detail's fixed scroll keys (review F5) (f2e25a1)
  • tui: name workflow-level restricted in the first-run notice again (review F15) (4b63e6f)
  • tui: never cut a pull request row's claim below its task id and source (review F10) (3cb6368)
  • tui: page grouped popups by the entries a window shows (review F1) (af73790)
  • tui: pan long diff lines, show the diff's age, name the right empty-state action (fa8170f)
  • tui: pan the diff through the viewport's own keymap (a15485b)
  • tui: pin the pull-request popups' footers and wrap their subjects (77ed669)
  • tui: re-resolve when ctrl+s closes the Fields editor (review F17) (bed7245)
  • tui: read hand_off into the workflow editor's row (review F2) (cc60dca)
  • tui: record the issues list's g and end as fixed keys (review F13) (07dcb49)
  • tui: refresh a handoff marker when its task pauses or resumes (review F4) (fc85645)
  • tui: register the workspace panes' new paging and pan keys (bd19db4)
  • tui: reload the archived tasks board on R and on opening (review F12) (09244f2)
  • tui: reopen the answer popup when a send is refused for a pending question (review F9) (91bf21d)
  • tui: reset the Steps timeline's scroll per task (review F20) (b65126f)
  • tui: reveal the whole selected workflow entry in the compact list (review F1) (2cb51c1)
  • tui: scroll the Overview and budget its cards by priority (#799) (487fb95)
  • tui: send a task opened off the board back to the human's tab (review F1) (32c272e)
  • tui: size the Fields editor's input to its row (review F13) (66852e4)
  • tui: start the daemon view's pinned pane at a block heading (review F24) (fdc6678)
  • tui: stop the workflow tab writing its body width into the view (review F7) (513a9e2)
  • tui: swallow typing over a hidden draft on the connection screen (review F1) (94965a9)
  • tui: window and wrap the workflow and trigger forms (#802) (8adafd9)
  • tui: window schema forms on the caret and keep the key line (review F8, F9) (01568c7)
  • tui: window the issue form on the description's cursor row (review F12) (fbe0ce3)
  • tui: window the issue form on the picker's input, not its heading (review F2) (410772f)
  • tui: window the new-chat form on its focused element and pin the hint (52f06e0)
  • tui: window the Pull Request tab's checks around the cursor (a0ff3a5)
  • tui: window the Pull Request tab's lanes block (review F15) (97faf4d)
  • tui: wrap chat notes and failures, rank the header, grow the composer (#801) (46bc114)
  • tui: wrap the issue detail and keep the issue form's focus on screen (25d4e31), closes #795
  • tui: wrap the new-task form to its pane and submit on ctrl+s anywhere (9ea4391)
  • tui: wrap workflow descriptions and validation text (#791) (43e5643)
  • tui: wrap workflow findings with wrapText after #786 removed wrapPlain (edc721d)
  • workflows: name a followed-up task in collect's left-out list (review F2) (2de4464)
  • workflows: read the train's pull request URL from .pull.url (review F1) (b959098)
  • workflows: refuse a vincent without task deliver up front (review F3) (dbdbf55)
  • worktree: list conflicted paths NUL-separated so markers are found (review F1) (e542fe6)
  • worktree: stop counting a lone ======= as a conflict marker (review F3) (232d130)