autoresolve-oldest-github-issue — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited autoresolve-oldest-github-issue (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
@rules/git/general.mdc@rules/reports/general.mdcresolve-issue, code-review-github, process-code-review, merge-github-pr)@rules/git/general.mdc Merging): never reach step 6 (merge) until steps 4–5 have run a code review on the PR's final diff and driven it to 0 Critical + 0 Moderate. A merge without a converged code review is forbidden — do not skip or reorder steps 4–5 to merge sooner.resolve-issue applies the Resolve_by_AI:in-progress claim label at the start of work and releases it on a pre-PR Blocked/abort — this is a sanctioned write owned by the delegated skill, not a constraint violation.LABEL (optional) — GitHub label used to filter eligible issues. Default: Resolve_by_AI. Pass an empty string (LABEL="") to disable label filtering and pick the globally oldest open issue.gh auth status reports an authenticated session; if not, stop and ask the user to authenticate.main branch and pull the latest changes.REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner).gh search issues, which — unlike gh issue list — supports explicit ascending order and therefore returns the globally oldest match regardless of total open-issue count: CLAIM_LABEL="${CLAIM_LABEL:-Resolve_by_AI:in-progress}"
QUERY="is:open is:issue repo:${REPO}${LABEL:+ label:\"$LABEL\"} -label:\"${CLAIM_LABEL}\""
gh search issues "$QUERY" --sort created --order asc --limit 1 \
--json number,url,title,createdAt,labels,assigneesThe -label: negation excludes any issue already carrying the Resolve_by_AI:in-progress claim label, so two parallel autoresolve runs always select different issues. CLAIM_LABEL defaults to Resolve_by_AI:in-progress and can be overridden to match a repository that uses a custom claim label. Do not substitute gh issue list --sort created --limit <N>: that command returns the newest N issues with no --order switch, so any client-side ascending sort picks the oldest of the newest, never the true oldest.
No eligible open GitHub issues found (label=<LABEL>).number and url. This URL is the single argument passed to every downstream skill in the chain.@skills/resolve-issue/SKILL.md with the selected issue URL.resolve-issue finishes, capture the resulting PR URL from its output. If no PR URL is produced, stop and report the failure — do not continue the chain.@skills/code-review-github/SKILL.md directly in this skill's context, passing the PR URL (not the issue URL) plus the instruction "run @skills/code-review-github/SKILL.md against this PR and return the published PR comment URL, the linked-issue comment URL(s), and the Critical / Moderate / Minor counts". Do not dispatch the CR as a subagent — run it sequentially in the current context.@skills/process-code-review/SKILL.md directly in this skill's context, passing the PR URL plus the instruction "drive the review loop on this PR to convergence (Critical + Moderate == 0) and return the iteration count, residual finding counts, and the final status comment URL". Do not dispatch as a subagent — run it sequentially in the current context.criticalCount + moderateCount == 0 (or after its maxIterations safety net). On convergence it also promotes the PR out of Draft (gh pr ready) per @rules/git/general.mdc Draft pull requests, so the merge step in step 6 sees a non-draft, ready PR.@skills/merge-github-pr/SKILL.md with the PR URL.isDraft, mergeable, mergeStateStatus, statusCheckRollup[], reviewDecision) and will skip the merge with a reason on any failure. Surface that reason verbatim in the final report.At any step, stop the chain and produce the final report when:
resolve-issue does not produce a PRcode-review-github reports the PR has merge conflicts (review cancelled per its own contract)process-code-review cannot drive Critical + Moderate findings to zero within its iteration capmerge-github-pr reports isDraft == true (the PR is still a Draft — its review has not converged), mergeable != MERGEABLE, mergeStateStatus in DIRTY / BEHIND, any non-passing entry in statusCheckRollup[], or reviewDecision != APPROVEDNever retry or "fix" the blocker outside the contract of the delegated skill that surfaced it.
A short report containing:
#<number> + URL + createdAtresolve-issue: URL (or the failure reason if none)code-review-github outcome: counts of Critical / Moderate / Minor (or skipped — <reason>)process-code-review outcome: iterations run, residual Critical / Moderate count (or skipped — <reason>)merge-github-pr outcome: merged / skipped — <reason>Done when contract~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.