From 7b9752261a9c08d3bdfa42bee57bd874c0a33ccb Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Mon, 20 Jul 2026 22:14:45 +0200 Subject: [PATCH] Konzept-Ansicht: Repo-URL auch in Markdown-Backticks erkennen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Worker schreibt die Repo-URL in der Abschluss-Zusammenfassung als `https://...` — die Lookahead-Liste der Regex kannte den Backtick nicht, also fand die Konzept-Ansicht kein Repo ('wird gerade vorbereitet') obwohl Repo + KONZEPT.md laengst da waren. Fix: greedy matchen, Treffer hinterher saeubern (Backticks/Satzzeichen/.git) statt das Endezeichen zu raten. Co-Authored-By: Claude Fable 5 --- backend/services/ideen.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/services/ideen.py b/backend/services/ideen.py index bad786d..59b3efd 100644 --- a/backend/services/ideen.py +++ b/backend/services/ideen.py @@ -582,10 +582,22 @@ def prio_task(task_id: str, richtung: str) -> dict: # ~/.git-credentials), damit der Commander es DIREKT im Auftragsbuch liest, # ohne das Repo aufzumachen (User-Wunsch 20.07.). _GITEA_HOST = "git.tobisniceshomelab.ddnsfree.com" +# Kein Raten am Zeilenende: greedy bis zum ersten Nicht-Repo-Zeichen matchen und den +# Treffer HINTERHER säubern. (Der Worker schreibt die URL gern in Markdown-Backticks — +# eine Lookahead-Liste erwischt sowas nie zuverlässig, Bug-Fund 20.07.) _GITEA_REPO_RX = re.compile( - re.escape(_GITEA_HOST) + r"/([A-Za-z0-9_.-]+/[A-Za-z0-9_][A-Za-z0-9_.-]*?)(?:\.git)?(?=[\s)\"'<>]|/?$)" + re.escape(_GITEA_HOST) + r"/([A-Za-z0-9_.-]+/[A-Za-z0-9_][A-Za-z0-9_.-]*)" ) -_REPO_FALLBACK_RX = re.compile(r"[Rr]epo\S*[:\s]+([A-Za-z0-9_.-]+/[A-Za-z0-9_][A-Za-z0-9_.-]*)") +_REPO_FALLBACK_RX = re.compile(r"[Rr]epo\S*[:\s]+[`'\"]?([A-Za-z0-9_.-]+/[A-Za-z0-9_][A-Za-z0-9_.-]*)") + + +def _clean_repo(raw: str) -> str | None: + """Trailing Markdown-/Satzzeichen und .git vom Treffer abschneiden.""" + r = (raw or "").strip().strip("`'\"") + r = r.rstrip(".,;:)»>") + r = re.sub(r"\.git$", "", r) + r = r.rstrip(".,;:") + return r or None _KONZEPT_NAMES = ("KONZEPT.md", "Konzept.md", "konzept.md", "CONCEPT.md") _konzept_cache: dict = {} @@ -609,9 +621,9 @@ def _extract_repo(text: str) -> str | None: return None m = _GITEA_REPO_RX.search(text) if m: - return m.group(1) + return _clean_repo(m.group(1)) m = _REPO_FALLBACK_RX.search(text) - return m.group(1) if m else None + return _clean_repo(m.group(1)) if m else None def konzept_of(task_id: str) -> dict: