Conversation
Automated sync from stranske/Workflows Template hash: 23b44c982516 Changes synced from sync-manifest.yml
🤖 Keepalive Loop StatusPR #617 | Agent: Codex | Iteration 0/5 Current State
🔍 Failure Classification| Error type | infrastructure | |
Keepalive Work Log (click to expand)
|
There was a problem hiding this comment.
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. |
| 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)) | ||
|
|
||
|
|
There was a problem hiding this comment.
_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).
| - name: Check PR is merged | ||
| id: check-merged | ||
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 | ||
| uses: actions/github-script@v9 |
There was a problem hiding this comment.
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.
| uses: actions/github-script@v9 | |
| uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v9 |
| - name: Checkout repository | ||
| if: steps.check-merged.outputs.merged == 'true' | ||
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | ||
| uses: actions/checkout@v6 |
There was a problem hiding this comment.
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.
| uses: actions/checkout@v6 | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v6 |
| - name: Set up Python | ||
| if: steps.check-merged.outputs.merged == 'true' | ||
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 | ||
| uses: actions/setup-python@v6 |
There was a problem hiding this comment.
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.
| uses: actions/setup-python@v6 | |
| uses: actions/setup-python@42375524ea2abfc90f3a8a0f48800272c7bb4b67 # v6 |
| - 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 |
There was a problem hiding this comment.
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.
Sync Summary
Files Updated
Files Skipped
Review Checklist
Source: stranske/Workflows
Source SHA:
7914b54949861a3745897e978f01ffa8aa652142Template hash:
23b44c982516Sync branch:
sync/workflows-23b44c982516Consumer repo:
stranske/TemplateManifest:
.github/sync-manifest.yml