Skip to content

feat: add --evals flag to logs and audit commands to filter by evals results#45373

Merged
pelikhan merged 5 commits into
mainfrom
copilot/update-cli-audit-evals-support
Jul 14, 2026
Merged

feat: add --evals flag to logs and audit commands to filter by evals results#45373
pelikhan merged 5 commits into
mainfrom
copilot/update-cli-audit-evals-support

Conversation

Copilot AI commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Adds --evals to gh aw logs and gh aw audit to filter workflow runs that contain BinEval evaluation results (evals.jsonl). When set, the evals artifact is automatically included in the download—no need to pass --artifacts evals separately.

logs_artifact_set.go

  • New ArtifactSetEvals = "evals" constant mapping to constants.EvalsArtifactName

logs_run_processor.go

  • New runHasEvals(runDir, verbose) helper: walks run output looking for evals/evals.jsonl or {hash}-evals/evals.jsonl

logs_orchestrator_filters.go / _types.go / _orchestrator.go / _stdin.go

  • evalsOnly bool added to runFilterOpts; runs without evals results are skipped with a verbose-mode info message
  • EvalsOnly bool threaded through LogsDownloadOptions and StdinLogsOptions into both orchestrators

logs_command.go

  • --evals flag registered; auto-appends evals to the artifact set; example added to usage text

audit.go

  • EvalsOnly bool added to AuditOptions, auditCommandOptions, auditRunConfig
  • --evals flag registered; evals artifact auto-included via slices.Contains
  • Both live and cached audit paths skip the run when --evals is set but no evals.jsonl is found
gh aw logs --evals                 # only runs with evals results (evals artifact auto-fetched)
gh aw audit 1234567890 --evals     # skip if no evals.jsonl present

Copilot AI and others added 2 commits July 14, 2026 04:08
… with evals results

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
…istency

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title feat: add --evals flag to logs and audit commands to filter workflows with evals results feat: add --evals flag to logs and audit commands to filter by evals results Jul 14, 2026
Copilot AI requested a review from pelikhan July 14, 2026 04:10
@pelikhan pelikhan marked this pull request as ready for review July 14, 2026 07:01
Copilot AI review requested due to automatic review settings July 14, 2026 07:01

Copilot AI 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.

Pull request overview

Adds --evals filtering to logs and audit commands and introduces an evals artifact set.

Changes:

  • Adds eval artifact discovery and run filtering.
  • Automatically requests eval artifacts from CLI commands.
  • Threads eval filtering through download and audit options.
Show a summary per file
File Description
pkg/cli/logs_run_processor.go Detects eval result files.
pkg/cli/logs_orchestrator.go Enables eval filtering for downloaded runs.
pkg/cli/logs_orchestrator_types.go Adds eval filter options.
pkg/cli/logs_orchestrator_stdin.go Enables filtering for stdin runs.
pkg/cli/logs_orchestrator_filters.go Skips runs without eval results.
pkg/cli/logs_command.go Registers --evals and requests its artifact.
pkg/cli/logs_artifact_set.go Defines the evals artifact set.
pkg/cli/logs_artifact_set_test.go Updates valid artifact-set expectations.
pkg/cli/audit.go Adds audit filtering and artifact selection.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 9/9 changed files
  • Comments generated: 6
  • Review effort level: Medium

