Repository navigation
Releases: azimov777/casefile
Release list
v0.15.1
Casefile v0.15.1
A fix release. With six or more interface tabs open in one browser, new tabs did not load and open tabs stopped reading entries. This release fixes it. One addition to the API comes with it. No database migrations in this release.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.15.0 updates its service to this release by itself within about an hour, or at the next Docker start.
What's changed
- Interface tabs no longer exhaust the browser's connections. Every tab, a background one too, held the journal stream open, and each open stream took one of the six connections a browser allows per address. With six tabs the seventh request, a new tab or an entry body, waited for a free connection and never got one. Now only the visible tab holds the stream. A hidden tab closes it and, when it becomes visible again, catches up on what it missed from its last known position.
- The journal stream names its position (API). The first block of
GET /api/v1/journal/streamnow carriesid: <seq>next toretry:, so a client knows its position before the first entry and can close the stream and reopen it withLast-Event-IDwithout missing an entry. The entry frames are unchanged.
Upgrade notes
- The schema does not change. The head stays
3b9f4d192289; the updater still takes a verified snapshot before installing. - Reload the interface tabs that are already open after the update: they run the old code until they are reloaded.
CASEFILE_VERSION=0.15.0in.env, if you pin a release, is the line to change to move to this one by hand.- The skill
casefileand the plugin manifests carry version 0.15.1.
Not fixed
- More than five interface windows that are visible at the same time still run into the browser's limit on connections per address: each visible window holds one stream.
v0.15.0
Casefile v0.15.0
A release about knowledge. A finished task can leave a draft of what it learned, and the interface shows what has not been lifted into the project yet. An area now has its own knowledge screen in the interface, and the casefile skill teaches agents how to work with project and area knowledge. The project's own concept and conventions moved out of repository files into project decisions. No database migrations in this release.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.14.0 updates its service to this release by itself within about an hour, or at the next Docker start.
What's changed
- Knowledge draft in a task case (TRK-659). A task whose code is still in a branch can file a
decisionorfindingin its own case as a draft:add_entryand the entries ofclose_tasktakedraft_for, the key of the task's project or the address of one of its active areas. The task gets the computed featureopen_drafts(drafts not lifted yet), shown byget_task,search_tasksand REST and usable as a filter. A draft is lifted by an ordinary entry in the case of the project or area that references the draft inrefs;read_entriesthen showslifted_byon the draft. No new tool and no automation. - "Not lifted" in the interface (TRK-661). The task page shows a knowledge draft that has not been lifted, and the task list has a mark and a filter for it. A closed task with unlifted knowledge no longer goes to the archive of the list, so it is not hidden before someone lifts it.
- Area knowledge in the interface (TRK-660). An area has tabs "Decisions" and "Notes" (the default tab is "Decisions"), search, and a mark "replaced -> successor" for entries that were superseded.
- Skill
casefile(TRK-662). A new section on working with knowledge: project and area decisions, search, replacement, a draft and its lift. The skill grew from about 13.5 KB to 25 KB. - Concept and conventions as project decisions (TRK-610, TRK-611).
docs/CONCEPT.mdanddocs/CONVENTIONS.mdare removed from the repository; they live as decisions of the project and its areas in the tracker. Code comments that pointed at them point at the decisions. - Notes moved into the tracker (TRK-612, TRK-614). The backend notes
docs/notes/and the interface notesui/docs/notes/are now entries of the areas of the project; the folders and the notes format test are removed. The developer guide and the interface concept, conventions and contract map are moved too (TRK-613, TRK-615), and the folder mapsAGENTS.mdare navigation only (TRK-649, TRK-616). - Interface guides moved too (TRK-694).
ui/README.mdandui/e2e-demo/README.mdare now entries of the interface areasui-toolingandui-testing; the folder maps point there. - Release-note drafts removed (TRK-693).
docs/release-notes/is gone: the text of every release lives on its GitHub release page, which was checked against each draft before removal. CONTRIBUTING.mdandREADME.mdno longer link to internal documents that are not in the repository (TRK-689).- Tests. A test checks that references to documents in code comments point at existing files (TRK-646); three flaky end-to-end scenarios are fixed (TRK-686, TRK-688, TRK-691).
Upgrade notes
- The schema does not change. The head stays
3b9f4d192289; the updater still takes a verified snapshot before installing. draft_for,open_draftsandlifted_byare new fields and a new filter; they are inopenapi.jsonand the interface client is regenerated. Older entries are read as before. Until the update, an installation on v0.14.0 does not knowdraft_for.- Agents with a remembered tool list should reload it after the update so the new
add_entryargument is seen. CASEFILE_VERSION=0.14.0in.env, if you pin a release, is the line to change to move to this one by hand.- The skill
casefileand the plugin manifests carry version 0.15.0.
Not verified yet
- The interface (knowledge tabs of an area, "not lifted" mark and filter) was run in Chromium only; Safari was not checked.
- The new skill section was checked by reading and by runs on a test contour, not by a blind run on this release's installation.
- Every moved note was compared word for word with its file by a script. Code comments that pointed at a note without quoting its title were matched to the new entry by meaning, not checked one by one.
Casefile v0.14.0
Casefile v0.14.0
A release about two things. Discussions replace questions in task cases: an agent that needs a human now opens a discussion, and the human answers it on its own screen. "Direction" becomes "area" everywhere, and a new task must name one. Both change what agents on an installation can call, so read "Breaking changes" before you update. This release carries database migrations; the updater takes a verified snapshot first.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.13.0 updates its service to this release by itself within about an hour, or at the next Docker start.
Breaking changes
directionis nowareain MCP and REST (TRK-675). Tool argumentsdirection,directions,include_archived_directionsbecomearea,areas,include_archived_areas; REST paths/directionsbecome/areas; error codesdirection_*becomearea_*. The old arguments are rejected (extra_forbidden), so an agent that remembered the old tool schema must reload it. AddressesPROJECT/keyand the rows are unchanged; old case entries that mentiondirectionare read as they are.- A new task must have an area (TRK-677).
create_task,move_taskandupdate_task(area=null)refuse witharea_required(HTTP 422,details.projectanddetails.areas) in MCP and REST.move_tasktakes the area of the target project and sets it in the same action. Old tasks without an area are still readable and editable. An agent may create an area itself:create_project(key="PROJECT/<key>"). - A question to a human goes only into a discussion (TRK-671).
asktakes noblocking; asking in a task opens (or joins) a discussion, and the discussion holds the wait. Asking directly in a task case is refused (question_not_a_task_entry).get_tasknow returns the task's discussions andstate.discussions_after_card. New toolsadd_conclusionandclose_discussion;link/unlinktake the kindattachedto attach a task to a discussion. Thecasefileskill describes the new cycle (TRK-673). - Open questions in task cases are closed by the migration. On update, every still-open question in a task case is answered
withdrawnwith a request to ask again through a discussion. The agent that owns the task must ask again if the question still matters. - Five REST operations are removed (TRK-681), none of them used by the human interface:
GET /api/v1/accounts/{account_id},GETandPATCH /api/v1/participants/{participant_name},POST /api/v1/tasks/move,DELETE /api/v1/tasks/{task_key}/links/{kind}/{other_key}. The MCP tools (list_participants,update_participant,move_task,unlink) are unchanged.
What's changed
- Discussions (programme TRK-668). A discussion is a project entity with its own case, a conclusion, attached tasks, a wait and a close (TRK-669). The human interface gets a discussion screen with the conclusion, an inbox by discussions and discussions in the task card (TRK-672); the old "Questions to me" section is removed from the inbox (TRK-683). The demo shows a task waiting for an answer through a discussion, and no demo task case has an open question (TRK-684).
- Areas. Rename across the database, domain, REST, MCP, error codes and the interface (TRK-675); the case of an area holds knowledge, with replacement and status of decisions and notes, the project-shaped read of an area, and an area decision in a task (TRK-658).
- Agent-facing text.
search_tasksdescribes operators per field, and a refusal of an unfit operator hints the right form (TRK-676); a refused query hints at quoting and!= empty()and names thelimitceiling (TRK-642); thestateblock ofget_tasknames the project decisions filed after the task's sections were last edited (TRK-643); the description ofrefsnames area entries (TRK-644). - Updater. The database snapshot is checked with
pg_restore --listbefore the release is installed, and the previous snapshot is kept next to it asbefore-update.previous.dump(TRK-641). - Docs. Where the OAuth token of a harness lives when there is no keychain (TRK-645).
- Interface test fix. The e2e check of the closed-discussion banner no longer collides with the
closedrecord in the inventory (TRK-672).
Upgrade notes
- The schema changes: three revisions,
ed61a83a9be0(directions become areas: tables, columns, constraints and indexes are renamed, rows untouched),5d0c8e3a71b4(discussions) and3b9f4d192289(closes open task-case questions). The updater takes a snapshot before migrating, now verified, and keeps the previous one. - Agents with a remembered schema. Idempotency keys saved before the update (up to 24 hours) may replay an answer in the old form with
direction. Reload the tool list after the update. - New filters and fields are in
openapi.json; the interface client is regenerated. CASEFILE_VERSION=0.13.0in.env, if you pin a release, is the line to change to move to this one by hand. Copy the database before a manual update.- The skill
casefileand the plugin manifests carry version 0.14.0.
Not verified yet
- The migration
ed61a83a9be0ran on seeded tables in tests, not on a real installation with areas andfield_changedentries; reading old entries with the worddirectionis by design, not by test. - The migration closing questions was checked on the v0.12.0 demo archive and on the live MCP of a test contour, not on the owner's installation data; its speed on very large cases is not measured.
- The updater with the verified snapshot was checked with a stub
docker, not end to end against a real Docker. - The interface (area tab, area dialog in the card, discussion screen) was run in Chromium only; Safari was not checked.
- The new skill was run blind three times on a test contour (Haiku twice, Sonnet once): all three opened a discussion attached to the task, closed it with a conclusion and then closed the task. The rules about quoting earlier answers, one fork per question and naming a changed decision did not come up in those runs.
Casefile v0.13.0
Casefile v0.13.0
A safety and knowledge release: the updater and the installer no longer migrate the database without taking a copy first, the releases that changed the schema are now tested against their own archives, and get_project stops overloading an agent's context with every decision and note. This release carries no database migration.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.12.0 updates its service to this release by itself within about an hour, or at the next Docker start.
What's changed
- The auto-updater takes a copy when the revision is unclear. If it cannot read the database revision or the image's head, it takes a database snapshot before the release instead of updating silently, and writes the reason to its log. If the copy fails, the release is not installed (TRK-652).
- The installer takes a copy before
up. A repeated run of the installer takes a snapshot of the database beforeupwhen the image head differs or the revision cannot be read; a failed snapshot stops the installation (TRK-654). A volume that surviveddocker compose down(without-v) is treated as an existing installation, not a first one: the installer startsdb, takes the snapshot, and only then runsup(TRK-664). - Release archives test. The demo archives of the eight releases that changed the schema (v0.2.0, v0.4.0, v0.5.0, v0.6.0, v0.9.0, v0.10.0, v0.11.0, v0.12.0) live in
tests/data/, and a test in CI checks that the current version accepts each of them with no row lost or changed.scripts/snapshot-release-archive.sh <tag>takes an archive of a tag (TRK-653). - Project knowledge, part 1. A project note can now be replaced by a newer one, and a decision or a note shows its status ("in force" or "superseded") when a project case is read;
read_project_entriesand the REST endpoint takein_forceto select the ones in force; a note that is already superseded cannot be replaced again (finding_not_in_force, 409), and a note cannot replace a decision or the other way round (entry_fields_invalid) (TRK-656). get_projectno longer lists decisions and notes in the case index. The index of a project stays about 120 tokens however many notes there are; the entries in force are returned as the listsdecisionsandfindings, andindex_omittedcounts what the index leaves out by type. On a test project with 646 notes, theget_projectanswer went from 87,174 to 28,610 tokens (counted on the text of the MCP answer with theo200k_basetokenizer; the answer still grows by about 44 tokens per note in force).read_project_entriesgets atextfilter (case-insensitive match on the title and the body); on that 646-note project it took 16 ms (TRK-657).- MCP entries without a status carry no
statusandsuperseded_by. The change cut roughly 9 % of the characters of an entry list; it is measured in characters, not in tokens. REST is unchanged (TRK-665).
Upgrade notes
- No migrations. The database schema is unchanged (head
29c012062376). - MCP contract change,
get_project: the project case index no longer containsdecisionandfindingentries. Read them from the new listsdecisionsandfindings(each item is a reference and a title), and seeindex_omittedfor how many entries of each type the index leaves out. The index of a direction is unchanged. A client that looked for decisions or notes inindexhas to read these lists, or callread_project_entries. - MCP contract change, entries: in MCP answers, entries of types without a status (everything except decisions and project notes) have no
statusandsuperseded_byfields at all; a client should treat them as absent, not asnull. - New filters:
textinread_project_entriesand in the REST project and direction entries;in_forceinread_project_entriesandGET /projects/{key}/entries. CASEFILE_VERSION=0.12.0in.env, if you pin a release, is the line to change to move to this one by hand. Copy the database before a manual update.- The skill
casefileand the plugin manifests carry version 0.13.0; the skill text itself does not describefindings,index_omittedortextyet.
Not verified yet
install.ps1(the Windows installer) was not run; its snapshot step is covered by a text test of the order of steps only. The installer's volume lookup andup -d --waitwere checked with a stubdocker, not with real Docker on a real installation.- The updater script was not run end to end against a real Docker; the revision query was checked by hand on the Postgres of a test environment, the rest with a stub
docker. Ifdbis not running, the release is not installed (it fails closed). - The release archives hold the demo data of each release only. Values that demo data does not create (directions in older releases, archived projects, moved tasks with old keys, passwords, agent keys, sessions) are not covered by this test. A release that changes the schema without adding an archive is not noticed by CI; the rule (TRK#49) is kept by the person making the release.
get_projectstill grows with the notes of a project case (about 44 tokens per note in force); notes are meant to live in areas, which is not part of this release. Thetextfilter was timed on 646 notes only. The answers were not checked with a live agent client that has a response size limit.
Casefile v0.12.0
Casefile v0.12.0
A feature release: a task can be held back until a moment ("not before"), and the project screen is reorganised into tabs. This release carries a database migration.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.11.1 updates its service to this release by itself within about an hour, or at the next Docker start. The updater takes a copy of the database before a release that carries a migration, then migrates.
What's changed
- "Not before" date for a task. A task can carry a moment before which it cannot be taken into work. The API gets the
not_beforefield, thedeferredfeature, and thetask_deferredrefusal on enteringin_progress. Agents and humans can set and clear it (TRK-589, TRK-592). - Interface for "not before". On the task page a person sets and clears "can be taken from <date, time>"; a deferred task has a badge on the cards (TRK-593).
- Skill
casefile: how to defer a task with a call example and its place in the cycle, plus the canonical query for candidate tasks, which now leaves out deferred tasks (deferred: false) and tasks with an open blocking question (TRK-595). - A new project screen (TRK-596): tabs (
?tab=) and a "⋯" actions menu on the project and direction pages (TRK-618); task counters in the header (TRK-619); attributes as one "name — value" line, with "Edit" and "Remove" in the opened attribute history (TRK-620); a filter by entry type in the case of a project or direction (?type=, TRK-621). The old project page of a busy project measured 4910 px and 201 buttons; the new Overview tab on the demo project is 900 px with 9 buttons. - Stale docstrings and comments about removed mechanics were cleaned up (TRK-638);
DECISIONS.mdis no longer in the repository, the decisions live in the tracker (TRK-609). Internal: an audit of the developer notes (TRK-628 to TRK-637).
Upgrade notes
- One migration:
20261007_0200_task_not_before.pyadds the nullable columntasks.not_before. Existing data is not touched, and the migration runs in one transaction: on failure it rolls back as a whole. - Back up before a manual update. The auto-updater takes a copy of the database before the migration. If you update by hand, copy the database first.
- Clients: the MCP tool schemas gain
not_beforeand the refusaltask_deferred; clients that do not use them need no change. The skillcasefileis updated with the plugin version. CASEFILE_VERSION=0.11.1in.env, if you pin a release, is the line to change to move to this one by hand.
Not verified yet
- The interface was checked in Chromium, not in Safari: the date and time input of "not before" and the tab strip and "⋯" menu at 390 px are not seen there yet.
- The updater's copy of the database is taken when it reads the database revision; if it cannot read it, it proceeds without a copy. This is a known gap (TRK-648); the fix is in progress.
Casefile v0.11.1
Casefile v0.11.1
A fixing release: dependency updates and one flaky end-to-end test made stable. No change
in behaviour, no migrations, no change in the API or the MCP tools.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.11.0 updates its service to this release by itself within about an
hour, or at the next Docker start. This release has no migrations.
What's changed
- uv in the images: 0.12.19 → 0.12.22 (Dependabot PR #7,
#7). The changelog has nothing breaking
(TRK-587). - ruff 0.16.8 → 0.16.9 and uvicorn 0.53.0 → 0.54.0 in
uv.lock(Dependabot PR #8,
#8). The changelogs have nothing breaking
(TRK-588). - The end-to-end test
reason-line.spec.tswaits for the paragraph of the entry, not
for the "Now" block. This removes a flickering failure; the interface itself is not
changed (TRK-586).
Upgrade notes
- Nothing to do for the clients: the tool schemas are the same as in v0.11.0.
- No migrations. The REST schema in
openapi.jsonchanged only in its version. CASEFILE_VERSION=0.11.0in.env, if you pin a release, is the line to change to
move to this one by hand.
Not verified yet
- The items of v0.11.0's "Not verified yet" are still open; this release adds nothing to
them and does not close any.
Casefile v0.11.0
Casefile v0.11.0
A release about directions: a part of a project's work that has no end (promotion,
commerce, support) now has a place of its own, with its own case and attributes, instead of
an umbrella task that never closes. Checks of a task are also frozen once work on it has
begun, a local installation now attributes OAuth connections to the person at the machine,
and get_task opens with a computed "state" block that gets an agent into a task for a
fraction of the tokens.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.10.0 updates its service to this release by itself within about an
hour, or at the next Docker start. This release has two migrations (see "Upgrade notes");
the updater takes its database snapshot before them.
What's changed
- Directions. A direction lives inside one project and is addressed
PROJECT/key
(for exampleTRK/promotion). It has a card (title, description up to 320 characters),
attributes with history, a case of its own and an archive; it has no status and is flat
(no direction inside a direction). The project tools take the address in place of a
project key:create_project,update_project,get_project,archive_project,
restore_project,set_attribute,remove_attribute,add_project_entryand
read_project_entries. An archived direction freezes its card, attributes and case; only
restoring it works (TRK-555). - The
directionfield of a task. One optional direction of the task's own project:
set increate_task, changed inupdate_task, shown inget_taskand in search rows,
and cleared when the task moves to another project. Search selects by it:
direction: TRK/promotionordirection: empty()(TRK-556). - Directions in the interface. The task card shows the direction and lets a person
change it next to the priority; the task list filters by direction (and by "no
direction"); the project page has a "Directions" section (create, edit, archive and
restore with a reason); a direction page shows the card, attributes with history, the
case, and the direction's tasks; a person writes notes and decisions there as in a
project's case. Links likeTRK/promotion#3open the direction page (TRK-557). - Checks are frozen after the first entry into
in_progress.update_taskand
PATCH /api/v1/tasks/{key}refuse to changechecksor onecheckof a task that has
enteredin_progress:409 task_checks_frozen, with the task key and the number of the
entry of the first entry into work. A check that cannot be run is closed with the
unverifiableoutcome (which files awarning), not rewritten. Other sections are
edited inbacklogas before (TRK-562). - OAuth: a new sign-in replaces the old connection. When the same client signs in again
for the same participant, its previous connection is disconnected, so abandoned
connections no longer pile up in "Access" (TRK-560). - OAuth in local mode belongs to the person at the machine. In the default local mode
(no login), connections and agent keys issued by the installation are attributed to the
person at the machine, not to "installation", so they appear under "Access" → "Mine". On
every start thelocal-tokenstep moves liveoauthandkeytokens issued by the
tracker to that person; revoked tokens and sessions are not touched. Network mode
(CASEFILE_LOGIN=password) is unchanged (TRK-559). statefirst inget_task, andget_task(brief=true).get_task(MCP and
GET /api/v1/tasks/{key}) opens with a computedstateblock: the last transition and its
reason,next_stepandblockersof the last summary, the last entries after it, open
questions and remarks with addressees, blockers, children by status, decisions filed
after the card. Nothing is stored or written for it.brief=truereturns only the
header, parent, features,stateand transitions, in about 600 tokens or fewer; call
withoutbriefto take a task into work, since the sections are needed. The task card in
the interface shows the same block as "Now". Thetools/listtext grew by about 900
tokens (TRK-579).- The "Waiting for an answer" filter in the task table. A checkbox in the "Filter"
panel replaces the lost "status: waiting" switch (TRK-577). - REST and MCP read the case the same way. A decision without
supersedesand an edit
of a section withoutcheck_noread identically through both doors (TRK-565). - Plugin catalogs find the connector. A root
mcp.json(Open Plugins standard, same
content as.cursor-plugin/mcp.json) rides in thepluginbranch so that catalog
auto-scans such as cursor.directory find the connector by themselves. There is
deliberately no.mcp.jsonwith a dot: Claude Code reads that as a project setting for
anyone who opens a clone (TRK-584). - Internal: the error texts of
task_checks_frozenin the interface dictionaries, repository
map lines for new tests and the migration, andpnpm checkon a branch that edits
docs/ERRORS.mdoropenapi.json(TRK-581, TRK-582, TRK-583).
Upgrade notes
- Update the clients. Open Claude Code sessions keep the old tool schemas (no
direction
field, nobrief): run/mcpand reconnect, or start a new session. - Two migrations, one head:
3cc02e043842(thedirectionstable) and7be41d95c0a2
(tasks.direction_id, empty for every existing task), both aftera9cb1ec147c4. No data
is moved. The updater's snapshot (updater-snapshotvolume) is taken before them. - New error codes (see
docs/ERRORS.md):task_checks_frozen,direction_not_found,
direction_archived,direction_key_taken,direction_not_archived,
direction_description_too_long,direction_project_mismatch,
direction_reason_required,invalid_direction_key. The REST schema inopenapi.json
changed (directions, thedirectionfield,state,brief). - Existing umbrella tasks stay as they are. Moving them into directions is a manual
step on each installation; nothing is converted automatically. - Local installations: connections made before the update are attributed to the person
at the machine on the first start of this release. - The plugin text comes with the install line. The hourly self-update changes the
service only; run the install line again (orCASEFILE_SKILL_ONLY=1for the plugin alone)
to get the new manifests and skill text. CASEFILE_VERSION=0.10.0in.env, if you pin a release, is the line to change to
move to this one by hand.
Not verified yet
- The interface was run in Chromium only, not in Safari: the direction page, the
"Directions" section, the direction cell and dialog in the task card, the "Now" block
(on a wide screen and at phone width), and the "Waiting for an answer" filter. - Live agents were not measured with
briefandstate. There is no blind test that an
agent usingbriefwill not skip the sections when it must take a task into work; the
tokens were counted on synthetic tasks (the average-case upper bound was 657 against the
600 target), and whether Claude Code puts the output schema into the context was not
checked. - Live Claude Code and Cursor were not tried on the root
mcp.json, only the
documentation was read; no re-scan was done on cursor.directory. Other tools that read
mcp.jsonwithout a dot as a project setting are a theoretical risk. - Local-mode attribution was tested on a database, not on a live installation: the
"Access" → "Mine" screen after the update was not looked at with real connections. - Frozen checks were not run against old cases with rewritten checks; the outdated-verdict
mark is covered only on tasks that never entered work. - The live refresh of a direction page by a journal frame is covered by unit tests only,
with no end-to-end scenario; the English texts of the new screens are tested through the
dictionary, not walked through in the end-to-end set. - Moving umbrella tasks into directions (TRK-558) on the owner's installation waits for
this release. - The items of v0.9.0's to v0.10.0's "Not verified yet" are still open.
Casefile v0.10.0
Casefile v0.10.0
A release about what a case says it is waiting for, and about checks that did not pass.
It breaks one contract: the waiting task status is gone. Waiting is now something
the case holds, not a status you set. A check that could not be fully run no longer has
to be reported as passed or failed. Project decisions can replace each other, search
can select a whole subtree, and an outdated question can be closed. The plugin also
gains a second skill that helps connect Casefile when its tools are missing.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.9.5 updates its service to this release by itself within about an
hour, or at the next Docker start. This release has two migrations (see "Upgrade notes");
the updater takes its database snapshot before them.
What's changed
- Breaking: the
waitingstatus is gone. Waiting is no longer a stored status but
something the case holds: an open question withblocking(waiting on a person, or on an
outside event that whoever learns of it answers) or ablocked_bylink (waiting on
another task). Statuses are nowbacklog,open,in_progress,done,cancelled;
waitingis refused everywhere, with no alias:transition(REST422 validation_error,
MCP argument validation), the query language andstatusfilters (search_value_invalid).
Instead of moving a task towaiting, an agent whose next move is someone else's asks a
blockingquestion (or linksblocked_by), files a summary and moves the task toopen
with a reason. The answer to the last blocking question, or the blocker closing, makes the
task a candidate again (status: open and blocked: false and open_blocking_questions: 0)
with no transition by anyone. New refusal: enteringin_progresswhile ablocking
question is unanswered is409 task_has_open_blocking_questions, with the question numbers
indetails.questions; a question no longer needed is closed by an answer with the
withdrawnoutcome. The migration moves every task still inwaitingtoopenwith a
status_changedentry signed by the tracker, whose reason names TRK-573, bumps the task
version and dropswaitingfrom the status constraint; a downgrade restores only the
constraint. The board keeps its "Waiting for an answer" column, now computed from open
blocking questions (TRK-573, TRK-571). The concept and the skill say the same (TRK-569,
TRK-572). - Checks that did not fully pass:
partialandunverifiable. A verdict now has four
outcomes:passed,failed,partialandunverifiable, and the last two need evidence.
Closing a task with an incomplete check files awarningentry. A person (or another
agent, never the one who closed the task) reacts to it withacceptanceor aremark;
acceptance_by_closerandwarning_not_openrefuse the wrong reactions. Tasks carry an
open_warningsfeature that can be filtered on, and the board has a "Needs attention"
section in the inbox, a notice on the task page with "Accept" and "Send back" buttons, and
words for the new outcomes in the case. Thetools/listtext grew by about 3.7k characters
(TRK-561). - Project decisions can replace each other. A
decisionin the project case can
replace an earlier one withsupersedes; a task links to the decisions in force, and a
decision:selection returns the history (TRK-554). underselects a subtree. The search fieldunderselects everything below a task,
and the card of a child shows the goal of its parent (TRK-468).- An outdated question can be closed. A question that is no longer needed is closed with
the outcome "withdrawn" or "replaced by question #N"; an answered question cannot be
withdrawn (TRK-552). - An answer filed before outcomes existed reads as answered. Over both MCP and REST,
such an answer is no longer shown as an open question (TRK-563). - A second skill,
casefile-setup. It helps connect Casefile and triggers when an
agent has no Casefile tools. The plugin descriptions in the four manifests now say plainly
that Casefile needs a server you run yourself ("Needs a Casefile server you run")
(TRK-566).
Upgrade notes
- Update the clients. Open Claude Code sessions keep the old tool schemas (
transition
still listswaiting): run/mcpand reconnect, or start a new session. Agents and
scripts that calltransitionwithwaiting, or filter bystatus: waiting, must switch
to ablockingquestion or ablocked_bylink. - Tasks in
waitingbecomeopen. The migration (revisiona9cb1ec147c4) does it with a
status_changedentry written by the tracker; nothing is lost from their cases, and the
openblockingquestions keep them out of the candidate list. There is also a migration
for the new entry types (warning,acceptance). The updater's snapshot
(updater-snapshotvolume) is taken before them. - New error code:
task_has_open_blocking_questions(seedocs/ERRORS.md); the REST
schema inopenapi.jsonchanged (status enum, outcomes, new fields). - The plugin text comes with the install line. The hourly self-update changes the
service only; run the install line again (orCASEFILE_SKILL_ONLY=1for the plugin alone)
to get the new skills and manifest text. CASEFILE_VERSION=0.9.5in.env, if you pin a release, is the line to change to move
to this one by hand.
Not verified yet
- The migration was not run on a real long-lived installation. It was tried on a
synthetic database and a live development setup with one task inwaiting; an archive from
an older version holdingwaitingtasks was not restored through it. - Agent behavior with the new wording of the instructions and tool descriptions was
tested as text (length, wording, nowaiting), not with live agents. - The interface was run in Chromium only, not in Safari; the board and the new
"Needs attention" section were not compared to screenshots on a phone. - The table filter lost its "status: waiting" switch; a replacement is TRK-577. The
"Start" screen counts started work asin_progress, doneand does not see a task that was
taken and sent back to wait inopen. - The items of v0.9.0's to v0.9.5's "Not verified yet" are still open.
Casefile v0.9.5
Casefile v0.9.5
A release around trust and wording. The installer now asks before it changes files that
belong to other programs, the updater keeps a copy of your database from before a schema
update, the installers and the README say plainly that Casefile updates itself and how to
turn that off, and Casefile describes itself as one case file per task. The release also
brings Casefile into the Claude Desktop chat as an extension file, casefile.mcpb. The
service code and the board are unchanged.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.9.4 updates its service to this release by itself within about an
hour, or at the next Docker start. The service has no migrations and no new settings.
The plugin and the installer's new behavior reach you the next time you run the install
line (see "Upgrade notes").
What's changed
- The installer asks before it touches another program's files. The plugin step edits
files that are not Casefile's: Claude Code's~/.claude/settings.json, Codex's
~/.codex/config.toml, the manual MCP entriescasefileandtrackerthat point at
this installation, and~/.agents/skills. The installer prints that list and asks
[y/N]on your terminal, also undercurl … | sh(it reads the answer from
/dev/tty;install.ps1asks withRead-Host).Nskips the whole plugin step and
installs the service as usual, and the output says how to add the plugin later. Without
a terminal (an agent, CI) nothing is asked and the step runs as before;
CASEFILE_SKILL=0skips it andCASEFILE_SKILL=1answers "yes" in advance (TRK-546). - Copies and a one-line edit. Before the first change to a file the installer saves a
copy next to it:settings.json.casefile-bak,config.toml.casefile-bak, and a copy of
.claude.jsonbefore it removes a manual entry. The copy is made once and never
overwritten, and it keeps the file's permissions.settings.jsonis no longer rebuilt:
the installer inserts one line,"autoUpdate": true, inside
extraKnownMarketplaces.casefile, and the rest of the file stays byte for byte as it
was (TRK-546). CASEFILE_PLUGIN_AUTOUPDATE=0. Installs the Claude Code plugin withoutautoUpdate,
so the plugin only changes when you runclaude plugin update casefile@casefile
yourself. The output says so (TRK-546).- A copy of the database from before a schema update is kept. When a release changes
the database schema, the updater takes apg_dump -Fcsnapshot first. It used to sit in
the updater container's/tmpand was deleted after the update, so it did not survive.
It now goes into the named volumeupdater-snapshot(for the standard install,
casefile_updater-snapshot, filebefore-update.dump), and a good update and a rollback
both leave it there. There is one copy: the next schema update replaces it, and a
snapshot that fails never replaces the earlier one. The updater's log names the volume
and the release the copy belongs to. Restoring from it is described in
docs/backup-restore.md.
The automatic rollback of a release that fails to start works as before (TRK-547). - The installers and the README say that Casefile updates itself. Before it installs,
the installer now prints that theupdaterservice installs new releases once an hour,
that it holds the Docker socket (/var/run/docker.sock, which is root access to the
machine) to do so, and how to turn it off:CASEFILE_AUTO_UPDATE=falsein
~/casefile/.env, thendocker compose up -d --no-deps updater. The same is repeated at
the end. If auto-update is already off, the installer says so and how to update by hand.
The README has the same text in its "Updates" section. With auto-update off the board
still tells you when a release is out: a note at the bottom of the side panel links to
the release notes (that note was already there and is unchanged;
TRACKER_RELEASE_CHECK=falseturns it off) (TRK-548). - New wording: one case file per task. The README, the public site, the Claude Code,
Codex, Cursor and Gemini CLI manifests and the MCP registry card describe Casefile as a
case file for every task, shared by every session, agent and person, instead of "a task
tracker your agents keep for each other". Only the wording changed; Casefile does what it
did before (TRK-540). - The installer follows Claude Code 2.1.289. To move an installation from the old
stablesource to thepluginbranch the installer recognises the refusal of
claude plugin marketplace add. Claude Code 2.1.289 words that refusal differently
("its source doesn't match its extraKnownMarketplaces entry"), and the installer stopped
recognising it: the old source stayed and the Claude Code step ended with "failed -
repeat by hand". Both wordings are recognised now, ininstall.shandinstall.ps1;
any otheradderror still does not remove the declared source (TRK-550). - Casefile in the Claude Desktop chat: the
casefile.mcpbextension. The chat of the
Claude desktop app does not use the Claude Code plugin, and claude.ai runs connectors from
Anthropic's cloud, which cannot reach a Casefile on127.0.0.1. The release now carries a
Desktop extension in the MCPB format, one file for macOS and Windows (about 1.8 MB), attached to
the GitHub Release ascasefile.mcpb(permanent address
https://github.com/azimov777/casefile/releases/latest/download/casefile.mcpb; the
Claude Desktop extensionworkflow.github/workflows/mcpb.ymlbuilds it from the release's
code when the Release is published). It carries themcp-remote0.14.3 bridge and runs it
on the Node.js built into Claude Desktop, so nothing else has to be installed. Install it by
double-clicking the file, or in Claude Desktop: Settings > Extensions > Advanced settings >
Install Extension...; its form asks for the MCP address (http://127.0.0.1:8100/mcpfor an
installation on this machine). The sign-in is OAuth and no token goes into the extension;
the board's Access screen lists the connection asoauth: Claude Desktop.install.sh
andinstall.ps1find Claude Desktop and, under the same consent as the plugin step, download
the file and open it; Claude Desktop itself asks before it installs. An extension that is
already installed is not opened a second time, andclaude_desktop_config.jsonis not
touched (the guide keeps an entry for it as a fallback). Limits: it works only in the desktop
app, and only while the installation runs (claude.ai in a browser and the phone app cannot
reach it); the file is not signed, so Claude Desktop warns about an unsigned extension; it
does not update itself, so a newer release's file is installed the same way, over the old
one. Details:docs/agent-install.md(TRK-514).
Upgrade notes
- No migrations. The service code (API, MCP server, board) is unchanged; the images differ from
v0.9.4 by the version number and by thedocker-compose.prod.ymlthey carry. - The updater container is replaced once.
docker-compose.prod.ymlchanged the
updaterservice (it gained the snapshot volume), so its revision label moved and
updater-renewrecreates the updater on the first start on this release. It is the normal
path; do not be surprised to see the container restart, or a new volume
updater-snapshotindocker volume ls. - The snapshot volume works from the next release on. The update to this release is
done by the updater you run today. This release changes no schema, so it needs no
snapshot. A later release that changes the schema will be installed by the new updater and
will leave its snapshot in the volume. An update done by an older updater still keeps its
snapshot in the container's/tmponly, and it goes away with the container. - The installer's new behavior and the new plugin text come with the install line. The
hourly self-update changes the service only and never runs the installer. Run the
install line again to get the plugin and its manifest text for v0.9.5 (to touch only the
plugin, addCASEFILE_SKILL_ONLY=1); a Claude Code plugin withautoUpdateon normally
updates itself. The same line offers the Claude Desktop extension when it finds Claude
Desktop; it never reaches an installation by itself. - The
.casefile-bakcopies hold what the files held. If the installer removes a
manual MCP entry that carries a token, the token stays in the copy. Delete the copy when
you no longer need it. CASEFILE_VERSION=0.9.4in.env, if you pin a release, is the line to change to move
to this one by hand.
Not verified yet
install.ps1was never run end to end on Windows or in Windows PowerShell 5.1. In
PowerShell 7.4 on Linux the parser, the consent step with stand-in prompts, the
settings.jsonscanner and the terminal check were run; howRead-Hostbehaves in 5.1, in
ISE and in Windows Terminal, and the permissions of the copies on Windows, are not measured.
The change of theaddrefusal matching ininstall.ps1is by parity withinstall.sh.- The
curl | shquestion was not run in a real terminal. The path is reproduced with a
pty driver (cat install.sh | shwith a controlling terminal, in a Linux container and on
macOS). An agent started in a shell that gives it a real terminal looks like a person to
the installer and will wait for an answer unlessCASEFILE_SKILLis set. - A
settings.jsonwith comments, or one edited by another program during the install,
is refused with a line to edit by hand; it was not tried on real files. A marketplace
declar...
Casefile v0.9.4
Casefile v0.9.4
A patch release for the interface: tables in case entries keep short words whole.
Install
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/azimov777/casefile/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iexAn installation on v0.9.3 updates its service to this release by itself within about an
hour, or at the next Docker start. The service has no migrations and no new settings.
What's changed
- Markdown tables no longer break words letter by letter. A short column next to a long
one used to shrink to a single letter ("S/i/l/a" stacked down the cell): the cells
inheritedoverflow-wrap: anywhere, which lets the table squeeze a column below its
longest word. Cells now wrap only between words, and a table wider than the screen scrolls
sideways inside its own box instead of widening the page (TRK-532).
Upgrade notes
- No migrations and no new settings.
CASEFILE_VERSION=0.9.3in.env, if you pin a release, is the line to change to move
to this one by hand.
Not verified yet
- The fix was checked in Chromium; Safari and Firefox were not run.
- The items of v0.9.0's to v0.9.3's "Not verified yet" are still open.