refactor(advisor): make review turns ledger-driven - #6547
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR adds a review finding ledger, routes PR review advisor flows through ledger-backed prompts and persistence, replaces synthetic tool-result injection with per-turn context tools, and updates tests and documentation to match the new contracts. ChangesLedger and context-tool advisor flow
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant Analyze as tools/pr-review-advisor/analyze.mts
participant Session as tools/advisors/session.mts
participant Ledger as tools/pr-review-advisor/review-ledger.mts
Analyze->>Ledger: createReviewFindingLedger()
Analyze->>Session: runReadOnlyAdvisor(..., customTools)
Session->>Ledger: pr_review_update_ledger / pr_review_read_ledger
Session->>Session: validate required tools and turn ordering
Analyze->>Ledger: snapshot canonical findings for output
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
E2E Advisor RecommendationRequired E2E: None Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
|
E2E Target RecommendationRequired E2E targets: None Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 0 items to resolve/justify, 2 in-scope improvements
|
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
tools/pr-review-advisor/review-ledger.mts (1)
267-298: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win
pr_review_read_ledgerexposes resolved/superseded findings, relying on prompt compliance to filter.
ledgerResultserializessnapshot.findingsunfiltered (all statuses) for the read tool. The synthesis/retry prompts instruct the model to "Include onlystatus=openfindings," but the tool itself doesn't enforce that — a model that forgets to filter will get caught downstream only byanalyze.mts'sreviewLedgerConsistencyIssuescheck, which then triggers a retry or hard failure. Filtering tostatus === "open"(already in insertion order) here would remove one class of avoidable retries/failures.♻️ Proposed fix
const read = defineTool({ name: REVIEW_LEDGER_READ_TOOL, label: "Read review finding ledger", description: "Read the canonical finding ledger for final synthesis.", parameters: Type.Object({}), executionMode: "sequential", - execute: async () => ledgerResult(ledger.snapshot()), + execute: async () => ledgerResult(openOnlySnapshot(ledger.snapshot())), });🤖 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 `@tools/pr-review-advisor/review-ledger.mts` around lines 267 - 298, `pr_review_read_ledger` is returning all ledger findings, including resolved and superseded entries, instead of only open ones. Update `ledgerResult` in the review ledger tool flow to filter `snapshot.findings` to `status === "open"` before serializing the JSON, so `REVIEW_LEDGER_READ_TOOL` only exposes current findings and doesn’t depend on prompt-side filtering.
🤖 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 `@test/pr-review-advisor-ledger-tools.test.ts`:
- Line 57: The test titles in PR review ledger tools are missing the required
local issue-reference suffix. Update the `describe` block in
`pr-review-advisor-ledger-tools.test.ts` and any related `it` titles to keep
them behavior-oriented while appending the appropriate `(`#1234`)` suffix at the
end of each title, following the existing test naming conventions.
In `@tools/pr-review-advisor/analyze.mts`:
- Around line 417-424: The fail-closed path in analyze.mts is too broad because
the retry decision in the parsed/result flow treats any retry failure as fatal
even when the first pass already produced a canonicalized result. Update the
logic around parseAdvisorResult, reviewLedgerConsistencyIssues,
withCanonicalReviewLedgerFindings, and the retry handling so process.exit(1)
only happens when the retry error itself indicates a ledger mismatch; for
unrelated retry errors, preserve the first-pass result and attach a
retry-failure limitation instead of discarding result.
---
Nitpick comments:
In `@tools/pr-review-advisor/review-ledger.mts`:
- Around line 267-298: `pr_review_read_ledger` is returning all ledger findings,
including resolved and superseded entries, instead of only open ones. Update
`ledgerResult` in the review ledger tool flow to filter `snapshot.findings` to
`status === "open"` before serializing the JSON, so `REVIEW_LEDGER_READ_TOOL`
only exposes current findings and doesn’t depend on prompt-side filtering.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: aa20f72b-a639-43d5-88eb-fc65898dbeb8
📒 Files selected for processing (7)
test/advisor-session-context-tools.test.tstest/pr-review-advisor-ledger-tools.test.tstest/pr-review-advisor.test.tstools/advisors/session.mtstools/pr-review-advisor/README.mdtools/pr-review-advisor/analyze.mtstools/pr-review-advisor/review-ledger.mts
| }; | ||
| } | ||
|
|
||
| describe("PR review ledger tools", () => { |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Test titles are missing the (#1234) issue-reference suffix.
Titles are behavior-oriented, which is good, but neither the describe block nor any it includes a local issue reference. As per coding guidelines, "**/*.test.ts: Write behavior-oriented test titles, and put local issue references in a final (#1234) suffix."
🤖 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/pr-review-advisor-ledger-tools.test.ts` at line 57, The test titles in
PR review ledger tools are missing the required local issue-reference suffix.
Update the `describe` block in `pr-review-advisor-ledger-tools.test.ts` and any
related `it` titles to keep them behavior-oriented while appending the
appropriate `(`#1234`)` suffix at the end of each title, following the existing
test naming conventions.
Source: Coding guidelines
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (2)
tools/e2e-advisor/analyze.mts (2)
292-334: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winTool-name list is duplicated between the array and the prompt string — drift risk.
The
contextToolResultsarray (lines 293-328) and the hard-coded tool-name list in the prompt template (line 332) must be kept in sync manually. Adding/removing/reordering a context tool here requires editing both places; a missed edit would silently desync the instructed tool-call list from what's actually attached.Consider deriving the prompt's tool-call list from the
contextToolResultsarray'stoolNamefields (e.g.,contextToolResults.map((r) => r.toolName).join(", ")) so the two can't drift.As per path instructions, "Derive inventories and limits from a canonical source where possible; flag duplicated lists that can silently drift."
🤖 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 `@tools/e2e-advisor/analyze.mts` around lines 292 - 334, The tool-name list in the prompt is duplicated from the contextToolResults array, creating drift risk if tools change. Update analyze.mts so the prompt’s required tool-call list is derived from the same contextToolResults source (using the toolName values from that array) rather than being hard-coded. Keep the prompt and attached tools in sync through a single canonical list, especially around contextToolResult and the prompt template in the E2E advisor builder.Source: Path instructions
336-342: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
contextToolResult()helper duplicated across three files.An identical
contextToolResult(toolName, content, contentType, label)implementation exists here, intools/e2e-advisor/targets.mts(lines 397-403), and intools/pr-review-advisor/analyze.mts(lines 397-404, per graph context). SinceAdvisorContextToolResultis already exported fromtools/advisors/session.mts, this trivial constructor is a good candidate to canonicalize there once, rather than reimplementing it three times where each copy can silently diverge (e.g., one addingisErrorsupport and the others not).As per path instructions for
tools/{pr-review-advisor,e2e-advisor}/**, "Derive inventories and limits from a canonical source where possible; flag duplicated lists that can silently drift."♻️ Proposed consolidation
-function contextToolResult( - toolName: string, - content: string, - contentType: AdvisorContextToolResult["contentType"], - label?: string, -): AdvisorContextToolResult { - return { toolName, content, contentType, label }; -} +// moved to tools/advisors/session.mts and exported, then imported here: +// export function contextToolResult(...): AdvisorContextToolResult { ... }🤖 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 `@tools/e2e-advisor/analyze.mts` around lines 336 - 342, The contextToolResult helper is duplicated in multiple analyzer files and should be centralized to avoid silent drift. Move the shared constructor logic into the canonical AdvisorContextToolResult utility in tools/advisors/session.mts, then update the contextToolResult call sites in analyze.mts and targets.mts (including the pr-review-advisor and e2e-advisor copies) to use that shared implementation instead of maintaining local duplicates.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 `@tools/e2e-advisor/analyze.mts`:
- Around line 292-334: The tool-name list in the prompt is duplicated from the
contextToolResults array, creating drift risk if tools change. Update
analyze.mts so the prompt’s required tool-call list is derived from the same
contextToolResults source (using the toolName values from that array) rather
than being hard-coded. Keep the prompt and attached tools in sync through a
single canonical list, especially around contextToolResult and the prompt
template in the E2E advisor builder.
- Around line 336-342: The contextToolResult helper is duplicated in multiple
analyzer files and should be centralized to avoid silent drift. Move the shared
constructor logic into the canonical AdvisorContextToolResult utility in
tools/advisors/session.mts, then update the contextToolResult call sites in
analyze.mts and targets.mts (including the pr-review-advisor and e2e-advisor
copies) to use that shared implementation instead of maintaining local
duplicates.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 5402b943-e218-4475-8ad8-6c4aa22c7df7
📒 Files selected for processing (14)
test/advisor-session-context-tools.test.tstest/e2e-advisor-targets.test.tstest/e2e-advisor.test.tstest/pr-review-advisor-ledger-tools.test.tstest/pr-review-advisor-turns.test.tstest/pr-review-advisor.test.tstools/advisors/README.mdtools/advisors/session.mtstools/e2e-advisor/README.mdtools/e2e-advisor/analyze.mtstools/e2e-advisor/targets.mtstools/pr-review-advisor/README.mdtools/pr-review-advisor/analyze.mtstools/pr-review-advisor/review-ledger.mts
✅ Files skipped from review due to trivial changes (3)
- tools/advisors/README.md
- tools/e2e-advisor/README.md
- tools/pr-review-advisor/README.md
🚧 Files skipped from review as they are similar to previous changes (5)
- test/pr-review-advisor.test.ts
- test/advisor-session-context-tools.test.ts
- tools/pr-review-advisor/review-ledger.mts
- tools/pr-review-advisor/analyze.mts
- tools/advisors/session.mts
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>
Automated review follow-up
The optional runtime-test follow-ups are therefore covered at the narrow deterministic boundaries that this PR owns; no additional compatibility layer or live-provider test is being added. |
<!-- markdownlint-disable MD041 --> ## Summary Make the PR Review Advisor's six analysis stages observable and its ledger writes atomic. This follows a census of every advisor run after #6547: useful findings were being hidden by protocol failures, especially when models omitted, retried, or mixed prose with ledger calls. ## Related Issue Follow-up to #6547 and #6446. ## Changes - Split every stage into a visible analysis turn and a strict tool-only commit turn, with one bounded repair attempt when no ledger mutation settles. - Add a reusable turn-protocol abstraction so stage ordering, validation, and repair behavior are defined once. - Preserve valid committed findings when a later stage fails, require explicit source-of-truth finding IDs, and remove prose-derived synthetic findings. - Recognize multi-issue `Refs`/`References`/`Follow-up to` relations and provide `rg` from a trusted runner binary or an exact package pin. - Add regression coverage for omitted, failed, retried, malformed, empty, and late-failure model behavior; update the advisor maintainer documentation. ## 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: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this changes internal PR-review automation; the two maintainer READMEs were updated, with no end-user behavior change. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — [GPT advisor review](#6566 (comment)) identified the package provenance gap; the runner/package are now pinned and enforced by a semantic workflow-boundary mutation test. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 131/131 focused advisor tests passed; the final workflow boundary suite passed 8/8. - [x] Applicable broad gate passed — the clean-checkout CI matrix and aggregate `checks` gate passed. The earlier local `npm test` run completed with 15,432 passed, 39 skipped, 1 todo, and 27 environment-only failures caused by the borrowed dependency symlink and ambient local `umask`/`SSH_AUTH_SOCK`; all advisor tests passed. - [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) — completed with zero errors and only pre-existing warnings. - [ ] 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: Carlos Villela <cvillela@nvidia.com> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: J. Yaunches <jyaunches@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Refactors PR Review Advisor so each stage starts with its instruction, invokes real turn-scoped context tools, emits visible analysis, and then commits findings to a canonical ledger. Final synthesis is read-only, and the runner projects canonical ledger findings into the published result so drift cannot silently change the review. ## Related Issue Related issue NVIDIA#6446. This PR is a follow-up. ## Changes - Replace pre-prompt synthetic messages with one canonical turn-scoped context-tool contract and explicit ordering validation; no compatibility aliases are retained. - Add a shared finding ledger with stable IDs, strict atomic operation batches, rollback, and evidence-backed transitions. - Make synthesis and retry ledger-backed, expose only open findings to the model, preserve the full audit ledger, preserve deterministic runtime-test requirements against model downgrades, and fail closed only on persistent ledger drift. - Confine `read`, `grep`, `find`, and `ls` to SDK-normalized real paths inside the checkout, and require exactly one successful terminal ledger mutation per analysis turn. - Document the revised conversation flow and add regression coverage for PR and E2E advisor callers. ## 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: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: Internal maintainer automation only; its internal README was updated and no user-facing NemoClaw behavior changed. - [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 boundary review reproduced and then verified fixes for absolute, parent, alias, symlink, and post-realpath Unicode-normalization escapes; final review found no remaining actionable defect. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run --project integration test/advisor-repo-read-only-tools.test.ts test/advisor-session-runner.test.ts test/advisor-session-context-tools.test.ts test/pr-review-advisor-ledger-tools.test.ts test/pr-review-advisor-test-depth.test.ts test/pr-review-advisor.test.ts test/pr-review-advisor-turns.test.ts test/e2e-advisor.test.ts test/e2e-advisor-targets.test.ts test/pr-review-advisor-workflow-boundary.test.ts test/test-title-style.test.ts` (147 passed) - [x] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — `umask 022; env -u SSH_CLIENT -u SSH_CONNECTION -u SSH_TTY npm test` (15,328 passed; 39 skipped; 1 todo) - [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) - [ ] 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: Carlos Villela <cvillela@nvidia.com> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Make the PR Review Advisor's six analysis stages observable and its ledger writes atomic. This follows a census of every advisor run after NVIDIA#6547: useful findings were being hidden by protocol failures, especially when models omitted, retried, or mixed prose with ledger calls. ## Related Issue Follow-up to NVIDIA#6547 and NVIDIA#6446. ## Changes - Split every stage into a visible analysis turn and a strict tool-only commit turn, with one bounded repair attempt when no ledger mutation settles. - Add a reusable turn-protocol abstraction so stage ordering, validation, and repair behavior are defined once. - Preserve valid committed findings when a later stage fails, require explicit source-of-truth finding IDs, and remove prose-derived synthetic findings. - Recognize multi-issue `Refs`/`References`/`Follow-up to` relations and provide `rg` from a trusted runner binary or an exact package pin. - Add regression coverage for omitted, failed, retried, malformed, empty, and late-failure model behavior; update the advisor maintainer documentation. ## 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: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this changes internal PR-review automation; the two maintainer READMEs were updated, with no end-user behavior change. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — [GPT advisor review](NVIDIA#6566 (comment)) identified the package provenance gap; the runner/package are now pinned and enforced by a semantic workflow-boundary mutation test. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 131/131 focused advisor tests passed; the final workflow boundary suite passed 8/8. - [x] Applicable broad gate passed — the clean-checkout CI matrix and aggregate `checks` gate passed. The earlier local `npm test` run completed with 15,432 passed, 39 skipped, 1 todo, and 27 environment-only failures caused by the borrowed dependency symlink and ambient local `umask`/`SSH_AUTH_SOCK`; all advisor tests passed. - [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) — completed with zero errors and only pre-existing warnings. - [ ] 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: Carlos Villela <cvillela@nvidia.com> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: J. Yaunches <jyaunches@nvidia.com>
Summary
Refactors PR Review Advisor so each stage starts with its instruction, invokes real turn-scoped context tools, emits visible analysis, and then commits findings to a canonical ledger. Final synthesis is read-only, and the runner projects canonical ledger findings into the published result so drift cannot silently change the review.
Related Issue
Related issue #6446. This PR is a follow-up.
Changes
read,grep,find, andlsto SDK-normalized real paths inside the checkout, and require exactly one successful terminal ledger mutation per analysis turn.Type of Change
Quality Gates
Verification
Verifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run --project integration test/advisor-repo-read-only-tools.test.ts test/advisor-session-runner.test.ts test/advisor-session-context-tools.test.ts test/pr-review-advisor-ledger-tools.test.ts test/pr-review-advisor-test-depth.test.ts test/pr-review-advisor.test.ts test/pr-review-advisor-turns.test.ts test/e2e-advisor.test.ts test/e2e-advisor-targets.test.ts test/pr-review-advisor-workflow-boundary.test.ts test/test-title-style.test.ts(147 passed)npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes —umask 022; env -u SSH_CLIENT -u SSH_CONNECTION -u SSH_TTY npm test(15,328 passed; 39 skipped; 1 todo)npm run docsbuilds without warnings (doc changes only)Signed-off-by: Carlos Villela cvillela@nvidia.com