Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved.

Trace

The engineering-lifecycle memory & traceability spine — follow the thread from intent to evidence, and back.

Projects
3 Active 3 With violations
All Projects →
Planning
0 Red 0 Planning gaps
Project check-ins → Allocation grid →
Time
This week's hours
My timesheet → Time report →
Portfolio
0 Conflicts 0 Pending sign-offs
Portfolio Dashboard →
Component Library
3471 Components 0 Blocked
Component Library →
Audit Activity
0 Events (24h)
Audit Log →
Open Items
6 Feature requests 1 Bug reports
Open Items →
Connect your AI assistant to Trace

Create a personal key and get the setup command for Claude Code, Copilot or Cursor on the onboarding page.

Set up my access →
Trace 0.233.0

Recent releases

0.233.0 2026-10-08

Completed and cancelled projects leave the planning board by themselves

Until now the board's list of projects came from each project's own flag and nothing else. A project marked completed or cancelled kept its check-in card on the weekly go-around every week until somebody remembered to take it off. It also kept showing in the planning report's check-in staleness notes and, with no lead, as a lead gap. A completed project cannot go back to in_progress and a cancelled one cannot move at all, so there was nothing left to plan for either.

Now finished projects are left out wherever the board's scope is decided, which covers the weekly check-in cards, check-in seeding and the planning report together. This applies to every scope filter kind except lifecycle: that one names the state it wants, so a cycle deliberately scoped to completed projects still gets them. The project's own flag is left as it is and is not cleared.

  • Seeding one finished project now says why it has no card. It used to say only that the project was out of scope, which read as though its board flag were off.
  • The Dashboard badge on a completed or cancelled project reads Off the planning board — completed (or cancelled) and is no longer a toggle, because the flag no longer affects anything there. The plan band on the project page says not on the weekly go-around for the same projects.
  • The MCP descriptions of tracksCheckins and the planning configuration now state the rule, so an agent asked why a project is missing from the go-around has the second answer as well as the first.

A correction to 0.232.0. Its entry said a completed project on the board was reported as a planning gap each week. The report already skipped finished projects when flagging ones with no planned hours. What such a project actually kept getting was its check-in card and the staleness notes above.

Trace 0.233.0 / MCP 0.138.0 / Dashboard 1.182.0.

0.232.0 2026-09-22

A completed project can come off the planning board

Reported on the live server: the "On the planning board" badge on ETT00000002 R0 Sparrow Production Readiness R1 could not be changed. The project had been marked completed on 2026-09-15, and the project update refuses every call on a completed or cancelled project before it looks at which fields the call changes. So the board toggle was refused as a locked metadata edit, with a message about design entities that said nothing about the board.

That left the project exactly where it should not be. The planning scope counts every project that is on the board, finished or not, so a completed project stayed on the weekly go-around and was reported as a planning gap each week, and neither the Dashboard nor MCP could take it off.

Board membership is not a statement about the design, so it no longer counts as locked metadata. A call that only moves a project on or off the board now passes the lifecycle lock. The ManagePlanning check (or the project's own lead) still applies to it. Every other field on the update stays locked, including one sent in the same call as the board change.

0.231.0 2026-09-17

Probe review and Probe read: the names, and a seat screen that could not be filled in

Reported on the live server within the hour: the Probe read seats could not be assigned, and the two Probe seats were confusingly named. Both were mine, both shipped in 0.230.0, and the second caused the first.

A redundant seat was being priced instead of refused. Assigning a read seat to somebody who already held a review seat returned "needs acknowledgement", which the seats screen renders as its typed-confirmation dialogue: headed this seat is not in your licence, demanding the word CHARGE, offering assign and accept the charge. The seat was inside the licence and free. So the first people an administrator ticks — the engineers who already hold review seats — produced a demand for money that did not exist, and there was no way through the screen that was not a lie about the bill.

That confirmation is now for MONEY and nothing else. A seat that grants nothing because a larger seat already covers it is refused on its own terms, naming the remedy: clear the review seat first. Any other refusal routed through the CHARGE dialogue teaches an administrator that the sentence about money is noise, and the next one they click through is a real invoice.

The screen no longer offers the box at all. SeatOverview carries CoveredBy, so the grid draws the read cell for a review-seat holder as covered, tagged with the seat that covers it, disabled, with a tooltip saying to clear the review box first if this person should only read. A box whose only possible answer is a refusal should not invite a click.

The seats are named for what they permit. Probe review reads and writes; Probe read only reads. They were Probe and Probe reading, a pairing that read as though the plain one might be the read-only one, and which said nothing about the relationship that matters: review INCLUDES read, so nobody needs both. The registry seed owns display names, so existing servers are renamed on the next startup. The usage scopes follow (Probe review (read and write), Probe read (read-only)), as do the licence page, the usage page and the vendor console.

A read-only seat no longer refuses in the language of writing. Every application in this estate gated writes until this one, so every refusal ended "writes are paused, reads remain open" — which on a read seat is nonsense and promises the reader the one thing being taken away. Found by running check-license-authority.ps1 against factory, which printed "so Probe reading writes are refused. Reads remain open." Read-only applications now say reading is refused, and say nothing about reads remaining open, because they do not. The other applications keep their wording unchanged, with a test pinning that.

What a seat INCLUDES and whether it is read-only are product facts, so they live in code beside the registry defaults rather than in a column: there is nothing to migrate, and no administrator should be able to unset the fact that one seat covers another.

Also proven rather than asserted this time: the license_period migration from 0.230.0 was run against a real PostgreSQL carrying the pre-upgrade table — ADD COLUMN IF NOT EXISTS added probe_reader, the existing row defaulted to 0, and the insert round-tripped. That path fails silently if it is wrong (the caller logs at Debug and carries on), so a passing unit test would have proven nothing about it.

Trace 0.231.0.

Reconnecting

The connection to the server dropped. Trying to pick the session back up.

Attempt 1 of 30 — next try in 0s

Session paused

This tab was disconnected to free server resources. The session is still held, so it can be picked up where you left off.

Could not reconnect

The server stopped answering and the automatic attempts have run out. It may still come back — trying once more costs nothing.

Could not resume

The paused session could not be restored. Reloading starts a fresh one; anything typed into this page and not yet saved will be lost.

This session has ended

This page was connected to a server that has since restarted, so there is no session left to rejoin. Reloading picks up the new one; anything typed into this page and not yet saved will be lost.