# PATCHES.md — Guida al sistema di patch di Fabiodalez Music > Questo documento descrive come il wrapper Android applica ~50 ottimizzazioni > sopra l'app web upstream **Monochrome** senza forkare il repo e senza > produrre merge conflict ad ogni `git pull upstream`. --- ## Sommario - [TL;DR](#tldr) - [Architettura a 3 livelli](#architettura-a-3-livelli) - [Quick start (one-shot build)](#quick-start-one-shot-build) - [Verifica delle patch (dry-run)](#verifica-delle-patch-dry-run) - [Elenco completo delle 51 ottimizzazioni](#elenco-completo-delle-51-ottimizzazioni) - [Come aggiungere una nuova patch upstream](#come-aggiungere-una-nuova-patch-upstream) - [Debugging: "pattern not found"](#debugging-pattern-not-found) - [Patch candidate per PR upstream](#patch-candidate-per-pr-upstream) --- ## TL;DR ```bash # Prima volta (clone + build completo) git clone https://github.com/monochrome-music/monochrome.git cd monochrome && git remote rename origin upstream && cd .. cd fabiodalez-music-android ./fm-build.sh ../monochrome # one-shot: install + build # Aggiornamento (monochrome già clonato) ./fm-build.sh ../monochrome # Solo verifica che le patch funzionino ancora (no build, no npm install) ./verify-patches.sh ../monochrome ``` L'APK finale viene copiato in `monochrome/Monochrome-debug.apk`. --- ## Architettura a 3 livelli Il wrapper applica ottimizzazioni su tre livelli differenti, ognuno con un diverso trade-off tra invasività e robustezza agli aggiornamenti upstream: ``` ┌───────────────────────────────────────────────────────────────────┐ │ LIVELLO 1 — File statici del wrapper │ │ (copiati 1:1 in monochrome/android/* tramite install.sh) │ │ │ │ • android/app/src/main/java/com/monochrome/app/*.java (6 file) │ │ • android/app/src/main/AndroidManifest.xml │ │ • android/app/src/main/res/* │ │ • android/app/build.gradle │ │ • capacitor.config.ts │ │ │ │ ▸ Questi file non esistono nell'upstream. L'install li piazza. │ │ ▸ Sono ~40 delle 50 ottimizzazioni (UI, architettura, bug fix). │ └───────────────────────────────────────────────────────────────────┘ ┌───────────────────────────────────────────────────────────────────┐ │ LIVELLO 2 — Hook JS runtime │ │ (android/android-service.js, iniettato come │ │ │ │ ▸ Monkey-patch runtime: navigator.clipboard, window.open, │ │ HTMLAnchorElement.prototype.click, history.pushState │ │ ▸ DOM observer + MutationObserver per highlight search results │ │ ▸ CSS injection tramite