Skip to content

chore(release): make daily tag flow semi-automatic - #8485

Open
cjagwani wants to merge 7 commits into
mainfrom
codex/semi-automatic-daily-tag
Open

chore(release): make daily tag flow semi-automatic#8485
cjagwani wants to merge 7 commits into
mainfrom
codex/semi-automatic-daily-tag

Conversation

@cjagwani

@cjagwani cjagwani commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Before this change, the release skill required a candidate-bound E2E ledger before a maintainer-confirmed tag. After this change, the 4 PM release remains maintainer-confirmed and locally signed, but E2E runs asynchronously on every push to main and never blocks tagging or merging.

Changes

  • Keep the daily tag semi-automatic: the agent verifies the merged dated changelog and housekeeping, generates the release plan, exercises the maintainer workstation's signer, and requests the exact confirmation phrase.
  • Keep release signing keys out of GitHub Actions and do not introduce a release bot.
  • Remove the obsolete pre-tag E2E evidence command, implementation, and tests.
  • Update maintainer skills and policy for SHA-bound post-merge E2E triage from 4 PM through 8 AM while merges continue normally.
  • Update the maintainer skill and policy contract tests.

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 maintainer-only release policy and removes an internal E2E evidence helper; no public CLI, configuration, runtime default, or support claim changes.
  • 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: The existing local signing boundary remains unchanged; policy and contract tests explicitly reject a GitHub Actions signing secret or release bot.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: No docs/ page owns the maintainer-only daily tag procedure. Carlos's merged ci(e2e): run every workflow E2E on main #8477 owns and documents full E2E on every main push; historical changelog entries remain unchanged.
  • Agent: Codex Desktop

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
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — initial skill/policy suite: npm exec vitest run -- test/maintainer-skills-policy.test.ts test/maintainer-e2e-skill.test.ts --testTimeout=30000 (33 passed); review fix: npm exec vitest run -- test/maintainer-skills-policy.test.ts --testTimeout=30000 (19 passed), plus direct portable command execution against v0.0.103 (exactly one match)
  • Applicable broad gate passed — Not applicable; focused maintainer skill/policy contracts and normal hooks cover this change.
  • 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)

Signed-off-by: Charan Jagwani cjagwani@nvidia.com

Summary by CodeRabbit

  • Release Process

    • Release tagging is scheduled for 4 PM Pacific and requires a merged changelog, housekeeping verification, explicit maintainer confirmation, and local signing.
    • Releases can proceed independently of E2E test status.
    • Overnight E2E results are handled asynchronously for post-release stabilization and triage.
  • Documentation

    • Updated maintainer guidance for the revised release schedule, confirmation process, and E2E workflow.
    • Clarified changelog and release documentation requirements.
    • E2E runs now provide SHA-bound diagnostic evidence without blocking merges or release tags.
    • Removed deprecated release E2E evidence and gating procedures.

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
@cjagwani cjagwani self-assigned this Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 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 release process now uses a 4 PM locally signed tag based on the planned origin/main commit. E2E runs provide SHA-bound diagnostic evidence and do not block tagging or merging. Maintainer guidance, policy references, and tests reflect asynchronous overnight stabilization.

Changes

Release flow

Layer / File(s) Summary
Release-tag preparation and verification
.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md, .agents/skills/nemoclaw-skills-guide/SKILL.md, package.json, test/maintainer-skills-policy.test.ts
The release skill verifies the dated changelog, generates a current-main plan, confirms a local signer, creates a signed tag after exact maintainer confirmation, and validates release state. The obsolete E2E evidence command was removed. Tests validate semver tags and matching changelog headings.
Daily cadence and overnight stabilization
.agents/skills/nemoclaw-maintainer-day/PR-REVIEW-PRIORITIES.md, .agents/skills/nemoclaw-maintainer-evening/SKILL.md, .agents/skills/nemoclaw-maintainer-policies/references/*
The 4 PM release boundary permits continued merging. E2E failures move to overnight SHA-bound triage instead of blocking tags or merges.
SHA-bound diagnostic evidence
.agents/skills/nemoclaw-maintainer-e2e/SKILL.md, test/maintainer-e2e-skill.test.ts
Full E2E runs against origin/main are classified as diagnostic evidence tied to the validated SHA. Release E2E evidence generation and its dedicated tests were removed.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseAgent
  participant originMain
  participant Maintainer
  participant E2EWorkflow

  ReleaseAgent->>originMain: Generate 4 PM release plan
  ReleaseAgent->>Maintainer: Request exact tag confirmation
  Maintainer->>ReleaseAgent: Confirm local signing
  ReleaseAgent->>originMain: Create signed tag with release:cut
  originMain->>E2EWorkflow: Trigger SHA-bound E2E run
  E2EWorkflow-->>ReleaseAgent: Return diagnostic result for overnight triage
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#8477: This PR removes the release E2E evidence workflow and policies introduced there.
  • NVIDIA/NemoClaw#8518: Both PRs modify SHA-bound E2E evidence and release-gating behavior.
  • NVIDIA/NemoClaw#8532: Both PRs define DGX Spark qualification as asynchronous, non-release-gating E2E behavior.

Suggested labels: release-target, v0.0.105

Suggested reviewers: apurvvkumaria, cv

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: making the daily release tag flow semi-automatic.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/semi-automatic-daily-tag

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

@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: 1

🤖 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-cut-release-tag/SKILL.md:
- Around line 20-21: Update the changelog validation instructions around the
line-40 search to use the selected release version rather than the literal
vX.Y.Z placeholder. Require exactly one dated docs/changelog/YYYY-MM-DD.mdx file
containing the exact planned ## vX.Y.Z heading, and fail validation when zero or
multiple entries match.
🪄 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: 026e4a89-ea4b-4838-9ba9-f79f2f697508

📥 Commits

Reviewing files that changed from the base of the PR and between affe641 and 5257437.

📒 Files selected for processing (12)
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
  • .agents/skills/nemoclaw-maintainer-day/PR-REVIEW-PRIORITIES.md
  • .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
  • .agents/skills/nemoclaw-maintainer-evening/SKILL.md
  • .agents/skills/nemoclaw-maintainer-policies/references/daily-flow.md
  • .agents/skills/nemoclaw-maintainer-policies/references/release-train.md
  • .agents/skills/nemoclaw-skills-guide/SKILL.md
  • package.json
  • test/maintainer-e2e-skill.test.ts
  • test/maintainer-skills-policy.test.ts
  • test/release-e2e-evidence.test.ts
💤 Files with no reviewable changes (3)
  • package.json
  • test/release-e2e-evidence.test.ts
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts

Comment thread .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
Signed-off-by: Charan Jagwani <cjagwani@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.

🧹 Nitpick comments (1)
test/maintainer-skills-policy.test.ts (1)

246-254: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test changelog validation through observable behavior.

These assertions only check that implementation fragments occur in the Markdown. They do not prove that one matching changelog succeeds or that zero and multiple matches fail. Execute the validation command against temporary Git fixtures, or expose it through a testable script and assert its exit status and output.

As per path instructions, tests must provide behavioral confidence rather than implementation lock-in.

🤖 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 `@test/maintainer-skills-policy.test.ts` around lines 246 - 254, Replace the
fragment-based assertions in the changelog validation section of
maintainer-skills-policy tests with behavioral tests that run the release
validation command against temporary Git fixtures. Cover exactly one matching
dated changelog heading as success, and zero or multiple matches as failure,
asserting exit status and relevant output rather than script text.

Source: Path instructions

🤖 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.

Nitpick comments:
In `@test/maintainer-skills-policy.test.ts`:
- Around line 246-254: Replace the fragment-based assertions in the changelog
validation section of maintainer-skills-policy tests with behavioral tests that
run the release validation command against temporary Git fixtures. Cover exactly
one matching dated changelog heading as success, and zero or multiple matches as
failure, asserting exit status and relevant output rather than script text.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: c7fde54b-1ef5-48bc-a935-bfc551fc7b64

📥 Commits

Reviewing files that changed from the base of the PR and between 5257437 and 26ef0cf.

📒 Files selected for processing (2)
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
  • test/maintainer-skills-policy.test.ts

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / low confidence
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions
Status: Partial review preserved 0 canonical finding(s) and 4 terminology decision(s) before the advisor stopped.

Model lanes

  • GPT-5.6 Terra (primary): Failed after a partial review · low confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Failed after a partial review · low confidence · 3 blockers · 0 warnings · 0 suggestions

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.

  • justified — semi-automatic at .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md:12: Keep the term with its adjacent definition of agent actions and maintainer confirmation.
  • justified — asynchronous E2E stabilization at .agents/skills/nemoclaw-maintainer-policies/references/release-train.md:48: Keep the term with the section's stated timing, SHA binding, and non-gating effect.
  • justified — SHA-bound diagnostic evidence at .agents/skills/nemoclaw-maintainer-e2e/SKILL.md:340: Keep the modifier because it identifies both the commit binding and the non-authorizing purpose.
  • established — release-prep docs at .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md:20: Continue to use the established term for the pre-tag dated changelog requirement.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite against this exact revision.

Recommended E2E: cloud-inference, cloud-onboard, security-posture

Workflow run details

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

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit f4f8007 in the codex/semi-automatic... branch remains at 96%, unchanged from commit a506354 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit f4f8007 in the codex/semi-automatic... branch remains at 81%, unchanged from commit a506354 in the main branch.

Show a code coverage summary of the most impacted files.
File main a506354 codex/semi-automatic... f4f8007 +/-
src/lib/onboard...try-metadata.ts 100% 70% -30%
src/lib/core/pr...mpt-activity.ts 92% 67% -25%
src/lib/onboard...conciliation.ts 100% 83% -17%
src/lib/inferen...naged-status.ts 88% 80% -8%
src/lib/onboard...ed-lifecycle.ts 79% 75% -4%
src/lib/actions...l-validation.ts 97% 94% -3%
src/lib/onboard.ts 31% 31% 0%
src/lib/trace.ts 90% 94% +4%
src/lib/actions...ridge-policy.ts 69% 74% +5%
src/lib/securit...ate-endpoint.ts 92% 99% +7%

Updated August 08, 2026 01:09 UTC

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

This PR changes a release and security gate by making E2E permanently non-blocking for tags and merges, but it has no linked accepted issue or maintainer design decision. Record the decision that defines which post-merge failures can block release, who owns 4 PM–8 AM triage, and how a failing exact release SHA is handled before removing candidate-bound evidence. Then refresh onto current main and rerun the release-skill and policy contract checks.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

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.

@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: 1

🤖 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-policies/references/release-train.md:
- Line 34: Align the release membership contract across the release-tag skill,
label housekeeping, and tests so post-4 PM merges cannot inconsistently enter an
already planned release. Prefer freezing the candidate at the 4 PM cutoff and
tagging the immutable planned SHA, then update the rules around regenerating
plans, carry-forward handling, and related test expectations to enforce that
boundary consistently.
🪄 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: 73dc88dc-867b-43ec-a56e-025c9a508a6d

📥 Commits

Reviewing files that changed from the base of the PR and between bec45ca and 70f2b94.

📒 Files selected for processing (12)
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
  • .agents/skills/nemoclaw-maintainer-day/PR-REVIEW-PRIORITIES.md
  • .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
  • .agents/skills/nemoclaw-maintainer-evening/SKILL.md
  • .agents/skills/nemoclaw-maintainer-policies/references/daily-flow.md
  • .agents/skills/nemoclaw-maintainer-policies/references/release-train.md
  • .agents/skills/nemoclaw-skills-guide/SKILL.md
  • package.json
  • test/maintainer-e2e-skill.test.ts
  • test/maintainer-skills-policy.test.ts
  • test/release-e2e-evidence.test.ts
💤 Files with no reviewable changes (3)
  • test/release-e2e-evidence.test.ts
  • package.json
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
🚧 Files skipped from review as they are similar to previous changes (8)
  • .agents/skills/nemoclaw-skills-guide/SKILL.md
  • .agents/skills/nemoclaw-maintainer-day/PR-REVIEW-PRIORITIES.md
  • .agents/skills/nemoclaw-maintainer-policies/references/daily-flow.md
  • test/maintainer-e2e-skill.test.ts
  • .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
  • test/maintainer-skills-policy.test.ts
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
  • .agents/skills/nemoclaw-maintainer-evening/SKILL.md

@copy-pr-bot

copy-pr-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

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

Caution

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

⚠️ Outside diff range comments (2)
.agents/skills/nemoclaw-maintainer-e2e/SKILL.md (2)

66-68: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Do not make every credentialed E2E the default for a PR revision.

Lines 21-28 state that empty-selector manual PR runs expose long-lived API keys and messaging credentials to candidate-controlled processes. Selecting every free-standing workflow E2E makes that exposure the default for a maintainer revision run.

maintain or admin authorization protects dispatch. It does not restrict candidate code after checkout. Keep the default selection credential-free, or require explicit per-job opt-in with short-lived credentials and an isolated trusted boundary.

🤖 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-e2e/SKILL.md around lines 66 - 68, Update
the default controller-selected E2E targets in the skill so credentialed
workflow tests are not selected by an empty-selector maintainer PR run. Keep the
default set limited to credential-free tests, and require explicit per-job
opt-in for any credentialed target with the required short-lived credentials and
isolated trusted boundary.

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

Require hardware qualification evidence in full mode.

The workflow defaults both queue flags to false, and both hardware jobs require their flag. The full-mode validator accepts false for both flags and checks only the Launchable job. Full evidence can therefore pass without Jetson or DGX Spark qualification. Restore the required inputs or validate both hardware jobs and their evidence.

🤖 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-e2e/SKILL.md at line 199, Update the
full-mode validation and workflow inputs around include_staging_brev_launchable
so hardware qualification cannot be skipped: either restore required queue flags
or validate both Jetson and DGX Spark jobs and their evidence. Ensure full mode
rejects false flags and requires successful evidence from both hardware jobs,
not only the Launchable job.
🤖 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.

Outside diff comments:
In @.agents/skills/nemoclaw-maintainer-e2e/SKILL.md:
- Around line 66-68: Update the default controller-selected E2E targets in the
skill so credentialed workflow tests are not selected by an empty-selector
maintainer PR run. Keep the default set limited to credential-free tests, and
require explicit per-job opt-in for any credentialed target with the required
short-lived credentials and isolated trusted boundary.
- Line 199: Update the full-mode validation and workflow inputs around
include_staging_brev_launchable so hardware qualification cannot be skipped:
either restore required queue flags or validate both Jetson and DGX Spark jobs
and their evidence. Ensure full mode rejects false flags and requires successful
evidence from both hardware jobs, not only the Launchable job.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e902e606-cd5a-4332-a44d-784a706282ad

📥 Commits

Reviewing files that changed from the base of the PR and between c60accb and f4f8007.

📒 Files selected for processing (1)
  • .agents/skills/nemoclaw-maintainer-e2e/SKILL.md

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants