Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions .agents/skills/_shared/pr-follow-up.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,19 @@ After editing:
4. If the review reports valid findings, apply them and rerun affected validation.
5. Commit the corrections and review the new `HEAD`.
6. Run one final complete collection for the latest PR commit. Restart the collection if `headRefOid` changes.
7. Classify every new or changed finding.
8. If the collection contains a new actionable finding, do not push. Return to classification and repair, rerun affected validation, commit the corrections, review the new `HEAD`, and repeat the final collection.
9. Remove retained collection evidence and verify its absence.
10. Push once when the receipt identifies the reviewed `HEAD` and no actionable finding remains.
11. Monitor the latest PR commit for new actionable findings.

Repeat the applicable steps only when the commit under review or latest PR commit produces a new actionable finding. Stop if the user tells you to stop.
7. Classify every finding.
8. After classification, remove retained collection evidence by its exact artifact path or identifier. Verify its absence.
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.
10. If any unresolved finding requires a change, do not push. Complete these actions:
- Repair each unresolved finding that requires a change.
- Rerun affected validation.
- Commit the corrections.
- Run the independent documentation writer review with that commit as the commit under review.
- Repeat the final collection.
11. Push once when the receipt identifies the reviewed `HEAD` and no unresolved finding requires a change.
12. Monitor the latest PR commit for new findings that require a change.

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

If a push or GitHub query has an access error, follow [Git and GitHub Access Hard Stop](git-github-hard-stop.md).
Resolve merge conflicts and dirty-worktree problems in the PR workflow.
Expand Down
12 changes: 11 additions & 1 deletion .agents/skills/nemoclaw-contributor-create-pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,17 @@ Group valid code-changing findings by root cause. Route each valid code-changing

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`, every blocking finding is resolved, and the receipt identifies that commit.

Immediately before pushing, repeat the complete head-stable collection. Do not push while that collection contains an unclassified or actionable finding. Remove retained collection evidence by its exact artifact path or identifier and verify its absence. If the host retained no artifact, record `retained evidence: none`. If the user tells you to stop, stop without pushing. The user may defer only a non-blocking suggestion; record that disposition before pushing.
Immediately before pushing, repeat the complete collection. Confirm that its initial and final `headRefOid` values match.

Apply these push conditions:

- Do not push while any finding is unclassified.
- Do not push while any unresolved finding requires a change.
- After classification, remove retained collection evidence by its exact artifact path or identifier.
- Verify that the artifact is absent.
- If the host retained no artifact, record `retained evidence: none`.
- If the user tells you to stop, stop without pushing.
- The user may defer only a non-blocking suggestion. Record that disposition before pushing.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

### Hook Evidence

Expand Down
14 changes: 11 additions & 3 deletions test/maintainer-skills-policy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ describe("maintainer skills follow canonical workflow policy", () => {
expect(createPr).toContain("Apply one coherent change set");
});

it("requires PR guidance to review the final commit before push", () => {
it("requires PR guidance to complete the final review cycle before push", () => {
const followUp = read(".agents/skills/_shared/pr-follow-up.md");
const writingReview = read(".agents/skills/_shared/documentation-writing-review.md");
const createPr = read(".agents/skills/nemoclaw-contributor-create-pr/SKILL.md");
Expand All @@ -676,10 +676,18 @@ describe("maintainer skills follow canonical workflow policy", () => {
expect(createPr).toContain("receipt identifies that commit");

expect(followUp).toContain("Run one final complete collection for the latest PR commit");

expect(followUp).toContain("If the collection contains a new actionable finding, do not push");
expect(followUp).toContain(
"After classification, remove retained collection evidence by its exact artifact path or identifier",
);
expect(followUp).toContain(
"If the user explicitly defers a non-blocking suggestion, that suggestion does not require a change in this review cycle",
);
expect(followUp).toContain("no unresolved finding requires a change");
expect(followUp).toContain("Deferral does not authorize a push with an unresolved blocking");
expect(createPr).toContain("The user may defer only a non-blocking suggestion");
expect(createPr).toContain("Do not push while any finding is unclassified");
expect(createPr).toContain("Do not push while any unresolved finding requires a change");
expect(createPr).not.toContain("an unclassified or actionable finding");
expect(followUp).toContain("Push once when the receipt identifies the reviewed `HEAD`");
expect(writingReview).toContain("Do not stop after the first blocking finding");
expect(writingReview).toContain("Report all evidence-backed findings in one review result");
Expand Down
Loading