feat: nemoclaw-maintainer-triage skill and shared triage-instructions.md#1880
feat: nemoclaw-maintainer-triage skill and shared triage-instructions.md#1880
Conversation
…salvage A suite of 8 agent skills and 4 TypeScript scripts that automate the NemoClaw maintainer workflow: triage open PRs, check merge gates, salvage near-ready contributions, detect hotspots, and close test gaps. Skills: - nemoclaw-maintainer-loop: orchestrator for /loop integration - nemoclaw-maintainer-triage: deterministic queue builder (calls gh-pr-merge-now) - nemoclaw-maintainer-merge-gate: 4-gate approval checker - nemoclaw-maintainer-salvage-pr: near-ready PR rescue with fork push support - nemoclaw-maintainer-security-sweep: security-focused review routing - nemoclaw-maintainer-test-gaps: targeted test coverage for risky code - nemoclaw-maintainer-hotspots: churn/conflict pressure detection - nemoclaw-maintainer-sequence-work: large issue decomposition Scripts (node --experimental-strip-types): - triage.ts: calls gh-pr-merge-now, enriches with risky-area detection, scores - check-gates.ts: CI, conflicts, CodeRabbit, risky-code-tested gates - hotspots.ts: 30-day git churn + open PR file overlap analysis - state.ts: local state file CRUD (init, exclude, history, set-queue) Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace 9 separate maintainer skills with 3 phase-based skills matching the daily ship cycle: morning (triage + label), day (execute + loop), evening (handoff + tag). Inner workflows become reference docs under the day skill with progressive disclosure. Key changes: - Extract shared.ts to deduplicate RISKY_PATTERNS, run(), scoring weights - Fail-closed gate checker (was defaulting to pass on API error) - Named scoring constants with documented rationale - Add PR-REVIEW-PRIORITIES.md codifying the review priority order - Add version-label-based daily cadence (label items with target tag, bump stragglers at EOD, cut patch tag for overnight QA) - stderr logging in shell helpers instead of silent swallowing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…w issues New scripts for deterministic operations that were previously inline: - version-target.ts: compute next patch version + find stragglers - version-progress.ts: shipped vs open for a version label - bump-stragglers.ts: move open items from one version label to next - handoff-summary.ts: commits since last tag + risky areas + QA focus Review fixes: - Remove duplicated scoring table from morning (reference PR-REVIEW-PRIORITIES.md) - Security sweep uses triage-identified items instead of re-running find-review-pr - Evening uses state.ts script command for state updates - Morning uses version-target.ts for straggler discovery (no ambiguous placeholder) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both version-progress.ts and triage.ts now include ageDays as a computed field in their JSON output, so triage tables never depend on Claude doing date arithmetic from raw ISO timestamps. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
At a daily ship cadence most PRs are <24h old, making ageDays show 0 for everything. ageHours gives useful resolution. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove external gh-pr-merge-now dependency from triage script. The script now fetches open PRs directly via gh CLI, classifies them as merge-ready / near-miss / blocked, and scores them using the same weighted model. Key changes: - Fetch basic PR data first (lightweight), then enrich top candidates with statusCheckRollup individually to avoid GraphQL timeouts - Add single retry with 3s delay for transient GitHub API failures - Add labels array to QueueItem output for version-label awareness - Classification logic: merge-now requires approved + green CI + clean merge state; near-miss allows up to 2 fixable blockers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GitHub's GraphQL API returns 502 when requesting too many PRs with rich fields (statusCheckRollup, mergeStateStatus, reviewDecision). Limit to 50 most recent PRs which is sufficient for daily triage. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three bugs in the triage classifier: - BLOCKED merge state was treated as a conflict (it means "missing required reviews", not a conflict — DIRTY is the actual conflict) - StatusContext checks (CodeRabbit) use state/context fields, not conclusion/status — handle both shapes from gh CLI - No bucket existed between "approved + merge-ready" and "needs salvage", so most OSS PRs fell to blocked Add review-ready bucket (green CI, not draft, no conflicts) scored at +35, between merge-now (+40) and near-miss (+30). Also simplify by fetching statusCheckRollup in the initial query (works at limit 50) instead of per-PR enrichment. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace single gh pr list (capped at 50 by GraphQL) with gh api --paginate using the REST endpoint. Fetches all open PRs as lightweight NDJSON, then enriches only the top candidates with CI/review data via per-PR GraphQL calls. Previous: 50 PRs visible, missed older security PRs Now: all 243 open PRs visible, oldest items no longer invisible to triage Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The salvage workflow was biased toward "ask the contributor and wait" which blocks the daily ship cadence. Now defaults to maintainer does the work (rebase, fix conflicts, add tests, push). Only defer to contributor when intent is ambiguous from the diff. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GitHub invalidates approvals when new commits are pushed. Approving a PR with conflicts is wasted effort since the rebase push resets it. Merge gate now explicitly: do not approve DIRTY PRs. Correct sequence is salvage (rebase) → CI green → approve → report ready for merge. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PRs with GitHub labels now score higher in triage: - "security" label: +15 - "priority: high" label: +10 This produces clear score tiers: security+high+risky (80) > high+risky (65) > unlabeled+risky (55) > unlabeled clean (35). Previously all review-ready PRs with risky files scored identical 55. Also fix stale return type in scoreItem and nextAction text. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The CLAUDE.md guideline said all .agents/skills/nemoclaw-*/*.md is autogenerated and should never be edited directly. This is true for docs-derived skills but not for the hand-authored maintainer skills (morning/day/evening). CodeRabbit was flagging valid edits based on this overly broad rule. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the overly broad "nemoclaw-*/*.md is autogenerated" rule with an explicit list of the skills that docs-to-skills.py actually produces. All other skills (maintainer-*, cut-release-tag, etc.) are clearly documented as hand-authored. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Main replaced CLAUDE.md with a symlink to AGENTS.md and reorganized skills into audience buckets (nemoclaw-user-*, nemoclaw-maintainer-*, nemoclaw-contributor-*). The narrower autogenerated rule (nemoclaw-user-* only) is already in main's AGENTS.md, making our explicit-list change redundant. Accept main's version. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add parseStringArg/parseIntArg helpers to shared.ts for safe CLI arg parsing with validation and fallback defaults. Update all 6 scripts. - Wrap JSON.parse in state.ts cmdSetQueue/cmdSetHotspots with try-catch for clear error on malformed piped input. - Fix cmdExclude docstring to match behavior (PR-only, not PR+issue). - Document enrichment cap (limit*3) as intentional in triage.ts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… errors Three CodeRabbit findings on version-target.ts: - Future version labels (e.g. v0.0.11) were incorrectly flagged as stragglers. Now uses semver comparison (compareSemver < 0) to only catch labels older than the target. - Empty catch blocks silently hid gh parse failures. Now logs to stderr. - Documented that --repo controls gh queries while git tags always come from the local checkout. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- docs/triage-instructions.md — single source of truth for AI label triage; extracted from nvoss-velocity prompt/label guide; read by skill at runtime and fetched by nvoss-velocity at generation time - .agents/skills/nemoclaw-maintainer-triage/SKILL.md — CLI triage skill; single-item and batch modes, applies via gh CLI, logs to daily-rhythm Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a new AI-invocable triage skill and a machine-readable triage rules doc; supports single-item or prioritized batch flows to generate label suggestions and optional comments, requires user approval to apply labels/comments via the Changes
Sequence DiagramsequenceDiagram
participant User
participant Skill as Triage Skill
participant Docs as "Triage Instructions"
participant GH as "GitHub CLI"
participant Log as "Activity Log"
User->>Skill: Invoke skill (single-item or batch)
Skill->>Docs: Read live guidance and rules (runtime)
Docs-->>Skill: Return label definitions & constraints
alt Single-Item Mode
User->>Skill: Provide issue/PR number
else Batch Mode
Skill->>GH: Query unlabeled open issues/PRs (prioritized, up to 50)
GH-->>Skill: Return items
end
loop For each item
Skill->>Skill: Generate suggestion (labels, reason, optional comment)
Skill->>User: Present suggestion and choices (apply/edit/skip/apply-no-comment)
User->>Skill: Approve / Edit / Skip / Omit comment
alt Approved
Skill->>GH: Apply labels via `gh ... edit --add-label`
GH-->>Skill: Labels applied
opt Comment approved
Skill->>GH: Post comment via `gh ... comment`
GH-->>Skill: Comment posted
end
Skill->>Log: Append per-item entry (id/title, date, labels, comment status)
Log-->>Skill: Confirmed
else Skipped
Skill-->>User: Continue to next item
end
end
Skill->>User: Present batch session summary (if batch)
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (1)
docs/triage-instructions.md (1)
14-14: Reduce em-dash density in prose (LLM pattern detected).There are repeated em-dash constructions across the page; several lines use them where commas/periods would read cleaner and align better with the style rule.
As per coding guidelines, "Excessive em dashes. One per paragraph is fine; multiple per paragraph or em dashes used instead of commas/periods should be flagged."
Also applies to: 21-21, 29-32, 39-40, 47-47, 57-57, 65-67, 80-80, 82-82, 86-87, 110-110, 117-117, 118-119, 125-125
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` at line 14, The sentence "Assign 1–5 labels from the provided list that best match the content. Be thorough — if a bug also involves a specific platform and is a good first issue, assign all applicable labels. Only skip a label if it genuinely does not apply." overuses em-dashes; edit this sentence (and other occurrences of the em-dash character "—") to reduce em-dash density by replacing secondary em-dashes with commas or periods and ensuring no more than one em-dash per paragraph (follow the "Excessive em dashes. One per paragraph is fine" guideline), updating nearby lines that repeat the pattern to improve readability and conform to the style rule.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.agents/skills/nemoclaw-maintainer-triage/SKILL.md:
- Line 3: The documentation claim about batch mode in SKILL.md is inaccurate:
the batch-mode description (line with "fetches all unlabeled open items")
conflicts with the implemented listing commands that are hard-capped at 50;
update the SKILL.md description and the related section (lines ~41-46) to either
(A) accurately state the 50-item limit or (B) remove the limit by implementing
pagination in the listing logic (use the gh CLI pagination or iterate API calls)
so batch-mode truly fetches all unlabeled items; mention the chosen approach in
the doc and ensure the trigger wording ("batch mode", "fetches all unlabeled
open items") matches the code behavior.
- Around line 37-49: The batch-mode selection currently filters to items with
zero labels (the jq filter '.labels | length == 0'), which prevents the
prioritization branch that looks for items with the label/value "priority: high"
from ever running; update the Batch mode selection logic in the "Batch mode"
section so it does not exclude labeled items (either remove or loosen the jq
'.labels | length == 0' filter for the gh issue list and gh pr list examples) or
explicitly include a secondary query that fetches labeled high-priority items
before/alongside the unlabeled set, and keep references to the "priority: high"
prioritization step intact so that the branch can execute.
- Line 1: The SKILL.md file is missing the required SPDX license header; add a
single-line SPDX license header at the very top of SKILL.md (for example:
SPDX-License-Identifier: MIT or the project’s chosen identifier) so the file
conforms to the rule for source files (*.md). Ensure the header is the first
non-empty line in the file and matches the project's standard SPDX identifier.
In `@docs/triage-instructions.md`:
- Around line 1-128: The docs build is failing because the "NemoClaw — Triage
Instructions" Markdown document is orphaned (not referenced by any toctree); fix
by adding this document to your Sphinx/Docs toctree (insert a toctree entry that
references "NemoClaw — Triage Instructions" in the site's main index/toctree
page), then re-run the docs preview build to verify the orphan warning is
resolved.
- Around line 1-10: This docs page is missing the required YAML frontmatter; add
a top-of-file frontmatter block containing the fields title, description,
keywords, topics, tags, content type, difficulty, audience, and status with
appropriate values for "NemoClaw — Triage Instructions" so the
`nemoclaw-maintainer-triage` CLI and nvoss-velocity dashboard can parse it;
ensure the block is delimited by --- and populated with concise, valid entries
for each required field.
- Line 1: Add the required SPDX license header as the very first line of the
document "NemoClaw — Triage Instructions" (docs/triage-instructions.md) so it
conforms to the repository rule for source files matching
**/*.{js,ts,tsx,jsx,sh,md}; insert a single-line SPDX header such as
"SPDX-License-Identifier: <LICENSE>" (replace <LICENSE> with the project's SPDX
identifier, e.g., Apache-2.0 or MIT) above the existing title.
---
Nitpick comments:
In `@docs/triage-instructions.md`:
- Line 14: The sentence "Assign 1–5 labels from the provided list that best
match the content. Be thorough — if a bug also involves a specific platform and
is a good first issue, assign all applicable labels. Only skip a label if it
genuinely does not apply." overuses em-dashes; edit this sentence (and other
occurrences of the em-dash character "—") to reduce em-dash density by replacing
secondary em-dashes with commas or periods and ensuring no more than one em-dash
per paragraph (follow the "Excessive em dashes. One per paragraph is fine"
guideline), updating nearby lines that repeat the pattern to improve readability
and conform to the style rule.
🪄 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: CHILL
Plan: Pro Plus
Run ID: 7ae3334c-9f5c-4d6b-88cd-17b95397b4dc
📒 Files selected for processing (2)
.agents/skills/nemoclaw-maintainer-triage/SKILL.mddocs/triage-instructions.md
| @@ -0,0 +1,142 @@ | |||
| --- | |||
There was a problem hiding this comment.
Add SPDX header at file top.
This source markdown file is missing the required SPDX license header.
As per coding guidelines, "**/*.{js,ts,tsx,jsx,sh,md}: Include SPDX license header in every source file."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.agents/skills/nemoclaw-maintainer-triage/SKILL.md at line 1, The SKILL.md
file is missing the required SPDX license header; add a single-line SPDX license
header at the very top of SKILL.md (for example: SPDX-License-Identifier: MIT or
the project’s chosen identifier) so the file conforms to the rule for source
files (*.md). Ensure the header is the first non-empty line in the file and
matches the project's standard SPDX identifier.
| **Batch mode** — user says "batch", "all unlabeled", or provides no number: | ||
|
|
||
| ```bash | ||
| # Fetch unlabeled open issues (no labels applied yet): | ||
| gh issue list --repo NVIDIA/NemoClaw --limit 50 --json number,title,body,labels,url,author \ | ||
| | jq '[.[] | select(.labels | length == 0)]' | ||
|
|
||
| # Fetch unlabeled open PRs: | ||
| gh pr list --repo NVIDIA/NemoClaw --limit 50 --json number,title,body,labels,url,author \ | ||
| | jq '[.[] | select(.labels | length == 0)]' | ||
| ``` | ||
|
|
||
| In batch mode, work through items one at a time — present each suggestion and wait for approval before moving to the next. |
There was a problem hiding this comment.
Prioritization rule is unreachable with current unlabeled-only filter.
Batch mode only selects items with zero labels, but priority step 1 asks to prioritize items that already have priority: high. Those items are excluded earlier, so this branch cannot execute.
Proposed doc fix
-1. Items with `priority: high` already applied (need comment)
+1. Items indicating outage/data-loss/critical breakage in title or body (candidate for `priority: high`)Also applies to: 139-139
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.agents/skills/nemoclaw-maintainer-triage/SKILL.md around lines 37 - 49, The
batch-mode selection currently filters to items with zero labels (the jq filter
'.labels | length == 0'), which prevents the prioritization branch that looks
for items with the label/value "priority: high" from ever running; update the
Batch mode selection logic in the "Batch mode" section so it does not exclude
labeled items (either remove or loosen the jq '.labels | length == 0' filter for
the gh issue list and gh pr list examples) or explicitly include a secondary
query that fetches labeled high-priority items before/alongside the unlabeled
set, and keep references to the "priority: high" prioritization step intact so
that the branch can execute.
| # NemoClaw — Triage Instructions | ||
|
|
||
| This document is the single source of truth for AI-assisted label triage on NVIDIA/NemoClaw issues and PRs. | ||
| It is read at runtime by the `nemoclaw-maintainer-triage` CLI skill and fetched at generation time by the nvoss-velocity dashboard. | ||
|
|
||
| --- | ||
|
|
||
| ## Role | ||
|
|
||
| You are a GitHub issue and PR labeler for NemoClaw, NVIDIA's open-source agentic AI assistant framework. | ||
|
|
||
| For each item: | ||
|
|
||
| 1. Assign 1–5 labels from the provided list that best match the content. Be thorough — if a bug also involves a specific platform and is a good first issue, assign all applicable labels. Only skip a label if it genuinely does not apply. | ||
| 2. Write a short triage comment appropriate to the item's tier (see Comment Tiers below). | ||
|
|
||
| --- | ||
|
|
||
| ## Output Format | ||
|
|
||
| Return ONLY valid JSON — no markdown fences, no explanation: | ||
|
|
||
| ```json | ||
| {"results": [{"number": 123, "labels": ["bug", "good first issue"], "reason": "One sentence explaining label choices.", "comment": "Comment text."}]} | ||
| ``` | ||
|
|
||
| Fields: | ||
|
|
||
| - `number` — the issue or PR number | ||
| - `labels` — array of label names, exactly as provided in the label list | ||
| - `reason` — one concise sentence explaining why these labels apply | ||
| - `comment` — triage comment text (see Comment Tiers) | ||
|
|
||
| --- | ||
|
|
||
| ## Label Assignment Rules | ||
|
|
||
| - Use only label names exactly as provided in the label list | ||
| - Assign 1–5 labels per item — apply every label that genuinely fits | ||
| - If a specific `enhancement: *` sub-label is assigned, do NOT also assign the bare `enhancement` label — the sub-label is sufficient | ||
| - If genuinely unclear, assign `question` | ||
|
|
||
| --- | ||
|
|
||
| ## Skip Labels | ||
|
|
||
| Never assign these — they require human judgment: | ||
|
|
||
| - `duplicate` | ||
| - `invalid` | ||
| - `wontfix` | ||
| - `priority: medium` | ||
| - `priority: low` | ||
| - `status: triage` | ||
| - `NV QA` | ||
|
|
||
| `priority: high` is allowed ONLY when the issue clearly blocks critical functionality, causes data loss, or describes a production outage — not based on the author's frustration or urgency language alone. | ||
|
|
||
| --- | ||
|
|
||
| ## Label Guide | ||
|
|
||
| Use these descriptions to match labels to issue/PR content: | ||
|
|
||
| - `bug`: User reports something broken — unexpected error, crash, exception, traceback, "not working", "fails", "broken", unexpected behavior | ||
| - `enhancement`: Generic enhancement — use only if none of the specific `enhancement: *` sub-types clearly apply | ||
| - `enhancement: feature`: Request for a new capability — "would be great if", "feature request", "add support for", "please add" | ||
| - `enhancement: inference`: Inference routing, model support, provider configuration | ||
| - `enhancement: security`: Security controls, policies, audit logging | ||
| - `enhancement: policy`: Network policy, egress rules, sandbox policy | ||
| - `enhancement: ui`: CLI UX, output formatting, terminal display | ||
| - `enhancement: platform`: Cross-platform support (pair with a `Platform: *` label) | ||
| - `enhancement: provider`: Cloud or inference provider support (pair with a `Provider: *` label) | ||
| - `enhancement: performance`: Speed, resource usage, memory, latency | ||
| - `enhancement: reliability`: Stability, error handling, recovery, retries | ||
| - `enhancement: testing`: Test coverage, CI/CD quality, test infrastructure | ||
| - `enhancement: MCP`: MCP protocol support, tool integration | ||
| - `enhancement: CI/CD`: Pipeline, build system, automation | ||
| - `enhancement: documentation`: Docs improvements, examples, guides | ||
| - `question`: Asking how to do something — "how do I", "is it possible", "does X support" | ||
| - `documentation`: Missing or incorrect docs, README errors, API doc gaps | ||
| - `good first issue`: Small well-scoped fix, doc typo, clear simple change — easy entry point for new contributors | ||
| - `help wanted`: Clear fix or improvement that needs a community contribution | ||
| - `security`: Auth issues, API key exposure, CVE, vulnerability, unauthorized access | ||
| - `status: needs-info`: Issue or PR has no description, no reproduction steps, or so little detail the team cannot act on it | ||
| - `priority: high`: Issue blocks critical functionality, causes data loss, or describes a production outage — apply only when the report clearly describes severe, reproducible impact | ||
| - `Platform: MacOS`: Issue specific to macOS, Mac OS X, or Apple Silicon (M1/M2/M3/M4). Apply when the user mentions macOS, Darwin, Homebrew, or Mac-specific behavior | ||
| - `Platform: Windows`: Issue specific to Windows OS. Apply when the user mentions Windows, Win32, PowerShell, WSL, or Windows-specific errors | ||
| - `Platform: Linux`: Issue specific to Linux. Apply when the user mentions a Linux distro (Ubuntu, CentOS, RHEL, Debian, etc.) or Linux-specific behavior | ||
| - `Platform: DGX Spark`: Issue specific to DGX Spark hardware or software environment | ||
| - `Platform: Brev`: Issue specific to the Brev.dev cloud environment | ||
| - `Platform: ARM64`: Issue specific to ARM64 / aarch64 architecture | ||
| - `Integration: Slack`: Issue or feature involving the Slack integration or Slack bridge | ||
| - `Integration: Discord`: Issue or feature involving the Discord integration | ||
| - `Integration: Telegram`: Issue or feature involving the Telegram integration | ||
| - `Integration: GitHub`: Issue or feature involving GitHub-specific behavior (not the repo itself) | ||
| - `Provider: NVIDIA`: Issue or feature specific to NVIDIA inference endpoints or NIM | ||
| - `Provider: OpenAI`: Issue or feature specific to OpenAI API or models | ||
| - `Provider: Anthropic`: Issue or feature specific to Anthropic / Claude models | ||
| - `Provider: Azure`: Issue or feature specific to Azure OpenAI or Azure cloud | ||
| - `Provider: AWS`: Issue or feature specific to AWS Bedrock or AWS cloud | ||
| - `Provider: GCP`: Issue or feature specific to Google Cloud / Vertex AI | ||
|
|
||
| --- | ||
|
|
||
| ## Comment Tiers | ||
|
|
||
| Items are classified as `quality_tier` or `standard_tier` before generation. This is passed in the item metadata. | ||
|
|
||
| - **quality_tier** (influencer author, company-affiliated author, or body > 800 chars): Write 2–3 sentences. Start with "Thanks," then naturally reference specific details from the body. Avoid "I've taken a look at", "I've reviewed", "it appears to", "I can see that" — these sound bot-generated. Write like a human maintainer giving a warm, specific response. | ||
| - **standard_tier**: Write 1 sentence acknowledging the report and mentioning the labels applied. | ||
|
|
||
| --- | ||
|
|
||
| ## Tone Rules (strictly enforced) | ||
|
|
||
| - Use "could" not "should"; use "may" not "will" — this is a first response, not a commitment | ||
| - Never say "Thanks for fixing" — say "Thanks for the proposed fix" or "Thanks for submitting this" | ||
| - Never say "Thanks for adding" — say "Thanks for the suggested addition" | ||
| - Never claim the submission accomplishes something before review | ||
| - Do not say "I'll" or "we'll" | ||
| - For issues (bugs, questions, enhancements): use "this identifies a..." or "this reports a..." | ||
| - For PRs: use "this proposes a way to..." | ||
| - For security-related items: never confirm a vulnerability is real; use neutral language | ||
| - Do NOT open with praise about detail or thoroughness. Only reference the quality of the report if the body is genuinely exceptional — multiple reproduction steps, version info, logs, and clear expected vs actual behavior. For most reports, skip the praise entirely and go straight to the triage acknowledgment. | ||
| - Do not add generic closing filler phrases | ||
| - If a "Spam signal:" line is present in the item metadata, assign only `status: needs-info` and ask for more detail politely | ||
| - If a "Note: Author also opened..." line is present, briefly acknowledge if the relationship is plausible |
There was a problem hiding this comment.
Include this page in a docs toctree to fix preview build failure.
The pipeline error indicates this document is orphaned (document isn't included in any toctree), so docs preview fails until it is referenced from an index/toctree page.
🧰 Tools
🪛 GitHub Actions: Docs PR Preview
[error] 1-1: Warning, treated as error by Sphinx: document isn't included in any toctree
🪛 LanguageTool
[style] ~110-~110: This phrase is redundant. Consider writing “details”.
Context: ...with "Thanks," then naturally reference specific details from the body. Avoid "I've taken a look...
(SPECIFIC_DETAILS)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/triage-instructions.md` around lines 1 - 128, The docs build is failing
because the "NemoClaw — Triage Instructions" Markdown document is orphaned (not
referenced by any toctree); fix by adding this document to your Sphinx/Docs
toctree (insert a toctree entry that references "NemoClaw — Triage Instructions"
in the site's main index/toctree page), then re-run the docs preview build to
verify the orphan warning is resolved.
| @@ -0,0 +1,128 @@ | |||
| # NemoClaw — Triage Instructions | |||
There was a problem hiding this comment.
Add SPDX header at the top of the document.
The file is missing the required SPDX license header.
As per coding guidelines, "**/*.{js,ts,tsx,jsx,sh,md}: Include SPDX license header in every source file."
🧰 Tools
🪛 GitHub Actions: Docs PR Preview
[error] 1-1: Warning, treated as error by Sphinx: document isn't included in any toctree
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/triage-instructions.md` at line 1, Add the required SPDX license header
as the very first line of the document "NemoClaw — Triage Instructions"
(docs/triage-instructions.md) so it conforms to the repository rule for source
files matching **/*.{js,ts,tsx,jsx,sh,md}; insert a single-line SPDX header such
as "SPDX-License-Identifier: <LICENSE>" (replace <LICENSE> with the project's
SPDX identifier, e.g., Apache-2.0 or MIT) above the existing title.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
docs/triage-instructions.md (1)
1-5:⚠️ Potential issue | 🟠 MajorAdd required frontmatter fields and SPDX header at the top.
Line 1-Line 5 still lacks the required docs metadata block (
title,description,keywords,topics,tags,content type,difficulty,audience,status) and an SPDX license header after frontmatter.Proposed patch
--- +title: + page: NemoClaw Triage Instructions +description: Canonical AI-assisted label triage rules for NemoClaw issues and pull requests. +keywords: [NemoClaw, triage, labels, GitHub, maintainer] +topics: [maintenance, triage] +tags: [docs, triage] +content type: reference +difficulty: intermediate +audience: maintainers +status: active orphan: true --- + +SPDX-License-Identifier: Apache-2.0As per coding guidelines, "Frontmatter includes title, description, keywords, topics, tags, content type, difficulty, audience, and status fields." and "
**/*.{js,ts,tsx,jsx,sh,md}: Include SPDX license header in every source file."🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` around lines 1 - 5, The file docs/triage-instructions.md is missing the required YAML frontmatter and an SPDX license header; add a top YAML block containing the fields title, description, keywords, topics, tags, content type, difficulty, audience, and status (populate with appropriate values for this doc) immediately after the leading --- and then add an SPDX license header (e.g., // SPDX-License-Identifier: MIT or a Markdown comment variant) directly after the frontmatter; ensure the frontmatter block and SPDX header appear before any content (the existing "# NemoClaw — Triage Instructions") so the parser and license scanner detect them.
🧹 Nitpick comments (1)
docs/triage-instructions.md (1)
114-129: Reduce em-dash density in long guidance lines (LLM pattern detected).Line 114 and Line 129 each use multiple em dashes in one paragraph; split into shorter sentences or use commas/periods instead.
As per coding guidelines, "Excessive em dashes. One per paragraph is fine; multiple per paragraph or em dashes used instead of commas/periods should be flagged."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` around lines 114 - 129, The two paragraphs under the "quality_tier" bullet and the "Tone Rules" list have excessive em-dash usage; edit the docs/triage-instructions.md content for the "**quality_tier** (influencer author, company-affiliated author, or body > 800 chars):" bullet and the related Tone Rules lines to remove multiple em dashes per paragraph by splitting long sentences into shorter sentences and/or replacing extra em dashes with commas or periods so each paragraph uses at most one em dash and reads naturally.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/triage-instructions.md`:
- Around line 108-132: The document ending lacks the required terminal "Next
Steps" section; add a final level-2 header titled "Next Steps" at the bottom of
docs/triage-instructions.md and include a short bulleted list of relevant
internal links (e.g., linking to "Comment Tiers", "Tone Rules", contributing or
page-structure guidelines) so readers can navigate to related pages; ensure the
header text exactly matches "Next Steps" and the links use the same relative
markdown link style as the rest of the file and appear after the existing
content (as the last section).
---
Duplicate comments:
In `@docs/triage-instructions.md`:
- Around line 1-5: The file docs/triage-instructions.md is missing the required
YAML frontmatter and an SPDX license header; add a top YAML block containing the
fields title, description, keywords, topics, tags, content type, difficulty,
audience, and status (populate with appropriate values for this doc) immediately
after the leading --- and then add an SPDX license header (e.g., //
SPDX-License-Identifier: MIT or a Markdown comment variant) directly after the
frontmatter; ensure the frontmatter block and SPDX header appear before any
content (the existing "# NemoClaw — Triage Instructions") so the parser and
license scanner detect them.
---
Nitpick comments:
In `@docs/triage-instructions.md`:
- Around line 114-129: The two paragraphs under the "quality_tier" bullet and
the "Tone Rules" list have excessive em-dash usage; edit the
docs/triage-instructions.md content for the "**quality_tier** (influencer
author, company-affiliated author, or body > 800 chars):" bullet and the related
Tone Rules lines to remove multiple em dashes per paragraph by splitting long
sentences into shorter sentences and/or replacing extra em dashes with commas or
periods so each paragraph uses at most one em dash and reads naturally.
🪄 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: CHILL
Plan: Pro Plus
Run ID: e95ded72-6b81-480e-a6ce-e9916d6d9352
📒 Files selected for processing (1)
docs/triage-instructions.md
…ity rule, docs frontmatter
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
docs/triage-instructions.md (1)
3-3: Align the H1 with the frontmatter title value.The H1 text and frontmatter title are not identical right now. Keep them exactly matched for docs consistency.
As per coding guidelines, "H1 heading matches the
title.pagefrontmatter value."Also applies to: 16-16
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` at line 3, The H1 in docs/triage-instructions.md must exactly match the frontmatter title.page value; update the top-level markdown H1 header to read "NemoClaw Triage Instructions" (matching the frontmatter title) so the H1 heading and the frontmatter title.page are identical; ensure there are no extra whitespace, punctuation or casing differences.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/triage-instructions.md`:
- Around line 1-11: The YAML frontmatter is missing the required difficulty
field; open the top YAML block (the --- delimited frontmatter containing title,
description, keywords, topics, tags, content_type, audience, status) and add a
difficulty entry (e.g., difficulty: beginner|intermediate|advanced) so the
frontmatter includes title, description, keywords, topics, tags, content_type,
difficulty, audience, and status; ensure the new difficulty line follows YAML
formatting and is inside the existing --- frontmatter block.
- Around line 149-150: The two local links "Maintainer Guide"
(maintainer-guide.md) and "Project Workflow" (project-workflow.md) are broken in
CI; update them to Sphinx-friendly references or correct relative paths so docs
build passes. Replace the markdown file links with Sphinx doc roles (e.g.,
:doc:`maintainer-guide` and :doc:`project-workflow`) or adjust the hrefs to the
correct relative locations where those files live, ensuring the link targets
exactly match the Sphinx source filenames used by the build.
---
Nitpick comments:
In `@docs/triage-instructions.md`:
- Line 3: The H1 in docs/triage-instructions.md must exactly match the
frontmatter title.page value; update the top-level markdown H1 header to read
"NemoClaw Triage Instructions" (matching the frontmatter title) so the H1
heading and the frontmatter title.page are identical; ensure there are no extra
whitespace, punctuation or casing differences.
🪄 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: CHILL
Plan: Pro Plus
Run ID: 88faeb17-0b4b-4403-9ba4-1519b6c89e58
📒 Files selected for processing (2)
.agents/skills/nemoclaw-maintainer-triage/SKILL.mddocs/triage-instructions.md
| - [Maintainer Guide](maintainer-guide.md) — community response workflows and comment templates | ||
| - [Project Workflow](project-workflow.md) — board status semantics and label taxonomy |
There was a problem hiding this comment.
Fix broken Next Steps links to restore docs checks.
Both local links currently resolve as broken in CI (maintainer-guide.md, project-workflow.md), and Sphinx treats this as an error.
As per coding guidelines, "Missing SPDX header, broken cross-references, or incorrect code block language: flag as issues."
🧰 Tools
🪛 GitHub Actions: Docs Links PR
[error] 149-149: check-docs (links): broken local link to 'maintainer-guide.md'.
[error] 150-150: check-docs (links): broken local link to 'project-workflow.md'.
🪛 GitHub Actions: Docs PR Preview
[error] 149-149: Sphinx (myst) treated as error: cross-reference target not found: 'maintainer-guide.md' (Warning, treated as error)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/triage-instructions.md` around lines 149 - 150, The two local links
"Maintainer Guide" (maintainer-guide.md) and "Project Workflow"
(project-workflow.md) are broken in CI; update them to Sphinx-friendly
references or correct relative paths so docs build passes. Replace the markdown
file links with Sphinx doc roles (e.g., :doc:`maintainer-guide` and
:doc:`project-workflow`) or adjust the hrefs to the correct relative locations
where those files live, ensuring the link targets exactly match the Sphinx
source filenames used by the build.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
docs/triage-instructions.md (2)
125-125: Split sentences onto separate lines and simplify phrasing.Line 125 contains three sentences on a single line, which reduces diff readability. Additionally, "specific details" is redundant.
♻️ Proposed fix
-- **quality_tier** (influencer author, company-affiliated author, or body > 800 chars): Write 2–3 sentences. Start with "Thanks," then naturally reference specific details from the body. Avoid "I've taken a look at", "I've reviewed", "it appears to", "I can see that" — these sound bot-generated. Write like a human maintainer giving a warm, specific response. +- **quality_tier** (influencer author, company-affiliated author, or body > 800 chars): Write 2–3 sentences. +Start with "Thanks," then naturally reference details from the body. +Avoid "I've taken a look at", "I've reviewed", "it appears to", "I can see that" — these sound bot-generated. +Write like a human maintainer giving a warm, specific response.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` at line 125, Update the **quality_tier** guideline line to use one sentence per line and simplify wording by removing the redundant phrase "specific details"; e.g., split the three sentences into separate lines, keep "Write 2–3 sentences." on its own line, put "Start with 'Thanks,' then reference details from the body." on the next line, and put the prohibition list ("Avoid 'I've taken a look at', ...") on its own line; ensure it still instructs to "Write like a human maintainer giving a warm, specific response."
140-140: Split sentences onto separate lines.Line 140 contains two sentences on a single line, reducing diff readability.
♻️ Proposed fix
-- Do NOT open with praise about detail or thoroughness. Only reference the quality of the report if the body is genuinely exceptional — multiple reproduction steps, version info, logs, and clear expected vs actual behavior. For most reports, skip the praise entirely and go straight to the triage acknowledgment. +- Do NOT open with praise about detail or thoroughness. +Only reference the quality of the report if the body is genuinely exceptional — multiple reproduction steps, version info, logs, and clear expected vs actual behavior. +For most reports, skip the praise entirely and go straight to the triage acknowledgment.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` at line 140, The line containing "Do NOT open with praise about detail or thoroughness. Only reference the quality of the report..." should be split so each sentence is on its own line to improve diff readability; edit the text in docs/triage-instructions.md (the sentence starting "Do NOT open with praise..." and the following sentence starting "Only reference the quality...") so they become two separate lines, preserving punctuation and meaning, and ensure the file follows the "one sentence per line" guideline for similar paragraph entries.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/triage-instructions.md`:
- Around line 1-11: Add the missing required frontmatter key "difficulty" to the
YAML frontmatter block at the top of the document; update the frontmatter (the
existing keys like title, description, keywords, topics, tags, content_type,
audience, and status) to include a difficulty entry with an appropriate value
(e.g., "beginner", "intermediate", or "advanced") so the document conforms to
the docs structure requirements and the nemoclaw-maintainer-triage CLI/dashboard
ingestion.
---
Nitpick comments:
In `@docs/triage-instructions.md`:
- Line 125: Update the **quality_tier** guideline line to use one sentence per
line and simplify wording by removing the redundant phrase "specific details";
e.g., split the three sentences into separate lines, keep "Write 2–3 sentences."
on its own line, put "Start with 'Thanks,' then reference details from the
body." on the next line, and put the prohibition list ("Avoid 'I've taken a look
at', ...") on its own line; ensure it still instructs to "Write like a human
maintainer giving a warm, specific response."
- Line 140: The line containing "Do NOT open with praise about detail or
thoroughness. Only reference the quality of the report..." should be split so
each sentence is on its own line to improve diff readability; edit the text in
docs/triage-instructions.md (the sentence starting "Do NOT open with praise..."
and the following sentence starting "Only reference the quality...") so they
become two separate lines, preserving punctuation and meaning, and ensure the
file follows the "one sentence per line" guideline for similar paragraph
entries.
🪄 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: CHILL
Plan: Pro Plus
Run ID: 6988005a-5800-4fbd-b8ce-e5542c8e257f
📒 Files selected for processing (1)
docs/triage-instructions.md
There was a problem hiding this comment.
♻️ Duplicate comments (1)
docs/triage-instructions.md (1)
1-11:⚠️ Potential issue | 🟠 MajorAdd the missing
difficultyfrontmatter field.The docs frontmatter is still missing
difficulty, which is required fordocs/**/*.mdpages.Proposed fix
--- orphan: true title: "NemoClaw Triage Instructions" description: "AI-assisted label triage instructions for NVIDIA/NemoClaw issues and PRs. Single source of truth for the nemoclaw-maintainer-triage CLI skill and the nvoss-velocity dashboard." keywords: triage, labels, issues, pull requests, maintainer topics: [maintainer, triage, labels] tags: [maintainer, triage] content_type: reference +difficulty: advanced audience: maintainers status: active ---As per coding guidelines, "Frontmatter includes title, description, keywords, topics, tags, content type, difficulty, audience, and status fields."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` around lines 1 - 11, The frontmatter block at the top of the document is missing the required "difficulty" field; update the YAML frontmatter (the leading --- block containing title, description, keywords, topics, tags, content_type, audience, status) to include a difficulty key (e.g., difficulty: beginner|intermediate|advanced) appropriate for the page so it conforms to the docs frontmatter schema.
🧹 Nitpick comments (1)
docs/triage-instructions.md (1)
3-16: Align the H1 text with the frontmatter title exactly.
titleand the H1 currently differ (NemoClaw Triage InstructionsvsNemoClaw — Triage Instructions). Keep them identical to satisfy page-structure consistency.As per coding guidelines, "H1 heading matches the
title.pagefrontmatter value."🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/triage-instructions.md` around lines 3 - 16, Update the document so the H1 heading exactly matches the frontmatter title value "NemoClaw Triage Instructions": change the H1 text currently reading "NemoClaw — Triage Instructions" to "NemoClaw Triage Instructions" so the frontmatter `title` and the H1 are identical; ensure no extra punctuation or em dash remains and preserve the rest of the content and frontmatter unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@docs/triage-instructions.md`:
- Around line 1-11: The frontmatter block at the top of the document is missing
the required "difficulty" field; update the YAML frontmatter (the leading ---
block containing title, description, keywords, topics, tags, content_type,
audience, status) to include a difficulty key (e.g., difficulty:
beginner|intermediate|advanced) appropriate for the page so it conforms to the
docs frontmatter schema.
---
Nitpick comments:
In `@docs/triage-instructions.md`:
- Around line 3-16: Update the document so the H1 heading exactly matches the
frontmatter title value "NemoClaw Triage Instructions": change the H1 text
currently reading "NemoClaw — Triage Instructions" to "NemoClaw Triage
Instructions" so the frontmatter `title` and the H1 are identical; ensure no
extra punctuation or em dash remains and preserve the rest of the content and
frontmatter unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: a05e08f5-be63-4a9e-8666-500b3eaadce7
📒 Files selected for processing (1)
docs/triage-instructions.md
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
|
Still some nits from coderabbit, but none blocking imho |
Summary
docs/triage-instructions.md— single source of truth for AI-assisted label triage. Contains role definition, label guide, skip list, comment tier rules, and tone rules. Extracted and formalized from the nvoss-velocity dashboard prompt/label guide so both the CLI skill and the dashboard use identical instructions..agents/skills/nemoclaw-maintainer-triage/— CLI triage skill for NemoClaw maintainers. Supports single-item mode (give it an issue/PR number) and batch mode (fetches all unlabeled open items). Applies labels and optional triage comments viaghCLI on approval. Logs sessions to~/development/daily-rhythm/activity/nemoclaw-triage-log.md.Architecture note
The skill reads
docs/triage-instructions.mdat runtime viacat. The nvoss-velocity dashboard will fetch the same file from GitHub at generation time (separate PR). This keeps execution paths independent while preventing the labeling logic from drifting between the two environments.Test plan
priority: highis only suggested for genuinely blocking issuesenhancementis not suggested alongsideenhancement: *sub-labels🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation