Skip to content

ops: agent monikers (@heyVern / @sparkFlux) + high-perf continuous-ops rewrite - #161

Merged
timerloggedout-spec merged 2 commits into
masterfrom
ops/monikers-and-continuous-ops-perf
Aug 11, 2026
Merged

timerloggedout-spec merged 2 commits into
masterfrom
ops/monikers-and-continuous-ops-perf

Conversation

@timerloggedout-spec

@timerloggedout-spec timerloggedout-spec commented Aug 11, 2026 •

Copy link
Copy Markdown
Owner

Summary

OPERATOR rewrite addressing #160 review (CHANGES_REQUESTED) and #159 4-day stall bug under high-performance constraints.

Monikers (creative, still callable)

Role Moniker Still works
Jules @HeyVern @jules
Gemini CLI @sparkflux @gemini-cli
CodeRabbit @codehound @coderabbitai
Devin @devinForge app
Continuous-ops @opsSweep GHA
OPERATOR @archW1z human

SSOT: docs/ops/AGENT-MONIKERS.md

Continuous-ops performance / correctness fixes

  1. Never treat missing agent activity as Infinity → no more "4 days inactive" on brand-new PRs (root of Timely Response Failure #159 bug report).
  2. Exclude <!-- continuous-agent-ops --> self-nudges from loop + approval detectors (stops infinite re-nudge).
  3. Add checks: read + statuses: read so failing-check detection works with GITHUB_TOKEN.
  4. Paginate checks; count timed_out / cancelled / action_required.
  5. Cron hourly; debounce 45m; stale window 2h (high-perf).
  6. Ping @heyVern @jules so Jules still fires while moniker lands.

Gemini dispatch

  • Accepts @gemini-cli and @sparkFlux prefixes for /review, /triage, invoke.

Supersedes / coordinates

Fixes intent of #159
Addresses review on #160

Signed-off-by: Grok (OPERATOR) session-2026-08-10


Open in Devin Review

Summary by CodeRabbit

  • New Features

    • Automated agent operations now run hourly and identify additional issues, including failed checks, approval requests, stalled conversations, and empty changes.
    • Added on-demand agent triggers with case-insensitive aliases for review and invocation requests.
    • Improved automated notifications with clearer remediation guidance and agent identification.
  • Documentation

    • Added centralized guidance for agent names, triggers, roles, aliases, and safety practices.

…stall bug)

- Introduce creative monikers SSOT (docs/ops/AGENT-MONIKERS.md)
- @jules → @HeyVern (primary ping)
- @gemini-cli remains callable; alias @sparkflux also accepted
- Per-role monikers for CodeRabbit, Devin, continuous-ops, OPERATOR
- Rewrite agent-continuous-ops: no false 4-day on brand-new PRs,
  exclude self marker from loop/approval detectors, checks:read,
  tighter high-performance thresholds

Signed-off-by: Grok (OPERATOR) session-2026-08-10
@blocksorg

blocksorg Bot commented Aug 11, 2026

Copy link
Copy Markdown

Mention Blocks like a regular teammate with your question or request:

@blocks review this pull request
@blocks make the following changes ...
@blocks create an issue from what was mentioned in the following comment ...
@blocks explain the following code ...
@blocks are there any security or performance concerns?

Run @blocks /help for more information.

Workspace settings | Disable this message

@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
termux-monorepo Ready Ready Preview, v0 Aug 11, 2026 5:56am

@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request expands continuous agent sweeps, adds SHA-aware debounce and PR-state detection, updates Jules lane metadata, documents agent monikers, and adds case-insensitive Gemini trigger aliases.

Changes

Agent orchestration

Layer / File(s) Summary
Continuous sweep detection and nudging
.github/workflows/agent-continuous-ops.yml
The workflow runs hourly, checks additional PR states, excludes self-nudges from activity analysis, applies SHA-aware debounce, and sends updated Jules remediation prompts.
Agent monikers and Jules lane metadata
docs/ops/AGENT-MONIKERS.md, .github/workflows/agent-review-auto-jules.yml
The moniker contract defines agent names, triggers, mappings, and safety rules. The Jules workflow uses the heyVern lane and archW1z attribution.
Gemini trigger alias handling
.github/workflows/gemini-dispatch.yml
Gemini dispatch accepts case-insensitive sparkFlux aliases, normalizes command parsing, updates prior-PR matching, and revises acknowledgments.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ScheduledSweep
  participant GitHubPRAPI
  participant Jules
  ScheduledSweep->>GitHubPRAPI: Read PR state, checks, comments, and changed files
  GitHubPRAPI-->>ScheduledSweep: Return sweep conditions
  ScheduledSweep->>Jules: Post `@jules` remediation nudge
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: agent monikers and the continuous-ops rewrite.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ops/monikers-and-continuous-ops-perf

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gitar-bot

gitar-bot Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Gitar is working

Gitar

Copy link
Copy Markdown
Owner Author

OPERATOR note: @gemini-cli remains fully callable. Alias @sparkFlux is additive.

Once checks clear, prefer squash or merge of this over #160 (which carries the Infinity-age stall bug).

Signed-off-by: Grok (OPERATOR)

@github-actions

Copy link
Copy Markdown
Contributor

@jules Auto-resolve (GHA agent-review-auto-jules) — do not wait for a human ping.
Bot feedback from coderabbitai[bot] on PR #161 (branch ops/monikers-and-continuous-ops-perf).

Feedback excerpt

<!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: rate limited by coderabbit.ai -->

> [!WARNING]
> ## Review limit reached
> 
> `@timerloggedout-spec`, you've reached your PR review limit, so we couldn't start this review.
> 
> **Next review available in:** **4 minutes**
> 
> You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.
> 
> <details>
> <summary>How can I continue?</summary>
> 
> After more reviews become available, a review can be triggered using the `@coderabbitai review` command as a PR comment. Alternatively, push new commits to this PR.
> 
> To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.
> 
> </details>
> 
> 
> <details>
> <summary>How do review limits work?</summary>
> 
> CodeRabbit enforces per-developer PR review limits for each organization. Most developers re

Instructions

  1. Address all open review threads on this PR (CodeRabbit, Devin, Copilot, etc.).
  2. Prefer minimal diffs; preserve Sentinel 0o600/0o700 if those files are touched.
  3. Push commits to branch ops/monikers-and-continuous-ops-perf. Do not retarget away from the PR base without cause.
  4. If conflicts with base exist, resolve them.
  5. Skip pure nits only if they conflict with security/gates; otherwise apply autofixes.
    Agent: Grok orchestration · Profile: https://x.com/grok

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Ops: agent monikers SSOT + continuous-ops stall/check detection rewrite

🐞 Bug fix ✨ Enhancement 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Add SSOT agent monikers and dual-ping compatibility for existing handles.
• Rewrite continuous-ops to avoid false stalls, loops, and missed failing checks.
• Extend Gemini dispatch to accept @sparkFlux alongside @gemini-cli commands.
Diagram

graph TD
  Cron["Scheduled trigger"] --> Ops["agent-continuous-ops.yml"] --> GH[("GitHub API")]
  Review["Bot review event"] --> Auto["agent-review-auto-jules.yml"] --> GH
  User["Maintainer comment"] --> Gemini["gemini-dispatch.yml"] --> GH
  Docs["docs/ops/AGENT-MONIKERS.md"] -.-> Ops
  Docs -.-> Auto
  Docs -.-> Gemini
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use GraphQL for PR + checks aggregation
  • ➕ Fewer API round-trips than REST pagination
  • ➕ Can fetch comments/checks/threads in fewer requests
  • ➖ More complex queries and schemas to maintain
  • ➖ Harder to debug quickly inside github-script
2. Persist sweep state (e.g., issue/PR label or artifact) instead of marker comments
  • ➕ Avoids self-nudge comment noise
  • ➕ More explicit debounce bookkeeping
  • ➖ Requires extra permissions and state lifecycle handling
  • ➖ Labels can be edited manually; artifacts are run-scoped
3. Split continuous-ops into separate workflows (checks vs activity vs conflicts)
  • ➕ Simpler single-responsibility logic per workflow
  • ➕ Independent schedules and timeouts
  • ➖ More moving parts to configure and monitor
  • ➖ Risk of duplicated API calls and race conditions

Recommendation: The PR’s approach (keep one sweep workflow but tighten heuristics and permissions) is the best near-term option: it directly fixes the Infinity-age stall bug, prevents self-feedback loops, and restores failing-check detection without introducing new persistent state. Consider a GraphQL aggregation pass later only if rate-limit pressure becomes a recurring issue.

Files changed (4) +196 / -59

Enhancement (2) +29 / -19
agent-review-auto-jules.ymlPing Jules via moniker while keeping @jules compatibility +9/-9

Ping Jules via moniker while keeping @jules compatibility

• Updates auto-resolve comment text to dual-ping @heyVern and @jules and references the moniker SSOT. Clarifies that API invocation is best-effort while comment ping remains the reliable trigger.

.github/workflows/agent-review-auto-jules.yml

gemini-dispatch.ymlAdd @sparkFlux alias support for Gemini dispatch commands +20/-10

Add @sparkflux alias support for Gemini dispatch commands

• Extends the workflow condition and command parsing to accept @sparkFlux in addition to @gemini-cli, including prefix stripping for additional context. Updates PR discovery hints and the tracking comment to document moniker usage and SSOT location.

.github/workflows/gemini-dispatch.yml

Bug fix (1) +144 / -40
agent-continuous-ops.ymlRewrite continuous-ops sweep logic for correctness and performance +144/-40

Rewrite continuous-ops sweep logic for correctness and performance

• Tightens schedule/debounce windows and adds checks/statuses read permissions. Fixes false 4-day inactivity by not treating missing agent activity as Infinity, excludes self-marker comments from loop/approval detection, paginates check runs, and expands reasons/instructions emitted in nudge comments.

.github/workflows/agent-continuous-ops.yml

Documentation (1) +23 / -0
AGENT-MONIKERS.mdDocument agent monikers single source of truth +23/-0

Document agent monikers single source of truth

• Introduces a moniker table mapping roles to primary handles and backward-compatible call targets. Adds rules for workflow matching and safe usage guidance under high-performance orchestration.

docs/ops/AGENT-MONIKERS.md

@github-actions

Copy link
Copy Markdown
Contributor

head_sha: f1897eb
ready: true
autofix_requested: false
timed_out: false

Peer review gate (ready for second-pass agents)

External reviewers polled: CodeRabbit, Devin, Aikido, Sentry, Copilot.
Autofix (if any) was requested in a separate comment on this SHA.

Peer activity (truncated):

comment @coderabbitai[bot]: <!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- This is an auto-generated comment: rate limi

Downstream: gemini-after-peers. Jules: agent-review-auto-jules.

devin-ai-integration[bot]

This comment was marked as resolved.

@github-actions

Copy link
Copy Markdown
Contributor

🔀 OpenRouter review (cohere/north-mini-code:free)

We have to review the diff. The user says we are a free-tier SECOND-PASS reviewer for termux-monorepo. Target PR #161. Peers already reviewed; Autofix may have applied. Focus: gaps peers missed (security 0o600/0o700, Class 3/4 artifacts, AGENTS.md); residual risks before merge. Do NOT restate every nit.

We need to do a second-pass review focusing on security (0o600/0o700 permissions), Class 3/4 artifacts (what are these?), AGENTS.md compliance, residual risks.

We have a diff showing modifications in GitHub workflows. It includes many improvements but we must check for:

  • Permissions: security 0o600/0o700: in GitHub workflows, there might be file permissions set for secrets? Possibly for token files? Not directly in this diff.

But we should check if there are any files that are being created/modified that need strict permissions.

The diff includes changes in .github/workflows (agent-continuous-ops.yml, agent-review-auto-jules.yml, gemini-dispatch.yml). There might be changes to permissions for checking status (checks: read). Also addition of @HeyVern etc.

But the focus is on security 0o600/0o700, Class 3/4 artifacts, AGENTS.md. So we must check if any artifact produced (like output, or files) that should be Class 1/2? The repository likely has guidelines in AGENTS.md about artifact classification.

We need to review AGENTS.md to see guidelines, but we don't have that file. However, we can infer that the changes mention "No Class 3/4 artifacts" in instructions. Also there is "No secret leaks". So we need to ensure that no secrets are inadvertently in prompts.

The diff has comments on prompts; they've been cleaned.

But we should search for potential exposures: The workflow uses tokens: secrets.OPERATOR_GITHUB_TOKEN, secrets.OPERATOR_TOKEN. That's fine.

But we need to ensure that the comment content does not leak any secrets, like keys. The comments may contain values? It appears not.

But there may be file permission issues: The repository likely uses sentinel files for mode 0o600 (like .gitignore?), but not relevant.

Class 3/4 artifacts are perhaps artifacts generated by CI that have low classification. There's likely a CI step that produces artifacts; not shown in the diff. But this diff only shows workflow modifications; no actual artifact generation.

However, there may be new workflow steps that upload artifacts. Let's check the diff for any "upload-artifact" or "actions/upload-artifact". It doesn't show. So maybe not.

But the user specifically asks to focus on gaps peers missed (security 0o600/0o700, Class 3/4 artifacts, AGENTS.md); residual risks before merge.

Thus we need to examine the diff for any failures related to these items.

Potential issues:

  • The workflow uses GITHUB_TOKEN, OPERATOR_GITHUB_TOKEN, etc. Those are fine.

  • There's mention of "checks: read" permission; that's needed for failing checks detection. Already added.

  • The diff updates the comment messages to include mention of AGENTS.md and AGENT-MONIKERS.md. It includes "Monikers: docs/ops/AGENT-MONIKERS.md · Read AGENTS.md." That's good.

  • It also says "No Class 3/4 artifacts." So perhaps they want to ensure that any uploaded artifacts are appropriate. We need to check if there are any steps that upload artifacts. Let's view the complete workflow files. They are large. Let's open agent-continuous-ops.yml (full diff not visible). We can fetch the actual file? We can't directly call API. But we can reason based on diff.

In diff, the file .github/workflows/agent-continuous-ops.yml has been edited heavily. Let's extract the full file from original or after changes? The diff shows from line numbers. It is a patch. We can reconstruct changes.

But what do we need to check? Possibly there is a step that runs a script or uploads artifact. Let's scan the diff for "upload-artifact", "actions/upload-artifact", "artifact". There is none. So artifact generation is not part of this diff.

We need to review for security misconfiguration: e.g., using "permissions: {}" without proper permissions? The workflow sets "permissions: {}" (line). It also adds "checks: read", "statuses: read". That seems fine.

Also there is a step: "uses: actions/github-script". This uses GITHUB_TOKEN (or OPERATOR token). It's standard.

Now, security 0o600/0o700: Possibly referring to file permissions of secrets or token files. However, GitHub workflow environment might create temporary files with certain permissions. Could the workflow be generating any files? No. So likely not relevant.

But maybe there are actions that generate output with 0o600? But we don't see any.

We need to check the repository's other files changed in this PR. The user says "Target PR #161. Peers already reviewed; Autofix may have applied." So we need to assume that the PR includes many changes besides workflows? The diff only shows these workflow files. So maybe other changes (like code) were autofixed? But they mention "gaps peers missed". Possibly there were other changes not shown in diff but we need to consider.

The diff only shows modifications to these three workflow files. So we need to ensure everything is correct.

We need to do a second-pass focusing on security. Potential risk: The comment includes tokens? Let's search in diff for tokens. There's a mention of OPERATOR_GITHUB_TOKEN, OPERATOR_TOKEN. Those are in env but not printed.

Also there is a comment "No secret leaks." Good.

Class 3/4 artifacts: The comment says "No Class 3/4 artifacts." So maybe we need to ensure that any artifact uploaded is not of class 3/4. If none, fine.

AGENTS.md: The comment includes "Read AGENTS.md." The changes also reference docs/ops/AGENT-MONIKERS.md, but we need to ensure those files exist. Maybe they are missing or not updated. We need to check if AGENTS.md file exists and if it includes security guidelines. But we can't access FS.

We could assume that AGENTS.md is a reference doc describing agent guidelines, including artifact classification, security. The changes mention it. We need to ensure that the reference is correct.

We could search for AGENTS.md in diff to see if any content changed. It appears not; it's just referenced. So perhaps AGENTS.md already exists and covers security guidelines. The peers may have missed ensuring it's up-to-date.

We need to examine if AGENTS.md has proper guidelines for security, and if any changes are needed.

Alternatively, maybe the PR includes changes to AGENTS.md (but not in diff). Actually diff only shows workflow changes. Maybe other changes are separate. But the user says "Do NOT restate every nit." So we can summarize gaps.

Better approach: Summarize potential residual risks:

  • Ensure that the workflow does not unintentionally expose secrets in comment bodies. The diff appears to have sanitized prompts. It removed any mention of secret values. Good.

  • Ensure that the workflow uses secure token handling: Using secrets.OPERATOR_GITHUB_TOKEN and OPERATOR_TOKEN for writing comments; they are used only as env variables and passed as github-token. That's fine.

  • Ensure file permissions: Not applicable.

  • Check that any generated artifacts (if any) are classified correctly. No artifact steps present.

  • Ensure AGENTS.md is referenced correctly and there are no references to insecure patterns. The diff includes "Monikers: docs/ops/AGENT-MONIKERS.md · Read AGENTS.md.", which is appropriate.

  • Ensure any newly added markers (continuous-agent-ops) are not part of sensitive prompts. The marker is used in comments; it's fine.

  • The comment includes "Prefer @HeyVern moniker (Jules still accepts @jules)". That's fine.

  • The workflow includes "checks:read" to detect failing checks, but also includes "statuses: read". That's fine.

  • The loop detection logic uses agent comments; may have false positives but not security.

Thus the only gaps may be ensuring that AGENTS.md and AGENT-MONIKERS.md are present and up-to-date. Perhaps we need to inspect if those files contain guidelines about 0o600/0o700 and artifact class. Since we can't inspect files, we could mention that we need to verify those files.

Also security: The workflow currently uses "github-token: ${{ secrets.OPERATOR_GITHUB_TOKEN || secrets.OPERATOR_TOKEN || secrets.GITHUB_TOKEN }}". This could be an operator token


Peer router: Omni ↔ OpenRouter by desired model; Gemini residual. role=review

@qodo-code-review

qodo-code-review Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. emptyDiff unconditionally forces nudge on new PRs ✓ Resolved 🐞 Bug ≡ Correctness
Description
The new emptyDiff = (changedFiles === 0) flag is OR'd directly into needsWork with no gating by
openThreads, PR age, or activity (unlike the stale/blocked conditions which require `openThreads
> 0`), so any eligible PR that currently has zero changed files — e.g. a freshly opened branch
waiting on its first commit — is immediately nudged. This reintroduces exactly the class of
false-positive on brand-new PRs that the PR claims to fix for the staleness case.
Code

.github/workflows/agent-continuous-ops.yml[204]

+              const emptyDiff = (changedFiles === 0);
Evidence
changedFiles is populated from pr.changed_files / fresh.changed_files (lines 93, 102) and emptyDiff
is included as an unconditional OR term in needsWork (lines 235-243), unlike stale/blocked which
require openThreads>0. A newly created PR with no commits yet, or one that momentarily reports 0
changed files, will be nudged on the very next hourly sweep.

.github/workflows/agent-continuous-ops.yml[93-102]
.github/workflows/agent-continuous-ops.yml[204-243]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The `emptyDiff` flag (`changedFiles === 0`) is OR'd unconditionally into `needsWork`, causing brand-new or momentarily-empty PRs to be nudged immediately by the continuous-ops sweep — the same false-positive class of bug the PR set out to fix (#159).

## Issue Context
`changedFiles` comes from the PR's `changed_files` count. A PR can legitimately have 0 changed files right after creation (e.g., empty branch, or PR created before first push). There is no minimum-age or prior-activity gate before treating this as actionable.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[204-204]
- .github/workflows/agent-continuous-ops.yml[235-243]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Review activity detectors miss reviews 🐞 Bug ≡ Correctness
Description
The new approval and loop detectors derive agentComments only from issue-conversation comments,
excluding formal PR review bodies and inline review comments. Matching approval language or repeated
agent activity in those separate review resources is therefore invisible to both detectors.
Code

.github/workflows/agent-continuous-ops.yml[R127-129]

+              const agentComments = comments
+                .filter(c => isAgent(c.user?.login) && !isSelfNudge(c))
+                .sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
Evidence
The detector input comes from issues.listComments. Existing repository workflows explicitly fetch
reviews separately and subscribe separately to review and review-comment events, demonstrating that
these agent signals are not part of the issue-comment collection.

.github/workflows/agent-continuous-ops.yml[107-129]
.github/workflows/peer-review-orchestrator.yml[77-103]
.github/workflows/agent-feedback-linear-sync.yml[7-39]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Approval and loop detection omit formal reviews and inline review comments because they inspect only issue comments.

## Issue Context
Fetch `pulls.listReviews` and `pulls.listReviewComments` (or equivalent GraphQL data), normalize author/body/timestamp fields, merge them with issue comments, exclude self-marked entries, and then run the detectors over the combined chronological activity.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[107-136]
- .github/workflows/agent-continuous-ops.yml[160-202]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Legacy status failures ignored 🐞 Bug ≡ Correctness
Description
The new failure detector only inspects Checks API check-runs, so error/failure commit statuses
on the PR head SHA never set statusFailed despite granting statuses: read. As a result, PRs
whose external CI reports failures only via classic commit statuses can be treated as clean when no
other nudge condition applies.
Code

.github/workflows/agent-continuous-ops.yml[R142-145]

