From 782936bae4ca7f6097d66ea94e99e5d76bb3fc86 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:39:45 -0700 Subject: [PATCH 1/6] ci: trigger runner From 72c1d4a945d59b620852b03a07e214eb67a58f36 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:48:35 -0700 Subject: [PATCH 2/6] ci: enable forgejo actions From 2bf73bbd44ee64bb98eb41ce23dcb857baa8784a Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:54:27 -0700 Subject: [PATCH 3/6] ci: re-trigger after actions enabled From 5939ae88eba4c1aee307772ade8842a5b424abab Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:36:50 -0700 Subject: [PATCH 4/6] ci: install libsqlcipher-dev before pip install --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef6c962..f92a189 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install system dependencies + run: sudo apt-get install -y libsqlcipher-dev + - name: Set up Python uses: actions/setup-python@v5 with: From 4a996c262880b6cebc9b3b98d2203f9d7041407f Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:37:46 -0700 Subject: [PATCH 5/6] ci: apt-get update before installing libsqlcipher-dev --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f92a189..f956e6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - name: Install system dependencies - run: sudo apt-get install -y libsqlcipher-dev + run: sudo apt-get update -q && sudo apt-get install -y libsqlcipher-dev - name: Set up Python uses: actions/setup-python@v5 From 971336841f971549ed23bbd875cefff89cdc3668 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:43:27 -0700 Subject: [PATCH 6/6] fix: _trim_to_letter_end matches full name when no profile set When _profile is None the fallback pattern \w+ only matched the first word of a two-word sign-off (e.g. 'Alex' from 'Alex Rivera'), silently dropping the last name. Switch fallback to \w+(?:\s+\w+)? so a full first+last sign-off is preserved in no-config environments (CI, first run). --- scripts/generate_cover_letter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_cover_letter.py b/scripts/generate_cover_letter.py index 6fe018a..0e965bf 100644 --- a/scripts/generate_cover_letter.py +++ b/scripts/generate_cover_letter.py @@ -221,7 +221,7 @@ def _trim_to_letter_end(text: str) -> str: candidate_first = (_profile.name.split()[0] if _profile else "").strip() pattern = ( r'(?:Warm regards|Sincerely|Best regards|Kind regards|Thank you)[,.]?\s*\n+\s*' - + (re.escape(candidate_first) if candidate_first else r'\w+') + + (re.escape(candidate_first) if candidate_first else r'\w+(?:\s+\w+)?') + r'\b' ) m = re.search(pattern, text, re.IGNORECASE)