From cf2d826c8a2fc6112453b91e7eae4d68020e9f54 Mon Sep 17 00:00:00 2001 From: OliverGiertz Date: Fri, 10 Apr 2026 08:22:26 +0000 Subject: [PATCH] fix(scheduler,pipeline): fix WP auth attribute name and release slot on hard errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scheduler: use wordpress_app_password (not wordpress_password) so _fetch_wp_occupied_slots() can actually authenticate against the WP REST API — previously always returned empty set silently - pipeline: release reserved publish slot when draft creation fails with a non-ValueError exception (e.g. WP API error), preventing permanently blocked slots on failed articles Co-Authored-By: Claude Sonnet 4.6 --- backend/app/pipeline.py | 3 +++ backend/app/scheduler.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/app/pipeline.py b/backend/app/pipeline.py index 1ae1ff6..d9766ae 100644 --- a/backend/app/pipeline.py +++ b/backend/app/pipeline.py @@ -391,6 +391,9 @@ def _process_article(article: dict[str, Any], stats: PipelineStats, settings: An except Exception as exc: logger.error("Draft-Erstellung für #%d fehlgeschlagen: %s", article_id, exc) update_article_status(article_id, "error", actor="pipeline", note=f"Draft-Fehler: {exc}") + # Release reserved slot so it's not permanently blocked by a failed article + from .scheduler import release_publish_slot + release_publish_slot(article_id) raise diff --git a/backend/app/scheduler.py b/backend/app/scheduler.py index 0ec38d8..ff5cecf 100644 --- a/backend/app/scheduler.py +++ b/backend/app/scheduler.py @@ -45,7 +45,7 @@ def _fetch_wp_occupied_slots() -> set[tuple[str, int]]: settings = get_settings() try: auth = base64.b64encode( - f"{settings.wordpress_username}:{settings.wordpress_password}".encode() + f"{settings.wordpress_username}:{settings.wordpress_app_password}".encode() ).decode() url = ( f"{settings.wordpress_base_url}/wp-json/wp/v2/posts"