Skip to content

chore: sync workflow templates#271

Closed
stranske wants to merge 1 commit intomainfrom
sync/workflows-06f9a2f6b15a
Closed

chore: sync workflow templates#271
stranske wants to merge 1 commit intomainfrom
sync/workflows-06f9a2f6b15a

Conversation

@stranske
Copy link
Copy Markdown
Owner

Sync Summary

Files Updated

  • agents-keepalive-loop.yml: Keepalive loop - continues agent work until tasks complete (deprecated; replaced by agents-81-gate-followups.yml, removal no earlier than 2026-02-15)
  • agents-auto-pilot.yml: Auto-pilot - end-to-end automation orchestrator (format → optimize → agent → verify)
  • keepalive_loop.js: Core keepalive loop logic

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: 06f9a2f6b15a

Changes synced from sync-manifest.yml
Copilot AI review requested due to automatic review settings February 26, 2026 18:26
@stranske stranske added sync Automated sync from Workflows automated Automated sync from Workflows labels Feb 26, 2026
@agents-workflows-bot
Copy link
Copy Markdown
Contributor

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

@agents-workflows-bot
Copy link
Copy Markdown
Contributor

agents-workflows-bot bot commented Feb 26, 2026

🤖 Keepalive Loop Status

PR #271 | 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/7 complete
Timeout 45 min (default)
Timeout usage 9m elapsed (21%, 36m 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). |

@agents-workflows-bot
Copy link
Copy Markdown
Contributor

agents-workflows-bot bot commented Feb 26, 2026

Keepalive Work Log (click to expand)
# Time (UTC) Agent Action Result Files Tasks Progress Commit Gate
0 2026-02-26 18:27:18 Codex wait (missing-agent-label-transient) skipped 0 0/7
0 2026-02-26 18:28:39 Codex wait (missing-agent-label-transient) skipped 0 0/7 cancelled
0 2026-02-26 18:35:49 Codex wait (missing-agent-label-transient) skipped 0 0/7 success

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Syncs GitHub Actions workflow templates and keepalive loop logic from the upstream workflows repository, updating automation behavior for agent orchestration and progress tracking.

Changes:

  • Adds the progress-review job as a dependency of the keepalive summary job.
  • Improves auto-pilot belt-dispatch reliability by retrying dispatches and attempting re-dispatch during branch-creation backoff.
  • Updates keepalive loop summary logic to reset rounds_without_task_completion after a review action.

Reviewed changes

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

File Description
.github/workflows/agents-keepalive-loop.yml Wires progress-review into the keepalive workflow’s summary stage.
.github/workflows/agents-auto-pilot.yml Adds dispatch retry/verification logic and re-dispatch checks during branch creation backoff.
.github/scripts/keepalive_loop.js Resets the “no progress rounds” counter after a review to allow the agent to run next iteration.

Comment on lines 858 to +862
needs:
- evaluate
- run-codex
- run-claude
- progress-review
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

summary now declares needs: progress-review, but progress-review only runs when needs.evaluate.outputs.action == 'review'. When the action is run/fix/conflict, progress-review will be skipped and GitHub will skip summary as well (job-level if: always() does not override a skipped dependency). This will prevent keepalive summaries/state updates on normal agent runs. Make progress-review always complete successfully (move the conditional to steps) or remove it from summary.needs and fetch review outputs conditionally.

Copilot uses AI. Check for mistakes.
Comment on lines +1936 to +1938
const recentRuns = runs.workflow_runs.filter(
r => new Date(r.created_at) >= dispatchedAt
);
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

The post-dispatch verification uses created_at >= dispatchedAt (runner clock) and only checks for any queued/in_progress run. This can produce false negatives (clock skew or GitHub timestamp lag) and false positives (matching a different workflow run created after dispatchedAt). Filter more defensively (e.g., allow a small negative skew window and require event == 'workflow_dispatch' and head_branch == baseBranch), so dispatchSucceeded reflects the run you just dispatched.

Suggested change
const recentRuns = runs.workflow_runs.filter(
r => new Date(r.created_at) >= dispatchedAt
);
const skewMs = 5000; // allow small negative skew / timestamp lag
const skewedDispatchedAt = new Date(dispatchedAt.getTime() - skewMs);
const baseBranch =
(context.payload.pull_request && context.payload.pull_request.base && context.payload.pull_request.base.ref) ||
(context.ref ? context.ref.replace('refs/heads/', '') : 'main');
const recentRuns = runs.workflow_runs.filter(r => {
const createdAt = new Date(r.created_at);
const createdAfterDispatch = createdAt >= skewedDispatchedAt;
const isWorkflowDispatch = r.event === 'workflow_dispatch';
const matchesBranch = r.head_branch === baseBranch;
return createdAfterDispatch && isWorkflowDispatch && matchesBranch;
});

Copilot uses AI. Check for mistakes.
Comment on lines +2379 to +2393
const { data: runs } = await withRetry((client) =>
client.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'agents-71-codex-belt-dispatcher.yml',
per_page: 10,
})
);
const cutoff = new Date(Date.now() - 30 * 60 * 1000);
const recentRuns = runs.workflow_runs.filter(
r => new Date(r.created_at) >= cutoff
);
const alive = recentRuns.find(
r => r.status === 'queued' || r.status === 'in_progress'
);
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

The re-dispatch guard treats any recent belt-dispatcher run in queued/in_progress as “alive”, without confirming it corresponds to this issue/dispatch (no event/head_branch/time correlation). If another issue has an active dispatcher run, this issue may never re-dispatch and will keep backing off. Tighten the “alive” check (at least event === 'workflow_dispatch' and expected ref/branch) or incorporate issue-specific correlation before skipping re-dispatch.

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