Skip to content

feat(eval-author): narrate insight-mode progress via Experimentalist RunReporter - #1047

Merged
aleckhoury merged 3 commits into
mainfrom
ASE-749-improve-eval-author-progress-output/akhoury
Aug 3, 2026
Merged

feat(eval-author): narrate insight-mode progress via Experimentalist RunReporter#1047
aleckhoury merged 3 commits into
mainfrom
ASE-749-improve-eval-author-progress-output/akhoury

Conversation

@aleckhoury

@aleckhoury aleckhoury commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Reuse Experimentalist's RunReporter in Eval Author when invoked from insight mode, so the parent run keeps narrating instead of going quiet during materialize / analyze / author / repair.
  • Emit start, phase, and complete progress lines from EvalAuthor._run; Experimentalist loop.py passes the parent reporter. Standalone run_eval_author stays unchanged (reporter=None).
  • Allowlist experimentalist.reporting on the Eval Author plugin boundary and cover the new narration with unit tests. Closes ASE-749; mirrors PR #965.
    Validation screenshot:
Screenshot 2026-08-03 at 3 42 06 PM

Test plan

  • uv run pytest plugins/nemo-eval-author/tests/test_eval_author_agent.py plugins/nemo-eval-author/tests/test_plugin_boundary.py plugins/nemo-eval-author/tests/test_eval_author_run.py -q
  • uv run ruff check / ruff format --check on touched files
  • uv run --frozen ty check on Eval Author agent.py / run.py
  • Manual: nemo agents experimentalist run in insight mode and confirm Eval Author start/phase/complete lines appear on the same stderr stream as Experimentalist progress

Summary by CodeRabbit

  • New Features

    • Added progress reporting for Eval Author runs, including startup, processing phases, task progress, diagnostics, repairs, and completion.
    • Integrated Eval Author progress updates into Experimentalist insight-mode runs.
    • Empty runs now report completion clearly.
  • Bug Fixes

    • Reporting failures remain non-blocking and do not hide Eval Author errors.
  • Documentation

    • Documented the supported reporting integration and dependency boundary.

…ist RunReporter

Signed-off-by: Alec Khoury <akhoury@nvidia.com>
…RunReporter

Reuse the parent RunReporter so Experimentalist insight runs show Eval Author
start, phase, and complete lines instead of going quiet mid-pipeline.

Signed-off-by: Alec Khoury <akhoury@nvidia.com>
@aleckhoury
aleckhoury requested review from a team as code owners August 3, 2026 20:01
@github-actions github-actions Bot added the feat label Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Changes

Eval Author reporting

Layer / File(s) Summary
Reporting contract and behavior
docs/superpowers/specs/...
The design defines optional reporter injection, phase messages, completion behavior, error handling, and validation requirements.
Reporter propagation and phase emission
plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/agent.py, plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/run.py, plugins/nemo-experimentalist/src/nemo_experimentalist_plugin/experimentalist/components/loop.py
EvalAuthor and its builders accept an optional RunReporter. The Experimentalist insight loop passes its reporter. Eval Author reports startup, phase progress, repairs, failures, and completion.
Reporting validation and import boundary
plugins/nemo-eval-author/tests/test_eval_author_agent.py, plugins/nemo-eval-author/tests/test_plugin_boundary.py
Tests cover empty runs, full execution, and repair progress. The Experimentalist reporting module is added to the allowed import set.

Sequence Diagram(s)

sequenceDiagram
  participant ExperimentalistLoop
  participant EvalAuthor
  participant RunReporter
  ExperimentalistLoop->>EvalAuthor: construct with reporter
  EvalAuthor->>RunReporter: report startup and phase progress
  EvalAuthor->>RunReporter: report completion after finalization
Loading

Possibly related PRs

Suggested labels: docs

Suggested reviewers: arpitsardhana, ngoncharenko

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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: reporting Eval Author insight-mode progress through Experimentalist's RunReporter.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ASE-749-improve-eval-author-progress-output/akhoury

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.

Caution

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

⚠️ Outside diff range comments (1)
plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/agent.py (1)

371-390: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Count completed trace analyses, not successful diagnostics.

Line 387 uses len(diagnostics). Failed analyses are excluded. If every analysis fails, output remains trace 0/≤N even after all analyses finish.

Use len(raw_diagnostics) or a processed-result counter. Keep failures in note(...). Add a regression test with a failed analysis that asserts trace N/≤N.

Proposed fix
                 phase="eval author · analyzing traces",
-                completed=len(diagnostics),
+                completed=len(raw_diagnostics),
                 total=len(trials),
🤖 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 `@plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/agent.py`
around lines 371 - 390, Update the trace-analysis progress call in the
surrounding analysis loop to report processed analyses rather than successful
entries in diagnostics: use raw_diagnostics length or an equivalent counter that
includes failures. Preserve the existing failure logging and reporter.note
behavior, and add a regression test covering a failed analysis that verifies
progress reaches trace N/≤N.
🧹 Nitpick comments (2)
docs/superpowers/specs/2026-08-03-ase-749-eval-author-progress-design.md (1)

1-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add required document navigation.

Classify this page as an EXPLANATION. Add prerequisites near the top. Add a Next Steps section with cross-links at the end.

As per coding guidelines, “Always list prerequisites at the top of documentation pages” and “Include 'Next Steps' section at the end with cross-links to related documentation content.”

🤖 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 `@docs/superpowers/specs/2026-08-03-ase-749-eval-author-progress-design.md`
around lines 1 - 9, Classify the document as an EXPLANATION, add a prerequisites
section near the top using the repository’s standard documentation format, and
append a Next Steps section at the end with cross-links to related
documentation. Preserve the existing design content and ensure both navigation
sections follow the project’s documentation guidelines.

Source: Coding guidelines

plugins/nemo-eval-author/tests/test_eval_author_agent.py (1)

93-102: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use RunReporter as the concrete test-helper type. Import it at module scope. Annotate reporter as RunReporter | None and _string_reporter() as tuple[RunReporter, io.StringIO].

🤖 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 `@plugins/nemo-eval-author/tests/test_eval_author_agent.py` around lines 93 -
102, Import RunReporter at module scope, annotate the reporter parameter in the
EvalAuthor test helper with RunReporter | None, and update _string_reporter() to
return tuple[RunReporter, io.StringIO]; apply the corresponding type annotation
at the sibling site in plugins/nemo-eval-author/tests/test_eval_author_agent.py
lines 693-697.

Source: Coding guidelines

🤖 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 `@plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/agent.py`:
- Around line 371-390: Update the trace-analysis progress call in the
surrounding analysis loop to report processed analyses rather than successful
entries in diagnostics: use raw_diagnostics length or an equivalent counter that
includes failures. Preserve the existing failure logging and reporter.note
behavior, and add a regression test covering a failed analysis that verifies
progress reaches trace N/≤N.

---

Nitpick comments:
In `@docs/superpowers/specs/2026-08-03-ase-749-eval-author-progress-design.md`:
- Around line 1-9: Classify the document as an EXPLANATION, add a prerequisites
section near the top using the repository’s standard documentation format, and
append a Next Steps section at the end with cross-links to related
documentation. Preserve the existing design content and ensure both navigation
sections follow the project’s documentation guidelines.

In `@plugins/nemo-eval-author/tests/test_eval_author_agent.py`:
- Around line 93-102: Import RunReporter at module scope, annotate the reporter
parameter in the EvalAuthor test helper with RunReporter | None, and update
_string_reporter() to return tuple[RunReporter, io.StringIO]; apply the
corresponding type annotation at the sibling site in
plugins/nemo-eval-author/tests/test_eval_author_agent.py lines 693-697.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e0e8aaf8-692e-47e9-b832-ee9344cfbba4

📥 Commits

Reviewing files that changed from the base of the PR and between e1c2c7b and e96f911.

📒 Files selected for processing (6)
  • docs/superpowers/specs/2026-08-03-ase-749-eval-author-progress-design.md
  • plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/agent.py
  • plugins/nemo-eval-author/src/nemo_eval_author_plugin/eval_author/run.py
  • plugins/nemo-eval-author/tests/test_eval_author_agent.py
  • plugins/nemo-eval-author/tests/test_plugin_boundary.py
  • plugins/nemo-experimentalist/src/nemo_experimentalist_plugin/experimentalist/components/loop.py

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 30234/38242 79.1% 63.7%
Integration Tests 17879/36911 48.4% 20.9%

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

Remove spec and check on optionality, then ship it.

Signed-off-by: Alec Khoury <akhoury@nvidia.com>
@aleckhoury
aleckhoury added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 383d8de Aug 3, 2026
52 checks passed
@aleckhoury
aleckhoury deleted the ASE-749-improve-eval-author-progress-output/akhoury branch August 3, 2026 22:15
sklinglernv added a commit that referenced this pull request Aug 4, 2026
Two commits on main landed in files this branch rewrites:

- #1047 (eval-author: narrate insight-mode progress via RunReporter) added
  `nemo_experimentalist_plugin.experimentalist.reporting` to the Eval Author
  boundary ratchet, which this branch had split into `_SHARED_LAYER_A` and
  `_BORROWED_BEHAVIOUR`. Resolved by keeping the split and filing the new import
  under borrowed behaviour: RunReporter is reused behaviour, not entity contract,
  so it belongs on the list that may only shrink.
- #1053 (experimentalist: honor remote auth discovery) auto-merged.

Also updates docs/agents/insight-driven-optimization.mdx, new on main, which
documented the pre-rename variables and model defaults this branch removes.

Signed-off-by: Severin Klingler <sklingler@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants