Delete Is a Folio Fact, Not a Placement
A deleted Folio is omitted from the live canvas and from every newly sealed schedule, keeps its live pin so Put back restores its position, stays exactly as it was in every older sealed edition, and is excluded from ordinary search and discovery by default. Delete is never Remove.
Decision
Owner ruling, 2026-09-04 (decision-12). This is an implied invariant of the
Folio model as already built, stated so nobody redesigns it: deletion is a
Folio-level fact (folios.deletedAt); placement is a separate fact on the
pin; Remove is the placement operation; sealed versions are immutable
history; ordinary live search runs over active Folios.
- A deleted Folio is omitted from the live canvas. No greyed-out deleted card on the normal drafting canvas.
- Older sealed editions are untouched and continue to render any deleted Folio they pinned.
- Delete is not Remove. Delete is never redefined as a placement mutation.
- The live pin may stay intact after Delete, so Put back restores the Folio to the same position without reconstructing placement.
- When a later parent version is sealed, deleted children are not included in that newly sealed schedule. Older sealed schedules are never altered.
- Deleted Folios are excluded from future search and discovery results. Any surface that returns ordinary active Folios filters deleted ones out by default.
- Deleted items appear only in a dedicated Deleted or restore context, if and when one is built. This record does not open that work.
In plain terms: striking a clause from the working file takes it off the page you are drafting on and out of the index, but the signed versions that included it are not touched, and the file keeps its place-marker so "put it back" returns it to the same spot. Striking is not the same as moving it to another file, which is Remove.
Menu grouping, 2026-09-08 (superseded 2026-09-09)
The shared Folio menu grouped the two intentions under Remove. The flyout labelled them Remove from module/document and Delete folio, separated by a rule. Only Delete folio received destructive styling.
One Delete on the card menus, 2026-09-09
Owner ruling: the block, module and Document card menus offer one Delete
row and no "Remove from module/document". Delete keeps the meaning above: a
recoverable Folio fact, never a purge. A sealed edition of the parent still
shows the deleted child; only the live draft omits it, and Put back returns
it. The reason for dropping detach from the menus is that a detached folio
was left with no parent showing it and nothing in the product surfaced it
afterwards. The remove operation, its catalogue row and its executor
(arrangementWrites.ts) stay for the Library's "Remove from Library"
(library-is-a-shelf, point 15); the card menus simply bind no handler to it.
In plain terms: the menu now has one way to take a clause out of the working draft, and it is the reversible one. The signed versions that included the clause are untouched.
Verified against the tree, 2026-09-04
convex/folio/lifecycleWrites.tswrites and clearsdeletedAtonly; no pin is touched. Its test asserts the row is "its former self plus exactlydeletedAt". Consistent with points 3 and 4.convex/folio/snapshot.tsdoes not skip deleted children: the live canvas still shows them with a Put back row. That is the gap point 1 closes, and no test asserts the contrary.convex/folio/versionWrites.tsseals a deleted child still on the schedule with the rest, and its header says so. Point 5 reverses that: the sealed schedule omits the deleted child's pin, the fresh head keeps it, and the deleted child's own draft is not sealed by the cascade. GB-190.convex/folio/recentReads.tsalready drops deleted Documents from the recent list (tested). No search index exists yet; GB-54 gates the first search work and now carries point 6 as a criterion.- Nothing in the tree shows a greyed deleted card on the canvas.
Consequences
- Stage D composition writes (settled constraint 23): the canvas omits deleted children, so a before or after anchor names a visible sibling; the deleted child's pin stays where it is, unseen.
- Save-time dedup: a deleted child that the baseline pinned counts as a schedule change, so the next save of the parent mints an edition without it. After that save the deleted child is still pinned on the fresh head and Put back still restores its position.
- Delete on a Document keeps working as a list fact on Document Home.
Revisit
Only when a dedicated Deleted or restore surface is designed; that is its own decision and its own task, and it does not reopen the points above.
Owned descendants — 2026-09-14
The owner refined deletion to include a container's owned descendants. Confirm
with an explicit warning before deleting a Project or Document through its menu.
The write follows parentFolioKey ownership, marks active descendants in the same
transaction, and keeps saved editions. Restoring a container restores only rows
with its deletion timestamp, preserving earlier independent child deletions.
Document revision boundaries still apply when deleting from a Project page.
Container Screens Share One Anatomy
Owner rulings 2026-09-14 — Workspace and Project are one screen, built from neutral compound parts; the parent folio owns the portal holding its children; container screens keep the Goldie sidebar; a child card opens on click while its own controls keep their actions; manual tag entry is retired.
A Local Test-User Door, Locked Five Ways
Owner ruling 2026-10-04 (option A) — a dev-only /dev/sign-in door signs an agent or the owner in as one of two seeded test users without WorkOS's hosted page. It exists only in a dev build, answers only localhost, mints one-hour tokens, is honoured only by a deployment holding DEV_LOGIN_JWKS, and only for user_dev_ subjects.