7.0 KiB
7.0 KiB
Batch Directory Move v1
1. Scope
Doel van batch directory move v1 is het gecontroleerd ondersteunen van verplaatsingen voor meerdere geselecteerde items via de bestaande move/task-flow, zonder de huidige file-flow te destabiliseren.
Aanbevolen v1-scope:
- alleen same-root batch move
- meerdere directories ondersteunen
- gemengde selectie van files + directories ondersteunen, maar alleen binnen dezelfde root
- geen cross-root batch directory move
- geen rollback
- geen recursive copy-delete move voor directories
- geen partial rename-semantiek in batchmodus
Niet in scope:
- cross-root batch directory move
- batch move met meerdere roots tegelijk
- batch move met conflictoplossing UI
- cancel/retry
- rollback bij gedeeltelijk succes
- hernoemen per item binnen batch-popup
2. Selectiesituaties
Meerdere directories
- Toegestaan in v1, mits alle geselecteerde directories binnen dezelfde root vallen.
- Bestemming is de current path van het inactieve paneel.
- Elk item krijgt als doelpad:
destination_base + / + item.name.
Meerdere files + directories gemengd
- Toegestaan in v1, mits alle geselecteerde items binnen dezelfde root vallen.
- Files en directories worden in dezelfde batch verwerkt.
- Elk item gebruikt dezelfde destination-map semantiek.
1 directory + meerdere files
- Valt onder gemengde selectie en is dus toegestaan onder dezelfde same-root-regels.
Niet toegestaan in v1
- selectie die items uit verschillende roots combineert
- selectie waarbij voor een directory het doelpad in de eigen subtree valt
- selectie met symlink-source-items
- selectie waarbij een doelpad al bestaat
3. Same-root versus cross-root
Aanbevolen v1-keuze:
- batch directory move blijft beperkt tot same-root
- cross-root batch directory move wordt expliciet geblokkeerd
Motivatie:
- same-root kan native rename/move gebruiken en sluit aan op de huidige directory move v1
- cross-root voor directories vereist recursieve copy + delete en introduceert veel meer partial-failure-risico
- gemengde batch over roots maakt progress, foutafhandeling en rollback aanzienlijk complexer
Geblokkeerde melding in v1:
Cross-root batch directory move is not supported in v1
4. Taskmodel
Aanbevolen richting:
- één task voor de hele batch
Motivatie:
- sluit beter aan op de gebruikersactie: één batch-confirmatie, één batchresultaat
- voorkomt een explosie van losse tasks bij grote selecties
- maakt batchprogress en foutsamenvatting eenvoudiger zichtbaar
Progress:
done_items/total_itemszijn leidendtotal_items= aantal geselecteerde top-level items in de batchdone_itemstelt per succesvol verplaatst top-level item opdone_bytes/total_bytesblijvennullin v1 voor batch directory move- ook bij gemengde selectie is het verstandig in v1 item-gebaseerde progress leidend te houden
Failure-semantiek:
- fail-fast binnen de batchtask
- bij eerste runtime-fout stopt verdere verwerking
- task eindigt als
failed - reeds verplaatste items blijven verplaatst
- geen rollback in v1
Partial completion model:
- partial completion wordt impliciet zichtbaar via
done_items < total_items failed_itembevat het item waarop de batch stopte- geen aparte
partial_completedstatus in v1
5. Backend-impact
Hergebruik:
- bestaande move-validatie voor individuele file/directory move
- bestaande task persistence en read-endpoints
- bestaande same-root native move in filesystem adapter
- bestaande path_guard containment en symlink-afwijzing
Waarschijnlijke wijzigingen:
- move service: batchvalidatie en task-creatie voor meerdere items
- task runner: batch move worker
- filesystem adapter: hergebruik van bestaande file move en directory move primitives
- task repository: waarschijnlijk geen schemawijziging nodig als
done_items,total_items,current_item,failed_itemal volstaan
Belangrijk semantisch behoud:
- rename voor exact 1 item blijft apart via bestaande rename-flow/F6-popupbeslislogica
- batchmodus is altijd move, nooit rename
6. UI-impact
Gedrag voor Move-knop en F6:
- bij meerdere geselecteerde items mag de bestaande batch move-confirmatie worden hergebruikt
- die confirmatie moet duidelijk tonen:
- aantal geselecteerde items
- destination-map
- dat batch same-root vereist voor directories
- voor gemengde selectie moet dezelfde batch-confirmatie bruikbaar blijven
Benodigde meldingen:
Cross-root batch directory move is not supported in v1Batch move requires all selected items to be in the same rootDestination already exists for one or more itemsDestination cannot be inside sourceSource must not be a symlink
Aanbeveling:
- hergebruik bestaande batch confirm-popup
- geen extra popup-type toevoegen in v1
- alleen de validatietekst en submit-logica uitbreiden
7. Security en validatie
Per item moeten minimaal deze checks gelden:
- source ligt binnen whitelist
- destination-parent ligt binnen whitelist
- source is geen symlink
- destination bestaat nog niet
- directory destination ligt niet in subtree van source
- same-root verplicht voor directories in batch v1
Gemengde foutgevallen:
- als selectie meerdere roots bevat: directe validatiefout vóór task-creatie
- als één item ongeldig is: hele batchcreatie afwijzen vóór task-creatie
- geen "best effort" pre-validatie waarbij geldige items toch alvast starten
Containment:
- path_guard blijft leidend voor alle bron- en doelpaden
- geen vrije pathconstructie buiten bestaande root mapping
8. Teststrategie
Golden tests:
- batch same-root directories success
- batch same-root mixed files + directories success
- batch cross-root directories blocked
- batch mixed-root selection blocked
- batch destination exists blocked
- batch destination inside source blocked
- batch symlink source blocked
- batch task failed shape bij runtime io_error
Regressietests:
- exacte 1 file move-flow blijft ongewijzigd
- exacte 1 directory same-root move blijft werken
- batch file-only move blijft werken
- F6 rename/move voor exact 1 item blijft semantisch gelijk
Securitytests:
- traversal in één van de source paths
- traversal in destination base
- symlink directory source
- symlink file source binnen gemengde selectie
Runtime edge cases:
- eerste item succeeds, tweede faalt -> task failed met
done_items == 1 - destination conflict ontdekt vóór task-creatie
- empty selection blijft no-op in UI, geen backend-aanroep
9. Aanbeveling
Aanbevolen v1-richting met laag regressierisico:
- ondersteun alleen same-root batch move
- ondersteun gemengde selectie van files + directories alleen als alle items in dezelfde root zitten
- gebruik één task per batch
- gebruik item-based progress (
done_items/total_items) - fail-fast zonder rollback
- hergebruik bestaande batch move-confirmatie in de UI
Waarom deze richting:
- bouwt rechtstreeks voort op de huidige same-root directory move v1 en batch file move
- beperkt backendcomplexiteit tot validatie + batchrunner, zonder cross-root recursieve directorylogica
- houdt de UI voorspelbaar: één batchactie, één task, één resultaat
- minimaliseert regressierisico voor de bestaande single-item file-flow en F6-semantiek