+                const checkRuns = await github.paginate(github.rest.checks.listForRef, {
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  ref: pr.head.sha,
Evidence
The workflow grants both checks: read and statuses: read, but the failing-check logic derives
statusFailed solely from github.rest.checks.listForRef (lines 141–158) and never calls any
Statuses API endpoint such as repos.listCommitStatusesForRef or a combined-status equivalent,
leaving the added statuses: read permission unused. Because GitHub treats commit statuses as a
separate system from check-runs, failures reported only via status contexts remain invisible to the
current statusFailed computation.

.github/workflows/agent-continuous-ops.yml[38-43]
.github/workflows/agent-continuous-ops.yml[138-158]
🌐 GitHub documents commit statuses separately from checks and provides a combined-status endpoint whose state is failure when a current context reports error or failure.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Failure detection currently reads only check-runs via the Checks API and ignores classic GitHub commit statuses, so status-only CI failures (state `failure`/`error`) on `pr.head.sha` never set `statusFailed` even though `statuses: read` permission is granted.

## Issue Context
GitHub exposes two independent CI result surfaces: the Checks API (check-runs) and the classic Statuses API (commit statuses). The workflow already adds `statuses: read`, and the PR intent is comprehensive failing-check detection, but the script only calls `github.rest.checks.listForRef` and never queries commit statuses (e.g., `repos.listCommitStatusesForRef` or a combined-status endpoint). Update failure detection to also query the combined status for `pr.head.sha` and treat any `failure`/`error` status contexts as failed alongside check-run conclusions, while keeping API errors isolated so one unavailable source does not suppress the other.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[42-43]
- .github/workflows/agent-continuous-ops.yml[138-158]
- .github/workflows/agent-continuous-ops.yml[235-255]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Moniker pings unrelated user ✓ Resolved 🐞 Bug ☼ Reliability
Description
Automated Jules comments now emit @heyVern, which resolves to an existing external GitHub account
rather than aliasing Jules and may send that user unsolicited mentions depending on notification
settings. The accompanying @jules still triggers Jules, but repository documentation cannot turn
another GitHub username into an alias.
Code

.github/workflows/agent-continuous-ops.yml[292]

+                `@heyVern @jules **@opsSweep** continuous-ops — high-perf unattended advance.`,
Evidence
Both workflows post @heyVern in generated PR comments, while the moniker document only defines a
naming convention. The linked GitHub profile proves that this case-insensitive handle belongs to an
existing external account.

.github/workflows/agent-continuous-ops.yml[286-309]
.github/workflows/agent-review-auto-jules.yml[125-152]
docs/ops/AGENT-MONIKERS.md[3-19]
🌐 GitHub exposes HeyVern as an existing user account named Ernest P. Worrell, so the workflow mention is not a Jules alias.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`@heyVern` is a real external GitHub username, not an alias for Jules, so automated comments can mention an unrelated account.

## Issue Context
Keep the actual `@jules` trigger, but render creative monikers as non-mentions (for example, code formatting or plain text without `@`). Apply the same correction to all automated comment bodies.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[286-302]
- .github/workflows/agent-review-auto-jules.yml[125-145]
- docs/ops/AGENT-MONIKERS.md[6-19]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View review recommended (2)
5. Removing github-actions login over-broadens agent exclusion ✓ Resolved 🐞 Bug ≡ Correctness
Description
The PR removes github-actions entirely from agentLogins instead of relying solely on the new
isSelfNudge(c) marker check, so comments posted by any other workflow under the shared
github-actions[bot] identity (e.g. auto-resolve pings from agent-review-auto-jules) are no longer
counted as agent activity, which can widen staleness/loop false positives beyond this workflow's own
nudges. The comment claims the goal is only to exclude 'our own nudges,' but isSelfNudge already
does that via the marker.
Code

.github/workflows/agent-continuous-ops.yml[R61-66]

            const agentLogins = [
              'google-labs-jules', 'devin-ai-integration', 'coderabbitai',
-              'github-actions', 'copilot', 'gitar-bot', 'blocksorg',
+              'copilot', 'gitar-bot', 'blocksorg',
+              // deliberately omit pure github-actions so our own nudges
+              // are not treated as "agent progress"
            ];
Evidence
Line 128 already filters with isAgent(c.user?.login) && !isSelfNudge(c), which is sufficient to
exclude this workflow's marker-tagged comments; dropping github-actions from the login list
(removed from the old list at line 59) additionally excludes non-marker github-actions[bot] comments
from other workflows (e.g. agent-review-auto-jules.yml posts its auto-resolve comment via the same
github-actions bot identity), understating real agent-adjacent activity and inflating stale/loop
detections.

.github/workflows/agent-review-auto-jules.yml[125-146]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Removing `github-actions` from `agentLogins` excludes all comments from that shared bot identity, not just this workflow's self-nudges, since `isSelfNudge` already filters by marker text.

## Issue Context
Other workflows (e.g. agent-review-auto-jules.yml) post substantive comments under the same `github-actions[bot]` account. Excluding the login entirely means those are never counted as 'agent activity' for staleness/loop purposes.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[61-66]
- .github/workflows/agent-continuous-ops.yml[126-131]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


6. Approval requests re-nudge forever ✓ Resolved 🐞 Bug ☼ Reliability
Description
An approval phrase in the latest agent comment remains sufficient for needsWork after every
self-nudge, while the hourly schedule always outlasts the 45-minute debounce. A human response or
approval does not change the selected latest agent comment, so the workflow repeats the same ping
hourly until another agent comment or eligibility change clears it.
Code

.github/workflows/agent-continuous-ops.yml[R239-241]

+                                statusFailed ||
+                                requestingApproval ||
+                                loopDetected ||
Evidence
The workflow runs every 60 minutes but debounces only 45 minutes. Self-nudges are excluded from
agent activity, so the same latest approval-request comment is selected and makes needsWork true
on each subsequent scheduled run.

.github/workflows/agent-continuous-ops.yml[13-16]
.github/workflows/agent-continuous-ops.yml[54-58]
.github/workflows/agent-continuous-ops.yml[114-136]
.github/workflows/agent-continuous-ops.yml[160-165]
.github/workflows/agent-continuous-ops.yml[235-243]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Approval requests are level-triggered from a persistent agent comment and are reposted every hourly sweep.

## Issue Context
Record the source comment/review ID or timestamp in the marker and suppress another approval nudge until that source changes. Also clear the condition when a later human approval or explicit response acknowledges the request.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[14-16]
- .github/workflows/agent-continuous-ops.yml[56-58]
- .github/workflows/agent-continuous-ops.yml[114-136]
- .github/workflows/agent-continuous-ops.yml[160-165]
- .github/workflows/agent-continuous-ops.yml[235-243]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

7. Loop detection assumes commit list is complete ✓ Resolved 🐞 Bug ≡ Correctness
Description
loopDetected derives lastCommitTime from the last element of pulls.listCommits, but this
endpoint returns at most 250 commits per PR, so for PRs exceeding that limit the 'newest' commit
inferred is not actually the newest, silently miscalculating the loop-detection window. This is a
narrow edge case but can cause spurious or missed loop nudges on very active PRs.
Code

.github/workflows/agent-continuous-ops.yml[R178-184]

+                  if (prCommits.length > 0) {
+                    // Prefer newest by list order (API returns chronological)
+                    const newest = prCommits[prCommits.length - 1];
+                    lastCommitTime = new Date(
+                      newest.commit.committer?.date || newest.commit.author?.date || 0
+                    ).getTime();
+                  }
Evidence
GitHub's REST docs state the pulls.listCommits endpoint 'Lists a maximum of 250 commits for a pull
request'; the code comment 'API returns chronological order' relies on this being the complete,
correctly-ordered list to pick prCommits[length-1] as the newest commit, which breaks down once a PR
surpasses that cap.

🌐 Lists a maximum of 250 commits for a pull request. To receive a complete commit list for pull requests with more than 250 commits, use the List commits endpoint.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Loop detection infers the newest commit time from the last element of a capped `pulls.listCommits` result (max 250 commits), which is unreliable for PRs with many commits.

## Issue Context
The PR object already carries `pr.head.sha`; fetching that commit's timestamp directly (e.g., via `repos.getCommit`) avoids relying on a potentially truncated, order-dependent list.

## Fix Focus Areas
- .github/workflows/agent-continuous-ops.yml[172-184]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context used
✅ Compliance rules (platform): 4 rules
✅ Web pages:
  +17 more
Review mode: 🧠 Deep: This changes multiple GitHub Actions workflows with substantial new orchestration logic across 19 independent hunks, including permissions, status detection, loop/stall handling, and dispatch parsing, creating many easy-to-miss behavioral defects.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

qodo-code-review[bot]

This comment was marked as resolved.

…, case-insensitive aliases

- Monikers as `heyVern` / `sparkFlux` code spans (NOT @mentions of real GH users)
- Keep @jules / @gemini-cli as the only live triggers
- Skip re-nudge when last ops comment already targeted same head SHA
- Drop cancelled from failure conclusions; emptyDiff requires age > 30m
- Restore github-actions in agentLogins (marker still filters self)
- Case-insensitive @sparkflux / @gemini-cli matching in dispatch

Signed-off-by: Grok (OPERATOR)
@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

Deployment failed for project termux-monorepo with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit

Copy link
Copy Markdown
Owner Author

OPERATOR follow-up pushed (d52cc90):

  1. Monikers are display-only — no @heyVern / @opsSweep real-user pings; live trigger remains @jules / @gemini-cli
  2. Sticky SHA debounce — same head SHA → 6h quiet (stops hourly spam on sticky reasons)
  3. Dropped cancelled from failure set; latest-per-check-name
  4. emptyDiff only if PR age > 30m
  5. Restored github-actions in agentLogins (marker still filters self)
  6. Case-insensitive @sparkFlux / @gemini-cli in dispatch

#160 closed as superseded.

Ready for merge once remaining conversation/threads clear.

Signed-off-by: Grok (OPERATOR) / archW1z

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@timerloggedout-spec
timerloggedout-spec merged commit df3bd98 into master Aug 11, 2026
27 of 30 checks passed

@devin-ai-integration devin-ai-integration Bot 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.

Devin Review found 6 new potential issues.

Open in Devin Review

Comment on lines +1 to +6
# Agent Monikers (SSOT)

Creative **display** call-signs for high-performance agent orchestration.

**Critical:** Do **not** `@`-mention monikers that collide with real GitHub usernames.
Use backticks or plain text for display. Live triggers remain the original handles.

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.

🟡 New ops work added without the required board row or work-item citation

The new monikers document and workflow rewrite are introduced (docs/ops/AGENT-MONIKERS.md:1) without first adding a row under docs/proposals/active/<id>/ITEMS.md and without an Implements: <ITEM-ID> citation on the PR/commits, which the repository's mandatory agent instructions require.
Impact: The change bypasses the project's tracking process, so this work is invisible on the active board and cannot be traced to an approved item.

Rule source and evidence

AGENTS.md hard rules: "Do not invent work outside docs/proposals/active/<id>/ITEMS.md — add a row first." and "Cite Implements: <ITEM-ID> on PRs/commits."

The PR touches only .github/workflows/agent-continuous-ops.yml, .github/workflows/agent-review-auto-jules.yml, .github/workflows/gemini-dispatch.yml, and the new docs/ops/AGENT-MONIKERS.md; no ITEMS.md row is added, and neither commit message (f1897eb, d52cc90) nor the PR body contains an Implements: line.

Prompt for agents
AGENTS.md requires that any new work be represented by a row in docs/proposals/active/<id>/ITEMS.md before implementation, and that PRs/commits cite Implements: <ITEM-ID>. This PR adds docs/ops/AGENT-MONIKERS.md and rewrites .github/workflows/agent-continuous-ops.yml without either. Add an ITEMS.md row under the appropriate active proposal (or create one) covering agent monikers / continuous-ops hardening, then amend the PR body and commit messages with the corresponding Implements: ID.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +237 to +238
const stale = lastAgentAge != null && lastAgentAge > staleMs;
const stale4Days = lastAgentAge != null && lastAgentAge > stallMs;

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.

🔍 PRs with unresolved threads but no bot issue-comment lose the stale nudge path

Previously lastAgentAge defaulted to Infinity when no agent issue-comment existed, so stale && openThreads > 0 fired for PRs with unresolved review threads even if no bot had ever posted an issue-level comment. With lastAgentAge = null, both stale and stale4Days are now false in that case, so such PRs are only nudged if they are dirty, blocked with open threads, have failing checks, or have an empty diff. Note that inline review threads (CodeRabbit/Copilot suggestions) do not appear in issues.listComments, so a PR whose only bot feedback is inline and whose mergeable_state is clean will now be skipped indefinitely. This is a deliberate consequence of the #159 fix, but worth confirming the blocked branch really covers those PRs in this repo's branch-protection setup.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +240 to +248
const needsWork = dirty ||
(blocked && openThreads > 0) ||
(stale && openThreads > 0) ||
stale4Days ||
statusFailed ||
requestingApproval ||
loopDetected ||
emptyDiff ||
forceAll;

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.

🔍 Permanently failing checks / lingering approval requests produce a nudge every 6 hours forever

statusFailed and requestingApproval are sticky conditions derived from state that a nudge cannot change: self-nudges are excluded from agentComments, so lastAgentComment (and thus requestingApproval) never ages out, and a permanently red check keeps statusFailed true. The only throttle is the sticky debounce (6h when head SHA is unchanged), so an unfixable PR will accumulate ~4 identical nudge comments per day indefinitely, with no per-PR nudge cap. Consider capping consecutive nudges per SHA (e.g. count prior self-nudges carrying the same sha: line and stop after N).

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

const reasons = [];
if (dirty) reasons.push('merge conflict / dirty vs base');
if (blocked && openThreads > 0) reasons.push(`${openThreads} unresolved review thread(s)`);
if (stale) reasons.push(`stale agent activity (${Math.round(lastAgentAge/3600000)}h)`);

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.

📝 Info: Reason list can report 'stale agent activity' even when staleness didn't trigger the nudge

needsWork only uses stale when openThreads > 0, but the reason list pushes the stale reason whenever stale is true. A PR nudged solely because of a failing check will still say "stale agent activity (Nh)" in the Why line, which can mislead the agent that reads the comment. Same pattern existed before the rewrite, but the reason list now has many more entries so mismatches are more visible.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +160 to +163
// Do NOT treat cancelled as failure (concurrency cancel-in-progress is normal)
const failed = latest.filter(c =>
['failure', 'timed_out', 'action_required'].includes(c.conclusion)
);

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.

📝 Info: PR description and code disagree on cancelled checks and the ping text

The PR body claims checks counting includes cancelled and that the nudge pings @heyVern @jules; the final code deliberately excludes cancelled (comment at line 160) and pings only @jules. The code behavior is the safer one (concurrency cancellations are normal; heyVern may be a real GitHub user), but the description should be updated so future readers don't 'fix' it back.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +42 to +46
(
startsWith(github.event.comment.body || github.event.review.body || '', '@gemini-cli') ||
startsWith(github.event.comment.body || github.event.review.body || '', '@sparkFlux') ||
startsWith(github.event.comment.body || github.event.review.body || '', '@sparkflux')
) &&

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.

📝 Info: The extra '@sparkflux' lowercase alternative in the job condition is redundant

GitHub Actions expression string functions (startsWith, contains, endsWith) compare case-insensitively, so startsWith(body, '@sparkFlux') already matches @sparkflux, @SPARKFLUX, etc. The third alternative adds no behavior; the script-side matching correctly lowercases the body first, so the two layers agree.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@github-actions

Copy link
Copy Markdown
Contributor

head_sha: d52cc90
ready: true
autofix_requested: false
timed_out: false

Peer review gate (ready for second-pass agents)

External reviewers polled: CodeRabbit, Devin, Aikido, Sentry, Copilot.
Autofix (if any) was requested in a separate comment on this SHA.

Peer activity (truncated):

review @devin-ai-integration[bot] state=COMMENTED sha=d52cc90

Downstream: gemini-after-peers. Jules: agent-review-auto-jules.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/agent-continuous-ops.yml:
- Around line 37-42: Add a concise explanatory comment immediately above the
permissions block documenting the workflow’s need for Checks, Commit statuses,
Pull requests, and Issues access, while preserving the existing permission
values.
- Around line 142-170: The check evaluation around github.paginate must also
call github.rest.repos.getCombinedStatusForRef for pr.head.sha and treat a
returned state of failure as failed. Merge that result with the existing failed
Check Runs, ensuring statusFailed is set and failCount remains nonzero when
Commit Status is the only failure; add coverage for that scenario.

In `@docs/ops/AGENT-MONIKERS.md`:
- Around line 18-24: Add one blank line immediately after the “## Rules” heading
and another immediately after “## High-performance intent” in the documentation,
preserving the existing list and content.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8fb62185-e6fd-4ae6-9568-e35f18f1f865

📥 Commits

Reviewing files that changed from the base of the PR and between 4281677 and d52cc90.

📒 Files selected for processing (4)
  • .github/workflows/agent-continuous-ops.yml
  • .github/workflows/agent-review-auto-jules.yml
  • .github/workflows/gemini-dispatch.yml
  • docs/ops/AGENT-MONIKERS.md

Comment on lines 37 to +42
permissions:
contents: read
pull-requests: write
issues: write
checks: read
statuses: read

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.

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the declared token permissions.

zizmor reports undocumented-permissions for this block. Add a concise comment that states why the workflow needs Checks, Commit statuses, Pull requests, and Issues permissions.

🧰 Tools
🪛 zizmor (1.29.0)

[warning] 39-39: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/agent-continuous-ops.yml around lines 37 - 42, Add a
concise explanatory comment immediately above the permissions block documenting
the workflow’s need for Checks, Commit statuses, Pull requests, and Issues
access, while preserving the existing permission values.

Source: Linters/SAST tools

Comment on lines +142 to +170
let statusFailed = false;
let failCount = 0;
try {
const checkRuns = await github.paginate(github.rest.checks.listForRef, {
owner: context.repo.owner,
repo: context.repo.repo,
ref: pr.head.sha,
per_page: 50,
});
// Prefer latest run per check name
const byName = new Map();
for (const c of (checkRuns || [])) {
const prev = byName.get(c.name);
if (!prev || new Date(c.completed_at || c.started_at || 0) > new Date(prev.completed_at || prev.started_at || 0)) {
byName.set(c.name, c);
}
}
const latest = [...byName.values()].filter(c => c.status === 'completed');
// Do NOT treat cancelled as failure (concurrency cancel-in-progress is normal)
const failed = latest.filter(c =>
['failure', 'timed_out', 'action_required'].includes(c.conclusion)
);
if (failed.length > 0) {
statusFailed = true;
failCount = failed.length;
}
} catch (e) {
core.info(`PR #${pr.number} checks skip: ${e.message}`);
}

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu

file=".github/workflows/agent-continuous-ops.yml"
printf '%s\n' '--- workflow lines 120-185 ---'
sed -n '120,185p' "$file"

printf '%s\n' '--- status/checks references ---'
rg -n -C 3 'statuses|listCommitStatuses|checks\.|listForRef|statusFailed|failure|timed_out|action_required' "$file"

Repository: timerloggedout-spec/termux-monorepo

Length of output: 6509


🏁 Script executed:

#!/bin/bash
set -eu

file=".github/workflows/agent-continuous-ops.yml"
printf '%s\n' '--- workflow header and setup ---'
sed -n '1,75p' "$file"

printf '%s\n' '--- all status API references in workflow ---'
rg -n -C 2 'getCombinedStatusForRef|listCommitStatusesForRef|repos\.getCommitStatus|statuses|checks' "$file"

printf '%s\n' '--- static verifier for the claimed gap ---'
python3 - <<'PY'
from pathlib import Path

p = Path(".github/workflows/agent-continuous-ops.yml")
text = p.read_text()
required = [
    "github.paginate(github.rest.checks.listForRef",
    "['failure', 'timed_out', 'action_required']",
    "statuses: read",
]
for needle in required:
    assert needle in text, needle
assert "github.rest.repos.getCombinedStatusForRef" not in text
assert "github.rest.repos.listCommitStatusesForRef" not in text
print("Check Runs logic and statuses: read permission present; no commit-status API call found")
PY

Repository: timerloggedout-spec/termux-monorepo

Length of output: 4477


🌐 Web query:

site:docs.github.com/en/rest/commits/statuses combined status for a specific reference failure latest status context error failure

💡 Result:

In the context of the GitHub REST API, the combined status for a specific reference (such as a commit SHA, branch, or tag) is a summary state that aggregates all individual statuses reported by various external services or tools [1]. Each individual status includes a context—a label used to distinguish between different systems like continuous integration (CI) or security scanners—and a state of error, failure, pending, or success [1]. The combined state is determined by the following rules [1]: - failure: Reported if any of the individual contexts report a state of error or failure. - pending: Reported if there are no statuses for the reference or if at least one context is in a pending state. - success: Reported only if the latest status for every individual context is success. When retrieving the combined status, the API returns the full list of statuses in reverse chronological order, with the most recent status for each context listed first [1].

Citations:


Read the combined commit status before setting statusFailed.

checks.listForRef does not include Commit Statuses. Call github.rest.repos.getCombinedStatusForRef for pr.head.sha and set statusFailed when data.state === 'failure'. Merge this result with failed Check Runs, and keep failCount nonzero for the nudge reason. Add a test where a Commit Status is the only failed context.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/agent-continuous-ops.yml around lines 142 - 170, The check
evaluation around github.paginate must also call
github.rest.repos.getCombinedStatusForRef for pr.head.sha and treat a returned
state of failure as failed. Merge that result with the existing failed Check
Runs, ensuring statusFailed is set and failCount remains nonzero when Commit
Status is the only failure; add coverage for that scenario.

Comment on lines +18 to +24
## Rules
1. Automated comments: **display** moniker in backticks; **ping** only the live trigger (`@jules`, `@gemini-cli`).
2. Workflows matching `@gemini-cli` **must** also accept `@sparkFlux` case-insensitively.
3. Never put secrets or Class 3/4 material in moniker docs.
4. If a moniker string is later registered as a GH username we do not control, keep it non-@ only.

## High-performance intent

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines below both headings.

markdownlint reports MD022 at Lines 18 and 24. Add one blank line after ## Rules and ## High-performance intent.

🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 18-18: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 24-24: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ops/AGENT-MONIKERS.md` around lines 18 - 24, Add one blank line
immediately after the “## Rules” heading and another immediately after “##
High-performance intent” in the documentation, preserving the existing list and
content.

Source: Linters/SAST tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant