Skip to content

History

A workspace you opened from a folder keeps a history: every change to a test case, procedure, plan, suite, data point, block file, step, requirement decision or request, with who made it, which way, and why. It starts the first time you open the folder; you do not have to do anything for it.

A workspace that lives in the browser has no history.

What is recorded

Who. XPressRT asks your name every time you open a workspace, prefilled with the last one — Working as in the header, where you can also change it. A change without a name is not made. What an assistant changes carries the assistant's name — the model it says it is, once at the start of a session, and the platform it runs on with its version, for example Claude Opus 5.5 via claude-code 2.1.286; an assistant that has not said which model it is cannot change anything. What XPressRT does by itself — building blocks, recording what a test run wrote — carries XPressRT.

Which way. Every change says whether it came from the interface or from an assistant, and through which action.

Why. A change made from a decision carries the decision. A change an assistant makes carries its reason — the request it carries out, the run it is doing, or what you asked in the conversation; an assistant has to give one, and a change without a reason is refused.

Changes from outside. When a file changes while XPressRT is not looking — an editor, git pull, a copied folder — the history notices it when you open the workspace, when you come back to the window, and after a test run. It is recorded as changed outside XPressRT, author unknown: XPressRT saw the file change, not who changed it. A file rewritten with the same content is not a change. What a tool puts into the workspace for itself is no part of the project and is not recorded: a Python environment (.venv/, venv/), node_modules/, site-packages/ and tool caches such as .pytest_cache/.

All or nothing. A change that is refused halfway — an import whose last test case does not pass the checks — is undone completely: the workspace is as it was before, and the history has no entry for it.

Where you see it

  • History under every test case, procedure, plan, suite, data point and block file: what changed, in plain terms — Step 3 (Check): "within 2 s" → "between 2 s and 2.5 s", Variant row 4 added, unit: "°C" → "K". A test case shows only what changed it, not its neighbour in the same file. A renamed or moved test case keeps its history; a copy starts its own.
  • Changes in the sidebar: every change at once, filtered by people, agents, XPressRT or outside, by kind of object, by date and by text, and exported as CSV or HTML. Every export names the last recorded change and its time.
  • Agents / Requirements → History: every decision, approval and request, each with a link to the change that recorded it; Decisions only narrows it to the decisions on findings.
  • Your assistant reads it with read_history, so you can ask who changed step 3 and why? in the conversation.

Reading it with git or Fork

The history is an ordinary git repository. It lives in your workspace folder at .xpress/history.git, with the workspace itself as its work tree:

git --git-dir=.xpress/history.git --work-tree=. log

Each commit is one change. The first line says what happened; the lines below it say who and why:

Line Means
Actor person, agent, xpressrt or outside
Via the way it took — interface or assistant, and the action
Decision the decision a person made
Reason why: a request, a run, or asked in conversation
Cause what the request was and who asked for it
Asked-by who asked the assistant
Model, Platform which model the assistant is, and the platform it runs on with its version
Run written by this test run
Renamed-from, Copied-from the earlier name of a test case, procedure or data point

In Fork, or any other git client, open a copy rather than the history itself. A client expects a .git folder, and one that can open the history can also write into it. Clone it once to a folder outside your workspace:

git clone /path/to/your/workspace/.xpress/history.git ~/Desktop/my-workspace-history

Then Open Repository in Fork and pick that folder. To see the latest changes, Pull — the copy has the history as its origin and only reads from it.

Never write into the history — no commit, push, rebase or gc, and do not put a .git file into your workspace that points at it. XPressRT keeps it, and a commit from outside would itself be a change without a reason.

.xpress/ is listed in your workspace's .gitignore, so the history does not travel into your team's repository.

What it does not do — yet

  • It cannot restore an earlier state. It shows what was.
  • It keeps your blocks and steps from local/, not the rest of that folder.
  • It is kept per workspace folder on one machine. Two people working on copies of the same workspace have two histories.
  • A test case renamed outside XPressRT appears as deleted and created anew; only a rename through XPressRT carries its history along.