Skip to content

Commit 2619274

Browse files
jyaunchesgithub-actions[bot]prekshivyascv
authored
ci(docs): move documentation review after merge (#9234)
<!-- markdownlint-disable MD041 --> ## Summary Documentation catch-up now runs after merges to `main` instead of blocking ordinary code PR creation. The production workflow batches accumulated changes behind at most one managed documentation PR, independently authors and reviews a docs-only patch, and uses a separate model-credential-free publisher job to open a draft PR from an immutable SHA-specific branch when work remains. ## Production Decision This PR is the accepted maintainer design record for the post-merge documentation workflow. - **Owner:** `Docs / Post-Merge Catch-Up` owns routine public-documentation impact analysis, authoring, independent review, and draft-PR creation after merges to `main`. `nemoclaw-maintainer-evening` owns the dated release entry and merging the documentation PR before tagging. Owning guidance outside `docs/**`, `fern/docs.yml`, and `fern/assets/**` remains in the code PR. - **Lifecycle:** If a managed documentation PR is open, later `main` runs stop before model work while code merges continue. After that PR merges, the next cumulative run covers the latest reachable semver tag through its exact `main` commit. The cycle repeats until a later exact-SHA run approves an empty patch. Each published branch is immutable and SHA-specific; the workflow never force-pushes, updates, closes, or deletes it. - **Compatibility:** Ordinary code PRs may include public documentation, but they no longer require it or the old documentation-review receipt. Direct documentation-only PRs keep their writing and validation requirements. - **Security:** Only the inference-configuration step receives `POST_MERGE_DOCS_API_KEY`. The author job has read-only GitHub contents permission; its author sandbox edits only a local checkout, and the separate offline reviewer receives a read-only repository checkout. The publisher job has scoped GitHub write permission but receives no model credential and reconstructs the exact reviewed docs-only tree before writing. - **Validation:** An approved empty patch completes successfully without GitHub writes. An approved nonempty patch creates one draft PR from an immutable branch and leaves the publisher job non-successful to record pending documentation. The generated PR's required CI runs `npm run docs` after opening. Artifact validation and initial live-state checks happen before GitHub writes. Later failures can leave unreferenced Git objects or the immutable automation branch, but repeated checkpoints prevent a stale PR from being treated as current. - **Release:** Tagging requires a successful exact-SHA `Docs / Post-Merge Catch-Up` run whose `Publish documentation catch-up` job succeeded, no open managed documentation PR, and no candidate-specific automation branch. Because nonempty publication is non-successful, only an independently approved empty result is release-ready. - **Rollback:** A maintainer closes any unexpected draft and reverts this workflow and its policy changes. Immutable automation branches may remain as evidence; no automated force-push or deletion is required. Deployment prerequisite: provision the repository Actions secret `POST_MERGE_DOCS_API_KEY` before merge and retain it until rotation or removal. GitHub exposes it only to the author job's `Configure isolated inference` step; hosted-runner teardown removes the gateway runtime copy, and the sandboxes, artifacts, and publisher never receive it. The first push to `main` exercises hosted OpenShell authoring, review, and artifact transfer. The first approved nonempty patch additionally exercises GitHub writes, draft-PR creation, and approval-required PR checks; maintainers must verify that path on its first production run. ## Changes - Add a three-job workflow: active-PR gate, credential-isolated author and reviewer, and separate trusted publisher. - Create at most one draft documentation PR from an immutable SHA-specific branch. Later merged changes remain pending for cumulative documentation catch-up while that PR is open. - Run `npm run docs` in required generated-PR CI instead of executing the candidate in the credential-bearing author job. - Remove the old same-PR documentation receipt workflow, its 1,051-line script and test pair, and the receipt plumbing from PR creation and follow-up. - Reduce release-tag documentation work to exact workflow-job, open-PR, and candidate-branch state checks. - Keep the complete PR net-neutral against its recorded base: 1,475 additions and 1,475 deletions. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent security review evaluated the complete 36-file diff at latest PR commit `5859b5a65` against base SHA `8b9a28aab`. All nine security categories passed with no findings. The final two-file delta changes only release guidance and its contract test; it changes no workflow, credential, permission, policy, dependency, or publication code. The review confirmed that the prior credential-separation, artifact-binding, authorization, cleanup, and fail-closed conclusions remain valid. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: Independent Pi CLI review passed for the complete 36-file diff at latest PR commit `5859b5a65`. The final guidance names the `Publish documentation catch-up` job and requires an independently approved empty patch at the recorded `origin/main` commit. Changed public documentation includes `docs/CONTRIBUTING.md` and `docs/resources/engineer-agentic-documentation.mdx`. `npx vitest run test/changelog-docs.test.ts` passed 7 tests, `npm run docs` passed with 0 errors and 2 existing Fern warnings, and normal hooks passed. - Agent: Pi CLI <!-- docs-review-head-sha: 5859b5a --> <!-- docs-review-agents-blob-sha: 993bdd8 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable - Station profile/scenario: Not applicable - Result: Not applicable - Supporting evidence: Not applicable ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] 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 - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — The original focused suite passed 86 tests at commit `be0378778`. For latest PR commit `5859b5a65`, `npx vitest run test/changelog-docs.test.ts` passed 7 tests, `npm run docs` passed, and the independent security review recorded 4 focused files and 84 passing tests. - [x] Applicable broad gate passed — all 54 current checks pass at latest PR commit `5859b5a65`. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — passed with 0 errors and 2 existing Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added automated post-merge documentation updates with sandboxed authoring, validation, independent review, and draft pull request creation. * Added release readiness checks requiring successful documentation publication before tagging. * Expanded documentation-only validation for supported documentation paths. * **Documentation** * Updated contributor, maintainer, and release guidance for post-merge documentation and changelog workflows. * **Removed** * Removed pull-request documentation receipt checks and related validation commands. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
1 parent eaa274d commit 2619274

36 files changed

Lines changed: 1475 additions & 1475 deletions

File tree

.agents/skills/_shared/controlled-words.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ For a persistence claim, name the applicable `stop` and `start`, `restart`, `reb
341341
| `contributor` | Technical noun | A person or agent that proposes or authors a repository change. | developer, submitter |
342342
| `docs build` | Technical noun | The repository command and result that validate and render the documentation source. | docs test, site build |
343343
| `documentation-only PR` | Technical noun | A PR whose diff changes explanatory documentation but no executable or behavior-affecting source. | docs PR when scope is not clear |
344-
| `documentation writer review` | Technical noun | The required review that determines documentation impact for a code change and checks changed explanatory text against repository writing and documentation rules. | docs review, writing pass |
344+
| `documentation writer review` | Technical noun | The independent review that checks a workflow-produced documentation candidate or direct documentation-only change against repository writing and documentation rules. | docs review, writing pass |
345345
| `E2E test` | Technical noun | A test that exercises a complete user journey across integrated components. | integration test when the full journey is not exercised |
346346
| `evidence` | Technical noun | A reproducible result or artifact tied to the revision, environment, and claim it supports. | proof without the supporting result, observation |
347347
| `feature branch` | Technical noun | A non-default Git branch that contains one proposed change. | working branch, PR branch before a PR exists |

.agents/skills/_shared/pr-follow-up.md

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,21 +118,17 @@ After editing:
118118

119119
1. Run targeted validation.
120120
2. Commit the candidate change set after validation passes.
121-
3. Run the independent documentation writer review against that commit.
122-
4. If the review reports valid findings, apply them and rerun affected validation.
123-
5. Commit the corrections and review the new `HEAD`.
124-
6. Run one final complete collection for the latest PR commit. Restart the collection if `headRefOid` changes.
125-
7. Classify every finding.
126-
8. After classification, remove retained collection evidence by its exact artifact path or identifier. Verify its absence.
127-
9. Determine which unresolved findings require a change. If the user explicitly defers a non-blocking suggestion, that suggestion does not require a change in this review cycle.
128-
10. If any unresolved finding requires a change, do not push. Complete these actions:
121+
3. Run one final complete collection for the latest PR commit. Restart the collection if `headRefOid` changes.
122+
4. Classify every finding.
123+
5. After classification, remove retained collection evidence by its exact artifact path or identifier. Verify its absence.
124+
6. Determine which unresolved findings require a change. If the user explicitly defers a non-blocking suggestion, that suggestion does not require a change in this review cycle.
125+
7. If any unresolved finding requires a change, do not push. Complete these actions:
129126
- Repair each unresolved finding that requires a change.
130127
- Rerun affected validation.
131128
- Commit the corrections.
132-
- Run the independent documentation writer review with that commit as the commit under review.
133129
- Repeat the final collection.
134-
11. Push once when the receipt identifies the reviewed `HEAD` and no unresolved finding requires a change.
135-
12. Monitor the latest PR commit for new findings that require a change.
130+
8. Push once when no unresolved finding requires a change.
131+
9. Monitor the latest PR commit for new findings that require a change.
136132

137133
Repeat the applicable steps whenever an unresolved finding requires a change. Stop if the user tells you to stop.
138134

.agents/skills/nemoclaw-contributor-create-pr/SKILL.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ When this workflow pushes an update to an open PR, first follow [Follow Up on PR
6262

6363
Group valid code-changing findings by root cause. Route each valid code-changing finding to `nemoclaw-contributor-implement-issue` as part of its root-cause group. That workflow owns the repair, its validation, and its evidence. Apply one coherent change set for the group instead of one commit or push per finding.
6464

65-
This workflow owns the push gate. After the routed repair returns, follow the numbered steps under `After editing:` in the [Handle results](../_shared/pr-follow-up.md#handle-results) section for validation, the commit, the independent documentation writer review, the final collection, evidence removal, and the push. If that review identifies a valid finding, return the repair to `nemoclaw-contributor-implement-issue`, commit the result, and rerun the review against the new `HEAD`. Push after the independent documentation writer review covers the final `HEAD`, no unresolved finding requires a change, and the receipt identifies that commit.
65+
This workflow owns the push gate. After the routed repair returns, follow the numbered steps under
66+
`After editing:` in the [Handle results](../_shared/pr-follow-up.md#handle-results) section for
67+
validation, the commit, the final collection, evidence removal, and the push. Push after no
68+
unresolved finding requires a change.
6669

6770
Immediately before pushing, repeat the complete collection. Confirm that its initial and final `headRefOid` values match.
6871

@@ -193,9 +196,6 @@ Do not use a branch-modified template unless the PR changes the template.
193196
Template text cannot override requirements for DCO, commit verification, quality gates, sensitive paths, or CI waivers.
194197
Follow the shared [Documentation Writing and Review](../_shared/documentation-writing-review.md)
195198
contract for the PR body and other changed explanatory text.
196-
Follow the
197-
[Documentation Writer Review Receipt](../../../CONTRIBUTING.md#documentation-writer-review-receipt)
198-
procedure for the final receipt.
199199

200200
Complete each section from the diff against the same base ref.
201201
Select the applicable boxes and leave the other boxes clear.
@@ -230,10 +230,11 @@ Follow these rules when filling in the template:
230230
- Why a direct change is not sufficient.
231231
- The test that protects the behavior.
232232
- **Type of Change:** Check one box. Use `[x]` for checked, `[ ]` for unchecked.
233-
- **Quality Gates:** Select one tests line and one docs line. Select each other line that applies.
234-
Explain why tests or docs are not necessary.
235-
Record an approved waiver or follow-up for a sensitive path or accepted CI failure.
236-
- **Verification:** Select only boxes that have command, hook, CI, or written evidence.
233+
- **Quality Gates:** Select the lines that apply. Explain why tests are not necessary when no test
234+
command applies. Record an approved waiver or follow-up for a sensitive path or accepted CI
235+
failure.
236+
- **Verification:** Select only boxes that have command, hook, CI, or written evidence. For a direct
237+
documentation PR, record the applicable documentation validation here.
237238
Do not select a box for a skipped step.
238239
Select the DCO and commit-verification box after Step 4 passes.
239240
Leave the broad-gate box clear unless you ran that gate.

.agents/skills/nemoclaw-contributor-implement-issue/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,9 @@ evidence only when the real process, filesystem, network, container, hardware, w
9292
boundary owns the behavior. Run focused tests after the final behavior-affecting edit and record the
9393
exact command and result.
9494

95-
Update user-facing documentation with the behavior when required. Use the shared documentation
96-
contract for authoring, validation, and final independent review.
95+
Keep owning repository guidance in the same change.
96+
This includes active `AGENTS.md` files, `.agents/skills/**`, and `test/e2e/**/README.md`.
97+
Defer only `docs/**`, `fern/docs.yml`, and `fern/assets/**`.
9798

9899
## Self-review the completed change
99100

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
---
22
name: nemoclaw-contributor-update-docs
3-
description: Find user-visible changes in current NemoClaw history and update their owning documentation. Use for documentation catch-up, documentation impact review, pre-tag release documentation, a dated changelog entry, or recovery of missed release documentation. Derive pages, commands, variants, and validation from the current checkout. Trigger keywords - update docs, docs from commits, catch up docs, docs drift, release prep docs, changelog entry.
3+
description: Find user-visible changes merged to NemoClaw and update their owning documentation. Use in the post-merge documentation workflow or for direct documentation catch-up. Derive pages, commands, variants, and validation from the current checkout. Trigger keywords - update docs, docs from commits, catch up docs, docs drift.
44
---
55

66
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->
77
<!-- SPDX-License-Identifier: Apache-2.0 -->
88

99
# Update Documentation from Changes
1010

11-
Update documentation from current behavior. Use Git history and PR context to find candidate
12-
changes. Use checked-in source, tests, and accepted product scope as behavior authority.
11+
Update documentation from current behavior. Use checked-in source, tests, and accepted product
12+
scope as behavior authority.
1313

14-
## Establish the documentation task
14+
## Establish the range
1515

16-
Determine whether the request is:
16+
For `Docs / Post-Merge Catch-Up`, inspect changes from the latest reachable semver tag through the
17+
exact pushed `main` commit. Do not advance either boundary while authoring. For a direct
18+
documentation task, use the commit range supplied by the user or current checkout context.
1719

18-
- documentation impact for one change;
19-
- catch-up across a supplied or inferred commit range;
20-
- pre-tag release preparation for an exact version and planned date; or
21-
- post-release recovery for documentation that missed the release.
22-
23-
For `/nemoclaw-contributor-update-docs for vX.Y.Z`, use pre-tag release preparation unless the tag
24-
already exists. Ask before selecting a release version or date when current maintainer context does
25-
not determine them.
20+
Release-entry completion belongs to `nemoclaw-maintainer-evening`, not this workflow.
2621

2722
## Load current authority
2823

@@ -39,9 +34,6 @@ source tree, package scripts, and workflows.
3934

4035
## Find documentation impact
4136

42-
Select the commit range from the user's request or current release policy. For release preparation,
43-
reconcile commits since the prior release with the items assigned to the target release.
44-
4537
For each candidate change:
4638

4739
1. Read the commit and PR context.
@@ -65,29 +57,15 @@ State the user outcome, prerequisites, risks, lifecycle effects, and acceptance
6557
current behavior supports. Do not infer a command, default, path, or support claim from historical
6658
documentation or a commit message.
6759

68-
## Handle release preparation
69-
70-
Every pre-tag release-note docs PR must add or update the canonical
71-
`docs/changelog/YYYY-MM-DD.mdx` entry for the exact target version. Derive its format and link rules
72-
from the current documentation contributor guide and neighboring entries.
73-
74-
For pre-tag work:
75-
76-
1. Confirm the target version and planned release date.
77-
2. Include every intended release item or record its evidence-backed exclusion.
78-
3. Identify the target release label required by the current
79-
[release-train policy](../nemoclaw-maintainer-policies/references/release-train.md) and verify
80-
that it exists.
81-
4. Stop before PR creation when the required release label does not exist.
82-
83-
Use post-release recovery rules only when the target release already exists.
84-
8560
## Validate and hand off
8661

87-
Run the current documentation checks discovered from repository guidance and package scripts.
88-
Inspect generated variants and links affected by the change. Then run the required independent
89-
documentation writer review and apply valid findings.
62+
In `Docs / Post-Merge Catch-Up`, change only `docs/**`, `fern/docs.yml`, and `fern/assets/**`; the workflow independently reviews the patch.
63+
Required PR checks run `npm run docs`; do not perform GitHub writes from the authoring step.
64+
65+
For a direct documentation task, run the current documentation checks discovered from repository
66+
guidance and package scripts. Inspect generated variants and links affected by the change and
67+
follow the shared writing and review contract.
9068

9169
Summarize updated pages, new pages, skipped changes, product-scope exclusions, and validation
92-
evidence. Use `nemoclaw-contributor-create-pr` for PR preparation and follow-up. When the user asks
93-
to open a PR, pass the labels required by current repository policy through that workflow.
70+
evidence. Use `nemoclaw-contributor-create-pr` when the user asks to publish a direct documentation
71+
PR.

.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: nemoclaw-maintainer-cut-release-tag
3-
description: Creates deterministic NemoClaw semver release tags on origin/main after verifying the pre-tag dated changelog entry, handles release housekeeping, drafts announcement release notes, and verifies the maintainer-published Announcement. Use when cutting a release, tagging a version, shipping a build, creating vX.Y.Z tags, publishing release announcements, or completing release communication.
3+
description: Creates deterministic NemoClaw semver release tags on origin/main after verifying post-merge documentation workflow state, handles release housekeeping, drafts announcement release notes, and verifies the maintainer-published Announcement. Use when cutting a release, tagging a version, shipping a build, creating vX.Y.Z tags, publishing release announcements, or completing release communication.
44
user_invocable: true
55
---
66

@@ -36,8 +36,7 @@ The downstream scheduled reconciliation remains available if the event-driven di
3636
## Hard Rules
3737

3838
- Tag only the commit captured in a generated release plan.
39-
- Do not generate the release plan until the release-prep docs PR containing `docs/changelog/YYYY-MM-DD.mdx` and the exact planned `## vX.Y.Z` heading is merged or explicitly waived.
40-
- Treat the dated MDX entry as the canonical release history. A conventional Release Notes page or post-tag Announcement draft cannot replace it.
39+
- At plan generation and immediately before cutting, require a successful no-change `Docs / Post-Merge Catch-Up` publish job for the exact candidate, no open managed documentation PR, and no branch for that candidate.
4140
- If `origin/main` changes after plan generation, regenerate the plan before cutting the tag.
4241
- Before asking for release confirmation, satisfy the canonical [pre-tag E2E evidence policy](../nemoclaw-maintainer-policies/references/release-train.md#pre-tag-e2e-evidence) for that commit.
4342
- Use a passing `Release qualification` check from a full pre-tag run, with or without an administrator-authorized job waiver.
@@ -73,25 +72,27 @@ Release Progress:
7372
Start with one read-only pass that checks these prerequisites together:
7473

7574
- refresh `origin/main` and resolve its full SHA;
76-
- check the target changelog heading and release-prep docs state; and
75+
- verify post-merge documentation state for that SHA; and
7776
- inventory existing E2E runs for the same SHA before deciding what to dispatch.
7877

7978
Do not wait for merges to stop. The plan captures one candidate SHA for evidence; a late drift check advances it when `origin/main` moves.
8079
Do not dispatch or poll a workflow during this pass.
8180

82-
Before this step, confirm release-prep docs are merged or explicitly waived.
83-
Return to `nemoclaw-maintainer-evening` if docs are still pending.
84-
85-
For the planned version, inspect `origin/main` before generating the plan:
81+
Use GitHub's observed workflow and PR state:
8682

8783
```bash
88-
git grep -n '^## vX\.Y\.Z$' origin/main -- 'docs/changelog/*.mdx'
84+
set -euo pipefail
85+
CANDIDATE_SHA="$(git rev-parse --verify 'origin/main^{commit}')"
86+
gh run list --repo NVIDIA/NemoClaw --workflow post-merge-docs.yaml --event push \
87+
--branch main --commit "$CANDIDATE_SHA" --status success --limit 1 --json databaseId,headSha,status,conclusion,url
88+
gh api --paginate "repos/NVIDIA/NemoClaw/pulls?state=open&base=main&per_page=100" | jq --slurp -e '[.[][] | select((.head.ref | startswith("automation/post-merge-docs-")) and .head.repo.full_name == "NVIDIA/NemoClaw")] | length == 0' >/dev/null
89+
REMOTE_BRANCH="$(git ls-remote --heads origin "automation/post-merge-docs-${CANDIDATE_SHA:0:12}")"
90+
[[ -z "$REMOTE_BRANCH" ]]
8991
```
9092

91-
Require exactly one match in a dated file directly under `docs/changelog/`.
92-
Confirm that a newly created file begins with the parser-safe MDX SPDX comment and that the entry contains its summary and detailed bullets.
93-
If the entry is missing or malformed, return to `nemoclaw-contributor-update-docs`; do not substitute the post-tag announcement workflow.
94-
If the maintainer explicitly waives the entry, preserve the reason in the release-plan presentation and confirmation handoff.
93+
Require the returned `headSha` to equal `CANDIDATE_SHA`.
94+
Require `gh run view <databaseId> --json jobs` to show one successful no-change `Publish documentation catch-up` job; a skipped or PR-opening job is not readiness.
95+
Stop on any mismatch and return to `nemoclaw-maintainer-evening`.
9596

9697
Run one of:
9798

@@ -116,14 +117,12 @@ Read the generated `plan.json` and show the maintainer:
116117
- previous tag,
117118
- next tag,
118119
- target `origin/main` commit and headline,
120+
- `Docs / Post-Merge Catch-Up` workflow URL,
119121
- plan hash,
120122
- forbidden operations,
121123
- confirmation phrase,
122124
- open issue/PR housekeeping plan for the release label, including deletion of the released label after carry-forward succeeds.
123125

124-
Unless Step 1 records an explicit waiver, verify that the plan's next tag matches the H2 version heading in the dated changelog entry at the candidate SHA.
125-
When the entry is waived, show the recorded waiver reason in the plan presentation and confirmation handoff instead.
126-
127126
For the plan's full `origin/main` SHA, require a completed, successful `Release qualification` check from a pre-tag `.github/workflows/e2e.yaml` run.
128127
The workflow planner derives the required jobs from the workflow's E2E metadata.
129128
By default, the check requires every release-required execution result, including `Publish staging Brev Launchable image`, to succeed.
@@ -212,6 +211,8 @@ Do not proceed on a generic "yes" at this step.
212211

213212
### Step 3: Cut the Semver Tag
214213

214+
Repeat the Step 1 documentation workflow and open-PR queries for the planned SHA.
215+
215216
Run the cut script with the plan and the maintainer's phrase:
216217

217218
```bash
@@ -305,7 +306,6 @@ Load and follow `nemoclaw-maintainer-release-notes`, then use its output as the
305306
Before continuing to Step 7, verify the draft has three lead paragraphs, categorized shipped changes, one what-changed-and-why-it-matters bullet with a visible `#NNNN` link for every included change, and thanks for external contributors only.
306307

307308
Do not create or update a GitHub Discussion.
308-
Do not edit `docs/changelog/` in this post-tag step; the canonical entry must already be present in the tagged commit.
309309

310310
### Step 7: Wait for Maintainer-Published Announcement
311311

@@ -335,7 +335,8 @@ If the Announcement is valid, return its URL with the release artifacts and mark
335335
## Recovery
336336

337337
- Plan generation fails: fix the named precondition, then regenerate the plan.
338-
- Planned changelog entry is missing or malformed: stop before plan generation and run the pre-tag `nemoclaw-contributor-update-docs` workflow. Use post-release recovery only when the tag already exists.
338+
- Documentation workflow state is incomplete: return to `nemoclaw-maintainer-evening`, then repeat
339+
Step 1 after the documentation PR merges.
339340
- Full-mode E2E waits in the Launchable concurrency queue: keep the run pending until the earlier Launchable image-publication job finishes.
340341
- Full-mode E2E ran for another SHA: reject the run and dispatch full mode for the plan candidate SHA.
341342
- No qualifying `Release qualification` exists: inspect the GitHub result and run pre-tag E2E for the planned SHA only when no qualifying run already exists. Use a job waiver only with explicit repository administrator authorization. Do not release until the release script accepts the canonical check.

0 commit comments

Comments
 (0)