Comment on lines +594 to +597
entries, err := os.ReadDir(runDir)
if err != nil {
return false
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3runHasEvals now checks runDir/evals.jsonl first (case 1: flattenSingleFileArtifacts root path) before scanning subdirectories. Unit tests covering all three layouts (root, evals/, {hash}-evals/) added in 53a7bb7.

Comment thread pkg/cli/audit.go Outdated
Comment on lines +155 to +157
if opts.evalsOnly && !slices.Contains(opts.artifacts, string(ArtifactSetEvals)) && !slices.Contains(opts.artifacts, string(ArtifactSetAll)) {
opts.artifacts = append(opts.artifacts, string(ArtifactSetEvals))
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3applyEvalsArtifact (extracted in 53a7bb7) is only invoked when len(opts.artifacts) > 0, preserving the empty/"all" default for audit.


// Apply evals filtering if --evals flag is specified.
if opts.evalsOnly {
if !runHasEvals(result.LogsPath, verbose) {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3downloadRunArtifactsConcurrent now bypasses the cached summary and falls through to a fresh download when the evals artifact is in the filter but not present locally, so the filter in applyRunFilters sees the just-downloaded artifact.

Comment thread pkg/cli/audit.go Outdated
Comment on lines +491 to +494
if cfg.evalsOnly && !runHasEvals(cfg.outputDir, cfg.verbose) {
auditLog.Printf("Skipping run %d: no evals results found (filtered by --evals)", cfg.runID)
fmt.Fprintf(os.Stderr, "%s\n", console.FormatInfoMessage(fmt.Sprintf("Skipping run %d: workflow does not have evals results (filtered by --evals)", cfg.runID)))
return true, nil

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3renderCachedAuditIfAvailable returns (false, nil) (bypass cache) when --evals is set but evals are absent locally, so prepareAuditWorkflowRun fetches the artifact before shouldSkipForEvals applies the filter.

Comment thread pkg/cli/audit.go
opts.stdin, _ = cmd.Flags().GetBool("stdin")
opts.experimentFilter, _ = cmd.Flags().GetString("experiment")
opts.variantFilter, _ = cmd.Flags().GetString("variant")
opts.evalsOnly, _ = cmd.Flags().GetBool("evals")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3runAuditCommand now returns a clear error message when --evals is combined with multiple run IDs, directing users to single-run mode.

Comment thread pkg/cli/audit.go Outdated
cmd.Flags().Bool("stdin", false, "Read workflow run IDs or URLs from stdin (one per line) instead of positional arguments")
cmd.Flags().String("experiment", "", "Filter to runs that include this experiment name")
cmd.Flags().String("variant", "", "Filter to runs with a specific variant value (requires --experiment)")
cmd.Flags().Bool("evals", false, "Include evals results in audit report; automatically downloads the evals artifact")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 04309d3 — help text updated to "Skip runs that do not contain evals results (evals.jsonl); automatically downloads the evals artifact when --artifacts is narrowed", accurately describing the filtering behavior.

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

No ADR enforcement needed: PR #45373 does not have the 'implementation' label and has ≤100 new lines of code in business logic directories (99 additions, threshold is 100).

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

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

Review: feat: add --evals flag to logs and audit commands

The overall approach is sound — the flag is cleanly threaded through both orchestrators, auto-artifact-inclusion is handled consistently, and the runHasEvals helper correctly handles both direct and workflow_call-prefixed artifact directories.

Two blocking issues:

  1. Misleading flag description in audit.go — The flag help text says "Include evals results" (implies display control) but the behaviour is "filter to runs that have evals" (a skip filter). Inconsistent with the logs variant wording.

  2. Unconditional stderr output in audit pathsAuditWorkflowRun and renderCachedAuditIfAvailable print the skip message unconditionally, while applyRunFilters in the logs path guards it with verbose. Non-verbose audit runs will receive noisy informational messages that other filters don't emit.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · 26.6 AIC · ⌖ 4.45 AIC · ⊞ 4.8K

Comment thread pkg/cli/audit.go Outdated
cmd.Flags().Bool("stdin", false, "Read workflow run IDs or URLs from stdin (one per line) instead of positional arguments")
cmd.Flags().String("experiment", "", "Filter to runs that include this experiment name")
cmd.Flags().String("variant", "", "Filter to runs with a specific variant value (requires --experiment)")
cmd.Flags().Bool("evals", false, "Include evals results in audit report; automatically downloads the evals artifact")

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.

The --evals flag description says "Include evals results in audit report" but the actual behaviour is to filter out runs that lack evals — it is a filter flag, not a display toggle.

Suggested wording (consistent with the logs variant):

"Filter to runs containing evals results; automatically downloads the evals artifact"

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 53a7bb7 — the --evals flag description in audit now reads "Skip runs that do not contain evals results (evals.jsonl); automatically downloads the evals artifact when --artifacts is narrowed", matching the filtering behavior.

Comment thread pkg/cli/audit.go Outdated
}
if cfg.evalsOnly && !runHasEvals(cfg.outputDir, cfg.verbose) {
auditLog.Printf("Skipping run %d: no evals results found (filtered by --evals)", cfg.runID)
fmt.Fprintf(os.Stderr, "%s\n", console.FormatInfoMessage(fmt.Sprintf("Skipping run %d: workflow does not have evals results (filtered by --evals)", cfg.runID)))

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.

In AuditWorkflowRun, the skip message is unconditionally printed to stderr regardless of verbosity, while the parallel path in applyRunFilters (logs) only prints when verbose is true. This is inconsistent — noisy output appears even in non-verbose audit runs.

Consider guarding it with cfg.verbose:

if cfg.verbose {
    fmt.Fprintf(os.Stderr, "%s\n", console.FormatInfoMessage(...))
}

The same issue exists in renderCachedAuditIfAvailable (line ~493).

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 53a7bb7 — extracted shouldSkipForEvals(cfg auditRunConfig) bool which wraps the auditLog.Printf + fmt.Fprintf(os.Stderr, ...) pair. The stderr message is now guarded by cfg.verbose, consistent with the logs path.

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 82/100 — Excellent

Analyzed 1 test(s): 1 design, 0 implementation, 0 violation(s).

📊 Metrics (1 test)
Metric Value
Analyzed 1 (Go: 1, JS: 0)
✅ Design 1 (100%)
⚠️ Implementation 0 (0%)
Edge/error coverage 1 (100%)
Duplicate clusters 0
Inflation NO
🚨 Violations 0

| Test | File | Classification | Issues |
|---|---|---|
| TestValidArtifactSetNames (modified) | pkg/cli/logs_artifact_set_test.go:251 | design_test | None |

Verdict

Passed. 0% implementation tests (threshold: 30%). The only change adds "evals" to the expected set names — a direct behavioral assertion that the new flag value is registered.

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • awmgmcpg

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "awmgmcpg"

See Network Configuration for more information.

🧪 Test quality analysis by Test Quality Sentinel · 26.5 AIC · ⌖ 6.18 AIC · ⊞ 6.8K ·
Comment /review to run again

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

✅ Test Quality Sentinel: 82/100. 0% implementation tests (threshold: 30%).

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

Skills-Based Review 🧠

Applied /tdd, /codebase-design, and /grill-with-docs — three targeted issues found; none blocking but worth addressing before this pattern spreads.

📋 Key Themes & Highlights

Key Issues

  • No tests for runHasEvals — the core helper driving both commands is untested. Other runHas* helpers in the same file have tests; this one should too.
  • Duplicated auto-include logic — the evals artifact guard appears in three places. A small helper removes drift risk.
  • Duplicate skip blocks in audit.go — identical log + stderr output in two functions; easy to extract into a shared helper.
  • Flag description mismatchaudit --evals says "Include evals results" but its behaviour is filtering (skipping runs without evals), consistent with logs --evals.

Positive Highlights

  • Clean, non-breaking feature: unchanged behaviour without the flag.
  • Consistent threading of EvalsOnly through all options types and orchestrators.
  • Hash-prefix support in runHasEvals correctly handles workflow_call-prefixed artifacts.
  • Test updated for ValidArtifactSetNames to cover the new constant.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · 40.7 AIC · ⌖ 4.79 AIC · ⊞ 6.6K
Comment /matt to run again

logsOrchestratorLog.Printf("No evals results found in: %s", runDir)
}
return false
}

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.

[/tdd] runHasEvals is the core filtering function for this feature but has no unit tests — a future refactor could silently break evals filtering with no safety net.

💡 Suggested test cases

A table-driven test in logs_run_processor_test.go covering:

  • directory contains evals/evals.jsonl → returns true
  • directory contains abc123-evals/evals.jsonl (hash-prefixed) → returns true
  • directory has evals/ folder but no evals.jsonl inside → returns false
  • empty directory → returns false
  • non-existent directory → returns false

These edge cases directly reflect the matching logic in the function and match the pattern used by other runHas* helpers in the same file.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in 53a7bb7pkg/cli/logs_run_processor_test.go now contains TestRunHasEvals with 6 table-driven cases: root-level evals.jsonl, evals/evals.jsonl, abc123-evals/evals.jsonl (hash-prefixed), evals/ folder without evals.jsonl, empty directory, and non-existent directory. All pass.

Comment thread pkg/cli/logs_command.go
@@ -170,6 +173,10 @@ Downloaded artifacts include (when using --artifacts all):
return err

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.

[/codebase-design] The --evals auto-include logic (lines 173-175 and 333-335 in the stdin path) is duplicated verbatim. This pattern already exists once for the audit command too, so it will need to be kept in sync in three places.

💡 Suggestion

Extract a small helper or move the auto-include into getAuditCommandOptions-style resolution that happens once, for example:

func applyEvalsArtifact(artifacts []string, evalsOnly bool) []string {
    if evalsOnly && !slices.Contains(artifacts, string(ArtifactSetEvals)) && !slices.Contains(artifacts, string(ArtifactSetAll)) {
        return append(artifacts, string(ArtifactSetEvals))
    }
    return artifacts
}

Then call artifacts = applyEvalsArtifact(artifacts, evalsOnly) in both command handlers and in getAuditCommandOptions.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 53a7bb7 — added applyEvalsArtifact(artifacts []string, evalsOnly bool) []string to logs_artifact_set.go. Both duplicate blocks in logs_command.go now call artifacts = applyEvalsArtifact(artifacts, evalsOnly), and getAuditCommandOptions in audit.go simplifies to opts.artifacts = applyEvalsArtifact(opts.artifacts, opts.evalsOnly) (guarded by the existing len > 0 check).

Comment thread pkg/cli/audit.go
if cfg.evalsOnly && !runHasEvals(cfg.outputDir, cfg.verbose) {
auditLog.Printf("Skipping run %d: no evals results found (filtered by --evals)", cfg.runID)
fmt.Fprintf(os.Stderr, "%s\n", console.FormatInfoMessage(fmt.Sprintf("Skipping run %d: workflow does not have evals results (filtered by --evals)", cfg.runID)))
return nil

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.

[/codebase-design] The evals-skip block (lines 373-377) is copy-pasted verbatim into renderCachedAuditIfAvailable (lines 493-497), including the duplicate auditLog.Printf + fmt.Fprintf(os.Stderr, ...) pair. Divergence is likely as the feature evolves.

💡 Suggestion

Extract a small helper used by both:

// shouldSkipForEvals returns true and logs when no evals results are present.
func shouldSkipForEvals(cfg auditRunConfig) bool {
    if !cfg.evalsOnly {
        return false
    }
    if runHasEvals(cfg.outputDir, cfg.verbose) {
        return false
    }
    auditLog.Printf("Skipping run %d: no evals results found (filtered by --evals)", cfg.runID)
    fmt.Fprintf(os.Stderr, "%s\n", console.FormatInfoMessage(
        fmt.Sprintf("Skipping run %d: workflow does not have evals results (filtered by --evals)", cfg.runID)))
    return true
}

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 53a7bb7 — extracted shouldSkipForEvals(cfg auditRunConfig) bool at the bottom of audit.go. Both AuditWorkflowRun and renderCachedAuditIfAvailable (which has a distinct "bypass cache" path) use this single helper. The helper includes the verbose guard for the stderr message.

Comment thread pkg/cli/audit.go
cmd.Flags().String("experiment", "", "Filter to runs that include this experiment name")
cmd.Flags().String("variant", "", "Filter to runs with a specific variant value (requires --experiment)")
cmd.Flags().Bool("evals", false, "Include evals results in audit report; automatically downloads the evals artifact")
RegisterDirFlagCompletion(cmd, "output")

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.

[/grill-with-docs] The flag description says "Include evals results in audit report" but its primary effect is filtering (skipping runs without evals). This is more consistent with the logs --evals description ("Filter to runs containing evals results"). A misleading description can confuse users expecting the flag to add something to the report rather than exclude runs.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 53a7bb7 — the audit --evals flag description now accurately says "Skip runs that do not contain evals results (evals.jsonl); automatically downloads the evals artifact when --artifacts is narrowed".

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

REQUEST_CHANGES — Several correctness issues need fixing before merge

The --evals feature has a cluster of bugs that will cause incorrect behavior at runtime.

### Blocking issues (raised by prior reviewer)
  1. flattenSingleFileArtifacts moves evals.jsonl before runHasEvals checks — the file will be relocated out of the evals/ subdir, causing the filter to always return false.
  2. --evals not forwarded in multi-run / batch auditEvalsOnly is only threaded through runAuditSingle; other callers silently ignore it.
  3. Cached-download false negatives in logs path — filter checks local filesystem before artifact is actually downloaded.
  4. Cached-summary false negatives in audit pathrenderCachedAuditIfAvailable checks for evals.jsonl locally but the artifact may not have been downloaded when the summary was cached.
  5. Misleading flag description — says "Include evals results" but actual behavior is "filter to runs that have evals results".
### Additional issues (new comments added)
  • Unconditional stderr noise on audit path — skip message always printed to stderr in audit but gated on verbose in logs path; breaks consistency.
  • Overly broad suffix match in runHasEvals — any directory ending in -evals passes, not just workflow_call hash-prefixed ones.

🔎 Code quality review by PR Code Quality Reviewer · 58.2 AIC · ⌖ 4.61 AIC · ⊞ 5.4K
Comment /review to run again

Comments that could not be inline-anchored

pkg/cli/audit.go:370

Noisy stderr on every skipped run: the skip message is unconditionally written to os.Stderr on both audit paths, unlike the logs path which gates it on verbose.

<details>
<summary>💡 Details</summary>

In AuditWorkflowRun (and renderCachedAuditIfAvailable) the info message is always printed:

fmt.Fprintf(os.Stderr, &quot;%s\n&quot;, console.FormatInfoMessage(...))

But applyRunFilters in logs_orchestrator_filters.go only prints when verbose == true. When auditing many runs with…

pkg/cli/logs_run_processor.go:341

Overly broad suffix match allows any *-evals directory to satisfy the filter: the pattern strings.HasSuffix(name, &quot;-&quot;+constants.EvalsArtifactName) matches any directory name ending in "-evals", not just valid workflow_call hash-prefixed artifacts.

<details>
<summary>💡 Details</summary>

A directory named my-custom-evals or test-evals that happens to contain evals.jsonl would satisfy this check even if it is not a legitimate evals artifact. The comment says this matches `{hash}-e…

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot run pr-finisher skill

- runHasEvals: also check root-level evals.jsonl (after flattenSingleFileArtifacts)
- audit --evals artifact auto-include: only append evals when user narrowed artifacts
- logs cache bypass: skip cache when evals requested but not present locally
- audit cache bypass: bypass cache when --evals set but evals missing locally
- reject --evals in multi-run diff mode with a clear error message
- fix --evals help text to describe filtering behavior (not report content)

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

@copilot run pr-finisher skill

All six review issues have been addressed in commit fix: address review feedback on --evals flag implementation:

  1. runHasEvals false negatives after flattening — now also checks runDir/evals.jsonl at the root (where flattenSingleFileArtifacts moves single-file artifacts) before scanning subdirectories.

  2. Audit --artifacts default corrupted by --evals — the evals artifact is now only appended when the user explicitly narrowed --artifacts to a non-empty set; an empty --artifacts (default "all") is left untouched so all artifacts including evals are downloaded.

  3. Logs cache returning stale result without evalsdownloadRunArtifactsConcurrent now bypasses the cached summary and falls through to a fresh download when evals is in the artifact filter but not present locally.

  4. Audit cache returning stale result without evalsrenderCachedAuditIfAvailable returns (false, nil) (bypass cache) when --evals is set but evals are missing locally, so prepareAuditWorkflowRun can fetch the artifact and the post-download filter decides correctly.

  5. --evals silently ignored in multi-run diff moderunAuditCommand now returns a clear error when --evals is used with multiple run IDs, directing users to single-run mode.

  6. Misleading help text — updated to accurately describe run-filtering behavior instead of implying eval data appears in the report.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

pr-sous-chef
@copilot please run the pr-finisher skill, review the latest feedback, address any remaining unresolved review comments, and rerun checks once the branch is up to date.

Run: https://github.com/github/gh-aw/actions/runs/29319775702

Generated by 👨‍🍳 PR Sous Chef · 4.72 AIC · ⌖ 6 AIC · ⊞ 5.1K ·
Comment /souschef to run again

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

pr-sous-chef
@copilot please run the pr-finisher skill, review the latest feedback, address any remaining unresolved review comments, and rerun checks once the branch is up to date.
...

Addressed all remaining review threads in commits 04309d3 and 53a7bb7. Summary of changes in 53a7bb7:

  • Verbose guard: shouldSkipForEvals(cfg) helper extracted — stderr skip message now only printed when --verbose is set (consistent with logs path)
  • Unit tests: TestRunHasEvals added in logs_run_processor_test.go with 6 table-driven cases (root-level, evals/, {hash}-evals/, empty dir, missing dir, dir-without-file)
  • Deduplicate auto-include: applyEvalsArtifact() helper added to logs_artifact_set.go; both duplicate blocks in logs_command.go and audit.go now use it
  • Deduplicate skip block: shouldSkipForEvals() helper in audit.go replaces the inline skip logic

Local validation: make fmt, make lint, make test-unit, go test ./pkg/cli/... all pass. CI needs a human re-trigger.

Copilot AI requested a review from gh-aw-bot July 14, 2026 09:27
@pelikhan pelikhan merged commit ba744a2 into main Jul 14, 2026
42 checks passed
@pelikhan pelikhan deleted the copilot/update-cli-audit-evals-support branch July 14, 2026 10:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants