originals/ and derived/, because the names are the rule

media/
    originals/   nothing regenerates these
    derived/     rebuildable from originals/, safe to wipe

a pure rename: nothing had been created yet — checked the real root on fofos, only
`website/` was there — so there is no directory to move and no file to lose. that
is the last moment this was free, which is why it happened now.

`user/` and `treated/` both named the wrong thing. `user` said who put the file
there, which stops distinguishing anything the moment a job writes one, and reads
like it should hold a folder per person. `treated` said what had happened to it,
which stops being informative as soon as there is more than one kind of treatment.

these two say which one you can afford to lose. that is the only property that
matters about the pair, and it is the one that decides every rule anybody writes
about them later — what a cleanup job may delete, what a backup must never skip,
what a conversion may overwrite without asking. a name that carries it is a rule
that cannot be forgotten, which is more than the comment above it can promise.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-29 01:14:47 +01:00
co-authored by Claude Opus 5
parent 86e18fc7bf
commit b9f8ce4ee4
3 changed files with 22 additions and 17 deletions
+4 -5
View File
@@ -15,8 +15,8 @@ import { readableError } from './errors';
*
* ── The children are listed, and the button repairs ──
*
* `user/` and `treated/` are shown whether or not they are there, so a structure that is missing one
* reads as INCOMPLETE rather than as fine. The button follows: "Create" when there is nothing, "Create
* `originals/` and `derived/` are shown whether or not they are there, so a structure that is missing
* one reads as INCOMPLETE rather than as fine. The button follows: "Create" when there is nothing, "Create
* missing" when part of it exists. It is `mkdir -p` on every path either way, so pressing it can only
* add and can never fail on something already correct.
*/
@@ -93,9 +93,8 @@ export const MediaFolder = ({ rootPath }: { rootPath: string }) => {
<p className="text-xs text-muted-foreground">Not created yet.</p>
)}
{/* The structure, always — the folders that are missing are the point of showing it. Named
with what they hold, because "user" and "treated" say who and what happened rather than
what goes in them. */}
{/* The structure, always — the missing folders are the point of showing it. The hint beside
each name carries the one distinction that matters: which of the two can be rebuilt. */}
<ul className="pt-1">
{status.children.map((child) => (
<li key={child.name} className="flex items-baseline gap-2 text-xs">