lalabase v2026.11.0 minor
Lalabase 2026.11.0
Self-hosted project management for agencies and their clients, with a terminal client and AI answers
Changelog
Added
- A Docker image for each release,
ghcr.io/lalabase/lalabase:<version>, for linux/amd64
and linux/arm64. It boots and passes the install check before it is pushed, and carries a
signed record of where it was built (gh attestation verify oci://ghcr.io/lalabase/lalabase:<version> --owner lalabase).
compose.ymlof a release pulls the image of that release instead of building it, and
compose.build.ymlstill builds the image from the checkout (#48). - A people directory for each organisation: members appear on their own, contacts without a
login are added by hand, with a salutation and up to ten labelled details (a second phone, a
website, an address). A person shows their last contact and their meetings, and a meeting
participant can point to a person. Two new role rights decide who may see and who may keep the
list, see the upgrade notes (#50), (#51), (#54), (#59), (#61), (#64), (#65), (#70), (#74). - The assistant looks people up in the directory, and the directory can be read over MCP and
/api/v1, by the same rights (#73), (#77). - A member chooses which email the others see: the login address (the default, as before), a
separate contact address, or none, under Profile (#82), (#88). - A meeting can move to another project, with its booked time, under the new role right
move_meetings(#45). - A meeting linked to a ticket opens beside the ticket in a read-only panel that fits the
width of the page, and the assistant is offered both (#40), (#42), (#43). - Search hits show their date, and their labels are translated (#66).
- MCP server 0.15 with 19 tools, five more than 2026.10.1.
list_organisationsand
list_projects: an agent now finds the ids the other tools ask for itself, instead of taking
them from the address bar.summarize_time_sessions, andfind_peopleandget_personfor
the directory.get_ticketlists the files of a comment (#71), (#77), (#89), (#90), (#93), (#94), (#95). /api/v1is now fit for programs (API 1.8.0, the Lalabase CLI uses it): an errorcodenext
toerror, anIdempotency-Keyon every write,api_versionandcapabilitiesin
GET /api/v1/me, the ticket view with pages and by number, time booking, plain text comments,
a project's knowledge,POST /api/v1/tickets/:id/changes, and the files of a comment
(#72), (#76), (#78), (#81), (#83), (#85), (#87), (#89).
Changed
- The page with name, login address and password is now called Account, and the page with
the picture, the shown email and the name spelling Profile (#86).
Fixed
- AI answers no longer run short because the model spent its output limit on thinking
(Gemini 2.5 and OpenAI reasoning models). An answer cut off at the limit is an error for
meeting summaries and analyses, not a result (#49). - Building the image yourself no longer fails on the first
up --buildwith Docker 29:
only the web service builds, and the worker runs the image it built (#48). - An MCP write with an
idempotency_keythat cannot be stored is refused before it writes.
It used to write, fail, and write again on every retry (#84). bundle installworks on Ubuntu 26.04, for installs without Docker (#41).
Security
- The rate limit of
/api/v1and/api/mcpno longer writes access tokens in plain text
into the cache. It counts per digest of the token. With the default file cache, tokens
that were in use stood in file names undertmp/cache(#92). - An email a member keeps from the others is held back everywhere: pages, search, the
assistant, MCP and/api/v1. Activities no longer store login addresses, and the addresses
they stored, with their copies in notifications and outbox events, are removed when you
update (#82). - The meetings shown on a ticket are checked against the project each meeting is in. After a
ticket moved to another project, its page could show titles and dates of meetings the reader
had no rights to (#39). - An unexpected failure while booking time or commenting over
/api/v1no longer returns the
text of the exception (#78), (#81). - Backups kept in the repository directory stay out of an image you build yourself (#60).
- Updated dependencies: crass 1.0.8 for GHSA-pq4g-8rxf-4g29 (#46), ViewComponent 4.14.0 for
GHSA-8qw7-6phv-7q6p (#47), mcp 1.8.2 for GHSA-4m5j-jjfc-97gx (#52).
Maintenance
- Tests and CI, with no effect on a running instance (#53), (#67), (#68), (#69), (#75), (#79), (#80).
- Repository documentation: invited contributions may also be licensed under Apache-2.0, the
README names the terminal client, andops/backupsays it describes our servers, not a
self-hosting guide (#44), (#62), (#63), (#91).
Upgrade notes
- Take a backup first. Six migrations run when the container starts, and a data backfill
(activities:drop_stored_emails) removes stored login addresses for good. Both run by
themselves; without Docker, runbin/rails db:migrate lalabase:data_backfillsas usual. The
backfill reads the activities, notifications and outbox events at each start. compose.ymlno longer builds the image: it pullsghcr.io/lalabase/lalabasein the
version of the release you checked out. Update withgit fetch --tags && git checkout 2026.11.0,
thendocker compose pull && docker compose up -d. If you changed yourcompose.yml,
compare it with this one first.- To keep building the image on your server, add
COMPOSE_FILE=compose.yml:compose.build.yml
to.env, and update withdocker compose up -d --build, now and for later releases.
In this setupdocker compose pullstops with an error, anddocker compose up -d
without--buildgoes on running the old image and says nothing. - Leave
LALABASE_VERSIONout of.env. Set, it pins the image, and a release checked out
later keeps running the pinned version. - Unless you keep building the image, the image
lalabase:localthat earlier releases built
is no longer used:docker image rm lalabase:localremoves it. - Access tokens in
tmp/cache(#92). With Docker the directory lives in the container and
goes when the update replaces it, unless you mounted a volume there. Otherwise empty its
contents once after updating. If that directory is part of a backup, or someone you do not
trust could read it, replace your access tokens. - No existing role gets the new rights
view_people,manage_peopleandmove_meetings.
Account admins need none of them; for everyone else, grant them in the roles of the
organisation. - The members page now shows only the email a member chose, to organisation admins as well.
The login address stays visible in the instance admin area. For API and MCP clients, the
emailof a member can be the contact address ornull. - API clients: an unexpected failure of
POST /api/v1/tickets/:ticket_id/time_sessionsor
POST /api/v1/tickets/:ticket_id/postsnow answers 500 instead of 422. A write on/api/v1
with anIdempotency-Keyover 255 bytes is refused with 422. - No new required environment variables.
LALABASE_VERSIONandCOMPOSE_FILEare optional,
see above.
Docker image
docker pull ghcr.io/lalabase/lalabase:2026.11.0
For linux/amd64 and linux/arm64, digest sha256:c38a122e7ccb03299422138c83eb9288dd1b5a3845c304ac517ca1c5390104d9. Check where it was built:
gh attestation verify oci://ghcr.io/lalabase/lalabase:2026.11.0 --owner lalabase
Links
- source code
- homepage
- license: AGPL-3.0