Features
Columns and scope
The unit is not the column: it is the set. And the set has an owner.
A column on its own means nothing: what a card sees is the ordered list of its board. Every set has an owner, and the owner is a pair:
Switching scope is reversible
With the scope on TENANT, a project set lies inactive: it stays in the database, is never deleted, appears on no screen and comes back whole when the scope is switched on. The switch moves the cards over in the same transaction that writes the setting.
When the set changes under a card, the card is moved by matching name, then position, then the first column. Name comes first: a card in “QA” goes back to “QA” even if the two lists have different lengths.
Exactly one done column per set
The done mark decides three things: the due date read in green, the “on time” category of the filter, and the destination of pending cards when an epic is concluded.
The mark is exclusive, and never vacant
Marking one column unsets the mark on the others in the same transaction; done: false is refused with 422; and deleting the marked column promotes the last remaining one. Every set ends with exactly one done column.
The name is the identity
A column hardly ever travels by id: the name is unique within the set, and it is what the backup uses to cross installations and what the history records on a change. History keeps the name the column had at the time: renaming it afterwards does not rewrite the past.