From cd6a496e4a113e4d05bae7f2210cdc3564111cb3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 29 Apr 2026 22:58:45 +0000 Subject: [PATCH] fix(ci): gate extract-claude-lessons on head branch, not PR author MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous filter required the PR's user.login to contain 'claude', but Claude Code on the web pushes to a claude/* branch and a human opens the PR — so user.login is the human and the workflow has never fired. Switch to startsWith(head.ref, 'claude/'), which matches the actual signal of Claude involvement. https://claude.ai/code/session_01M9a6hQdzjmLh7rL6ak1PLk --- .github/workflows/extract-claude-lessons.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/extract-claude-lessons.yml b/.github/workflows/extract-claude-lessons.yml index 98a1da30..e0a7cbf0 100644 --- a/.github/workflows/extract-claude-lessons.yml +++ b/.github/workflows/extract-claude-lessons.yml @@ -25,9 +25,13 @@ permissions: jobs: extract-lessons: + # Gate on the head branch name, not user.login: in this repo Claude Code + # pushes to a `claude/*` branch and a human opens the PR, so the PR's + # `user.login` never contains 'claude'. The branch prefix is the reliable + # signal that Claude touched the PR. if: >- github.event.pull_request.merged == true - && contains(github.event.pull_request.user.login, 'claude') + && startsWith(github.event.pull_request.head.ref, 'claude/') && !startsWith(github.event.pull_request.title, 'chore(claude): learn from') runs-on: ubuntu-latest timeout-minutes: 20