Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ DESIGN.md
# prepack copies (source = repo root)
packages/cli/LICENSE
packages/cli/README.md

# filled-in deploy templates: real secrets, never the .example versioned above
packages/cli/assets/deploy/*.local.yaml
packages/cli/assets/deploy/brain.env
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,16 @@
All notable changes to `codesema` (the npm package in `packages/cli`) are documented here.
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [SemVer](https://semver.org).

## [0.16.0] - 2026-08-27

### Added

- **The three global brain-loop settings now have a panel in the local web UI, not only `codesema config` or a hand-edited config file.** `GET /api/settings` reports `brainAutoMerge`, `mergeStrategy` and `maxTaskTurns` as both their resolved, effective value (`config.ts`'s own `resolveBrainAutoMerge`/`resolveMergeSettings`/`resolveMaxTaskTurns`) and their raw configured one; `PUT /api/settings` accepts a partial update, validates every field against the same bounds the config file parser itself enforces (an integer turn budget between 1 and 500, one of the three forge merge strategies), refuses any other key, and never writes a partial update when one field fails validation. The repo settings screen gains a Brain integration section, a toggle, a strategy selector and a turn-budget field, saving through the existing global config token and `saveGlobalConfig`, the same function the CLI wizard already writes through. `mergeStrategy` also joins the `codesema config` menu itself, alongside `brainAutoMerge` and the turn budget, with its own "not set (forge default)" state shown and selectable.

- **`brain status` now lists tickets currently in flight, not only the ready count.** Alongside the ready-ticket total, it reports every ticket claimed and running for this repository, with which executor is working it and how fresh its last heartbeat is, flagging one as stale once its lease has expired. The brain's own `GET /api/cli/tickets` already carried that data; what was missing was somewhere in the CLI to show it.

- **An arm can now be deployed to a VM instead of a laptop.** `packages/cli/assets/deploy/cloud-init.yaml.example` provisions an Ubuntu 24.04 machine end to end: a locked-down `codesema` service account with no privileged group, Node.js 22 and the GitHub CLI from their own official repositories, rootless podman (subuid/subgid asserted rather than assumed), the bench repository cloned through `gh auth setup-git` so the GitHub token never lands in `.git/config`, and the `brain serve` systemd `--user` unit from `assets/systemd/` enabled through `loginctl enable-linger` plus `systemctl --user -M`, the one piece that unit's own install instructions did not cover. `docs/deploy-vm-arm.md` walks through minting the three required tokens, a dedicated `csk_` brain token mined against prod, a long-lived `claude setup-token`, a GitHub PAT, and launching the VM with `multipass`. A stated gate holds back a real, internet-facing server until the brain's order channel gets signing and a kill switch; the local rehearsal VM is unaffected, since it is outbound-only on the operator's own machine.

## [0.15.0] - 2026-08-26

### Added
Expand Down Expand Up @@ -74,6 +84,8 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [S

- **The workspace navigation is three zones now, not a sidebar tree, a status queue and a pinnable deck.** A 215px category rail — collapsible to a strip of icons — switches between **Conversation** and **Repository**; next to it, a resizable list column shows whatever that category holds; past both, one content zone renders exactly one thing at a time — a conversation, a draft, a repository, or a review — never several side by side. Conversations are no longer sorted into four visible bands: `groupConversationsByProject` now groups them by project first (display-name order), and what used to be the section — **Needs you**, **In progress**, **Ready to ship**, **Done** — is only the sort key inside each group (`SECTION_RANK`, `compareByActivity` breaking ties), so a project's own conversations sit together instead of being scattered across four piles. The header's search field is gone from the header: each list searches its own corpus now, conversations or repositories, and a box sitting above both would be a second search reaching for a third, overlapping thing — `⌘K` still focuses it, wherever it currently lives.

- **The README is readable again, and it says what the code does.** It had grown to 95 KB in which design rationale, decision numbers and internal invariants were folded into the user documentation. It is rewritten as a reference for the person installing the CLI: what each command does, the configuration keys with their real defaults and their global-only scope, the files written on disk, the exit codes. Three implementation notes with no other home (subprocess environments, forge issue hierarchy, cycle labels) moved to `docs/internals.md`. One claim was stale and is corrected: `claude` and `opencode` are both cageable, not `claude` alone.

### Removed

- **The standalone review page no longer browses the forge.** `MrSidebar.vue`, `BranchSidebar.vue` and `MrDetailPanel.vue` are gone, and the twenty-three message keys they alone owned with them. What that page does is read the one review its process is serving — what `codesema review` opens, and what CI keeps — and the merge request and branch browsing it used to carry is what the workspace now does better, across every project instead of one. `components/FocusView.vue` is renamed `ReviewFocusMode.vue`: it is the review's problems-first mode and had nothing to do with the `FocusView` navigation union it shared a name with.
Expand Down
Loading
Loading