AVG vanaf het ontwerp, en elke toezegging getest
Een adres is een persoonsgegeven. Deze pagina geeft precies aan wat Addrova logt, opslaat en nooit bewaart. Elke bewering heeft een identificatie en is gekoppeld aan een geautomatiseerde test die bij elke codewijziging draait.
De zero-log-toezeggingen
In deze tabellen betekent „adres” elke invoer van de klant: vrije tekst, componenten, opgevraagde coördinaten, batchbestanden. De bron van waarheid is de zero-log-specificatie van de API, in het Frans; deze pagina vertaalt haar zonder de betekenis te wijzigen.
Versie van de specificatie van 2026-10-19
Wat wordt gelogd (uitputtende lijst)
| Id | Bewering | Geautomatiseerde test |
|---|---|---|
| ZL-01 | Eén regel per HTTP-verzoek, met precies: methode, routesjabloon (/v1/geocode, nooit de echte URL of de querystring), status, duur, gepseudonimiseerde tenant, willekeurige verzoek-id. Geen IP-adres, geen user-agent, geen API-sleutel. | api/tests/test_zerolog.py::test_access_log_exact_fields |
| ZL-02 | De enige andere berichten die de code van Addrova uitzendt, zijn die in de onderstaande inventaris; hun parameters zijn job-id’s, tellers, statussen of namen van uitzonderingstypen. | api/tests/test_privacy_claims.py::test_log_inventory_matches_code |
| ZL-03 | De tenant wordt overal gepseudonimiseerd (logs, traces): 16 hexadecimale tekens van een gezouten SHA-256 van zijn identificatie; de identificatie in platte tekst verschijnt nooit. | api/tests/test_observability.py::test_tenant_hash_is_stable_and_opaqueapi/tests/test_zerolog.py::test_access_log_exact_fields |
Wat nooit wordt gelogd of getraceerd
| Id | Bewering | Geautomatiseerde test |
|---|---|---|
| ZL-10 | Geen adres, geen opgevraagde coördinaat en geen API-sleutel verschijnt in de logs, op alle routes (geocodering, omgekeerd, autocomplete, reparatie, batch, Google- en Nominatim-compatibiliteit), ook niet bij fouten (engine uitgevallen, geweigerde invoer, ongeldige parameter, verkeerde sleutel, onbekende route). | api/tests/test_zerolog.py::test_canary_never_logged |
| ZL-11 | Berichten van bibliotheken van derden worden geneutraliseerd: parameters gemaskeerd, querystring gewist, uitzondering teruggebracht tot haar type (zonder bericht en trace). | api/tests/test_zerolog.py::test_third_party_logger_args_and_query_redacted |
| ZL-12 | Foutantwoorden geven noch de foutieve waarde noch het interne bericht van de engine terug. | api/tests/test_api.py::test_geocode_invalid_paramsapi/tests/test_api.py::test_engine_errors_do_not_echo_query |
| ZL-13 | OpenTelemetry-traces bevatten alleen attributen van een toegestane lijst (methode, routesjabloon, status, gepseudonimiseerde tenant, engine-bewerking, land, aantal resultaten, nauwkeurigheid van het eerste resultaat), zonder gebeurtenissen; geen adres, geen coördinaat, geen sleutel en geen tenant-id in platte tekst. | api/tests/test_observability.py::test_spans_carry_only_allowlisted_attributesapi/tests/test_observability.py::test_span_content |
| ZL-15 | Console: het e-mailadres, de magic-link-tokens en de sessietokens verschijnen in geen enkel log. | api/tests/test_console.py::test_email_and_tokens_never_logged |
| ZL-16 | Openbare demo van de site (/demo/v1): noch het ingevoerde adres noch het IP-adres van de bezoeker verschijnt in de logs; het IP wordt nooit opgeslagen, alleen een HMAC-vingerafdruk met dagelijks wisselend geheim (onbruikbaar na rotatie) dient om verzoeken te tellen. | api/tests/test_demo.py::test_demo_never_logs_address_or_ipapi/tests/test_demo.py::test_fingerprint_rotates_daily_and_hides_ipapi/tests/test_demo.py::test_redis_mode_shares_secret_and_counters |
| ZL-14 | Prometheus-metrics hebben alleen labels met begrensde waarden; een onbekend pad wordt geteld als <unmatched>. | api/tests/test_observability.py::test_metrics_labels_are_boundedapi/tests/test_observability.py::test_spans_carry_only_allowlisted_attributes |
Wat wordt opgeslagen, en hoe lang
| Id | Bewering | Geautomatiseerde test |
|---|---|---|
| ZL-20 | API-sleutels worden alleen opgeslagen als SHA-256-vingerafdruk (plus 12 tekens voorvoegsel voor weergave). | api/tests/test_tenancy_persistent.py::test_keys_are_hashed_and_revocable |
| ZL-21 | De database bevat geen verzoek en geen resultaat: alleen tenants, sleutels (vingerafdrukken) en gebruikstellers (tenant, dag, eindpunt, aantal). | api/tests/test_privacy_claims.py::test_schema_has_no_content_columns |
| ZL-22 | Batch: het invoerbestand wordt verwijderd zodra de verwerking eindigt; het resultaat en de metadata van de job worden verwijderd aan het einde van de bewaartermijn (standaard 1 uur na afronding, configureerbaar) of onmiddellijk bij DELETE; een job die nooit is verwerkt, wordt na 24 uur opgeschoond. | api/tests/test_batch.py::test_csv_roundtrip_usage_and_input_purgeapi/tests/test_batch.py::test_isolation_delete_and_expiryapi/tests/test_batch.py::test_result_purged_after_retention |
| ZL-23 | De metadata van een batchjob bevatten geen enkele regel van het bestand (tellers, datums, kolomnamen, standaardland). | api/tests/test_privacy_claims.py::test_batch_metadata_has_no_row_content |
| ZL-25 | Console: het enige opgeslagen persoonsgegeven is het e-mailadres van het account (en dat van een lopende inloglink, 15 minuten geldig, eenmalig te gebruiken); link- en sessietokens worden alleen als SHA-256-vingerafdruk opgeslagen. | api/tests/test_privacy_claims.py::test_schema_has_no_content_columnsapi/tests/test_console.py::test_link_is_single_use_and_logout |
| ZL-26 | Een organisatie ziet noch de sleutels noch het gebruik van een andere; een ingetrokken of verlopen (geroteerde) sleutel wordt geweigerd. | api/tests/test_console.py::test_org_isolationapi/tests/test_console.py::test_keys_lifecycle_and_plan_limit |
| ZL-27 | Webhook aan het einde van een batch: de payload bevat alleen de identificatie, de status, de tellers en de links van de job, nooit een regel van het bestand of een adres; de URL en het geheim van de webhook worden nooit gelogd. | api/tests/test_batch_stream.py::test_webhook_delivery_signed_without_addresses_and_retried |
| ZL-28 | Idempotentie (Idempotency-Key): alleen een SHA-256-vingerafdruk van het verzoek (en, bij een batch, de job-identificatie) wordt 24 uur bewaard, nooit het verzonden adres of het antwoord. | api/tests/test_idempotency_versioning.py::test_idempotency_never_stores_addressapi/tests/test_idempotency_versioning.py::test_in_progress_conflict_and_stores_keep_no_content |
| ZL-29 | Geen niet-gedeclareerd uitgaand netwerkverkeer: in de namespace wordt standaard alles geweigerd; de website heeft geen uitgaand verkeer; de API bereikt alleen de cluster-DNS, haar databases (PostgreSQL, Redis), de interne OTel-collector en, voor webhooks, HTTPS naar het openbare internet (private, lokale en metadatabereiken uitgesloten). Geen analysetool van derden kan een verzoek ontvangen. | api/tests/test_k8s_hardening.py::test_egress_is_limited_to_declared_flowsapi/tests/test_k8s_hardening.py::test_namespace_is_restricted_and_denies_by_default |
| ZL-24 | De batchjob van een klant is onzichtbaar voor andere klanten. | api/tests/test_batch.py::test_isolation_delete_and_expiry |
Wat (nog) niet bestaat
| Id | Bewering | Geautomatiseerde test |
|---|---|---|
| ZL-30 | De asynchrone terugval van /v1/repair (LLM) is uitgeschakeld: geen externe aanroep, geen adres verlaat de dienst. | api/tests/test_repair.py::test_repair_unrepairable_and_async_disabled |
| ZL-32 | In v0 wordt er niet echt een e-mail verzonden (in-memory postvak uit) en is er geen echte factureringsaanbieder gekoppeld (nepaanbieder). | api/tests/test_privacy_claims.py::test_no_external_transport_by_default |
| ZL-31 | In v0 is er geen resultaatcache (de HMAC-cache met roterend geheim uit ADR 0005 is nog niet geïmplementeerd). | api/tests/test_privacy_claims.py::test_no_result_cache_in_v0 |
Inventaris van logberichten
Dit zijn de enige berichten die de code uitzendt, in hun exacte formaat. Een test mislukt als de code en deze lijst uiteenlopen.
%s %s %d %.1fms tenant=%s rid=%s
job %s queued rows=%d
job %s %s rows=%d matched=%d
job %s failed: %s
engine loaded: %s
addrova_engine not installed, using the fake engine
usage flush failed: %s
index preloaded: %d bytes
webhook job %s attempt %d status %s
engine contract violation: candidate without source
engine failure: %sBuiten het bereik van deze tests
Deze punten worden op een andere manier gecontroleerd, en dat zeggen we erbij:
- Ingress / proxy: het toegangslog moet op de API-routes zijn uitgeschakeld (ADR 0004); infrastructuurconfiguratie, te controleren in infra/ en op het cluster.
- Engine (addrova_engine): verbindt zich ertoe verzoeken niet te loggen (ADR 0002); de eigen tests controleren dat.
- Export van traces: alleen als ADDROVA_OTLP_ENDPOINT is ingesteld, naar een collector gehost in de EU; zonder deze instelling verlaat geen trace het proces.
- Opslag van batchbestanden: v0 op de lokale schijf van de container (rechten 0600); versleutelde EU-objectopslag gepland voor productie (ADR 0006, ADR 0009).
Omdat niets wordt bewaard, wordt niets hergebruikt
Addrova gebruikt uw verzoeken niet om modellen te trainen, datasets op te bouwen of de index te verrijken, en de code maakt dat concreet: zoekopdrachten en resultaten worden nooit gelogd (ZL-10), de database bevat geen verzoek en geen resultaat (ZL-21), batchbestanden worden na de verwerking verwijderd (ZL-22), er is geen resultaatcache (ZL-31) en er wordt geen adres naar een externe dienst gestuurd (ZL-30).
Nog niet toegezegd
- Hosting uitsluitend in de EU: hostingaanbieder en regio zijn nog niet gepubliceerd. [À VÉRIFIER]
- Subverwerkers en verwerkersovereenkomst (DPA): worden vóór de lancering gepubliceerd, met online ondertekening. [À VÉRIFIER]
- Certificeringen: geen toegezegd. ISO 27001 staat gepland voor een latere fase.
Gegevensbronnen en licenties
We steunen op officiële open data onder open licenties (voor Frankrijk de Licence Ouverte 2.0). Elk API-antwoord bevat een lijst met bronvermeldingen. Data onder share-alike-licenties, zoals OpenStreetMap, staat in een aparte index en wordt nooit met de officiële index samengevoegd.
Vragen over compliance
Kan ik deze toezeggingen controleren?
Elke toezegging noemt de geautomatiseerde test die haar controleert. De tests draaien bij elke wijziging; een ervan mislukt als een genoemde test verdwijnt of als de loginventaris niet meer met de code overeenkomt. Toegang tot de testsuite voor audits moet nog worden bepaald. [À VÉRIFIER]
Loggen jullie mijn IP-adres?
De applicatie niet: het toegangslog bevat geen IP-adres, geen user-agent en geen API-sleutel (ZL-01). Ook bij de ingress ervoor moet het toegangslog zijn uitgeschakeld; dat is een infrastructuurinstelling en hierboven vermeld als buiten het bereik van de tests.
Hoe lang worden batchresultaten bewaard?
Standaard een uur na afronding, of tot u de job verwijdert (ZL-22). Het invoerbestand wordt verwijderd zodra de verwerking eindigt.