Releases: RandomCodeSpace/kb
Release list
v1.12.3
v1.12.3
Web UI fixes on top of the v1.12.2 theme.
- Scoped labels are two-tone again: the scope on its solid hue, the value on
the tint, with the theme's small radius and no border. v1.12.2 had
flattenedtype::buginto a dot and a separator. - Embedded UI assets carry a content
ETagwithCache-Control: no-cache.
Browsers used to cacheapp.cssandapp.jsheuristically and kept the
previous build after a release until a hard refresh. They now revalidate
on every load and receive a 304 until the build changes.
CI: pushes to main upload the full-tree Go coverage profile to SonarCloud
instead of the changed packages only (#385).
v1.12.2
v1.12.2
Effort is now mandatory on every task, and the web board has a new look.
Effort defaults to S with a warning
Every surface that creates a task fills an empty effort with S and says so,
so nobody mistakes an assumed value for a chosen one:
$ kb add "Ship it" -p web
kb: warning: #12 assumed status todo, priority low, effort S; pass --status, --prio, and --effort to choose
added #12 Ship itkb addwarns on stderr about every default it relied on.- The MCP
add_tasktool returns awarningslist with one entry per assumed
default; its description tells agents to pass status, prio, and effort. - The web API's
POST /api/tasksstoresSwhen effort is omitted. - The web form offers only S, M, and L, shows which defaults are still in use
as you edit, and confirms them in the toast on save. Quick add warns when
priority or effort was not given.
Existing tasks with no effort are left alone until edited.
Web UI
- One neutral light theme. The dark theme and the theme toggle are gone.
- Flat ink primary button, soft-fill chips and buttons without borders, small
radii on controls and labels. - Priority shows as a coloured top edge on the card instead of a background
wash. Checklist chips turn amber when part done and green when complete. - Label hues skip the violet band.
- The shipped-today counter and the label filter row are removed from the
header; labels still filter from card chips, the search syntax, and the
command palette.
v1.12.1
v1.12.1
Project creation now has an explicit CLI command:
kb project create website --json
kb add "Build landing page" -p website --json
kb list -p website --jsonkb project create <name>saves an empty project without creating a task.
Repeating it succeeds and leaves the existing project unchanged.kb project listincludes saved projects with zero tasks, including projects
whose last task was removed. Terminal and browser project lists still derive
their entries from tasks.kb help <command>and command-specific--helpshow positional arguments,
supported flags, examples, JSON output, and exit codes. Root help includes the
project creation workflow. Help requests do not open the database.
Existing kb add ... -p <name> commands continue to create projects implicitly.
Every new task still requires an explicit project. No database migration or new
dependency is needed.
v1.12.0
kb v1.12.0
v1.12.0 completes the map-related audit backlog #353-#367 while retaining
Go 1.26.5 exactly.
Board and editor behavior
- Dirty card editors require the advertised uppercase
Dto discard edits.
Lowercasedleaves the confirmation open. The mouse Discard button still works. - ADR editor cursors remain visible with CJK and emoji text. ADR, card, import,
and settings inputs share the same terminal-cell viewport rule. - Markdown images display their labels without fetching remote resources in
cards, details, or previews. - Web AI skill requests use the existing four-minute forge deadline and respect
shorter request deadlines and cancellation.
CLI behavior
Task JSON includes zero-valued fields and empty arrays. Scripts can distinguish
exit codes 1 for operational failures, 2 for usage, 3 for missing entities,
and 4 for ambiguous, conflicting, or refused operations. Successful commands
and help return 0. The README documents each command's JSON shape.
kb restore accepts only cancelled tasks. Use kb move <id> todo to reopen
another state. Link and unlink errors identify the missing task separately from
a missing edge. kb comment add --author sets the comment author without
changing the board namespace.
Forge and MCP behavior
Forge failures retain useful HTTP status, stop writing request errors into the
TUI, and report oversized responses and first-page rate limits. AI drift-summary
failures remain visible while preserving the drift result. Authenticated HTTP
is refused except for localhost and numeric loopback addresses.
MCP rejects task titles, descriptions, and comment bodies larger than 1 MiB
before writing. Updating another field preserves an omitted existing value.
Startup reuses the common local-store lifecycle and warning policy. Signal
cancellation closes the store; the POSIX SIGTERM regression runs on Linux and
macOS, with normal startup checks retained on Windows.
Build and release checks
The real-browser smoke covers board load, creation, movement, native SSE updates,
and persistence after reload. A separate privacy regression checks that remote
images cause no network requests. CI checks committed CSS against its Tailwind
source, verifies the CLI download hashes for all supported build targets, and
selects TUI performance checks for rendering changes.
Pointer fixtures fail instead of silently skipping when their assumptions drift.
Theme contrast logging accompanies visibility assertions. Targeted error tests
verify persisted state after rejection. The existing full-mode 96.4% coverage
threshold remains enforced; no coverage threshold was lowered.
The release workflow binds downloaded binaries and SHA256SUMS to hashes of the
actual locally built upload assets, then attests and verifies all six files.
With the GitHub CLI, verify a downloaded binary using:
gh attestation verify kb-linux-amd64 --repo RandomCodeSpace/kb --signer-workflow RandomCodeSpace/kb/.github/workflows/release.ymlUse your asset's filename, or SHA256SUMS. Add --source-digest and the full
release commit SHA to require a particular source revision. Build attestations
are available from this release onward.
Go version and remaining work
Go 1.26.5 is a hard restriction. The maintainer explicitly accepts vulnerabilities
caused by this standard-library version. The pinned govulncheck v1.8.0 gate
reports those findings and rejects reachable third-party vulnerabilities,
scanner failures, and unexpected toolchains. Accepted risk is not a clean scan.
The seven previously reported reachable Go findings are GO-2026-5026,
GO-2026-5972, GO-2026-6088, GO-2026-6089, GO-2026-6090, GO-2026-6091,
and GO-2026-6218, with fixes above the permitted Go version.
The default data directory remains ~/.local/share/kb on Linux, macOS, and
Windows, unless KB_DATA or --data overrides it. Make a cold backup of the whole
data directory before upgrading.
The older issues #205, #217, #237, #299, #301, #302, and #304 remain separate
follow-up work. This release does not claim physical-terminal verification.
v1.11.1
kb v1.11.1
v1.11.1 corrects the build toolchain to Go 1.26.5, the required maximum.
It retains the application fixes and scoped-label behavior from v1.11.0.
The immutable v1.11.0 binaries were built with Go 1.26.8 and do not meet
this toolchain restriction.
Accepted Go vulnerabilities
The maintainer explicitly accepts vulnerabilities caused by the required
Go 1.26.5 standard library. These findings are reported during CI and release
verification. They are accepted risk, not fixed vulnerabilities.
The pinned govulncheck v1.8.0 gate accepts standard-library findings only
for Go 1.26.5. It still rejects reachable third-party vulnerabilities,
scanner errors, and an unexpected toolchain.
The Go 1.26.5 scan reported seven reachable standard-library findings:
GO-2026-5026, GO-2026-5972, GO-2026-6088, GO-2026-6089, GO-2026-6090,
GO-2026-6091, and GO-2026-6218. It reported no reachable third-party findings.
The fixed Go version for these findings is 1.26.6, above the required maximum.
Verification
Builds and tests use Go 1.26.5 exactly. The existing full-suite, native-platform,
migration, and startup checks remain in place, with their documented platform
and short-mode skips. No physical-terminal validation is claimed.
The release ticket
records the candidate checks, release dry run, published tag, and artifact
verification. The original readiness fixes and remaining audit backlog are
listed in the v1.11.0 notes.
Upgrade
Make a cold backup of the data directory first. With Go 1.26.5 installed:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.11.1
kb versionThe release provides CGO-free binaries built with Go 1.26.5 for Linux amd64
and arm64, macOS amd64 and arm64, and Windows amd64.
v1.11.0
kb v1.11.0
v1.11.0 adds single-colon scoped labels and fixes startup, task-update, and
safety issues found in the readiness audit. Stored label text stays unchanged.
Readiness
The release candidate meets the automated readiness bar on GitHub-hosted
Linux, macOS, and Windows runners. Linux runs the complete Go suite. macOS
and Windows run the store, TUI, CLI, MCP, web, and root package tests with
-short, plus built-binary task and web/MCP startup checks. Existing platform
and short-mode skips remain in effect.
CI evidence for the merged candidate.
Go is pinned to 1.26.8. govulncheck v1.8.0 reported no affected vulnerabilities
and now gates CI and release verification.
Both reproduced audit blockers are fixed:
- SQLite data paths: the
store and TUI watcher share escaped DSN construction for relative, Windows,
and reserved-character paths. - MCP task references:
project-preserving updates resolve sequence numbers and UUID prefixes
through the store and retain the resolved task ID for the write.
Readiness is based on automated CI evidence. Physical-terminal validation
remains tracked in #304.
Remaining audit work is linked in the
readiness backlog.
Labels
- A single colon scopes a label the way a double colon always has.
type:bug
now reads as scopetype, valuebug, alongside GitLab'stype::bug. This
is the shape GitHub-style labels take once they are on a card, so they get
two-tone chips and scope filters without being rewritten. - The double colon is read first, so
a::bis never the value:b. The
reader also accepts one space after a single colon, though a tag cannot
carry whitespace today, sotype: bugis refused at the store as before. - Everything scoped follows: the web board and the TUI render the scope
quietly, every label in a scope shares one hue, the label picker groups by
scope and answerstype:as well astype::, and adding a second label in a
scope replaces the first, as it does for::. - The project scope stays
project::only. The label picker refuses to create
project:labels in either spelling, so a decoy that looks like the project
chip cannot exist.
Dependencies
- google.golang.org/grpc 1.83.1 to 1.83.2 (indirect), closing the xDS server
crash advisory. kb runs no xDS server; the bump only clears the alert. Go
moves to 1.26.8.
Upgrade
Make a cold backup of the data directory first. Then, with Go 1.26.8 or newer:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.11.0
kb versionThe release provides CGO-free binaries for Linux amd64 and arm64, macOS amd64
and arm64, and Windows amd64. Release binaries are built with Go 1.26.8.
v1.10.0
kb v1.10.0
v1.10.0 is a breaking release: kb no longer has an active project. A task's
project is named on the command that creates it, and nothing else decides
where a task lands. kb project use, kb project current, the KB_PROJECT
environment variable, the state.json file in the data directory, and the
web endpoint PUT /api/projects/active are gone. The database schema is
unchanged.
The stored default caused misfiling. Two shells or two agents sharing one data
directory filed tasks into each other's project, and switching project in the
web UI silently changed where the next kb add landed. With the project on
the command, every caller says where its task goes and no caller can change
that for another.
CLI
kb add "title" -p <name>names the project.--projectand
--tag project::<name>are equivalent spellings. Without one,addrefuses
withno project given: pass -p <name> or --tag project::<name>.kb list -p <name>shows one project. Without-p, every project is listed.- Commands addressed by task number (
update,done,move,cancel,rm,
comment,link) need no project.kb update <id> -p <name>still moves a
task to another project. kb project listremains. Its table loses the ACTIVE column and its--json
rows lose theactivefield.kb project useandkb project currentare
removed.KB_PROJECTis no longer read, andstate.jsonis neither read nor written.
MCP
- The
add_tasktool'sprojectargument is required.
TUI
- The board opens on all projects unless it remembers a switcher scope in its
own preferences file under.kb-tui/.pandPstill switch the view. - The new-card editor requires a project when the scope is all projects.
Web UI
- The board keeps its selected project in the browser only. Switching it no
longer affects the CLI, the TUI, or another browser tab. PUT /api/projects/activeis removed.
Migration
- Replace
kb project use xwith-p xon eachkb add. - Drop
KB_PROJECTfrom shell profiles and agent configurations; it has no
effect. - Scripts that relied on the stored default must pass
-p <name>tokb add. state.jsonin the data directory is unused and can be deleted.- MCP clients must pass
projecttoadd_task. - Anything that called
PUT /api/projects/activemust stop; the endpoint is
gone.
Upgrade
Make a cold backup of the data directory first. Then, with Go 1.26.5 or newer:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.10.0
kb versionThe release provides CGO-free binaries for Linux amd64 and arm64, macOS amd64
and arm64, and Windows amd64. Each binary records Go 1.26.5 in its embedded
build metadata.
v1.9.0
kb v1.9.0
v1.9.0 is a design release for the web board with one small data change:
every task now records when it last changed. The schema gains an
updated_at column (migrated in place, backfilled from moved_at), and the
CLI, MCP and web API task shapes carry updatedAt next to movedAt. The
web API also gains PUT /api/comments/{id} for editing a comment in place.
Web UI
- New theme. Stone (light) and charcoal (dark) neutrals with one acid lime
accent on primary actions, selection, and the brand mark. Focus rings use
ink so they stay visible on white. Links keep a blue of their own; every
other colour on the board is a semantic status, priority, or label hue. - Rounder geometry: 18px columns and dialogs, 14px cards, pill-shaped primary
buttons, and a little more air inside columns. - Search is a Spotlight-style dialog on every device: the header shows a
magnifier, and the magnifier,/, or the palette's filter command open a
centred field with the filter syntax under it. Typing filters the board
behind the dialog live; Enter or Escape closes it and the query stays
applied, marked by a dot on the magnifier. On phones the filter sheet
keeps the quick filters and labels, and the column tab bar hides a hidden
column's tab. - Column headers show a status dot, the column name, and a count badge instead
of a coloured underline. - The markdown editor shows one pane at a time. A Preview toggle in the
toolbar swaps the text for the rendered markdown and back; the formatting
tools stay in place while previewing. - The AI draft in the card editor is a single composer: the prompt and the
Draft action share one control, and the keyboard shortcut sits on the label
line. - Settings are laid out on one grid, so labels, fields, and actions line up
across the AI and integration sections. A saved API key or token is shown
as a saved state with Replace and Remove instead of an empty password box.
The AI section opens with the endpoint state (model and host) above the form. - Label suggestions and the label filter row are scoped to the active project.
Only labels that project's cards carry are offered; all projects still show
the whole list. - The card detail opens as a centred modal at every width instead of a
resizable side panel; on phones it is still a full-height sheet. The
#/t/<seq>route is unchanged. - Comments are a list again: the composer sits behind an "Add a comment"
row instead of a permanently open editor, and each comment has Edit next to
Delete. Editing opens the same inline markdown editor as the description. - Every control is drawn by the board rather than the browser, so the UI
reads the same on every OS: selects open a listbox with keyboard navigation
and type-ahead, due dates open a month grid with Today and Clear, checkboxes
are a lime box with an ink tick, tooltips are the board's own, and "discard
changes?" prompts use the board's dialog instead of the system confirm.
Number fields lose the spinner and text areas lose the resize grip. - A geometry pass puts every control on whole pixels: bordered bars (header,
filter row, dialog heads and feet, editor toolbar and footer) are sized so
their centred children land on integer offsets, chips use a 4px gap, the
label editor in the card dialog is the same 32px as its neighbours, the AI
composer is 44px, and the bulk bar is centred on a whole pixel. On phones a
blocker link ellipsizes instead of running past the modal, the editor's
Preview toggle stays in view when the toolbar scrolls, and focusing a text
field no longer zooms the page. - Cards carry a light wash of their priority hue: red for high, amber for
medium, blue for low. The Cancelled column starts hidden (Display options
turns it back on), and the "Add task" row at the foot of each column is
gone; the New task button and the + in every column header add cards. - In the card's property grid the priority, due and project pickers are the
same 28px as the status and effort segments beside them. - Columns can sort by recently updated or recently created, newest first,
alongside position, priority and due date. Recently updated is the
default; Display options or the palette switch it. Under a time sort a
drag between columns still moves the card, while a drop inside its own
column does nothing because the sort decides the order. The card's
Created line shows the last update when it differs from the move. - The board has a logo: a lime kanban mark next to the wordmark in the
header, as the tab icon, and as the home-screen icon on phones. - Toasts stack at the top centre of the screen, above any open dialog,
and stay clickable while a dialog is up. - A refresh only rebuilds the cards that changed. Cards whose data,
selection, focus and filters are unchanged keep their nodes, so a single
update no longer repaints the whole board. - A dropped card no longer bounces back to its source column before the move
lands. Refreshes that arrive while move requests are in flight are held, so
a multi-card move never paints a half-applied order.
Dependencies
Go 1.26.5 remains the toolchain. google.golang.org/adk/v2 stays at 2.2.0
because 2.3.0 requires Go 1.26.6.
- modernc.org/sqlite 1.56.0 to 1.58.0 (SQLite 3.53.4; recovery behaviour
unchanged, no change to kb's WAL or busy-timeout setup). - charm.land/bubbletea/v2 2.0.8 to 2.0.9 and charm.land/bubbles/v2 2.1.1 to
2.2.1. - google.golang.org/genai 1.66.0 to 1.71.0.
- google.golang.org/grpc 1.83.0 to 1.83.1 (indirect), closing the HTTP/2 DATA
frame memory-exhaustion advisory. - actions/upload-artifact 4.6.2 to 7.0.1 in the quality workflow.
Upgrade
Make a cold backup of the data directory first. Then, with Go 1.26.5 or newer:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.9.0
kb versionThe release provides CGO-free binaries for Linux amd64 and arm64, macOS amd64
and arm64, and Windows amd64. Each binary records Go 1.26.5 in its embedded
build metadata.
v1.8.2
kb v1.8.2
v1.8.2 fixes the AI connection test and tool-calling probe against
OpenAI-compatible servers other than OpenAI. The database schema, the CLI
verbs, the MCP tools, and the web API are unchanged.
AI
- The tool-calling probe behind Test connection forces its one function with
the standardtool_choiceform ({"type":"function","function":{"name":...}})
instead of OpenAI'sallowed_toolsextension. llama.cpp, vLLM, LM Studio,
and most proxies reject the extension with HTTP 400, which kb reported as
"check the model name and the API key" even when both were right. The fix
is in plasmid v0.1.4, which this release picks up.
Upgrade
Make a cold backup of the data directory first. Then, with Go 1.26.5 or newer:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.8.2
kb versionThe release provides CGO-free binaries for Linux amd64 and arm64, macOS amd64
and arm64, and Windows amd64. Each binary records Go 1.26.5 in its embedded
build metadata.
v1.8.1
kb v1.8.1
v1.8.1 makes the web board update by server push instead of polling and fixes
AI base URLs whose path is not /v1. The database schema, the CLI verbs, and
the MCP tools are unchanged.
Web UI
GET /api/eventsstreams board changes as Server-Sent Events. The browser
subscribes once, refreshes on each change, reconnects on its own, and replays
a missed change on reconnect. An idle board makes no requests. Polling
remains only as a fallback for browsers withoutEventSource.- Changes made from the CLI, the TUI, or an MCP client appear in the browser
within about half a second, detected through the same SQLite data-version
signal the TUI uses.
AI
- The AI base URL keeps any API version already in its path. A URL such as
https://generativelanguage.googleapis.com/v1beta/openaiis used as given
instead of gaining a second/v1. URLs with no version segment, such as
https://api.groq.com/openai, still get/v1appended, and OpenAI,
OpenRouter, Ollama, and vLLM addresses are unaffected. - A generic 4xx from an AI endpoint now asks you to check both the model name
and the API key, since some providers report a bad key with HTTP 400.
Upgrade
Make a cold backup of the data directory first. Then, with Go 1.26.5 or newer:
GOTOOLCHAIN=local go install github.com/RandomCodeSpace/kb@v1.8.1
kb versionThe release provides CGO-free binaries for Linux amd64 and arm64, macOS amd64
and arm64, and Windows amd64. Each binary records Go 1.26.5 in its embedded
build metadata.