The export that dies at thirty seconds
An export built into a web request works until the data outgrows the timeout. Then the button does nothing and there is no record that anything was attempted.
Haal je gegevens eruit, of sluit je account, en het maakt af.
Iedereen die is ingelogd kan een export vragen van het eigen record, de lidmaatschappen, organisaties, projecten en geschreven documenten, of vragen om verwijdering van het account. Beide draaien als achtergrondtaken met herhaalpogingen, dus een herstart kan het verzoek niet opeten, en beide tonen toestanden die je kunt volgen in plaats van een draaiend wieltje en hoop.
1
transaction to accept a request
5
retries per background job
24h
before a download link expires
Zonder een gedeelde basis bouwt elk team deze randgevallen opnieuw, en anders.
An export built into a web request works until the data outgrows the timeout. Then the button does nothing and there is no record that anything was attempted.
Deletion touches memberships, the teammate row and the sign-in provider. A crash part-way leaves an account that is neither active nor gone, which is worse than either.
When a request gives no feedback, every one of them turns into a question to someone. Visible states answer it without a conversation.
Het mechanisme van begin tot eind, zoals het in de repository is geïmplementeerd.
The request is accepted safely
The server confirms who is asking from the session, then commits the request row, a visible process run and the job trigger in one idempotent transaction.
A job picks it up
The job is enqueued right after the commit, with a scheduled reconciler as a backstop, so the page never waits on the queue.
The work runs with visible progress
An export collects the account, memberships, organizations, projects and authored documents into one schema-versioned artifact in storage, updating states as it goes.
Delivery closes the loop
An email carries a download link that expires after 24 hours. Deletion removes memberships, anonymizes the teammate row and deletes the sign-in account, tolerating an account that is already gone.
Interactief voorbeeld
Deze rondleiding toont het geïmplementeerde backendcontract zonder account, credentials of providercalls.
Interactief voorbeeld
Stap 1 van 4: Request accepted
Alleen deterministische voorbeelddata. De interactie gebruikt geen account-, provider- of netwerkverbinding.
Kernpunten
Accepting a request commits the request, its visible progress run and its job trigger together. Clicking twice still produces one request.
Export and deletion run with up to five attempts, and each retry re-locks the row and checks whether the request already finished before redoing anything.
Queued, processing and completed are real states on a process run, not a guess drawn by the page.
Technische garanties
Dit is werkende machinerie, geen juridische goedkeuring. Welke soorten gegevens we bewaren, hoe lang we ze houden en hoe we het aan mensen uitleggen, vraagt nog een menselijke toets aan onze eigen verplichtingen.
De grens hierboven is geen claim maar code. Deze bestanden dragen het contract:
src/features/privacy/server.tssrc/features/privacy/jobs.tssrc/registries/data-exports.tsDeze functies delen contracten en grenzen met deze pagina.
De documentatie beschrijft dezelfde contracten die deze pagina demonstreert.