Lots of changes to the cmap stuff
This commit is contained in:
@@ -16,7 +16,7 @@ De database bevat zowel de huidige toestand als de auditgeschiedenis. De browser
|
||||
| `attachments` | Metadata en volledige binaire inhoud van uploads |
|
||||
| `attachment_references` | Huidige en historische verwijzingen vanuit paginaversies |
|
||||
| `concept_maps` | Actuele titel, JSONB-document en versieteller per CMap |
|
||||
| `concept_map_versions` | Volledige onveranderlijke CMap-snapshots |
|
||||
| `concept_map_versions` | Expliciete CMap-snapshots en maximaal vijf handmatige opslagversies per CMap |
|
||||
| `password_reset_tokens` | Gehashte, tijdelijke en eenmalige herstelcodes |
|
||||
| `wiki_settings` | Beheerinstellingen, momenteel vooral e-mail |
|
||||
| `wiki_schema` | Geïnstalleerde migratieversie |
|
||||
@@ -39,13 +39,13 @@ Een paginaopslag is één atomaire transactie:
|
||||
6. Vervang huidige bijlageverwijzingen en leg historische verwijzingen voor de nieuwe versie vast.
|
||||
7. Commit alles, of niets.
|
||||
|
||||
Een CMap-opslag volgt hetzelfde kernpatroon: rij vergrendelen, versienummer vergelijken, actuele JSONB bijwerken en dezelfde volledige toestand aan `concept_map_versions` toevoegen.
|
||||
Een CMap-opslag volgt voor de actuele projectie hetzelfde kernpatroon: rij vergrendelen, versienummer vergelijken en actuele JSONB bijwerken. Autosave verhoogt wel het optimistische versienummer, maar maakt geen historieregel. Een expliciete opslag voegt een volledige toestand aan `concept_map_versions` toe en verwijdert oudere handmatige versies boven de grens van vijf. Benoemde snapshots vallen niet onder die grens.
|
||||
|
||||
## Waarom volledige snapshots
|
||||
|
||||
Volledige snapshots zijn eenvoudig te begrijpen, herstellen en vergelijken. Er is geen keten van patches nodig om versie 37 te reconstrueren en een defecte diff kan de historie niet onleesbaar maken. Voor de verwachte wikiomvang is deze eenvoud belangrijker dan maximale opslagcompactheid.
|
||||
|
||||
De prijs is lineaire databasegroei met het aantal versies maal de documentgrootte. Vooral autosave van grote CMaps kan daardoor op termijn veel JSONB opslaan. Bewaarbeleid of deduplicatie hoort pas te worden ontworpen nadat echte datagroei is gemeten; zie [Verwachte performance](racket-wiki:performance).
|
||||
De prijs is lineaire databasegroei met het aantal versies maal de documentgrootte. Voor pagina's en benoemde CMap-snapshots is dat bewust; CMap-autosaves zijn daarom uitgesloten van historie en handmatige CMap-opslag is begrensd op vijf versies. Zie [Verwachte performance](racket-wiki:performance).
|
||||
|
||||
## Afgeleide gegevens
|
||||
|
||||
@@ -75,7 +75,8 @@ Een nieuw schema vereist:
|
||||
|
||||
De volgende regels mogen niet alleen in de browser staan:
|
||||
|
||||
- iedere actuele versie heeft een overeenkomstige onveranderlijke snapshot;
|
||||
- iedere actuele paginaversie heeft een overeenkomstige onveranderlijke snapshot;
|
||||
- CMap-autosave wijzigt alleen de actuele projectie; CMap-historie bevat alleen snapshots en maximaal vijf handmatige versies;
|
||||
- versienummers nemen per object strikt toe;
|
||||
- een stale editor overschrijft geen nieuwere toestand;
|
||||
- e-mailadressen zijn hoofdletterongevoelig uniek wanneer ingevuld;
|
||||
|
||||
@@ -40,9 +40,11 @@ Hernoemen of verplaatsen behoudt dezelfde pagina-id en maakt een alias voor het
|
||||
|
||||
## Conceptmap bewerken
|
||||
|
||||
De CMap-editor houdt items, verbindingszinnen, connectors, groepen en sub-CMaps in één document met `schemaVersion: 1`. Bewerkingen gaan eerst door een lokale Undo/Redo-historie. Na een afgeronde handeling plant de browser een autosave; een nieuwe handeling verschuift die timer. Een lopende save kan een volgende save noodzakelijk maken, zodat tussentijdse wijzigingen niet verdwijnen.
|
||||
De CMap-editor houdt conceptidentiteit, plaatsingen, verbindingszinnen, connectors, groepen en sub-CMaps in één document met `schemaVersion: 2`. Positie en vormgeving horen bij de plaatsing en CMap-context. Kop en subtekst hebben daarbinnen elk hun eigen typografie. Het bewerkbare kleurenpalet is alleen browserinstelling; een toegepaste kleur wordt als concrete hexwaarde bij de plaatsing opgeslagen en verandert dus niet wanneer het palette later wijzigt. Bewerkingen gaan eerst door een lokale Undo/Redo-historie. Na een afgeronde handeling plant de browser een autosave; een nieuwe handeling verschuift die timer. Een lopende save kan een volgende save noodzakelijk maken, zodat tussentijdse wijzigingen niet verdwijnen.
|
||||
|
||||
Iedere serveropslag controleert opnieuw het basisversienummer en schrijft een volledige CMap-snapshot. Autosave beschermt de werkstand. **Snapshot maken** schrijft ook zonder inhoudsverschil een herkenbaar historisch moment met een omschrijving. Een historische versie laden verandert alleen de editor; pas een volgende opslag maakt daarvan een nieuwe actuele versie.
|
||||
Iedere serveropslag controleert opnieuw het basisversienummer en schrijft de actuele CMap-toestand. Autosave beschermt de werkstand zonder een historieregel te maken. Ctrl/Cmd-S en **Nu opslaan** maken een handmatige historieversie, waarvan per CMap de vijf nieuwste blijven staan. **Snapshot maken** schrijft ook zonder inhoudsverschil een herkenbaar, onbeperkt bewaard moment met een omschrijving. Een historische versie laden verandert alleen de editor; pas een volgende opslag maakt daarvan een nieuwe actuele versie. Een editor kan een afzonderlijk geschiedenisitem verwijderen zonder de actuele CMap te veranderen.
|
||||
|
||||
Wanneer een actueel CMap-concept een `pageSlug` heeft, toont de gelezen wikipagina onder de inhoud een verwijzing naar dat concept. Plaatsingen worden op `conceptId` gegroepeerd en iedere betrokken CMap is rechtstreeks aanklikbaar. Alleen actuele, niet-gearchiveerde CMap-documenten tellen mee; historische CMap-versies leveren geen navigatielinks op.
|
||||
|
||||
## Zoeken, Recent en navigatiegraaf
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ De eerste volwaardige suite moet deze risico's afdekken:
|
||||
6. sessie-, CSRF- en herstelcodes worden correct gevalideerd en ingetrokken;
|
||||
7. CMap-documenten maken een stabiele load/save-roundtrip;
|
||||
8. slepen op een sub-CMapframe verplaatst alle afstammelingen, slepen op het hoofdconcept niet;
|
||||
9. autosave, handmatige save en snapshot krijgen het juiste historische `action` en `summary`;
|
||||
9. autosave maakt geen historie, handmatige opslag houdt er maximaal vijf en snapshots blijven onbeperkt;
|
||||
10. migratie vanaf iedere ondersteunde schemaversie levert dezelfde actuele structuur.
|
||||
|
||||
## Tijdelijke PostgreSQL-database
|
||||
|
||||
Reference in New Issue
Block a user