Skip to content

chore(ci): agent ci skills and nightly build - #201

Open
coryrylan wants to merge 1 commit into
mainfrom
topic-nightly-build
Open

chore(ci): agent ci skills and nightly build#201
coryrylan wants to merge 1 commit into
mainfrom
topic-nightly-build

Conversation

@coryrylan

@coryrylan coryrylan commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added automated workflows for investigating CI failures and performing scoped maintenance tasks.
    • Added deterministic task selection for consistent upkeep activities.
    • CI now runs automatically each day at 11:07 PM Central Time.
  • Improvements

    • Standardized skill naming and availability-report tooling.
    • Expanded guidance for accessibility, CI auditing, code auditing, documentation, components, examples, patterns, tests, TypeScript, API design, and build systems.
    • Added guidance for handling transient, external, resolved, or unreproducible CI issues.
    • Clarified branch-naming guidance and accessibility testing expectations.

@coryrylan coryrylan self-assigned this Jul 31, 2026
Copilot AI lite review requested due to automatic review settings July 31, 2026 00:29

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coryrylan
coryrylan requested a review from johnyanarella July 31, 2026 00:29
@github-actions github-actions Bot added scope(ci) github_actions Pull requests that update GitHub Actions code labels Jul 31, 2026
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR renames agent skills, adds CI failure investigation and upkeep workflows, implements deterministic upkeep task selection, and schedules daily CI runs.

Changes

Agent skill naming and guidance

Layer / File(s) Summary
Skill metadata and guidance updates
.agents/skills/*/SKILL.md, .agents/skills/audit-ci/references/optimization-playbook.md
Renames skills and updates headings, descriptions, activation criteria, terminology, and script references.

Scheduled CI debugging

Layer / File(s) Summary
CI debugging workflow and schedule
.agents/skills/agent-debug-ci/SKILL.md, .github/workflows/ci.yml
Defines procedures for investigating, reproducing, fixing, validating, and reporting scheduled CI failures. CI runs daily at 11:07 PM America/Chicago.

Deterministic upkeep selection

Layer / File(s) Summary
Upkeep operating contract
.agents/skills/agent-upkeep/SKILL.md, AGENTS.md
Defines scoped upkeep tasks, task procedures, validation, branch and pull-request conventions, statelessness rules, stop conditions, and branch-naming exceptions.
Candidate discovery and ranking
.agents/skills/agent-upkeep/scripts/select-task.js
Discovers and ranks eligible coverage, ESLint suppression, and quarantined-test candidates while checking repository state and excluded paths.
Task selection output
.agents/skills/agent-upkeep/scripts/select-task.js
Selects one task through rotation or forced ordering, rejects in-flight upkeep branches, and emits structured target and rationale metadata.

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

Sequence Diagram(s)

sequenceDiagram
  participant select-task.js
  participant Git remote
  participant Repository filesystem
  select-task.js->>Git remote: Check remote upkeep branches
  Git remote-->>select-task.js: Return branch status
  select-task.js->>Repository filesystem: Discover eligible task candidates
  Repository filesystem-->>select-task.js: Return candidate metadata
  select-task.js-->>select-task.js: Rank and emit one task
Loading

Suggested labels: scope(internals)

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.22% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the added agent CI skills and nightly CI schedule, which are key changes in the pull request.
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
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch topic-nightly-build

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration.


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

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

Actionable comments posted: 8

🤖 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 @.agents/skills/agent-debug-ci/SKILL.md:
- Around line 65-79: Update the `pnpm run ci:reset` instruction in the debugging
workflow to invoke the command through `mise exec`, consistent with the other
repository toolchain commands. Preserve the existing guidance to use it only
when stale generated output or cache state is indicated.
- Around line 87-88: Update the workflow guidance in the relevant debugging
instructions so agents explicitly fetch or refresh origin/main before verifying
the failure or creating a fix branch, then base all investigation on that
updated reference.

In @.agents/skills/agent-upkeep/scripts/select-task.js:
- Around line 109-114: Update inFlightBranches so any failure from the git fetch
refresh is propagated or causes a non-zero exit instead of being swallowed. Only
perform the upkeep branch selection after the remote branch list has been
refreshed successfully; preserve the existing branch detection behavior on
successful fetches.
- Around line 260-270: Update the test-discovery regex in the source-scanning
logic to match only it.skip, it.todo, it.fails, test.skip, test.todo, and
test.fails calls. Exclude describe and all other suite-level modifiers while
preserving the existing candidate construction, title extraction, and
visual-baseline weighting behavior.

In @.agents/skills/agent-upkeep/SKILL.md:
- Line 12: Update the pull-request contract in the agent-upkeep skill to allow
an authenticated GitHub integration/tool for creating draft pull requests and
applying the required upkeep label; alternatively, explicitly change the
workflow to stop after pushing the branch and remove any requirements that
cannot be fulfilled with git-only tooling.
- Around line 29-47: Ensure coverage task selection uses fresh coverage data:
update .agents/skills/agent-upkeep/SKILL.md lines 29-47 to make coverage
generation or freshness validation occur before selection, and update
.agents/skills/agent-upkeep/scripts/select-task.js lines 174-188 to generate or
validate fresh coverage before ranking candidates, emitting no coverage task
when freshness cannot be established.
- Around line 67-90: Make Mode A actionable by requiring selector-provided
package targets and invocation context instead of emitting only the shared
ESLint config. Update .agents/skills/agent-upkeep/SKILL.md lines 67-90 to
instruct agents to use only the affected packages, working directories, and
suppression-file locations supplied by the selector. Update
.agents/skills/agent-upkeep/scripts/select-task.js lines 318-326 to discover and
emit that complete package-specific context, including each workingDirectory and
suppressionsFile; no direct change is needed elsewhere.

In @.github/workflows/ci.yml:
- Around line 8-10: Update the scheduled workflow cron expression under schedule
to run at an off-hour minute, such as 01:17 America/Chicago, instead of exactly
01:00. Preserve the existing daily cadence and timezone.
🪄 Autofix (Beta)

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

Run ID: ca576ddf-97f4-4bcf-ae83-98826b951ebf

📥 Commits

Reviewing files that changed from the base of the PR and between 651abf3 and b9a7e1c.

📒 Files selected for processing (6)
  • .agents/skills/agent-availability-report/SKILL.md
  • .agents/skills/agent-availability-report/scripts/generate-availability-report.js
  • .agents/skills/agent-debug-ci/SKILL.md
  • .agents/skills/agent-upkeep/SKILL.md
  • .agents/skills/agent-upkeep/scripts/select-task.js
  • .github/workflows/ci.yml

Comment thread .agents/skills/agent-debug-ci/SKILL.md
Comment thread .agents/skills/agent-debug-ci/SKILL.md
Comment thread .agents/skills/agent-upkeep/scripts/select-task.js Outdated
Comment thread .agents/skills/agent-upkeep/scripts/select-task.js
Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated
Comment thread .agents/skills/agent-upkeep/SKILL.md
Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated
Comment thread .github/workflows/ci.yml
@coryrylan
coryrylan force-pushed the topic-nightly-build branch from b9a7e1c to f225bf5 Compare July 31, 2026 02:35
Copilot AI review requested due to automatic review settings July 31, 2026 02:35

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

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

Actionable comments posted: 4

🤖 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 @.agents/skills/agent-debug-ci/SKILL.md:
- Around line 31-37: Update the documented gh run view --log-failed command to
include the resolved attempt number when inspecting rerun workflows. Use the
attempt value returned by the preceding run metadata query, while preserving the
existing run identifier and failed-log behavior.
- Around line 69-75: Update the scheduled CI reproduction guidance in the skill
to run both commands with PAGES_BASE_URL="/elements/": pnpm run ci followed by
projects/internals/ci/cache-validate.js ci only after the first succeeds.
Preserve the existing isolation and environment-matching guidance while
documenting the complete command sequence.

In @.agents/skills/agent-upkeep/scripts/select-task.js:
- Around line 315-325: Preserve Mode B suppression-file context by updating
suppressionCandidates output handling in select-task.js
(.agents/skills/agent-upkeep/scripts/select-task.js:315-325) to emit
suppressionsFile relative to workingDirectory or as an absolute path. Update the
Mode B pruning commands in .agents/skills/agent-upkeep/SKILL.md:67-70 and
:94-101 to pass this value to --prune-suppressions using
--suppressions-location.

In @.agents/skills/agent-upkeep/SKILL.md:
- Line 120: Add the `text` language identifier to the fenced Markdown blocks at
the referenced locations in `SKILL.md`, including the block around line 120 and
the additional blocks around lines 190 and 205, while preserving their contents.
🪄 Autofix (Beta)

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

Run ID: fd2a9709-e599-4fa4-9efd-d741c185d2dd

📥 Commits

Reviewing files that changed from the base of the PR and between b9a7e1c and f225bf5.

📒 Files selected for processing (6)
  • .agents/skills/agent-availability-report/SKILL.md
  • .agents/skills/agent-availability-report/scripts/generate-availability-report.js
  • .agents/skills/agent-debug-ci/SKILL.md
  • .agents/skills/agent-upkeep/SKILL.md
  • .agents/skills/agent-upkeep/scripts/select-task.js
  • .github/workflows/ci.yml

Comment on lines +31 to +37
Useful commands include:

```shell
gh run view <run-id> \
--json databaseId,attempt,event,headBranch,headSha,status,conclusion,url,workflowName,jobs
gh run view <run-id> --log-failed
```

Copy link
Copy Markdown

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/sh
set -eu
printf '%s\n' '--- .agents/skills/agent-debug-ci/SKILL.md ---'
nl -ba .agents/skills/agent-debug-ci/SKILL.md | sed -n '1,110p'
printf '%s\n' '--- gh run view references ---'
rg -n -C 4 -- '--attempt|--log-failed|gh run view' .agents .github 2>/dev/null || true

Repository: NVIDIA/elements

Length of output: 1082


🌐 Web query:

GitHub CLI gh run view --attempt --log-failed official manual

💡 Result:

The gh run view command in the GitHub CLI is used to display a summary or logs of a specific workflow run [1][2]. Regarding the flags you mentioned: --attempt : This flag allows you to specify the attempt number of the workflow run you wish to view [1][3]. It defaults to 0 (typically representing the latest attempt) [1]. This is useful for accessing logs or summaries of previous run attempts that are no longer the most recent [4]. --log-failed: This flag is used to view the logs specifically for any failed steps within a workflow run or a specific job [1][5]. Common usage examples include: View a specific run attempt: gh run view --attempt View failed logs for a run: gh run view --log-failed View failed logs for a specific job: gh run view --job --log-failed You can combine these with other flags like --job to narrow your focus to a specific part of the workflow, or --exit-status to have the command return a non-zero exit code if the run failed, which is useful for automation and CI/CD pipelines [1][2][5].

Citations:


🏁 Script executed:

#!/bin/sh
set -eu
nl -ba .agents/skills/agent-debug-ci/SKILL.md | sed -n '1,110p'
rg -n -C 4 -- '--attempt|--log-failed|gh run view' .agents .github 2>/dev/null || true

Repository: NVIDIA/elements

Length of output: 1004


Pass the resolved attempt to --log-failed.

If the run was rerun, the command can inspect the latest attempt instead of the triggering attempt.

Proposed fix
-gh run view <run-id> --log-failed
+gh run view <run-id> --attempt <attempt> --log-failed
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Useful commands include:
```shell
gh run view <run-id> \
--json databaseId,attempt,event,headBranch,headSha,status,conclusion,url,workflowName,jobs
gh run view <run-id> --log-failed
```
Useful commands include:
🤖 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 @.agents/skills/agent-debug-ci/SKILL.md around lines 31 - 37, Update the
documented gh run view --log-failed command to include the resolved attempt
number when inspecting rerun workflows. Use the attempt value returned by the
preceding run metadata query, while preserving the existing run identifier and
failed-log behavior.

Comment thread .agents/skills/agent-debug-ci/SKILL.md
Comment thread .agents/skills/agent-upkeep/scripts/select-task.js
Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated

Once you fix a suppressed violation, ESLint exits **non-zero** with:

```

Copy link
Copy Markdown

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 language identifiers to fenced blocks.

markdownlint-cli2 reports MD040 for these blocks. Mark them as text.

Proposed fix
- ```
+ ```text

Also applies to: 190-190, 205-205

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 120-120: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🪛 SkillSpector (2.4.4)

[warning] 53: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 105: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 167: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 236: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 237: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 238: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 239: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 175: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.

(Memory Poisoning (MP2))


[error] 61: [P2] Hidden Instructions: Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Remediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content.

(Prompt Injection (P2))

🤖 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 @.agents/skills/agent-upkeep/SKILL.md at line 120, Add the `text` language
identifier to the fenced Markdown blocks at the referenced locations in
`SKILL.md`, including the block around line 120 and the additional blocks around
lines 190 and 205, while preserving their contents.

Source: Linters/SAST tools

@coryrylan
coryrylan force-pushed the topic-nightly-build branch from f225bf5 to 40f9f03 Compare July 31, 2026 03:11
Copilot AI review requested due to automatic review settings July 31, 2026 03:11

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

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

Actionable comments posted: 6

🤖 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 @.agents/skills/agent-availability-report/SKILL.md:
- Line 2: Update renamed skill references in
.agents/skills/agent-upkeep/SKILL.md to use authoring-tests,
authoring-typescript, audit-code, and audit-accessibility instead of the old
identifiers. Align the metadata in .agents/skills/guidance-build-system/SKILL.md
(line 2) with name: guidance-build. The other cited metadata
sites—.agents/skills/agent-availability-report/SKILL.md (line 2),
.agents/skills/audit-accessibility/SKILL.md (line 2),
.agents/skills/audit-ci/SKILL.md (line 2),
.agents/skills/authoring-typescript/SKILL.md (line 2), and
.agents/skills/guidance-api-design/SKILL.md (line 2)—require no direct changes.

In @.agents/skills/agent-upkeep/scripts/select-task.js:
- Around line 271-280: Restrict automatic bug candidates in
.agents/skills/agent-upkeep/scripts/select-task.js lines 271-280 to it.skip and
test.skip, unless the emitted kind includes distinct executable steps for other
kinds. Update .agents/skills/agent-upkeep/SKILL.md lines 134-146 with separate
validation procedures before permitting .todo or .fails tasks; ensure .todo and
.fails are not treated like unskippable tests.
- Around line 221-228: Update the suppression candidate construction in the
Object.entries(data) loop to resolve each file and reject it when
path.relative(root, resolvedFile) indicates it escapes the repository root,
including absolute or parent-traversal keys. Only add candidates for
root-contained paths; preserve the existing count filtering and candidate fields
for valid files.

In @.agents/skills/agent-upkeep/SKILL.md:
- Around line 17-18: Update the scope rules in the Mode A guidance to explicitly
allow editing the shared ESLint config under projects/internals/ and
selector-provided generated suppression files in other projects, while requiring
hand-fixed source changes to remain within one project. Preserve the existing
four-file and 150-line diff cap.

In @.agents/skills/audit-accessibility/SKILL.md:
- Line 41: Update the visual-variant testing guidance in the accessibility skill
to require status and size coverage for all applicable components, while making
disabled-state tests conditional on whether the component supports disabled
behavior.

In @.agents/skills/audit-code/SKILL.md:
- Around line 2-6: Update all renamed skill references in
.agents/skills/agent-upkeep/SKILL.md: replace testing with authoring-tests at
lines 53 and 236, typescript with authoring-typescript at lines 105 and 237,
code-review with audit-code at lines 167 and 238, and accessibility with
audit-accessibility at line 239. The anchor .agents/skills/audit-code/SKILL.md
lines 2-6 and sibling .agents/skills/authoring-tests/SKILL.md lines 2-6 require
no direct changes.
🪄 Autofix (Beta)

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

Run ID: 8035479e-715b-437e-b0e8-04b1f804a3f5

📥 Commits

Reviewing files that changed from the base of the PR and between f225bf5 and 40f9f03.

📒 Files selected for processing (18)
  • .agents/skills/agent-availability-report/SKILL.md
  • .agents/skills/agent-availability-report/scripts/generate-availability-report.js
  • .agents/skills/agent-debug-ci/SKILL.md
  • .agents/skills/agent-upkeep/SKILL.md
  • .agents/skills/agent-upkeep/scripts/select-task.js
  • .agents/skills/audit-accessibility/SKILL.md
  • .agents/skills/audit-ci/SKILL.md
  • .agents/skills/audit-ci/references/optimization-playbook.md
  • .agents/skills/audit-code/SKILL.md
  • .agents/skills/authoring-components/SKILL.md
  • .agents/skills/authoring-documentation/SKILL.md
  • .agents/skills/authoring-examples/SKILL.md
  • .agents/skills/authoring-patterns/SKILL.md
  • .agents/skills/authoring-tests/SKILL.md
  • .agents/skills/authoring-typescript/SKILL.md
  • .agents/skills/guidance-api-design/SKILL.md
  • .agents/skills/guidance-build-system/SKILL.md
  • .github/workflows/ci.yml

Comment thread .agents/skills/agent-availability-report/SKILL.md
Comment on lines +221 to +228
for (const [file, rules] of Object.entries(data)) {
if (!rules || typeof rules !== 'object') continue;
for (const [rule, entry] of Object.entries(rules)) {
const count = entry?.count ?? 0;
if (count < 1) continue;
total += count;
candidates.push({ suppressionsFile, dir, file: path.resolve(dir, file), rule, count });
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Reject suppression targets outside the repository root.

file comes from eslint-suppressions.json. Line 227 resolves it without a root-boundary check. A ../../ or absolute key can make the selector emit a target outside the checkout and direct the upkeep agent to modify it.

Fail closed when path.relative(root, resolvedFile) escapes root.

Proposed fix
       for (const [rule, entry] of Object.entries(rules)) {
         const count = entry?.count ?? 0;
         if (count < 1) continue;
+        const resolvedFile = path.resolve(dir, file);
+        const relativeFile = path.relative(root, resolvedFile);
+        if (
+          relativeFile === '..' ||
+          relativeFile.startsWith(`..${path.sep}`) ||
+          path.isAbsolute(relativeFile)
+        ) {
+          fail(`suppression target escapes repository root: ${file}`);
+        }
         total += count;
-        candidates.push({ suppressionsFile, dir, file: path.resolve(dir, file), rule, count });
+        candidates.push({ suppressionsFile, dir, file: resolvedFile, rule, count });
       }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for (const [file, rules] of Object.entries(data)) {
if (!rules || typeof rules !== 'object') continue;
for (const [rule, entry] of Object.entries(rules)) {
const count = entry?.count ?? 0;
if (count < 1) continue;
total += count;
candidates.push({ suppressionsFile, dir, file: path.resolve(dir, file), rule, count });
}
for (const [file, rules] of Object.entries(data)) {
if (!rules || typeof rules !== 'object') continue;
for (const [rule, entry] of Object.entries(rules)) {
const count = entry?.count ?? 0;
if (count < 1) continue;
const resolvedFile = path.resolve(dir, file);
const relativeFile = path.relative(root, resolvedFile);
if (
relativeFile === '..' ||
relativeFile.startsWith(`..${path.sep}`) ||
path.isAbsolute(relativeFile)
) {
fail(`suppression target escapes repository root: ${file}`);
}
total += count;
candidates.push({ suppressionsFile, dir, file: resolvedFile, rule, count });
}
🤖 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 @.agents/skills/agent-upkeep/scripts/select-task.js around lines 221 - 228,
Update the suppression candidate construction in the Object.entries(data) loop
to resolve each file and reject it when path.relative(root, resolvedFile)
indicates it escapes the repository root, including absolute or parent-traversal
keys. Only add candidates for root-contained paths; preserve the existing count
filtering and candidate fields for valid files.

Comment thread .agents/skills/agent-upkeep/scripts/select-task.js
Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated
Comment thread .agents/skills/audit-accessibility/SKILL.md Outdated
Comment thread .agents/skills/audit-code/SKILL.md
upkeep/<task>/<short-hyphenated-descriptor>
```

The `upkeep/` prefix is load-bearing. The next run lists unmerged `upkeep/*` branches on the remote to detect work in flight, so a branch named anything else defeats the one-at-a-time guardrail. The rest of the name is for humans; make it describe the target.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Should we soften the: "Branches must use topic/ prefix" guidance in the root AGENTS.md or clarify here this overrides it? I feel like the argument here implies that, but wonder if it should be explicit.

Copilot AI review requested due to automatic review settings August 5, 2026 16:01
@coryrylan
coryrylan force-pushed the topic-nightly-build branch from 40f9f03 to e2c17ad Compare August 5, 2026 16:01
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

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

Copilot reviewed 18 out of 18 changed files in this pull request and generated no new comments.

Suppressed comments (4)

.agents/skills/agent-upkeep/SKILL.md:105

  • This link references /.agents/skills/typescript/SKILL.md, but that skill file does not exist after the skill rename work in this PR. Update the link to the current TypeScript skill so the guidance remains reachable.
Most rules that start in the off list address type safety, so mode B often requires TypeScript work. When the rule is one of the `no-unsafe-*` family, `no-non-null-assertion`, `no-unnecessary-type-assertion`, or `no-redundant-type-constituents`, read the [typescript skill](/.agents/skills/typescript/SKILL.md) first and prefer, in this order:

.agents/skills/agent-upkeep/SKILL.md:167

  • This self-review step links to /.agents/skills/code-review/SKILL.md, but the code review skill was renamed to audit-code in this PR and the old path does not exist. Update the link so the referenced guidance is accessible.
Then self-review with the [code-review skill](/.agents/skills/code-review/SKILL.md) and fix anything it flags.

.agents/skills/agent-upkeep/SKILL.md:239

  • These reference links still point at pre-rename skill paths (testing, typescript, code-review, accessibility), which do not exist in this branch. Updating them avoids dead links and keeps the references aligned with the current skill names.
- [Testing](/.agents/skills/testing/SKILL.md)
- [TypeScript](/.agents/skills/typescript/SKILL.md)
- [Code Review](/.agents/skills/code-review/SKILL.md)
- [Accessibility](/.agents/skills/accessibility/SKILL.md)

.agents/skills/agent-upkeep/SKILL.md:53

  • This link points to /.agents/skills/testing/SKILL.md, but that skill file does not exist in this branch (skills have been renamed to authoring-tests, etc.). The link will be dead for readers and for any tooling that expects the path to resolve.

This issue also appears in the following locations of the same file:

  • line 105
  • line 167
  • line 236
- Read the [testing skill](/.agents/skills/testing/SKILL.md) and follow its guidance before writing any test.

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
.agents/skills/audit-accessibility/SKILL.md (1)

41-41: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make disabled-state coverage conditional.

Not every component supports disabled behavior. Require disabled-state coverage only when the component supports it. Require coverage for every supported status and size variant.

🤖 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 @.agents/skills/audit-accessibility/SKILL.md at line 41, Update the
accessibility audit requirements in the visual-variants testing guidance so
disabled-state coverage is required only for components that support disabled
behavior, while coverage remains mandatory for every supported status and size
variant.
🤖 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 @.agents/skills/agent-upkeep/SKILL.md:
- Around line 157-163: Update the Mode A verification instructions to run lint
from every supplied packages[].workingDirectory after all changes, rather than
only from the target project directory. Run tests and type checks from the
project containing the hand-fixed source file, preserving the existing commands
and sequencing after the final change.
- Around line 79-88: Update the ESLint workflow instructions around the
selector-provided packages command to require a dry-run or equivalent inspection
of autofixes before applying --fix. Proceed only when all resulting changes fit
the one-file and diff-size constraints; otherwise restore the working tree and
skip that rule, preserving the existing suppressions workflow for permitted
fixes.

---

Duplicate comments:
In @.agents/skills/audit-accessibility/SKILL.md:
- Line 41: Update the accessibility audit requirements in the visual-variants
testing guidance so disabled-state coverage is required only for components that
support disabled behavior, while coverage remains mandatory for every supported
status and size variant.
🪄 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: Enterprise

Run ID: 7b777e06-879d-4bf1-9315-4ee04f68b7b0

📥 Commits

Reviewing files that changed from the base of the PR and between 4601239 and e2c17ad.

📒 Files selected for processing (18)
  • .agents/skills/agent-availability-report/SKILL.md
  • .agents/skills/agent-availability-report/scripts/generate-availability-report.js
  • .agents/skills/agent-debug-ci/SKILL.md
  • .agents/skills/agent-upkeep/SKILL.md
  • .agents/skills/agent-upkeep/scripts/select-task.js
  • .agents/skills/audit-accessibility/SKILL.md
  • .agents/skills/audit-ci/SKILL.md
  • .agents/skills/audit-ci/references/optimization-playbook.md
  • .agents/skills/audit-code/SKILL.md
  • .agents/skills/authoring-components/SKILL.md
  • .agents/skills/authoring-documentation/SKILL.md
  • .agents/skills/authoring-examples/SKILL.md
  • .agents/skills/authoring-patterns/SKILL.md
  • .agents/skills/authoring-tests/SKILL.md
  • .agents/skills/authoring-typescript/SKILL.md
  • .agents/skills/guidance-api-design/SKILL.md
  • .agents/skills/guidance-build-system/SKILL.md
  • .github/workflows/ci.yml

Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated
Comment thread .agents/skills/agent-upkeep/SKILL.md Outdated
Comment on lines +157 to +163
Before opening the pull request, from the target project directory:

```shell
mise exec -- pnpm run lint
mise exec -- pnpm run test
mise exec -- pnpm run test:types
```

Copy link
Copy Markdown

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

Validate all Mode A package changes.

For Mode A, the selector emits projects/internals/eslint/src/configs/typescript.js as target. The verification commands therefore run in projects/internals. Step 79 can change lint results in every selector-provided package, and Step 87 can change a source file in another project.

Run lint in every supplied packages[].workingDirectory after the final change. Run tests and type checks in the project that contains the hand-fixed source file.

🧰 Tools
🪛 SkillSpector (2.5.1)

[warning] 53: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 105: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 167: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 236: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 237: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 238: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 239: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[error] 61: [P2] Hidden Instructions: Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Remediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content.

(Prompt Injection (P2))

🤖 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 @.agents/skills/agent-upkeep/SKILL.md around lines 157 - 163, Update the Mode
A verification instructions to run lint from every supplied
packages[].workingDirectory after all changes, rather than only from the target
project directory. Run tests and type checks from the project containing the
hand-fixed source file, preserving the existing commands and sequencing after
the final change.

Signed-off-by: Cory Rylan <crylan@nvidia.com>
Copilot AI review requested due to automatic review settings August 6, 2026 02:15
@coryrylan
coryrylan force-pushed the topic-nightly-build branch from e2c17ad to 63b397c Compare August 6, 2026 02:15
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

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

Copilot reviewed 19 out of 19 changed files in this pull request and generated no new comments.

Suppressed comments (4)

.agents/skills/agent-upkeep/scripts/select-task.js:144

  • disabledRules() assumes the closing pattern \n }, exists after the marker. If it doesn't, source.indexOf(...) returns -1 and the slice can accidentally scan the rest of the file, changing selection behavior silently. Fail fast when the end-of-block sentinel cannot be found.
  const start = source.indexOf(DISABLED_MARKER);
  if (start === -1) fail(`marker comment "${DISABLED_MARKER}" not found in ${ESLINT_CONFIG}`);
  const block = source.slice(start, source.indexOf('\n  },', start));
  const found = [...block.matchAll(/'([^']+)':\s*'off'/g)].map(m => m[1]);

.agents/skills/agent-upkeep/scripts/select-task.js:218

  • coverageCandidates() guards m.lines but then unconditionally reads m.branches.pct. If an entry is missing branches (or it’s null), the selector will crash instead of falling through to the next task.
      if (file === 'total' || !m.lines) continue;
      const uncovered = m.lines.total - m.lines.covered;
      const below = m.lines.pct < GUARDRAILS.coverageThreshold || m.branches.pct < GUARDRAILS.coverageThreshold;
      if (!below || uncovered < 1 || uncovered > GUARDRAILS.maxUncoveredLines) continue;
      candidates.push({ project, file, uncovered, lines: m.lines.pct, branches: m.branches.pct });

.agents/skills/agent-upkeep/scripts/select-task.js:326

  • When --task= is provided with an unexpected value, the script currently falls through and fails with a generic "no eligible task found" message. Validating the forced task up-front makes failures more actionable and avoids confusion during manual runs.
  const day = Math.floor((Date.now() - Date.UTC(new Date().getUTCFullYear(), 0, 0)) / 86400000);
  const offset = day % TASK_ROTATION.length;
  const rotated = forcedTask ? [forcedTask] : [...TASK_ROTATION.slice(offset), ...TASK_ROTATION.slice(0, offset)];

.github/workflows/ci.yml:10

  • The new nightly schedule is annotated as "11:07 PM America/Chicago", but scheduled workflows are typically evaluated in UTC (see .github/workflows/stale.yml which uses only cron). If timezone: is ignored or not supported by Actions, this will actually run at 23:07 UTC, not 23:07 Central. Consider removing timezone: and either (a) documenting the UTC time accurately or (b) adjusting the cron to the intended UTC offset (noting DST tradeoffs).
  schedule:
    - cron: '7 23 * * *' # 11:07 PM America/Chicago
      timezone: America/Chicago

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

Actionable comments posted: 4

♻️ Duplicate comments (2)
.agents/skills/agent-debug-ci/SKILL.md (2)

93-94: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fetch origin/main before using it as the baseline.

The skill requires the current origin/main, but it does not refresh the remote-tracking branch. A stale reference can cause verification against old code and produce an incorrect fix. Fetch origin/main before verifying the failure or creating the fix branch.

Proposed fix
+Before this step, run `git fetch --prune origin main`.
+
 1. Base the fix on current `origin/main`; first verify that the failure still
    exists there.
🤖 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 @.agents/skills/agent-debug-ci/SKILL.md around lines 93 - 94, Update the
baseline workflow in the skill instructions to fetch the latest origin/main
before verifying the failure or creating the fix branch. Preserve the
requirement to verify the failure against current origin/main after refreshing
the remote-tracking reference.

33-36: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Pass the resolved attempt to both gh run view commands.

Line 17 resolves attempt, but Lines 34-36 omit --attempt <attempt>. After a rerun, the agent can inspect a different attempt than the triggering event. Add the attempt selector to the metadata and failed-log commands. GitHub CLI documents --attempt as the workflow-run attempt selector. (cli.github.com)

Proposed fix
 gh run view <run-id> \
+  --attempt <attempt> \
   --json databaseId,attempt,event,headBranch,headSha,status,conclusion,url,workflowName,jobs
-gh run view <run-id> --log-failed
+gh run view <run-id> --attempt <attempt> --log-failed
🤖 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 @.agents/skills/agent-debug-ci/SKILL.md around lines 33 - 36, Update both `gh
run view` commands in the CI debugging instructions to include the resolved
`--attempt <attempt>` selector, ensuring metadata and failed logs are retrieved
from the triggering workflow-run attempt.
🤖 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 @.agents/skills/agent-debug-ci/SKILL.md:
- Around line 26-27: Update the ci:reset procedure in the agent-debug-ci
instructions to run git clean -ndX before cleanup, review every listed ignored
path, and confirm each is disposable. Preserve unrelated ignored work by using
targeted cleanup rather than blindly invoking the clean step, while retaining
the existing worktree-status check.

In @.agents/skills/agent-upkeep/scripts/select-task.js:
- Around line 115-120: Update the ref-enumeration error handling in the
task-selection flow around git and refs so a failed git for-each-ref call exits
with a non-zero result instead of returning an empty branch list. Ensure
selection stops immediately and cannot proceed when remote upkeep branches
cannot be listed.

In @.agents/skills/agent-upkeep/SKILL.md:
- Around line 56-61: Update the upkeep workflow instructions to require
rerunning `mise exec -- pnpm run test:coverage` after editing tests, so
`coverage-summary.json` reflects the changes. In the completion guidance,
require comparing the refreshed coverage with the recorded baseline before
declaring the task complete.

In @.agents/skills/audit-code/SKILL.md:
- Around line 26-28: Update the guideline map in the audit skill documentation
to include Markdown files, mapping *.md changes to the authoring-documentation
SKILL.md guidance so Vale and project terminology rules are applied.

---

Duplicate comments:
In @.agents/skills/agent-debug-ci/SKILL.md:
- Around line 93-94: Update the baseline workflow in the skill instructions to
fetch the latest origin/main before verifying the failure or creating the fix
branch. Preserve the requirement to verify the failure against current
origin/main after refreshing the remote-tracking reference.
- Around line 33-36: Update both `gh run view` commands in the CI debugging
instructions to include the resolved `--attempt <attempt>` selector, ensuring
metadata and failed logs are retrieved from the triggering workflow-run attempt.
🪄 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: Enterprise

Run ID: d88f8df3-3055-4d15-8e26-86dc92daf3f0

📥 Commits

Reviewing files that changed from the base of the PR and between c7e16a5 and 63b397c.

📒 Files selected for processing (19)
  • .agents/skills/agent-availability-report/SKILL.md
  • .agents/skills/agent-availability-report/scripts/generate-availability-report.js
  • .agents/skills/agent-debug-ci/SKILL.md
  • .agents/skills/agent-upkeep/SKILL.md
  • .agents/skills/agent-upkeep/scripts/select-task.js
  • .agents/skills/audit-accessibility/SKILL.md
  • .agents/skills/audit-ci/SKILL.md
  • .agents/skills/audit-ci/references/optimization-playbook.md
  • .agents/skills/audit-code/SKILL.md
  • .agents/skills/authoring-components/SKILL.md
  • .agents/skills/authoring-documentation/SKILL.md
  • .agents/skills/authoring-examples/SKILL.md
  • .agents/skills/authoring-patterns/SKILL.md
  • .agents/skills/authoring-tests/SKILL.md
  • .agents/skills/authoring-typescript/SKILL.md
  • .agents/skills/guidance-api-design/SKILL.md
  • .agents/skills/guidance-build-system/SKILL.md
  • .github/workflows/ci.yml
  • AGENTS.md

Comment on lines +26 to +27
4. Run `git status --short --branch` before changing branches or files. Preserve
unrelated worktree changes and never reset them.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- relevant files ---'
git ls-files .agents/skills/agent-debug-ci/SKILL.md package.json
printf '%s\n' '--- SKILL.md excerpt ---'
nl -ba .agents/skills/agent-debug-ci/SKILL.md | sed -n '1,110p'
printf '%s\n' '--- package.json scripts excerpt ---'
nl -ba package.json | sed -n '1,45p'
printf '%s\n' '--- ci:reset references ---'
rg -n -C 3 'ci:reset|git clean|status --short' --glob '!node_modules' .
printf '%s\n' '--- git clean dry-run output ---'
git clean -ndX

Repository: NVIDIA/elements

Length of output: 7973


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- SKILL.md lines 1-100 ---'
sed -n '1,100p' .agents/skills/agent-debug-ci/SKILL.md | cat -n
printf '%s\n' '--- package.json lines 15-30 ---'
sed -n '15,30p' package.json | cat -n
printf '%s\n' '--- nearby references around lines 80-90 ---'
sed -n '75,92p' .agents/skills/agent-debug-ci/SKILL.md | cat -n
printf '%s\n' '--- ignore rules relevant to dry-run paths ---'
git check-ignore -v .codex/agents .wireit node_modules projects/monaco/src/vendor projects/themes/dist 2>/dev/null || true

Repository: NVIDIA/elements

Length of output: 7495


Protect unrelated ignored files before ci:reset.

ci:reset invokes git clean -dfX through clean, and git status --short --branch does not list ignored paths. Before running ci:reset, execute git clean -ndX and confirm that every listed path is disposable. Preserve unrelated ignored work with targeted cleanup.

🤖 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 @.agents/skills/agent-debug-ci/SKILL.md around lines 26 - 27, Update the
ci:reset procedure in the agent-debug-ci instructions to run git clean -ndX
before cleanup, review every listed ignored path, and confirm each is
disposable. Preserve unrelated ignored work by using targeted cleanup rather
than blindly invoking the clean step, while retaining the existing
worktree-status check.

Comment on lines +115 to +120
let refs = '';
try {
refs = await git(['for-each-ref', '--format=%(refname:short) %(objectname)', 'refs/remotes/origin/upkeep/']);
} catch {
return [];
}

Copy link
Copy Markdown

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

Fail closed when remote upkeep branches cannot be listed.

A git for-each-ref failure returns []. The selector then treats the remote as having no upkeep/* branches and can start concurrent upkeep work.

If ref enumeration fails, stop with a non-zero result. Do not continue task selection.

Proposed fix
-  let refs = '';
+  let refs;
   try {
     refs = await git(['for-each-ref', '--format=%(refname:short) %(objectname)', 'refs/remotes/origin/upkeep/']);
   } catch {
-    return [];
+    fail('could not verify whether an upkeep branch already exists on the remote');
   }
🤖 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 @.agents/skills/agent-upkeep/scripts/select-task.js around lines 115 - 120,
Update the ref-enumeration error handling in the task-selection flow around git
and refs so a failed git for-each-ref call exits with a non-zero result instead
of returning an empty branch list. Ensure selection stops immediately and cannot
proceed when remote upkeep branches cannot be listed.

Comment on lines +56 to +61
- Regenerate the selected project's coverage before editing to record the baseline: `cd <project> && mise exec -- pnpm run test:coverage`.
- The script picks the file with the smallest number of uncovered lines, because that yields the smallest pull request. Trust it.
- Add tests to the existing `*.test.ts` beside the source file. Do not create a new test file unless none exists.
- Cover real behavior through the public component surface. Do not test private fields, do not call `#private` methods reflectively, and do not add tests that only exist to move the number.
- If the uncovered lines are unreachable or defensive, the correct change may be to delete the dead branch rather than test it. Prefer deletion when the branch is genuinely unreachable, and say so in the pull request body.
- **Done when**: the target file's line and branch coverage both increase, no other file's coverage decreases, and `pnpm run test` passes.

Copy link
Copy Markdown

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

Regenerate coverage after editing the test.

The baseline command writes coverage-summary.json before the test change. The edited test then makes that report stale. coverageIsFresh() rejects the project on the next selection run.

Run mise exec -- pnpm run test:coverage after the change. Compare the new result with the baseline before declaring the task complete.

Proposed fix
 - Add tests to the existing `*.test.ts` beside the source file. Do not create a new test file unless none exists.
+- After editing, run `mise exec -- pnpm run test:coverage` again. Compare the result with the baseline and keep the refreshed report for the next selection run.
 - Cover real behavior through the public component surface. Do not test private fields, do not call `#private` methods reflectively, and do not add tests that only exist to move the number.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Regenerate the selected project's coverage before editing to record the baseline: `cd <project> && mise exec -- pnpm run test:coverage`.
- The script picks the file with the smallest number of uncovered lines, because that yields the smallest pull request. Trust it.
- Add tests to the existing `*.test.ts` beside the source file. Do not create a new test file unless none exists.
- Cover real behavior through the public component surface. Do not test private fields, do not call `#private` methods reflectively, and do not add tests that only exist to move the number.
- If the uncovered lines are unreachable or defensive, the correct change may be to delete the dead branch rather than test it. Prefer deletion when the branch is genuinely unreachable, and say so in the pull request body.
- **Done when**: the target file's line and branch coverage both increase, no other file's coverage decreases, and `pnpm run test` passes.
- Regenerate the selected project's coverage before editing to record the baseline: `cd <project> && mise exec -- pnpm run test:coverage`.
- The script picks the file with the smallest number of uncovered lines, because that yields the smallest pull request. Trust it.
- Add tests to the existing `*.test.ts` beside the source file. Do not create a new test file unless none exists.
- After editing, run `mise exec -- pnpm run test:coverage` again. Compare the result with the baseline and keep the refreshed report for the next selection run.
- Cover real behavior through the public component surface. Do not test private fields, do not call `#private` methods reflectively, and do not add tests that only exist to move the number.
- If the uncovered lines are unreachable or defensive, the correct change may be to delete the dead branch rather than test it. Prefer deletion when the branch is genuinely unreachable, and say so in the pull request body.
- **Done when**: the target file's line and branch coverage both increase, no other file's coverage decreases, and `pnpm run test` passes.
🧰 Tools
🪛 SkillSpector (2.5.1)

[warning] 55: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 115: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 184: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 253: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 254: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 255: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 256: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[error] 63: [P2] Hidden Instructions: Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Remediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content.

(Prompt Injection (P2))

🤖 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 @.agents/skills/agent-upkeep/SKILL.md around lines 56 - 61, Update the upkeep
workflow instructions to require rerunning `mise exec -- pnpm run test:coverage`
after editing tests, so `coverage-summary.json` reflects the changes. In the
completion guidance, require comparing the refreshed coverage with the recorded
baseline before declaring the task complete.

Comment on lines 26 to +28
## Guideline Context

Review the relevant guideline for the files being changed (not all guidelines). Match by file type:
Review the relevant guideline for each changed file type (not all guidelines):

Copy link
Copy Markdown

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 Markdown to the guideline map.

The new instruction requires guidance for each changed file type, but the map omits *.md. Add an entry for .agents/skills/authoring-documentation/SKILL.md so reviewers apply the Vale and terminology rules to Markdown changes.

Proposed addition
 Review the relevant guideline for each changed file type (not all guidelines):
 
+- `*.md` → read `.agents/skills/authoring-documentation/SKILL.md`

As per coding guidelines, technical Markdown documentation must follow the repository's Vale configuration and project-specific terminology rules.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Guideline Context
Review the relevant guideline for the files being changed (not all guidelines). Match by file type:
Review the relevant guideline for each changed file type (not all guidelines):
## Guideline Context
Review the relevant guideline for each changed file type (not all guidelines):
- `*.md` → read `.agents/skills/authoring-documentation/SKILL.md`
🤖 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 @.agents/skills/audit-code/SKILL.md around lines 26 - 28, Update the
guideline map in the audit skill documentation to include Markdown files,
mapping *.md changes to the authoring-documentation SKILL.md guidance so Vale
and project terminology rules are applied.

Source: Coding guidelines

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

Labels

github_actions Pull requests that update GitHub Actions code scope(ci)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants