Skip to content

chore: sync workflow templates - #617

Closed
stranske wants to merge 1 commit into
mainfrom
sync/workflows-23b44c982516
Closed

stranske wants to merge 1 commit into
mainfrom
sync/workflows-23b44c982516

Conversation

@stranske

Copy link
Copy Markdown
Owner

Sync Summary

Files Updated

  • agents-81-gate-followups.yml: Gate followups hub - consolidates keepalive and autofix followups
  • agents-bot-comment-handler.yml: Bot comment handler - dispatches agents to address bot review comments (deprecated; replaced by agents-80-pr-event-hub.yml, removal no earlier than 2026-02-15)
  • agents-verify-to-new-pr.yml: Verify to new PR - creates follow-up issue and immediately dispatches auto-pilot to prepare a replacement PR (bridge inlined)
  • agents-weekly-metrics.yml: Weekly metrics - aggregates auto-pilot, keepalive, autofix and verifier metrics into summary reports
  • aggregate_agent_metrics.py: Aggregates downloaded weekly agent metrics - required by agents-weekly-metrics.yml
  • terminal_disposition.js: Machine-readable terminal disposition records and source summaries
  • terminal_disposition_coverage.js: Warning-only terminal disposition source coverage preflight
  • bot_comment_auth_coverage.js: Warning-only bot-comment App auth coverage preflight
  • coverage_monitor_summary.js: Machine-readable weekly coverage monitor checkpoint
  • weekly_metrics_artifacts.js: Bounded weekly metrics artifact selection contract
  • weekly_metrics_download_manifest.js: Weekly metrics artifact download and extraction manifest contract
  • keepalive_loop.js: Core keepalive loop logic
  • agents_pr_meta_update_body.js: Updates PR body with agent metadata
  • setup-api-client/ (1 files): Unified API client setup - installs @octokit deps and exports all load balancer tokens

Files Skipped

  • pr-00-gate.yml: File exists and sync_mode is create_only
  • ci.yml: File exists and sync_mode is create_only
  • dependabot.yml: File exists and sync_mode is create_only
  • llm_slots.json: None

Review Checklist

  • CI passes with updated workflows
  • No repo-specific customizations were overwritten

Source: stranske/Workflows
Source SHA: 7914b54949861a3745897e978f01ffa8aa652142
Template hash: 23b44c982516
Sync branch: sync/workflows-23b44c982516
Consumer repo: stranske/Template
Manifest: .github/sync-manifest.yml

Automated sync from stranske/Workflows
Template hash: 23b44c982516

Changes synced from sync-manifest.yml
Copilot AI review requested due to automatic review settings April 26, 2026 17:49
@stranske stranske added sync Automated sync from Workflows automated Automated sync from Workflows labels Apr 26, 2026
@stranske-keepalive

Copy link
Copy Markdown
Contributor

⚠️ Action Required: Unable to determine source issue for PR #617. The PR title, branch name, or body must contain the issue number (e.g. #123, branch: issue-123, or the hidden marker ).

@stranske-keepalive

stranske-keepalive Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

🤖 Keepalive Loop Status

PR #617 | Agent: Codex | Iteration 0/5

Current State

Metric Value
Iteration progress [----------] 0/5
Action wait (missing-agent-label)
Disposition skipped (transient)
Gate success
Tasks 0/18 complete
Timeout 45 min (default)
Timeout usage 5m elapsed (13%, 40m remaining)
Keepalive ❌ disabled
Autofix ❌ disabled

🔍 Failure Classification

| Error type | infrastructure |
| Error category | resource |
| Suggested recovery | Confirm the referenced resource exists (repo, PR, branch, workflow, or file). |

@stranske-keepalive

stranske-keepalive Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor
Keepalive Work Log (click to expand)
# Time (UTC) Agent Action Result Files Tasks Progress Commit Gate
0 2026-04-26 17:54:16 Codex wait (missing-agent-label-transient) skipped 0 0/18 cancelled
0 2026-04-26 17:55:38 Codex wait (missing-agent-label-transient) skipped 0 0/18 success

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Syncs workflow templates from stranske/Workflows into this consumer repo, primarily expanding weekly metrics/coverage telemetry and standardizing terminal-disposition + follow-up ledger reporting across workflows and scripts.

Changes:

  • Extend weekly metrics collection with an artifact download manifest, richer aggregation (Markdown + JSON contracts), and improved parse-error/source attribution.
  • Add/expand terminal-disposition coverage checks (including verifier model compatibility) and emit additional terminal-disposition artifacts from workflows.
  • Enhance keepalive + PR-metadata automation to better interpret actionable checklist items and campaign-linked issues.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
scripts/aggregate_agent_metrics.py Adds artifact/source attribution, parse error detail tracking, and emits a JSON summary contract alongside Markdown.
.github/workflows/agents-weekly-metrics.yml Generates artifact download manifest + uploads JSON artifacts for weekly metrics.
.github/workflows/agents-verify-to-new-pr.yml Emits verifier follow-up ledger NDJSON + label tweaks; also changes several actions to floating tags.
.github/workflows/agents-bot-comment-handler.yml Records wrapper terminal disposition + reports skip reasons for coverage/telemetry.
.github/workflows/agents-81-gate-followups.yml Switches jq invocation to compact output for metrics JSON.
.github/scripts/weekly_metrics_download_manifest.js New helper to create/update/finalize an artifact download manifest (JSON + Markdown).
.github/scripts/weekly_metrics_artifacts.js Expands artifact selection report with priority-family status and missing-family reporting.
.github/scripts/terminal_disposition_coverage.js Adds verifier model compatibility checks + richer artifact-selection normalization/markdown output.
.github/scripts/terminal_disposition.js Adds verifier follow-up ledger/policy normalization and extends terminal disposition fields.
.github/scripts/keepalive_loop.js Counts only “actionable” checklist items (filters placeholders/status metrics) and suppresses some missing-agent comments.
.github/scripts/coverage_monitor_summary.js New weekly coverage monitor summary contract generator (JSON + Markdown).
.github/scripts/bot_comment_auth_coverage.js Improves organic evidence reporting with skipped/missing requirement detail.
.github/scripts/agents_pr_meta_update_body.js Adds campaign-aware “Closes/Related” issue preamble behavior.
.github/actions/setup-api-client/action.yml Exposes a redacted “setup contract” output describing auth modes and dependency readiness.

Comment on lines +176 to +199
def _append_parse_error_detail(
details: list[ParseErrorDetail],
detail: ParseErrorDetail,
*,
detail_limit: int = _MAX_STORED_PARSE_ERROR_DETAILS,
) -> None:
if len(details) < detail_limit:
details.append(detail)
return

for index, existing in enumerate(details):
if (
existing.path == detail.path
and existing.artifact == detail.artifact
and existing.artifact_family == detail.artifact_family
and existing.reason == detail.reason
and existing.line is None
):
details[index] = replace(existing, count=existing.count + detail.count)
return

details.append(replace(detail, line=None))


Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_append_parse_error_detail() does not actually enforce detail_limit once the list reaches the limit: when len(details) >= detail_limit and the new error doesn't match an existing aggregated entry, it appends another item, allowing the list to grow without bound. Adjust the overflow behavior so the list never exceeds detail_limit (e.g., only increment an existing aggregated bucket or maintain a single "overflow" counter/detail).

Copilot uses AI. Check for mistakes.
- name: Check PR is merged
id: check-merged
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
uses: actions/github-script@v9

Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This workflow switches from pinning actions to a full commit SHA to using the floating @v9 tag. To match the repo's supply-chain hardening used elsewhere, pin actions/github-script to a specific commit SHA (with an inline # v9 comment) instead of a mutable tag.

Suggested change
uses: actions/github-script@v9
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v9

Copilot uses AI. Check for mistakes.
- name: Checkout repository
if: steps.check-merged.outputs.merged == 'true'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@v6

Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/checkout@v6 is a floating tag and weakens workflow supply-chain integrity compared to the SHA-pinned actions used in most other workflows in this repo. Pin this to a full commit SHA (with an inline major-version comment) to prevent unexpected upstream changes.

Suggested change
uses: actions/checkout@v6
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v6

Copilot uses AI. Check for mistakes.
- name: Set up Python
if: steps.check-merged.outputs.merged == 'true'
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
uses: actions/setup-python@v6

Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/setup-python@v6 is a floating tag. Pin it to a specific commit SHA (with a # v6 comment) for reproducibility and to align with the SHA-pinning approach used by other workflows here.

Suggested change
uses: actions/setup-python@v6
uses: actions/setup-python@42375524ea2abfc90f3a8a0f48800272c7bb4b67 # v6

Copilot uses AI. Check for mistakes.
Comment on lines 1007 to 1016
- name: Upload terminal disposition artifact
if: always() && steps.check-merged.outputs.merged == 'true'
uses: actions/upload-artifact@65ecb0ca2d3e252f7b82842cd0489c883189f7d0 # v7
uses: actions/upload-artifact@v7
with:
name: verifier-terminal-disposition-${{ github.run_id }}
path: |
agent-metrics/verifier-terminal-disposition.ndjson
agent-metrics/verifier-followup-ledger.ndjson
terminal-disposition-summary.md
retention-days: 14

Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/upload-artifact@v7 is a floating tag. Pin this action to a full commit SHA (with an inline # v7 comment) to keep uploads reproducible and reduce supply-chain risk.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated Automated sync from Workflows sync Automated sync from Workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants