# VG-Core Load Order

## Manifest-Ladereihenfolge

Die Background-Scripts werden laut `manifest.json` in dieser Reihenfolge geladen:

| Reihenfolge | Script | Einordnung |
| --- | --- | --- |
| 1 | `src/core/module-registry.js` | Core |
| 2 | `src/modules/vg-observe/module.js` | Fachmodul |
| 3 | `src/background/db/db-constants.js` | Core-Kandidat |
| 4 | `src/background/db/db-core.js` | Core-Kandidat |
| 5 | `src/background/gvl/gvl-vendor-normalizer.js` | Core-Kandidat |
| 6 | `src/background/gvl/gvl-vendor-relationship-normalizer.js` | Core-Kandidat |
| 7 | `src/background/gvl/gvl-catalog-normalizer.js` | Core-Kandidat |
| 8 | `src/background/db/db-retention.js` | Core-Kandidat |
| 9 | `src/background/db/db-record-locks.js` | Core-Kandidat |
| 10 | `src/background/utils.js` | Core-Kandidat |
| 11 | `src/background/settings.js` | Core-Kandidat |
| 12 | `src/background/maintenance-guard.js` | Core-Kandidat |
| 13 | `src/background/consent-memory.js` | Fachmodul |
| 14 | `src/background/request-fingerprint.js` | Fachmodul |
| 15 | `src/background/request-observer.js` | Fachmodul |
| 16 | `src/background/gvl-service.js` | Fachmodul |
| 17 | `src/background.js` | Fachmodul |

## Globale Abhängigkeiten

- `globalThis.VGCoreModuleRegistry`: wird in `src/core/module-registry.js` gesetzt und in `src/modules/vg-observe/module.js` zur Registrierung von `VGObserveModule` verwendet.
- `globalThis.VGObserveModule`: wird in `src/modules/vg-observe/module.js` gesetzt.
- `globalThis.VendorGetGvlService`: wird in `src/background/gvl-service.js` gesetzt und in `src/background.js` für `ingestGvlSnapshot` verwendet.
- `globalThis.normalizeGvlVendorsFromSnapshot` und `globalThis.normalizeLatestGvlSnapshotVendors`: werden in `src/background/gvl/gvl-vendor-normalizer.js` gesetzt.
- `globalThis.normalizeGvlVendorRelationshipsFromSnapshot` und `globalThis.normalizeLatestGvlVendorRelationships`: werden in `src/background/gvl/gvl-vendor-relationship-normalizer.js` gesetzt.
- `globalThis.normalizeGvlCatalogsFromSnapshot` und `globalThis.normalizeLatestGvlCatalogs`: werden in `src/background/gvl/gvl-catalog-normalizer.js` gesetzt.
- `browser.runtime.onMessage` und `browser.webRequest.onBeforeRequest`: werden in `src/background.js` registriert.
- `browser.storage.local.get` und `browser.storage.local.set`: werden in `src/background/settings.js` verwendet.
- `indexedDB.open` und `indexedDB.deleteDatabase`: werden in `src/background/db/db-core.js` verwendet.
- `crypto.subtle.digest` und `TextEncoder`: werden in `src/background/utils.js` und `src/background/gvl-service.js` verwendet.
- `fetch`: wird in `src/background.js` für den offiziellen IAB-GVL-Abruf verwendet.
- `URL`: wird in `src/background/request-fingerprint.js` und `src/background/request-observer.js` zur Request-Auswertung verwendet.
- `atob`: wird in `src/background.js` beim Decoding von TC-String-Core-Metadaten verwendet.

Weitere implizite globale Funktionsabhängigkeiten entstehen durch nicht-modulare Script-Ladung:

- `src/background/db/db-core.js` erwartet `VENDORGET_DB_NAME` und `VENDORGET_DB_VERSION` aus `src/background/db/db-constants.js`.
- `src/background/db/db-retention.js` und `src/background/db/db-record-locks.js` erwarten `VENDORGET_EVIDENCE_STORE_NAMES` aus `src/background/db/db-constants.js`.
- `src/background/request-fingerprint.js` erwartet `sha256Hex` und `stableStringify` aus `src/background/utils.js`.
- `src/background/request-observer.js` erwartet `isRequestMonitoringEnabled`, `isEvidenceWriteSuspended`, `buildObservedRequestFingerprint`, `buildObservedRequestFingerprintSource`, `getLatestConsentStateForRequest` und `persistObservedRequest`.
- `src/background.js` erwartet unter anderem `handleObservedRequest`, `isConsentCaptureEnabled`, `rememberLatestTcfPing`, `getLatestTcfPing`, `sha256Hex`, `stableStringify`, `rememberLatestConsentState`, `openVendorGetDb`, Retention-/Lock-Funktionen und `VendorGetGvlService`.

## Core-relevante Risiken

- Ladeordnungsrisiko: `src/modules/vg-observe/module.js` registriert sich nur, wenn `globalThis.VGCoreModuleRegistry` bereits existiert. Die aktuelle Reihenfolge erfüllt das, ist aber empfindlich gegen Manifest-Änderungen.
- Implizite globale Abhängigkeiten: Viele Background-Scripts exportieren keine Module, sondern stellen Funktionen durch gemeinsame Script-Ausführung bereit. Verschiebungen können dadurch Laufzeitfehler erzeugen, ohne dass Imports brechen.
- DB-Konstanten / DB-Version: `src/background/db/db-constants.js` definiert `VENDORGET_DB_VERSION = 5` und die Store-Namen. `src/background/db/db-core.js` nutzt diese Werte direkt für `indexedDB.open` und Store-Anlage.
- Kopplung zwischen Core-Kandidaten und VG-Observe: DB-, Retention-, Record-Lock-, Settings- und GVL-Normalizer-Dateien wirken infrastrukturell, enthalten aber Namen, Stores oder Datenflüsse aus Consent, Request, Evidence und GVL-Snapshot-Logik.
- GVL-Kopplung: Normalizer können später Teil einer gemeinsamen Wissensbasis sein, sind aktuell aber an Snapshot-Stores und Background-DB-Zugriffe gekoppelt.

## Nicht ändern

- keine Script-Reihenfolge ändern
- keine `manifest.json` ändern
- keine DB-Version ändern
- keine Dateien verschieben

## Nächster risikoarmer Schritt

Als nächsten kleinen Schritt eine reine Dokumentations-Tabelle ergänzen, die je Background-Script die erwarteten vorausgehenden globalen Funktionen und die bereitgestellten globalen Funktionen beschreibt. Kein Refactor, keine Migration, keine Umbenennung.
