From 73d763046d6ee68b799e647fc1667d0fc107deee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 24 Mar 2026 22:39:48 +0000 Subject: [PATCH] chore: sync workflow templates from Workflows repo Automated sync from stranske/Workflows Template hash: 43abb0f65dff Changes synced from sync-manifest.yml --- .../workflows/maint-76-claude-code-review.yml | 2 +- scripts/langchain/followup_issue_generator.py | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maint-76-claude-code-review.yml b/.github/workflows/maint-76-claude-code-review.yml index 4b63894f..9fa8c73c 100644 --- a/.github/workflows/maint-76-claude-code-review.yml +++ b/.github/workflows/maint-76-claude-code-review.yml @@ -188,7 +188,7 @@ jobs: - name: Run Claude Code Review id: claude continue-on-error: true - uses: anthropics/claude-code-action@220272d38887a1caed373da96a9ffdb0919c26cc + uses: anthropics/claude-code-action@220272d38887a1caed373da96a9ffdb0919c26cc # v1 with: claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} allowed_bots: '*' diff --git a/scripts/langchain/followup_issue_generator.py b/scripts/langchain/followup_issue_generator.py index 52b27bcc..a3ee622d 100755 --- a/scripts/langchain/followup_issue_generator.py +++ b/scripts/langchain/followup_issue_generator.py @@ -531,6 +531,7 @@ def extract_verification_data(comment_body: str) -> VerificationData: # Extract provider verdicts (from comparison reports) lines = comment_body.splitlines() in_provider_table = False + provider_summary_concerns: list[str] = [] for line in lines: if re.search( r"\|\s*Provider\s*\|\s*Model\s*\|\s*Verdict\s*\|\s*Confidence", @@ -556,11 +557,17 @@ def extract_verification_data(comment_body: str) -> VerificationData: verdict = cols[2] confidence_text = cols[3] confidence = _parse_confidence_value(confidence_text) - data.provider_verdicts[provider] = { + summary_text = cols[4].strip() if len(cols) >= 5 else "" + entry = { "model": model, "verdict": verdict.strip(), "confidence": confidence, } + if summary_text: + entry["summary"] = summary_text + if verdict.strip().upper() != "PASS": + provider_summary_concerns.append(summary_text) + data.provider_verdicts[provider] = entry # Extract verdicts from provider detail sections as a fallback. current_provider = None @@ -665,6 +672,8 @@ def extract_verification_data(comment_body: str) -> VerificationData: if concern and len(concern) > 15: all_concerns.append(concern) + all_concerns.extend(provider_summary_concerns) + # Deduplicate while preserving order, and filter out spurious entries seen: set[str] = set() data.concerns = [] @@ -1475,6 +1484,33 @@ def _generate_without_llm( body_parts.append(f"- {concern}") body_parts.extend(["", ""]) + body_parts.extend( + [ + "", + "## verify:compare Analysis", + "", + f"- Resolved verdict: {verdict}", + ] + ) + for concern in blocking_concerns[:10]: + body_parts.append(f"- Concern: {concern}") + for concern in advisory_concerns[:10]: + body_parts.append(f"- Advisory: {concern}") + + body_parts.extend( + [ + "", + "## verify:compare Evidence", + "", + ] + ) + for provider, data in verification_data.provider_verdicts.items(): + evidence = f"- {provider}: {data.get('verdict', 'Unknown')} @ {data.get('confidence', 0)}%" + summary = data.get("summary") + if summary: + evidence += f" ({summary})" + body_parts.append(evidence) + # Add background context in collapsible section body_parts.extend( [