Skip to content

chore: sync workflow templates - #292

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

chore: sync workflow templates#292
stranske wants to merge 1 commit into
mainfrom
sync/workflows-d30555b90dd4

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-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

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
Manifest: .github/sync-manifest.yml

Automated sync from stranske/Workflows
Template hash: d30555b90dd4

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

stranske-automation-bot commented Apr 26, 2026

Copy link
Copy Markdown
Collaborator

🤖 Keepalive Loop Status

PR #292 | 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/16 complete
Timeout 45 min (default)
Timeout usage 5m elapsed (12%, 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-automation-bot

stranske-automation-bot commented Apr 26, 2026

Copy link
Copy Markdown
Collaborator
Keepalive Work Log (click to expand)
# Time (UTC) Agent Action Result Files Tasks Progress Commit Gate
0 2026-04-26 14:11:05 Codex wait (missing-agent-label-transient) skipped 0 0/16
0 2026-04-26 14:12:17 Codex wait (missing-agent-label-transient) skipped 0 0/16 cancelled
0 2026-04-26 14:13:40 Codex wait (missing-agent-label-transient) skipped 0 0/16 success

@agents-workflows-bot

Copy link
Copy Markdown
Contributor

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

Copilot AI left a comment

Copy link
Copy Markdown

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, expanding the weekly metrics pipeline with a download/unzip manifest contract and richer telemetry (terminal disposition + verifier model compatibility, bot-comment auth evidence), plus a few workflow/script robustness tweaks.

Changes:

  • Add artifact download manifest generation/updates in agents-weekly-metrics and emit a JSON summary contract alongside the markdown report.
  • Enrich metrics aggregation and terminal-disposition coverage with artifact/source attribution and verifier model compatibility checks.
  • Extend bot-comment handler + auth coverage telemetry and refine keepalive actionable checklist counting.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/aggregate_agent_metrics.py Adds metric source attribution, parse-error details, artifact download contract ingestion, and JSON summary contract output.
.github/workflows/agents-weekly-metrics.yml Initializes/records/finalizes artifact download manifest during downloads; uploads JSON summary + manifest artifacts.
.github/workflows/agents-bot-comment-handler.yml Exposes skip_reason output and uploads a wrapper terminal disposition artifact for observability.
.github/workflows/agents-81-gate-followups.yml Uses compact jq output (jq -cn) for emitted keepalive metrics JSON.
.github/scripts/weekly_metrics_download_manifest.js New CLI to create/update/finalize a machine-readable download/unzip manifest plus markdown rendering.
.github/scripts/weekly_metrics_artifacts.js Extends selection report with missing/priority family status summaries (used by downstream coverage tooling).
.github/scripts/terminal_disposition_coverage.js Adds verifier model compatibility reporting and richer artifact selection normalization/markdown output.
.github/scripts/terminal_disposition.js Extends terminal disposition normalization to include model + selection metadata fields.
.github/scripts/keepalive_loop.js Introduces “actionable” checkbox counting (filters status/placeholder items) and adjusts reconciliation triggering.
.github/scripts/coverage_monitor_summary.js New weekly coverage monitor summary contract combining terminal + bot-auth monitor outputs.
.github/scripts/bot_comment_auth_coverage.js Tracks reusable invocation expectations/reasons and reports skipped vs missing organic evidence requirements.
.github/scripts/agents_pr_meta_update_body.js Updates PR preamble generation to treat campaign issues differently (adds metadata marker + avoids “Closes” for campaign issues).

status: selectedCount > 0 ? 'selected' : (candidateCount > 0 ? 'available' : 'missing'),
candidate_count: candidateCount,
selected_count: selectedCount,
latest_candidate: selectedArtifact ? normalizeSelectionArtifact(selectedArtifact) : null,

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.

In the fallback path (when priority_family_statuses is missing), latest_candidate is set to the selected artifact. This makes latest_candidate duplicate selected_artifact and misrepresents the “latest candidate” concept when selection metadata is incomplete. Consider leaving latest_candidate null (or deriving it from candidate artifacts if available) and only populating selected_artifact from selectedArtifacts.

Suggested change
latest_candidate: selectedArtifact ? normalizeSelectionArtifact(selectedArtifact) : null,
latest_candidate: null,

Copilot uses AI. Check for mistakes.
Comment on lines +1181 to +1251
const STATUS_METRIC_LABELS = new Set([
'updated',
'repos checked',
'open sync prs',
'open dependabot prs',
'active review threads queued',
'items needing local codex',
'actionable local codex items',
'claimable local codex items',
'source-fixed candidates',
'superseded sync candidates',
'finished local results without published source changes',
'claimed local codex items',
'next claim lease expires',
]);

function normaliseChecklistText(value) {
return normaliseTaskText(value)
.replace(/`([^`]+)`/g, '$1')
.replace(/[*_~]/g, '')
.trim()
.toLowerCase();
}

function isStatusMetricChecklistItem(text) {
const normalized = normaliseChecklistText(text);
if (!normalized || !normalized.includes(':')) {
return false;
}
const [labelRaw, ...valueParts] = normalized.split(':');
const label = labelRaw.trim();
const value = valueParts.join(':').trim();
if (!label || !value) {
return false;
}
if (!STATUS_METRIC_LABELS.has(label)) {
return false;
}
return true;
}

function isPlaceholderChecklistItem(text) {
const normalized = normaliseChecklistText(text);
if (!normalized) {
return true;
}
if (normalized.includes('section missing from source issue')) {
return true;
}
if (/^no tasks defined\.?$/.test(normalized)) {
return true;
}
if (/^no acceptance criteria defined\.?$/.test(normalized)) {
return true;
}
return false;
}

function isActionableChecklistItemText(text) {
return !isStatusMetricChecklistItem(text) && !isPlaceholderChecklistItem(text);
}

function toActionableChecklistCounts(markdown) {
const actionable = extractChecklistItems(markdown).filter((item) => isActionableChecklistItemText(item.text));
const checked = actionable.filter((item) => item.checked).length;
const total = actionable.length;
return {
total,
checked,
unchecked: Math.max(0, total - checked),
};

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.

The new checklist filtering/counting logic (STATUS_METRIC_LABELS, placeholder detection, and toActionableChecklistCounts) changes how keepalive determines remaining work and when to flag reconciliation, but there are no unit tests covering these new rules. Add tests that verify status-metric and placeholder checkboxes are excluded and that only actionable items affect totals/unchecked counts.

Copilot uses AI. Check for mistakes.
Comment on lines +126 to +129
if (artifactDir) {
artifact.artifact_dir = artifactDir;
artifact.unzip.path = artifactDir;
}

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.

updateArtifactResult assigns artifact.unzip.path before ensuring artifact.unzip exists. If a manifest is missing the unzip object (e.g., older manifest or manually edited), this will throw a TypeError and prevent recording download results. Initialize artifact.unzip (and artifact.download) to an object when absent before mutating nested fields.

Copilot uses AI. Check for mistakes.
@stranske

Copy link
Copy Markdown
Owner Author

Superseded by merged latest Workflows sync PR #324 from branch sync/workflows-3e5a27aaceee. Closing this older sync/workflows-* lane without deleting the branch.

@stranske stranske closed this Apr 27, 2026
@agents-workflows-bot
agents-workflows-bot Bot deleted the sync/workflows-d30555b90dd4 branch May 14, 2026 19:35
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.

3 participants