diff --git a/docs/design.md b/docs/design.md index 36f387a..74ada39 100644 --- a/docs/design.md +++ b/docs/design.md @@ -138,9 +138,11 @@ number, `productdata///`) but hardly shows them; T5DE shows them o - **History on every product's page**, for everyone: each revision's number and date, the creator's notes (what changed, required when publishing), a preview image, the files added, removed or changed (with sizes), its rating, and which catalogs host it. Any two revisions can be compared. -- **Which revision people get**: by default an outfit follows the **latest** revision, as on IMVU. A wearer can - instead **stay on** a revision (if they prefer an older look), shown as such on their outfit. What a wearer - broadcasts in a room is always a concrete revision, so everyone sees the same one. +- **Which revision people get** (**Decided**): always the **latest**, everywhere, by default. A person can opt in, + per product, to **stay on** a revision they prefer: a setting on the product's page, kept per person (all their + IMVU accounts), and only for what they wear. Rooms always use the latest revision of their furniture. Outfits and + scenes store just the product; the proxy picks the revision when loading (the pin if there is one, else the + latest), and what a wearer broadcasts in a room is always a concrete revision, so everyone sees the same one. - **Old revisions stay available**, so outfits and rooms keep working. A creator can **retract** a broken revision: it's marked retracted in the history, and anyone following or staying on it moves to the nearest revision that isn't. Only moderation removes a revision outright (shown as "removed by moderation", with the @@ -292,7 +294,8 @@ product(id, creator, rating, slot, derived_from, price) revision(product, number, manifest_sha256, signature, notes, created_at, status, extra_maps) hosting(catalog, revision) ownership(person, product, source, price) -outfit(imvu_link, items[(product, pinned revision or latest)]) +pin(person, product, revision) +outfit(imvu_link, items[product]) room(id, owner, scene, furniture[], roles, bans) report(...), moderation_action(...), audit(...) ```