IDEA-230: map met één klik naar prullenbak en selectief verwijderen #98

Merged
janpeter merged 8 commits from codex/idea-230-folder-trash into main 2026-09-29 19:05:57 +02:00
Owner

Samenvatting

  • Eén klik op een prullenbakicoon vóór de mapnaam start de bestaande mapinventarisatie zonder dialoog. De gekozen map blijft zichtbaar en wordt pas rood na duurzame publicatie; dezelfde knop herstelt de nog veilige inhoud.
  • Binnen een geopende prullenbakmap kunnen expliciet geselecteerde media- en niet-mediabestanden na een aparte bevestiging via de bestaande delete-worker definitief worden verwijderd. De selectie is beperkt tot 100 directe bestandsentries en verandert de globale actie Prullenbak legen niet.
  • Een gedeeltelijk herstel meldt al definitief verwijderde onderdelen eerlijk. Request-/workeridentiteit, mountlocks, generaties, audit en onbekende-uitkomstgrenzen blijven behouden.

Verificatie op commit 59b45561bbee1bc9e724975f42223d6c8479937a

  • npm test met de allowlisted lokale PostgreSQL-testdatabase en TAP-reporter: 1.174 tests, 1.143 geslaagd, 0 fouten, 31 geconfigureerde skips.
  • Gemounte reload-regressie: een al lopende inventarisatie wordt zonder klik of nieuwe write via de serverprojectie gevolgd en wordt na publicatie rood. De test faalde vóór en slaagde na de fix.
  • Afzonderlijke globale enqueue-regressie: 11/11, inclusief 10.000 doelen, concurrerende video-claim en timeout-rollback.
  • Echte tijdelijke-filesystem/lifecycle-suite: 3/3; geselecteerde bestanden verdwijnen, individueel herstelde sibling en map blijven bestaan.
  • npm run typecheck, npm run build: geslaagd. npm run lint: 0 fouten, 11 bestaande waarschuwingen.
  • Browserproef en eindbewijs beschrijven UI-observaties en de grens van lokale stubs/macOS.

Herkomst en grens

IDEA-230 / sprint S-2026-09-29-1 / PBI-32 / T-218. Implementatieplan in deze PR; het PBI is gekoppeld aan ProductDoc-planrevisie cmumqdwlj00032i179zz0afxw. De bijgewerkte mapspecificatie staat als nieuwe ProductDoc-revisie cmumtssu9001m2i171uobfyhj; de eerdere dubbele GO geldt alleen voor de oude, gepinde revisie. Geen merge, migratie, productieactivering of nieuwe Linux/NFS-productieproef is in deze PR uitgevoerd. Het bestaande docs/runbooks/folder-trash-deploy.md blijft de uitrolgrens.

De lokale gates zijn groen op 59b4556; de Forgejo-checks voor deze head lopen nog. Op de vorige head waren alle vijf checks groen. De afzonderlijke empty-trash-job slaagde toen na 25m43s; de runnerduur varieerde tussen CI-runs. De gesloten 10 seconden database-timeout en de 10.000-doelenproef zijn niet versoepeld. Merge en productie-uitrol vragen een afzonderlijk besluit.

## Samenvatting - Eén klik op een prullenbakicoon vóór de mapnaam start de bestaande mapinventarisatie zonder dialoog. De gekozen map blijft zichtbaar en wordt pas rood na duurzame publicatie; dezelfde knop herstelt de nog veilige inhoud. - Binnen een geopende prullenbakmap kunnen expliciet geselecteerde media- en niet-mediabestanden na een aparte bevestiging via de bestaande delete-worker definitief worden verwijderd. De selectie is beperkt tot 100 directe bestandsentries en verandert de globale actie **Prullenbak legen** niet. - Een gedeeltelijk herstel meldt al definitief verwijderde onderdelen eerlijk. Request-/workeridentiteit, mountlocks, generaties, audit en onbekende-uitkomstgrenzen blijven behouden. ## Verificatie op commit `59b45561bbee1bc9e724975f42223d6c8479937a` - `npm test` met de allowlisted lokale PostgreSQL-testdatabase en TAP-reporter: **1.174 tests, 1.143 geslaagd, 0 fouten, 31 geconfigureerde skips**. - Gemounte reload-regressie: een al lopende inventarisatie wordt zonder klik of nieuwe write via de serverprojectie gevolgd en wordt na publicatie rood. De test faalde vóór en slaagde na de fix. - Afzonderlijke globale enqueue-regressie: **11/11**, inclusief 10.000 doelen, concurrerende video-claim en timeout-rollback. - Echte tijdelijke-filesystem/lifecycle-suite: **3/3**; geselecteerde bestanden verdwijnen, individueel herstelde sibling en map blijven bestaan. - `npm run typecheck`, `npm run build`: geslaagd. `npm run lint`: 0 fouten, 11 bestaande waarschuwingen. - [Browserproef](docs/research/2026-09-29-idea-230-browser-proef.md) en [eindbewijs](docs/research/2026-09-29-idea-230-eindbewijs.md) beschrijven UI-observaties en de grens van lokale stubs/macOS. ## Herkomst en grens IDEA-230 / sprint S-2026-09-29-1 / PBI-32 / T-218. [Implementatieplan](docs/superpowers/plans/2026-09-29-idea-230-map-prullenbak-een-klik.md) in deze PR; het PBI is gekoppeld aan ProductDoc-planrevisie `cmumqdwlj00032i179zz0afxw`. De bijgewerkte mapspecificatie staat als nieuwe ProductDoc-revisie `cmumtssu9001m2i171uobfyhj`; de eerdere dubbele GO geldt alleen voor de oude, gepinde revisie. Geen merge, migratie, productieactivering of nieuwe Linux/NFS-productieproef is in deze PR uitgevoerd. Het bestaande `docs/runbooks/folder-trash-deploy.md` blijft de uitrolgrens. De lokale gates zijn groen op `59b4556`; de Forgejo-checks voor deze head lopen nog. Op de vorige head waren alle vijf checks groen. De afzonderlijke `empty-trash`-job slaagde toen na 25m43s; de runnerduur varieerde tussen CI-runs. De gesloten 10 seconden database-timeout en de 10.000-doelenproef zijn niet versoepeld. Merge en productie-uitrol vragen een afzonderlijk besluit.
docs: record IDEA-230 contract and integrated proof
Some checks failed
CI / test (historical-bootstrap) (pull_request) Successful in 1m33s
CI / test (empty-trash) (pull_request) Successful in 5m15s
CI / test (video-migration) (pull_request) Successful in 1m28s
CI / test (suite) (pull_request) Failing after 5m41s
CI / docker-build (pull_request) Successful in 2m48s
604454e7df
s4m-codex-reviewer approved these changes 2026-09-29 17:47:25 +02:00
Dismissed
s4m-codex-reviewer left a comment

Verdict: APPROVED

  • Geen blokkerende bevindingen. De wijziging behoudt de servergestuurde status, de bestaande delete-queue en de grens tussen markeren, herstellen en definitief verwijderen.
  • Tests/documentatie: gerichte unit-, mounted- en DB-tests zijn opgenomen; de diff is vrij van whitespace-fouten. De lokale reviewcheckout bevatte geen dependencies, dus de suite kon hier niet opnieuw worden uitgevoerd.

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

# Verdict: APPROVED - Geen blokkerende bevindingen. De wijziging behoudt de servergestuurde status, de bestaande delete-queue en de grens tussen markeren, herstellen en definitief verwijderen. - Tests/documentatie: gerichte unit-, mounted- en DB-tests zijn opgenomen; de diff is vrij van whitespace-fouten. De lokale reviewcheckout bevatte geen dependencies, dus de suite kon hier niet opnieuw worden uitgevoerd. Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
test: assert focus on current trash action after rerender
Some checks failed
CI / test (historical-bootstrap) (pull_request) Successful in 1m25s
CI / test (suite) (pull_request) Successful in 3m12s
CI / test (video-migration) (pull_request) Successful in 1m4s
CI / test (empty-trash) (pull_request) Failing after 7m26s
CI / docker-build (pull_request) Successful in 2m45s
4b40e321c3
s4m-codex-reviewer left a comment

COMMENT

  • minor — src/components/DiskDeleteControls.tsx:38: individuele selectievakjes begrenzen de selectie niet op 100. Daardoor kan een gebruiker op een pagina met meer dan 100 bestanden meer dan het contractuele maximum selecteren en pas na de onomkeerbare bevestiging een generieke serverafwijzing krijgen. Blokkeer/selecteer niet verder boven de limiet (en geef die limiet direct in de UI aan).

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

## COMMENT - **minor** — `src/components/DiskDeleteControls.tsx:38`: individuele selectievakjes begrenzen de selectie niet op 100. Daardoor kan een gebruiker op een pagina met meer dan 100 bestanden meer dan het contractuele maximum selecteren en pas na de onomkeerbare bevestiging een generieke serverafwijzing krijgen. Blokkeer/selecteer niet verder boven de limiet (en geef die limiet direct in de UI aan). Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
perf: limit parent snapshot check to selected trash files
All checks were successful
CI / test (historical-bootstrap) (pull_request) Successful in 1m17s
CI / test (suite) (pull_request) Successful in 3m6s
CI / test (video-migration) (pull_request) Successful in 1m33s
CI / docker-build (pull_request) Successful in 3m17s
CI / test (empty-trash) (pull_request) Successful in 25m43s
fbe9f3128d
s4m-codex-reviewer requested changes 2026-09-29 18:12:03 +02:00
Dismissed
s4m-codex-reviewer left a comment

REQUEST_CHANGES

Findings

  • error — src/components/useFolderTrashToggle.ts:127: polling kijkt uitsluitend naar lokale inventory-state. Na een paginaverversing of terugnavigeren komt een nog lopende actie alleen via item.trashAction.status === "inventory" binnen; die wordt in local niet geïnitialiseerd. Daardoor start geen statusread/poll, blijft de knop onbeperkt “Status vernieuwen/Bezig” en wordt hij niet automatisch rood zodra de inventarisatie duurzaam publiceert. Dit schendt de vereiste interactie dat de knop tijdens verzamelen bezet is en pas na publicatie rood wordt. Initialiseer/poll ook server-afkomstige inventory-acties (zonder nieuwe write) en dek de reload-route met een test.

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

## REQUEST_CHANGES ### Findings - **error** — `src/components/useFolderTrashToggle.ts:127`: polling kijkt uitsluitend naar lokale `inventory`-state. Na een paginaverversing of terugnavigeren komt een nog lopende actie alleen via `item.trashAction.status === "inventory"` binnen; die wordt in `local` niet geïnitialiseerd. Daardoor start geen statusread/poll, blijft de knop onbeperkt “Status vernieuwen/Bezig” en wordt hij niet automatisch rood zodra de inventarisatie duurzaam publiceert. Dit schendt de vereiste interactie dat de knop tijdens verzamelen bezet is en pas na publicatie rood wordt. Initialiseer/poll ook server-afkomstige inventory-acties (zonder nieuwe write) en dek de reload-route met een test. Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Fix folder trash polling after library reload
All checks were successful
CI / test (historical-bootstrap) (pull_request) Successful in 1m7s
CI / test (suite) (pull_request) Successful in 3m12s
CI / test (video-migration) (pull_request) Successful in 1m28s
CI / docker-build (pull_request) Successful in 3m1s
CI / test (empty-trash) (pull_request) Successful in 12m17s
59b45561bb
s4m-codex-reviewer left a comment

Verdict: APPROVED

Findings

  • Geen blokkerende findings aangetroffen.

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

De selectie voor definitieve verwijdering blijft server-geautoriseerd (actie, directe ouder, entry-status/generatie en bronbinding worden onder de mountlock hertoetst); de UI voorkomt dubbel verzenden en herhaalt geen onzekere schrijfuitkomsten. De implementatie volgt de mapprullenbak-specificatie en de MD3-tokenconventies; gerichte DB-, actie- en mounted UI-tests zijn met de wijziging uitgebreid.

# Verdict: APPROVED ## Findings - Geen blokkerende findings aangetroffen. Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. De selectie voor definitieve verwijdering blijft server-geautoriseerd (actie, directe ouder, entry-status/generatie en bronbinding worden onder de mountlock hertoetst); de UI voorkomt dubbel verzenden en herhaalt geen onzekere schrijfuitkomsten. De implementatie volgt de mapprullenbak-specificatie en de MD3-tokenconventies; gerichte DB-, actie- en mounted UI-tests zijn met de wijziging uitgebreid.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Media-Organizer!98
No description provided.