Problem
Sammel-Issue für belegten toten Code und verwaiste Konfiguration (ergänzend zu #528, dort bereits erfasst: assets/js/limit-violation.js, StationRepository::findIndexedByProvider).
Toter PHP-Code (jeweils 0 Verwendungen per grep verifiziert)
src/Air/ImportCache/ImportCache.php + Interface — kein einziger Nutzer
src/Air/Util/ClassUtil.php — selbst als @deprecated markiert, ungenutzt; obendrein ist getUnderscoreShortname() (Z. 22–25) eine Copy-Paste-Kopie von getLowercaseShortname() ohne Underscore-Logik
src/Air/Util/StringUtil.php — ungenutzt
src/Twig/Extension/CronTwigExtension.php — nutzt Cron\CronExpression (Z. 5, 25), Paket dragonmantank/cron-expression ist nicht installiert; die Twig-Funktion cron() wird in keinem Template aufgerufen — erste Nutzung wäre ein Fatal
- Provider-/Fetch-Subsystem weitgehend tot:
ProviderInterface::fetchPollutant/ProviderList/FetchProcess/FetchResult haben keine Aufrufer; OpenWeatherMapProvider/SourceFetcher/SourceFetcher.php::fetch() (Z. 20–37) ruft die OWM-API auf und verwirft die Antworten (nur Counter); queryUVIndex zielt auf den abgeschalteten Endpoint /data/2.5/uvi. Lebendig ist nur queryTemperature via AdhocDataRetriever
src/Air/Geocoding/RequestConverter/RequestConverter.php:6 — use App\Entity\Zip; (Entity existiert nicht)
Tote/verwaiste Konfiguration
config/services.yaml:46-47 — Alias App\Air\Pollution\DataPersister\PersisterInterface → Namespace existiert seit dem Umzug nach App\Air\DataPersister\ nicht mehr (Symfony entfernt den Alias still; die echte Interface-Bindung funktioniert nur dank Auto-Aliasing)
config/services.yaml:20 — Bind $graphCacheDirectory (+ GRAPH_CACHE_DIRECTORY in .env/.env.test) hat keinen einzigen Consumer
config/packages/dev/easy_log_handler.yaml — registriert EasyCorp\EasyLog\EasyLogHandler; Paket nicht installiert und seit 2020 abandoned
config/routing/4_frontend.yaml — Route logout: path: /logout ohne Controller (Security-Relikt)
config/services.yaml:8 Parameter locale: 'de' wird nirgends referenziert, während config/packages/translation.yaml default_locale: en setzt — für eine rein deutsche Seite inkonsistent
phpunit.xml ist git-getrackt, steht aber in .gitignore (phpunit-bridge-Recipe-Zeile /phpunit.xml) — Foot-Gun; Ignore-Zeile entfernen oder auf phpunit.xml.dist umstellen
config/packages/sonata_seo.yaml Meta-Keywords-Tippfehler „Kohlemnonooxid"
- CLAUDE.md/README beschreiben Elasticsearch als aktive Such-Komponente und „Typeahead/Bloodhound" als Suche — tatsächlich sucht das Frontend mit
@algolia/autocomplete-js gegen Prefetch-Endpunkte + Nominatim (siehe 500er-Issue)
Kontext/Risiko
Kein unmittelbares Produktionsrisiko, aber die Altlasten verschleiern die tatsächliche Architektur, kosten bei jedem Upgrade Analysezeit und produzieren irreführende Doku für neue Mitwirkende (und für Coding-Agents, die CLAUDE.md lesen).
Aufgaben
Abhängigkeiten
Baut auf den Entscheidungen aus dem 500er-/Feature-Flag-Issue auf; überschneidungsfrei zu #528.
Problem
Sammel-Issue für belegten toten Code und verwaiste Konfiguration (ergänzend zu #528, dort bereits erfasst:
assets/js/limit-violation.js,StationRepository::findIndexedByProvider).Toter PHP-Code (jeweils 0 Verwendungen per grep verifiziert)
src/Air/ImportCache/ImportCache.php+ Interface — kein einziger Nutzersrc/Air/Util/ClassUtil.php— selbst als@deprecatedmarkiert, ungenutzt; obendrein istgetUnderscoreShortname()(Z. 22–25) eine Copy-Paste-Kopie vongetLowercaseShortname()ohne Underscore-Logiksrc/Air/Util/StringUtil.php— ungenutztsrc/Twig/Extension/CronTwigExtension.php— nutztCron\CronExpression(Z. 5, 25), Paketdragonmantank/cron-expressionist nicht installiert; die Twig-Funktioncron()wird in keinem Template aufgerufen — erste Nutzung wäre ein FatalProviderInterface::fetchPollutant/ProviderList/FetchProcess/FetchResulthaben keine Aufrufer;OpenWeatherMapProvider/SourceFetcher/SourceFetcher.php::fetch()(Z. 20–37) ruft die OWM-API auf und verwirft die Antworten (nur Counter);queryUVIndexzielt auf den abgeschalteten Endpoint/data/2.5/uvi. Lebendig ist nurqueryTemperatureviaAdhocDataRetrieversrc/Air/Geocoding/RequestConverter/RequestConverter.php:6—use App\Entity\Zip;(Entity existiert nicht)Tote/verwaiste Konfiguration
config/services.yaml:46-47— AliasApp\Air\Pollution\DataPersister\PersisterInterface→ Namespace existiert seit dem Umzug nachApp\Air\DataPersister\nicht mehr (Symfony entfernt den Alias still; die echte Interface-Bindung funktioniert nur dank Auto-Aliasing)config/services.yaml:20— Bind$graphCacheDirectory(+GRAPH_CACHE_DIRECTORYin.env/.env.test) hat keinen einzigen Consumerconfig/packages/dev/easy_log_handler.yaml— registriertEasyCorp\EasyLog\EasyLogHandler; Paket nicht installiert und seit 2020 abandonedconfig/routing/4_frontend.yaml— Routelogout: path: /logoutohne Controller (Security-Relikt)config/services.yaml:8Parameterlocale: 'de'wird nirgends referenziert, währendconfig/packages/translation.yamldefault_locale: ensetzt — für eine rein deutsche Seite inkonsistentphpunit.xmlist git-getrackt, steht aber in.gitignore(phpunit-bridge-Recipe-Zeile/phpunit.xml) — Foot-Gun; Ignore-Zeile entfernen oder aufphpunit.xml.distumstellenconfig/packages/sonata_seo.yamlMeta-Keywords-Tippfehler „Kohlemnonooxid"@algolia/autocomplete-jsgegen Prefetch-Endpunkte + Nominatim (siehe 500er-Issue)Kontext/Risiko
Kein unmittelbares Produktionsrisiko, aber die Altlasten verschleiern die tatsächliche Architektur, kosten bei jedem Upgrade Analysezeit und produzieren irreführende Doku für neue Mitwirkende (und für Coding-Agents, die CLAUDE.md lesen).
Aufgaben
use App\Entity\ZipentfernenSourceFetcher::queryTemperature+AdhocDataRetriever+JsonParser) eindampfen oder Roadmap dokumentierenPollution\DataPersister-Alias,$graphCacheDirectory+ Env-Var, easy_log_handler.yaml, logout-Route, locale-Parameter klären)phpunit.xml-Gitignore-Konflikt auflösen; Tippfehler in sonata_seo.yaml fixenAbhängigkeiten
Baut auf den Entscheidungen aus dem 500er-/Feature-Flag-Issue auf; überschneidungsfrei zu #528.