Skip to content

fix(skills): enforce stale verification controls - #8309

Merged
cv merged 39 commits into
mainfrom
fix/verify-stale-skill
Aug 13, 2026
Merged

fix(skills): enforce stale verification controls#8309
cv merged 39 commits into
mainfrom
fix/verify-stale-skill

Conversation

@prekshivyas

@prekshivyas prekshivyas commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

Prevents stale-issue verification from assigning a fixed verdict unless the same reviewed reproducer exposes the reported symptom on the reported release. The workflow installs requested release tags, treats issue content as untrusted, requires approval before execution or GitHub writes, and verifies cleanup before comparing releases.

Changes

  • Select the newest vX.Y.Z release tag and require a matching reported-release result before fixed scoring.
  • Normalize supported Brev inventory shapes and instance-name fields before reuse, collision, and concurrency checks.
  • Drop LangChain Deep Agents Code issues from the v1 workflow instead of substituting OpenClaw.
  • Require dedicated credential-bearing instances, confirmed deletion, and credential rotation when deletion is not confirmed.
  • Verify installer sandbox removal and reset acceptance criteria before each release comparison.
  • Cover performance, resource growth, lifecycle boundaries, intermittent results, architecture changes, and by-design outcomes with named evidence requirements.
  • Redact standalone bearer credentials and add policy regression coverage for these controls.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: this changes a maintainer-only agent workflow and does not change a supported user-facing command, configuration, or public documentation surface.
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: PASS — the nine-category review found no remaining findings after cleanup was bound to the containers absent from the pre-run inventory and the architecture drift check included the host startup script.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: no failed local check was accepted.

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: Independent review: PASS — the maintainer guidance defines the reported-release gate, untrusted-reproducer review, credential custody, bounded Brev actions, cleanup confirmation, and GitHub write approval without changing a supported user-facing surface. Focused integration tests passed 68/68; normal pre-commit and commit-msg hooks passed.
  • Agent: Codex Desktop documentation writer

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
    • Normal pre-commit and commit-msg hooks passed on the repair commits. The final push ran the normal pre-push checks; CLI TypeScript and package-version checks passed.
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — npx vitest run --project integration test/maintainer-skills-policy.test.ts test/skills-frontmatter.test.ts (2 files, 51 tests passed)
  • Applicable broad gate passed — not run; npm run checks:repository passed as a focused repository check.
  • Quality Gates section completed with required justifications or waivers.
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Additional focused checks:

  • npm run checks:repository
  • npx vitest run --project integration test/maintainer-skills-policy.test.ts test/skills-frontmatter.test.ts
  • npx --yes markdownlint-cli2@0.22.0 '.agents/skills/nemoclaw-maintainer-verify-stale/**/*.md'
  • git diff --check
  • NUL-byte check across the nine changed files
  • Independent documentation writer review: PASS with no findings on 6234ac308

Signed-off-by: Prekshi Vyas prekshiv@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added safer stale-issue verification with bounded reproductions, exact-release validation, approval checkpoints, and secure credential handling.
    • Added automated sanitization for credentials, authorization data, internal domains, email addresses, and local paths.
    • Expanded verification for performance, rebuild cycles, architecture changes, and intentional feature removal.
  • Bug Fixes

    • Improved handling of installation, infrastructure, cleanup, and inconclusive verification failures.
    • Strengthened candidate filtering, release detection, evidence ownership, and race-condition handling.
  • Tests

    • Expanded coverage for safety controls, bounded execution, redaction, and secure evidence processing.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

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 verify-stale workflow now validates exact release tags, treats issue reproducers as untrusted, requires approval before remote or GitHub effects, bounds local and Brev execution, redacts evidence, and routes installation or baseline failures to inconclusive outcomes.

Changes

Verify-stale workflow

Layer / File(s) Summary
Candidate intake and intent evidence
.agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md, .agents/skills/nemoclaw-maintainer-verify-stale/reference/candidate-selection.md, .agents/skills/nemoclaw-maintainer-verify-stale/reference/by-design.md
Candidate discovery uses private evidence storage, native Issue Type data, exact release tags, refined exclusions, and explicit evidence before a by-design verdict.
Safe reproducer and local verification
.agents/skills/nemoclaw-maintainer-verify-stale/reference/environment-and-reproducer.md, .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py, test/maintainer-skills-policy.test.ts
Reproducer review, credential handling, isolated local execution, evidence redaction, failure handling, and policy tests enforce bounded and approved verification.
Brev provisioning and verification
.agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md, .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md, test/maintainer-skills-policy.test.ts
Brev reuse, provisioning, reset, installation, dependency setup, locks, and verification rubrics use ownership checks, time limits, exact versions, cleanup, and infrastructure-failure handling.
Verdicts, comments, and activity records
.agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md, .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md
Scoring, baseline requirements, redacted comments, race checks, partial writes, cleanup, activity records, and scheduling guidance reflect controlled verification outcomes.

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

Possibly related PRs

  • NVIDIA/NemoClaw#8523: Its OpenShell runtime upgrade relates to this PR’s exact release-tag and version-validation changes.

Suggested labels: area: security, area: policy, bug-fix

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: enforcing stronger stale-verification controls.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/verify-stale-skill

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

@github-code-quality

github-code-quality Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit fba6e64 in the fix/verify-stale-ski... branch remains at 96%, unchanged from commit 6160df1 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit fba6e64 in the fix/verify-stale-ski... branch remains at 82%, unchanged from commit 6160df1 in the main branch.

Show a code coverage summary of the most impacted files.
File main 6160df1 fix/verify-stale-ski... fba6e64 +/-
src/lib/credentials/store.ts 57% 57% 0%
src/lib/sandbox...rce-identity.ts 86% 86% 0%
src/lib/tunnel/services.ts 80% 80% 0%
src/lib/state/config-io.ts 93% 95% +2%
src/lib/messagi...annel-config.ts 95% 99% +4%

Updated August 13, 2026 07:10 UTC

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Blocking findings reported

Advisor assessment: Blockers require maintainer review
Next action: Review the blockers below.
Findings: 2 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 2 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections differ; Nemotron reported 2 fewer blockers, the same number of warnings, the same number of suggestions.
3 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • Brev instance at .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md:55: selected only by the second-opinion lane as established.
  • reported release at .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md:3: selected only by the second-opinion lane as define.
  • newest release tag at .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md:3: selected only by the second-opinion lane as justified.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

4 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — credential-bearing at .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md:21: Keep `credential-bearing` for runs and files that can expose credential material.
  • justified — newest release tag at .agents/skills/nemoclaw-maintainer-verify-stale/reference/candidate-selection.md:137: Keep `newest release tag` where the workflow must distinguish the highest exact tag from the installer default.
  • define — reported release at .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md:325: Define `reported release` at the two-pass verification description and use it consistently for the baseline pass.
  • define — architecture change at .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:214: Define `architecture change` at the check that triggers multi-axis evidence, then use it consistently.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: None

Manual-only E2E: cloud-onboard, security-posture, cloud-inference
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

1 optional E2E recommendation
  • bootstrap-install-smoke

Blockers

PRA-1 Blocker — Verify the root installer before a historical-tag install

  • Location: .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md:454
  • Category: correctness
  • Problem: The archive check does not cover the installer that historical release tags execute. A root-only historical installer starts its bootstrap path, fetches the selected ref from GitHub again, and runs that fetched source.
  • Impact: A stale-verification run can execute source outside the transferred, checksummed archive while its evidence claims that it executed only verified extracted source.
  • Fix: For root-only historical installers, execute the archive's installer without its refetch bootstrap path, or verify that any fetched checkout resolves to the archive's exact commit before execution.
  • Verification: Create a fixture tag with only root `install.sh` and trace whether its bootstrap calls `git fetch` before the installer payload runs.
  • Test coverage: Add a root-only historical-release fixture that proves the workflow does not execute a refetched installer, or proves the refetched checkout commit equals the archived commit before execution.
  • Evidence: reference/brev-provisioning.md:454-458 states that the installer builds from the verified extracted tree and performs no later repository lookup. install.sh:62-100 defines `exec_installer_from_ref`, which initializes a repository, fetches the ref from GitHub, and executes the fetched payload or legacy root installer. The archive validation accepts a nonempty regular root `install.sh`, so this compatibility path remains supported.

