Skip to content

Releases: azimov777/casefile

v0.15.1

Choose a tag to compare

@azimov777 azimov777 released this 11 Oct 21:20

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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/stream now carries id: <seq> next to retry:, so a client knows its position before the first entry and can close the stream and reopen it with Last-Event-ID without 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.0 in .env, if you pin a release, is the line to change to move to this one by hand.
  • The skill casefile and 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

Choose a tag to compare

@azimov777 azimov777 released this 08 Oct 12:17

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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 decision or finding in its own case as a draft: add_entry and the entries of close_task take draft_for, the key of the task's project or the address of one of its active areas. The task gets the computed feature open_drafts (drafts not lifted yet), shown by get_task, search_tasks and 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 in refs; read_entries then shows lifted_by on 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.md and docs/CONVENTIONS.md are 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 notes ui/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 maps AGENTS.md are navigation only (TRK-649, TRK-616).
  • Interface guides moved too (TRK-694). ui/README.md and ui/e2e-demo/README.md are now entries of the interface areas ui-tooling and ui-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.md and README.md no 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_drafts and lifted_by are new fields and a new filter; they are in openapi.json and the interface client is regenerated. Older entries are read as before. Until the update, an installation on v0.14.0 does not know draft_for.
  • Agents with a remembered tool list should reload it after the update so the new add_entry argument is seen.
  • CASEFILE_VERSION=0.14.0 in .env, if you pin a release, is the line to change to move to this one by hand.
  • The skill casefile and 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

Choose a tag to compare

@azimov777 azimov777 released this 08 Oct 01:48

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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

  • direction is now area in MCP and REST (TRK-675). Tool arguments direction, directions, include_archived_directions become area, areas, include_archived_areas; REST paths /directions become /areas; error codes direction_* become area_*. The old arguments are rejected (extra_forbidden), so an agent that remembered the old tool schema must reload it. Addresses PROJECT/key and the rows are unchanged; old case entries that mention direction are read as they are.
  • A new task must have an area (TRK-677). create_task, move_task and update_task(area=null) refuse with area_required (HTTP 422, details.project and details.areas) in MCP and REST. move_task takes 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). ask takes no blocking; 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_task now returns the task's discussions and state.discussions_after_card. New tools add_conclusion and close_discussion; link/unlink take the kind attached to attach a task to a discussion. The casefile skill 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 withdrawn with 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}, GET and PATCH /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_tasks describes 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 the limit ceiling (TRK-642); the state block of get_task names the project decisions filed after the task's sections were last edited (TRK-643); the description of refs names area entries (TRK-644).
  • Updater. The database snapshot is checked with pg_restore --list before the release is installed, and the previous snapshot is kept next to it as before-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 closed record 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) and 3b9f4d192289 (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.0 in .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 casefile and the plugin manifests carry version 0.14.0.

Not verified yet

  • The migration ed61a83a9be0 ran on seeded tables in tests, not on a real installation with areas and field_changed entries; reading old entries with the word direction is 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

Choose a tag to compare

@azimov777 azimov777 released this 07 Oct 15:53

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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 before up when the image head differs or the revision cannot be read; a failed snapshot stops the installation (TRK-654). A volume that survived docker compose down (without -v) is treated as an existing installation, not a first one: the installer starts db, takes the snapshot, and only then runs up (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_entries and the REST endpoint take in_force to 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_project no 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 lists decisions and findings, and index_omitted counts what the index leaves out by type. On a test project with 646 notes, the get_project answer went from 87,174 to 28,610 tokens (counted on the text of the MCP answer with the o200k_base tokenizer; the answer still grows by about 44 tokens per note in force). read_project_entries gets a text filter (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 status and superseded_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 contains decision and finding entries. Read them from the new lists decisions and findings (each item is a reference and a title), and see index_omitted for 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 in index has to read these lists, or call read_project_entries.
  • MCP contract change, entries: in MCP answers, entries of types without a status (everything except decisions and project notes) have no status and superseded_by fields at all; a client should treat them as absent, not as null.
  • New filters: text in read_project_entries and in the REST project and direction entries; in_force in read_project_entries and GET /projects/{key}/entries.
  • CASEFILE_VERSION=0.12.0 in .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 casefile and the plugin manifests carry version 0.13.0; the skill text itself does not describe findings, index_omitted or text yet.

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 and up -d --wait were checked with a stub docker, 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. If db is 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_project still 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. The text filter 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

Choose a tag to compare

@azimov777 azimov777 released this 07 Oct 10:58

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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_before field, the deferred feature, and the task_deferred refusal on entering in_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.md is 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.py adds the nullable column tasks.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_before and the refusal task_deferred; clients that do not use them need no change. The skill casefile is updated with the plugin version.
  • CASEFILE_VERSION=0.11.1 in .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

Choose a tag to compare

@azimov777 azimov777 released this 06 Oct 19:49

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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.ts waits 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.json changed only in its version.
  • CASEFILE_VERSION=0.11.0 in .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

Choose a tag to compare

@azimov777 azimov777 released this 06 Oct 16:13

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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 example TRK/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_entry and
    read_project_entries. An archived direction freezes its card, attributes and case; only
    restoring it works (TRK-555).
  • The direction field of a task. One optional direction of the task's own project:
    set in create_task, changed in update_task, shown in get_task and in search rows,
    and cleared when the task moves to another project. Search selects by it:
    direction: TRK/promotion or direction: 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 like TRK/promotion#3 open the direction page (TRK-557).
  • Checks are frozen after the first entry into in_progress. update_task and
    PATCH /api/v1/tasks/{key} refuse to change checks or one check of a task that has
    entered in_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
    unverifiable outcome (which files a warning), not rewritten. Other sections are
    edited in backlog as 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 the local-token step moves live oauth and key tokens issued by the
    tracker to that person; revoked tokens and sessions are not touched. Network mode
    (CASEFILE_LOGIN=password) is unchanged (TRK-559).
  • state first in get_task, and get_task(brief=true). get_task (MCP and
    GET /api/v1/tasks/{key}) opens with a computed state block: the last transition and its
    reason, next_step and blockers of 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=true returns only the
    header, parent, features, state and transitions, in about 600 tokens or fewer; call
    without brief to take a task into work, since the sections are needed. The task card in
    the interface shows the same block as "Now". The tools/list text 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 supersedes and an edit
    of a section without check_no read 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 the plugin branch so that catalog
    auto-scans such as cursor.directory find the connector by themselves. There is
    deliberately no .mcp.json with 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_frozen in the interface dictionaries, repository
    map lines for new tests and the migration, and pnpm check on a branch that edits
    docs/ERRORS.md or openapi.json (TRK-581, TRK-582, TRK-583).

Upgrade notes

  • Update the clients. Open Claude Code sessions keep the old tool schemas (no direction
    field, no brief): run /mcp and reconnect, or start a new session.
  • Two migrations, one head: 3cc02e043842 (the directions table) and 7be41d95c0a2
    (tasks.direction_id, empty for every existing task), both after a9cb1ec147c4. No data
    is moved. The updater's snapshot (updater-snapshot volume) 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 in openapi.json
    changed (directions, the direction field, 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 (or CASEFILE_SKILL_ONLY=1 for the plugin alone)
    to get the new manifests and skill text.
  • CASEFILE_VERSION=0.10.0 in .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 brief and state. There is no blind test that an
    agent using brief will 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.json without 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

Choose a tag to compare

@azimov777 azimov777 released this 06 Oct 11:35

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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 waiting status is gone. Waiting is no longer a stored status but
    something the case holds: an open question with blocking (waiting on a person, or on an
    outside event that whoever learns of it answers) or a blocked_by link (waiting on
    another task). Statuses are now backlog, open, in_progress, done, cancelled;
    waiting is refused everywhere, with no alias: transition (REST 422 validation_error,
    MCP argument validation), the query language and status filters (search_value_invalid).
    Instead of moving a task to waiting, an agent whose next move is someone else's asks a
    blocking question (or links blocked_by), files a summary and moves the task to open
    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: entering in_progress while a blocking
    question is unanswered is 409 task_has_open_blocking_questions, with the question numbers
    in details.questions; a question no longer needed is closed by an answer with the
    withdrawn outcome. The migration moves every task still in waiting to open with a
    status_changed entry signed by the tracker, whose reason names TRK-573, bumps the task
    version and drops waiting from 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: partial and unverifiable. A verdict now has four
    outcomes: passed, failed, partial and unverifiable, and the last two need evidence.
    Closing a task with an incomplete check files a warning entry. A person (or another
    agent, never the one who closed the task) reacts to it with acceptance or a remark;
    acceptance_by_closer and warning_not_open refuse the wrong reactions. Tasks carry an
    open_warnings feature 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. The tools/list text grew by about 3.7k characters
    (TRK-561).
  • Project decisions can replace each other. A decision in the project case can
    replace an earlier one with supersedes; a task links to the decisions in force, and a
    decision: selection returns the history (TRK-554).
  • under selects a subtree. The search field under selects 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 lists waiting): run /mcp and reconnect, or start a new session. Agents and
    scripts that call transition with waiting, or filter by status: waiting, must switch
    to a blocking question or a blocked_by link.
  • Tasks in waiting become open. The migration (revision a9cb1ec147c4) does it with a
    status_changed entry written by the tracker; nothing is lost from their cases, and the
    open blocking questions keep them out of the candidate list. There is also a migration
    for the new entry types (warning, acceptance). The updater's snapshot
    (updater-snapshot volume) is taken before them.
  • New error code: task_has_open_blocking_questions (see docs/ERRORS.md); the REST
    schema in openapi.json changed (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 (or CASEFILE_SKILL_ONLY=1 for the plugin alone)
    to get the new skills and manifest text.
  • CASEFILE_VERSION=0.9.5 in .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 in waiting; an archive from
    an older version holding waiting tasks was not restored through it.
  • Agent behavior with the new wording of the instructions and tool descriptions was
    tested as text (length, wording, no waiting), 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 as in_progress, done and does not see a task that was
    taken and sent back to wait in open.
  • The items of v0.9.0's to v0.9.5's "Not verified yet" are still open.

Casefile v0.9.5

Choose a tag to compare

@azimov777 azimov777 released this 05 Oct 21:44

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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 entries casefile and tracker that point at
    this installation, and ~/.agents/skills. The installer prints that list and asks
    [y/N] on your terminal, also under curl … | sh (it reads the answer from
    /dev/tty; install.ps1 asks with Read-Host). N skips 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=0 skips it and CASEFILE_SKILL=1 answers "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.json before it removes a manual entry. The copy is made once and never
    overwritten, and it keeps the file's permissions. settings.json is 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 without autoUpdate,
    so the plugin only changes when you run claude 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 a pg_dump -Fc snapshot first. It used to sit in
    the updater container's /tmp and was deleted after the update, so it did not survive.
    It now goes into the named volume updater-snapshot (for the standard install,
    casefile_updater-snapshot, file before-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 the updater service 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=false in
    ~/casefile/.env, then docker 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=false turns 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
    stable source to the plugin branch 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, in install.sh and install.ps1;
    any other add error still does not remove the declared source (TRK-550).
  • Casefile in the Claude Desktop chat: the casefile.mcpb extension. 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 on 127.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 as casefile.mcpb (permanent address
    https://github.com/azimov777/casefile/releases/latest/download/casefile.mcpb; the
    Claude Desktop extension workflow .github/workflows/mcpb.yml builds it from the release's
    code when the Release is published). It carries the mcp-remote 0.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/mcp for 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 as oauth: Claude Desktop. install.sh
    and install.ps1 find 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, and claude_desktop_config.json is 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 the docker-compose.prod.yml they carry.
  • The updater container is replaced once. docker-compose.prod.yml changed the
    updater service (it gained the snapshot volume), so its revision label moved and
    updater-renew recreates 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-snapshot in docker 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 /tmp only, 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, add CASEFILE_SKILL_ONLY=1); a Claude Code plugin with autoUpdate on 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-bak copies 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.4 in .env, if you pin a release, is the line to change to move
    to this one by hand.

Not verified yet

  • install.ps1 was 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.json scanner and the terminal check were run; how Read-Host behaves in 5.1, in
    ISE and in Windows Terminal, and the permissions of the copies on Windows, are not measured.
    The change of the add refusal matching in install.ps1 is by parity with install.sh.
  • The curl | sh question was not run in a real terminal. The path is reproduced with a
    pty driver (cat install.sh | sh with 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 unless CASEFILE_SKILL is set.
  • A settings.json with 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...
Read more

Casefile v0.9.4

Choose a tag to compare

@azimov777 azimov777 released this 02 Oct 19:50

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 | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/azimov777/casefile/main/install.ps1 | iex

An 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
    inherited overflow-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.3 in .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.