From e62548a22e45f3ecf8d1fcb096e093c6130c5306 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 2b9a6c8a22719c8dd5177766b0db29f40d4f7847 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 e034a075092a60bc5ca4c618751fdcc937b94a19 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 27d6fc01fc50bc607efb89fb5c1055353f766a24 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 869cb2f197e2d83c62b6046eb02b28988465b125 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 ab564741f48883aef65089500487198dc138c42c 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)