PRA-2 Blocker — Do not terminate unowned processes on a reused instance

  • Location: .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md:498
  • Category: correctness
  • Problem: The reset records pre-existing container identifiers but does not record process identifiers. It kills every process whose command line matches the NemoClaw or OpenShell pattern after reuse checks inspect only the sentinel and registered sandboxes.
  • Impact: A verification run can terminate an unrelated process on a reused Brev instance, despite the workflow's ownership-bound cleanup contract.
  • Fix: Record matching process identifiers before verification and terminate only processes that the run created, or do not reuse an instance that has matching processes.
  • Verification: Inspect the reset after seeding a reused-instance fixture with a matching process that is absent from the sandbox registry.
  • Test coverage: Add a reused-instance fixture with an unregistered process whose command line matches `/nemoclaw` or `/openshell` and assert that reset preserves it.
  • Evidence: reference/brev-provisioning.md:498-499 runs `pkill -9 -f` for all matching `/nemoclaw` and `/openshell` command lines. reference/brev-provisioning.md:270-281 checks the reuse sentinel and registered sandboxes but does not inspect matching processes. reference/brev-provisioning.md:535-560 records and preserves pre-existing container identifiers, showing that no equivalent process ownership boundary exists.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@prekshivyas prekshivyas self-assigned this Aug 5, 2026
@prekshivyas
prekshivyas requested a review from cv August 5, 2026 14:50
@prekshivyas
prekshivyas marked this pull request as ready for review August 5, 2026 14:50

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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/nemoclaw-maintainer-verify-stale/reference/by-design.md:
- Around line 64-68: Escape issue-derived text before shell interpolation: in
by-design.md lines 64-68, assign the symbol to a variable and pass it to git
grep as a quoted -e argument; in reproduction-rubrics.md lines 53-66, assign the
redacted symptom phrase to a variable and pass it to grep -F -- with quotes.
Apply the same safe argument handling at both sites while preserving the
evidence-capture workflow.

In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:
- Around line 272-277: Update the performance-sample scoring flow around the
loop writing `${PERF_SIDE}-perf-exits.log` to read and validate all ten recorded
exit codes before calculating p50 or p90. Accept only ten expected successful
exit codes; if any sample fails or the count is incomplete, mark that side
inconclusive and ensure the final result is verify-inconclusive for both
baseline and latest rather than scoring recorded durations.
🪄 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: CHILL

Plan: Enterprise

Run ID: e6fa341b-342e-4175-82f9-4a4fa35c4f63

📥 Commits

Reviewing files that changed from the base of the PR and between ead85bc and d301b03.

📒 Files selected for processing (9)
  • .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/by-design.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/candidate-selection.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/environment-and-reproducer.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py
  • test/maintainer-skills-policy.test.ts

Comment thread .agents/skills/nemoclaw-maintainer-verify-stale/reference/by-design.md Outdated
cv added 7 commits August 6, 2026 20:01
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@cv cv changed the title fix(skills): harden stale issue verification fix(skills): enforce stale verification controls Aug 7, 2026
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
.agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md (1)

358-400: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Serialize shared activity-log writes.

Scheduled batch runs and manual runs can share VERIFY_STALE_LOG_DIR. Per-issue appends and end-of-batch prepends are separate file operations. Concurrent runs can interleave entries or overwrite a session summary.

Use a lock or atomic write protocol. Alternatively, write unique per-run files and merge them atomically.

🤖 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/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md
around lines 358 - 400, Serialize all writes to the shared
VERIFY_STALE_LOG_DIR/nemoclaw-verify-stale-log.md activity log, including
per-issue appends and end-of-batch session-summary prepends. Update the
verification logging flow to use a lock or atomic read-modify-write protocol so
concurrent scheduled and manual runs cannot interleave entries or overwrite
summaries; preserve the existing behavior when VERIFY_STALE_LOG_DIR is unset.
.agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md (2)

284-310: ⚠️ Potential issue | 🟠 Major

Reject failed performance samples before scoring.

The harness writes ${PERF_SIDE}-perf-exits.log, but the scoring path validates only ten numeric timing samples. It never validates the ten exit codes. Ten fast failures can therefore produce an in-SLA p50/p90 and a false fixed-on-latest result. Require ten expected successful exit codes before calculating percentiles. Otherwise select verify-inconclusive.

🤖 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/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md
around lines 284 - 310, Update the percentile-scoring flow around PERF_SAMPLES
to read and validate ${PERF_SIDE}-perf-exits.log before calculating P50_MS or
P90_MS. Require exactly ten exit codes, all matching the reproducer’s expected
successful code; on any missing, malformed, or non-success code, select
verify-inconclusive and do not score performance. Preserve the existing numeric
sample validation and percentile calculations for valid runs.

200-215: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use a portable word-boundary check.

The drift command uses GNU-specific \b syntax with grep -E. macOS BSD grep can skip all tool names. Use POSIX character classes or Python, then test the command with GNU and BSD grep.

🤖 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/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md
around lines 200 - 215, Update the tool-name extraction in the
architecture-drift check to use a portable POSIX word-boundary approach instead
of GNU-specific \b with grep -E. Preserve multi-word tool matching and macOS
system Bash compatibility, and ensure the command works with both GNU and BSD
grep.
🤖 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/nemoclaw-maintainer-verify-stale/reference/candidate-selection.md:
- Around line 105-107: Update the batch-mode candidate processing instructions
to bind ISSUE_NUMBER to the current candidate before querying comments. Ensure
each verification plan uses that candidate’s issue number, avoiding
unset-variable failures and inherited values from other issues.

In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/environment-and-reproducer.md:
- Around line 250-255: Update the local version probe near NEMOCLAW_BIN and
LOCAL_VERSION to execute through the existing bounded Python helper instead of
invoking the binary directly. Preserve the captured version output, and treat
helper timeouts as an inconclusive local result so the skill cannot hang on a
broken nemoclaw binary.
- Around line 292-294: Update the local reproducer validator’s argument
validation to match the complete argv vector against explicit read-only command
forms, rather than checking only argv[1] or help flags anywhere. Reject extra
arguments and write flags, while preserving the permitted read-only commands and
help forms before execution.

In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:
- Around line 148-157: Update the resolved-version verification around
run_bounded and RESOLVED so its exit status is captured before any tail or
version parsing occurs. Store the command output in a temporary file, check the
run_bounded result—including timeouts—and set LATEST_INSTALL_FAILED=1
immediately on any non-zero status; only parse and compare RESOLVED_SEMVER when
the remote nemoclaw --version command succeeds.

In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md:
- Around line 234-241: Update the evidence templates for baseline verification
and newest-release verification so fixed evidence is not emitted when baseline
installation or reproduction fails. In the scoring and logging guidance, make
the rows conditional or split them into separate templates: use
verify-inconclusive for baseline-stop paths, recording n/a and one redacted
failure line, while retaining newest-only results only for successful baseline
verification.
- Around line 26-27: Update both scoring rules in the scoring documentation so
the +50 newest-release signal requires the reviewed reproducer to match the
reported symptom on the exact $REPORTED_VERSION tag before confirming the
expected exit and absence of the symptom on the newest tag. Apply the same
reported-version symptom-match prerequisite to the +25 fallback rule, preserving
the existing mixed-results and newest-release conditions.

---

Outside diff comments:
In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:
- Around line 284-310: Update the percentile-scoring flow around PERF_SAMPLES to
read and validate ${PERF_SIDE}-perf-exits.log before calculating P50_MS or
P90_MS. Require exactly ten exit codes, all matching the reproducer’s expected
successful code; on any missing, malformed, or non-success code, select
verify-inconclusive and do not score performance. Preserve the existing numeric
sample validation and percentile calculations for valid runs.
- Around line 200-215: Update the tool-name extraction in the architecture-drift
check to use a portable POSIX word-boundary approach instead of GNU-specific \b
with grep -E. Preserve multi-word tool matching and macOS system Bash
compatibility, and ensure the command works with both GNU and BSD grep.

In
@.agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md:
- Around line 358-400: Serialize all writes to the shared
VERIFY_STALE_LOG_DIR/nemoclaw-verify-stale-log.md activity log, including
per-issue appends and end-of-batch session-summary prepends. Update the
verification logging flow to use a lock or atomic read-modify-write protocol so
concurrent scheduled and manual runs cannot interleave entries or overwrite
summaries; preserve the existing behavior when VERIFY_STALE_LOG_DIR is unset.
🪄 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: CHILL

Plan: Enterprise

Run ID: 53611ae7-5b00-42a7-a347-ad83b49c636f

📥 Commits

Reviewing files that changed from the base of the PR and between d301b03 and 05f7e41.

📒 Files selected for processing (9)
  • .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/by-design.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/candidate-selection.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/environment-and-reproducer.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py
  • test/maintainer-skills-policy.test.ts
🚧 Files skipped from review as they are similar to previous changes (5)
  • test/maintainer-skills-policy.test.ts
  • .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py
  • .agents/skills/nemoclaw-maintainer-verify-stale/SKILL.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/by-design.md
  • .agents/skills/nemoclaw-maintainer-verify-stale/reference/brev-provisioning.md

Comment thread .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md Outdated
cv added 8 commits August 6, 2026 21:02
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv
cv previously requested changes Aug 11, 2026

@cv cv left a comment

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.

  1. .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py:40 matches authentication headers only when an unquoted header name starts the line. Structured log forms such as {"Cookie":"session=topsecret"} remain unchanged. Because Step 10 permits inspection and public quotation after this helper runs, a session credential can cross the evidence boundary and enter a GitHub comment. Redact quoted and structured Cookie and Set-Cookie forms, and add negative regression cases in test/maintainer-skills-policy.test.ts:612 for JSON and spaced assignment forms. Regression evidence: the current pattern returned {"Cookie":"session=topsecret"} unchanged; existing tests cover only canonical line-oriented headers.
  2. .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:222 uses the non-POSIX \b extension with grep -E, although this command is documented for macOS system tools. BSD grep can return no tool names, which skips architecture-drift and multi-axis checks and can produce a false fixed-on-latest verdict. Use a portable boundary expression or Python extraction, and add an executable compatibility regression test. Existing policy tests do not execute this extraction path.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@prekshivyas

Copy link
Copy Markdown
Collaborator Author

Addressed both blocking findings in 8fcf0d0: structured/quoted Cookie and Set-Cookie evidence is redacted, and architecture-drift extraction uses a portable POSIX boundary with an executable regression. Focused policy regressions, full pre-commit hooks, and the pre-push TypeScript CLI check passed. @cv please re-review the exact head.

@prekshivyas
prekshivyas requested a review from cv August 11, 2026 18:36
@cv
cv dismissed their stale review August 11, 2026 21:13

The latest PR commit redacts structured Cookie forms and replaces the non-portable grep boundary with executable regression coverage.

cv
cv previously requested changes Aug 11, 2026

@cv cv left a comment

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.

  1. .agents/skills/nemoclaw-maintainer-verify-stale/scripts/redact-evidence.py:40-47 still permits authentication and session credentials to cross the public-evidence boundary. Quoted JSON Authorization and Proxy-Authorization fields are not matched, and escaped quotes terminate the new cookie-value match early. The helper returned {"Authorization":"Basic dXNlcjp0b3BzZWNyZXQ="} unchanged and transformed {"Cookie":"session=\"opaquevalue\""} into {"Cookie":[REDACTED]opaquevalue\""}. Step 10 permits inspection and public quotation after this helper runs, so these values can enter a GitHub comment. Redact quoted, structured, spaced-assignment, and escape-containing forms for all four authentication/session headers. Add negative regression cases at test/maintainer-skills-policy.test.ts:612 for structured Basic authorization and escaped Cookie/Set-Cookie values. Synchronize the claimed pattern at .agents/skills/nemoclaw-maintainer-verify-stale/reference/scoring-comments-and-logging.md:143 with the implemented behavior.
  2. .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:222 extracts only openshell and nemoclaw commands. An approved openclaw channels add telegram reproducer produces no drift-check entry, although Step 6 explicitly accepts OpenClaw reproducers. This silently skips architecture-drift and multi-axis checks and can produce a false fixed-on-latest verdict after an OpenClaw surface changes. Include openclaw in extraction and add an executable regression case at test/maintainer-skills-policy.test.ts:661; the current pipeline returned empty output for that command.

@prekshivyas

Copy link
Copy Markdown
Collaborator Author

Addressed both fresh review findings at exact head 3ba6905a1.

  • The evidence redactor now treats Authorization, Proxy-Authorization, Cookie, and Set-Cookie as one fail-closed credential family across line headers, spaced assignments, quoted structured fields, and quoted values containing escaped characters.
  • Added executable negative cases for structured Basic credentials and escaped Cookie/Set-Cookie values.
  • Architecture-drift extraction now includes openclaw; the executable case proves openclaw channels add telegram produces the expected drift-check entry.
  • Synchronized the documented redaction contract with the implementation.

Validation: both focused executable regressions pass; full staged pre-commit gate passes (including gitleaks/markdown/repository checks/test budgets/skills YAML); pre-push gate passes. The full policy file also has 27 passing tests and one unrelated pre-existing local failure in the supersession parser case; the current remote head passed that required CI test before this focused change, and new CI is running now.

@prekshivyas
prekshivyas requested a review from cv August 11, 2026 22:04
@cv
cv dismissed their stale review August 12, 2026 06:11

Commits after this review cover structured and escaped credential redaction, idempotence, and the OpenClaw architecture-drift command. The submitted blockers no longer apply to the latest PR commit.

cv
cv previously requested changes Aug 12, 2026

@cv cv left a comment

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.

  1. .agents/skills/nemoclaw-maintainer-verify-stale/reference/reproduction-rubrics.md:227 limits architecture-drift history to src/, bin/, and nemoclaw/src/. The accepted openclaw channels add telegram reproducer is implemented by the guard at scripts/nemoclaw-start.sh:3669-3925, outside that pathspec. Extraction now emits openclaw channels, but a release that changes this guard can still produce an empty drift result. The workflow can then skip multi-axis verification and publish a false fixed-on-latest verdict. Include each owning OpenClaw command surface in the drift check, at least scripts/nemoclaw-start.sh and applicable plugin or wrapper paths, or map extracted commands to authoritative paths. Extend test/maintainer-skills-policy.test.ts:676-698 with an executable history fixture that changes the OpenClaw guard outside the current pathspec and asserts that drift is detected. The current regression test checks extraction only, so it passes while this bypass remains.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot added v0.0.109 Release target and removed v0.0.108 labels Aug 13, 2026
@cv

cv commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Security review — latest PR commit fba6e64fce3f00621cee65f9818c598ebceb3c92: PASS with no remaining findings.

  1. Secrets and Credentials — PASS. Reproducer content is treated as untrusted, credential-bearing runs require dedicated instances, evidence is redacted, and failed deletion triggers credential rotation guidance.
  2. Input Validation and Data Sanitization — PASS. Exact release tags, normalized Brev inventory shapes, bounded command inputs, and redacted evidence fail closed.
  3. Authentication and Authorization — PASS. Remote and GitHub writes require explicit maintainer approval; reusable instances use an exclusive run token.
  4. Dependencies and Third-Party Libraries — PASS. Release installers come from exact fetched tags, complete objects are verified, archives are checksummed before remote execution, and no dependency is added.
  5. Error Handling and Logging — PASS. Infrastructure, cleanup, timeout, and inconclusive outcomes remain distinct; logs are owner-only and redacted before publication.
  6. Cryptography and Data Protection — PASS. SHA-256 binds the locally created release archive to the remote copy; raw credential material is not accepted as evidence.
  7. Configuration and Security Headers — PASS. No application header or policy surface changes; environment controls are validated and scoped to the approved run.
  8. Security Testing — PASS. The focused suite passed 68/68, including executable regression coverage for exact-tag staging, redaction, host-startup architecture drift, and ownership-bound container cleanup.
  9. System Security — PASS. Reset records pre-existing container IDs after exclusive acquisition, removes only matching containers absent from that inventory, confirms pre-existing containers remain, and stops if ownership evidence is missing. Process, port, state, and install-path cleanup remains explicit and bounded.

This review replaces the prior container-ownership and architecture-path blockers. Fresh GitHub checks and commit verification remain required before merge.

@cv cv left a comment

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.

Reviewed latest PR commit fba6e64fce3f00621cee65f9818c598ebceb3c92. The final branch binds reset cleanup to post-acquisition container ownership evidence, verifies pre-existing containers remain, and includes the host startup script in architecture drift detection. Focused tests and the nine-category security review pass with no remaining findings. Approval remains subject to current required checks and GitHub commit verification.

@cv
cv dismissed their stale review August 13, 2026 07:03

Dismissed as stale: the latest commit includes the host startup and agent wrapper paths in drift detection and adds an executable Git history regression fixture.

@cv
cv merged commit 80332f9 into main Aug 13, 2026
70 of 73 checks passed
@cv
cv deleted the fix/verify-stale-skill branch August 13, 2026 07:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: skills Skills, agent behaviors, prompts, or skill packaging bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior security v0.0.109 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants