Phase 18 (Verwaltung): fetch_strategy in CRUD + Edit-Modal

- migrations/2026-05-09e_fetch_strategy.py NEU: ALTER TABLE sources ADD COLUMN
  fetch_strategy. Pre-flagging fuer FT/WSJ/NZZ etc. (paywall) und Rheinische
  Post/Verfassungsschutz (googlebot).
- shared/services/source_health.py: gesynct vom Monitor (Phase-18-Code mit
  Retry-Logik + Strategien default/googlebot/paywall/skip).
- routers/sources.py: GlobalSourceCreate/Update um fetch_strategy
  (Pattern-Validation), SOURCE_UPDATE_COLUMNS + INSERT erweitert.
- dashboard.html: Edit-Modal hat jetzt Dropdown sourceFetchStrategy.
- sources.js: laedt + sendet fetch_strategy mit.

Cache-Buster 20260509c -> 20260509d.
Dieser Commit ist enthalten in:
claude-dev
2026-05-09 04:57:01 +00:00
Ursprung bff934d673
Commit 7f729443cb
6 geänderte Dateien mit 153 neuen und 14 gelöschten Zeilen

Datei anzeigen

@@ -6,7 +6,7 @@
<title>AegisSight Monitor-Verwaltung</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<link rel="apple-touch-icon" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/css/style.css?v=20260509c">
<link rel="stylesheet" href="/static/css/style.css?v=20260509d">
<style>
.source-badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:12px; font-weight:600; }
@@ -625,6 +625,15 @@
<label for="sourceBias">Bias / Einordnung</label>
<input type="text" id="sourceBias" placeholder="z.B. Nachrichtenagentur, faktenbasiert-neutral" maxlength="500">
</div>
<div class="form-group">
<label for="sourceFetchStrategy">Fetch-Strategie (Health-Check)</label>
<select id="sourceFetchStrategy">
<option value="default">Standard (UA + Retry mit Googlebot bei 403)</option>
<option value="googlebot">Googlebot (direkt - fuer SEO-freundliche Sites)</option>
<option value="paywall">Paywall (via removepaywalls.com - z.B. FT, Spiegel+)</option>
<option value="skip">Skip (Health-Check ueberspringen)</option>
</select>
</div>
<div class="form-group">
<label for="sourceNotes">Notizen</label>
<input type="text" id="sourceNotes" placeholder="Optional">
@@ -697,10 +706,10 @@
</div>
</div>
<script src="/static/js/app.js?v=20260509c"></script>
<script src="/static/js/sources.js?v=20260509c"></script>
<script src="/static/js/source-health.js?v=20260509c"></script>
<script src="/static/js/audit.js?v=20260509c"></script>
<script src="/static/js/app.js?v=20260509d"></script>
<script src="/static/js/sources.js?v=20260509d"></script>
<script src="/static/js/source-health.js?v=20260509d"></script>
<script src="/static/js/audit.js?v=20260509d"></script>
<div id="toastContainer" class="toast-container" aria-live="polite" aria-atomic="true"></div>
</body>
</html>