Skip to content

Fix logs MCP tool truncating explicit date-range queries to a single stale day with no warning - #54110

Open
pelikhan with Copilot wants to merge 6 commits into
mainfrom
copilot/deep-report-fix-stale-data-issue
Open

Fix logs MCP tool truncating explicit date-range queries to a single stale day with no warning#54110
pelikhan with Copilot wants to merge 6 commits into
mainfrom
copilot/deep-report-fix-stale-data-issue

Conversation

Copilot AI commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

The logs MCP tool requested with a wide explicit start_date/end_date window (e.g. 90 days) could silently return runs from a single stale day, with every downstream trend chart built on that narrow, unrepresentative slice. The previous fix only warned on the no-date-range code path, leaving the explicit-range pagination bug unaddressed.

Root cause

collectProcessedWorkflowRuns's pagination loop caps out at MaxIterations (20). When scanning an explicit date range and many non-matching runs are interspersed across the window, the loop can exhaust all iterations without ever reaching the requested count or timing out — it just falls out of the loop naturally, leaving timeoutReached and countLimitReached both false. Since a continuation/partial signal is only emitted when one of those flags is true, callers had no way to know the scan stopped well short of the requested range.

Changes

  • Pagination fix: collectProcessedWorkflowRuns now sets countLimitReached = true whenever the iteration cap is hit during an explicit date-range fetch (and no timeout fired), so a continuation cursor and "partial": true are always surfaced instead of being silently dropped.
  • Coverage warning: added dateRangeCoverageWarning — when a partial/truncated result's returned runs span less than 20% of the requested start_date/end_date window, it emits an explicit warning via the existing stale_warning mechanism, telling callers the result is a narrow slice rather than a representative multi-day sample.
  • Tests: added regression coverage for both the iteration-cap continuation behavior and the coverage-warning threshold logic.

Run: https://github.com/github/gh-aw/actions/runs/32326521694> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 11.9 AIC · ⌖ 8.15 AIC · ⊞ 9.3K ·

Comment /souschef to run again


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 8.85 AIC · ⌖ 9.55 AIC · ⊞ 9.3K ·
Comment /souschef to run again


Run: https://github.com/github/gh-aw/actions/runs/32334226502> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 27.9 AIC · ⌖ 8.81 AIC · ⊞ 9.3K ·

Comment /souschef to run again

…a single day

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix MCP tool to return correct data for 90-day window Fix logs MCP tool truncating explicit date-range queries to a single stale day with no warning Aug 20, 2026
Copilot AI requested a review from pelikhan August 20, 2026 01:16
@github-actions

Copy link
Copy Markdown
Contributor

Great work on this fix! 🎉 This PR addresses the critical data-correctness bug (#53995) where explicit wide date-range queries in the logs MCP tool could truncate to a single stale day without surfacing a continuation cursor. The fix is well-focused:

Clear root cause identification — hitting MaxIterations during fetchAllInRange mode silently returned partial data with no warning

Solid implementation — treats iteration cap hits like count-limit breaks to guarantee continuation cursors are surfaced for explicit date ranges

Comprehensive test coverage — two new regression tests (TestCollectProcessedWorkflowRunsIterationLimitSurfacesContinuation and TestDateRangeCoverageWarning) protect against regression

User-facing improvementdateRangeCoverageWarning explicitly flags when a partial result's span is < 20% of the requested range, preventing silent data validity issues in multi-day trend analysis

This looks ready for review and merge. The change is minimal, well-tested, and directly addresses a real production issue impacting trend reports.

Generated by ✅ Contribution Check · auto · 56.4 AIC · ⌖ 6.63 AIC · ⊞ 9.2K ·

@pelikhan
pelikhan marked this pull request as ready for review August 20, 2026 01:43
Copilot AI balanced review requested due to automatic review settings August 20, 2026 01:43
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

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

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

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

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #54110

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

reviewed_at: 2026-08-20T00:00:00Z
review_event: COMMENT
top_themes:
  - no actionable blocking issues found
  - date-range continuation/warning logic looks internally consistent
files_reviewed:
  - .github/skills/agentic-workflows/SKILL.md
  - pkg/cli/logs_orchestrator.go
  - pkg/cli/logs_orchestrator_download.go
  - pkg/cli/logs_orchestrator_render.go
  - pkg/cli/logs_orchestrator_unit_test.go
comment_count: 0

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 9.01 AIC · ⌖ 6.76 AIC · ⊞ 7K ·
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.

Verdict

No blocking issues found in the changed lines.

Review notes

I checked the new iteration-cap continuation path, the stale-range warning logic, and the regression tests. The continuation wiring is consistent with the existing guardrail behavior (partial is driven by presence of continuation), and I did not find a concrete correctness or performance regression in the diff itself.

The requested grumpy-coder sub-agent was unavailable in this sandbox, so this review is based on independent analysis only.

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 9.01 AIC · ⌖ 6.76 AIC · ⊞ 7K
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.

The fix is well-targeted and addresses both symptoms of the bug:

  1. logs_orchestrator_download.go — Correctly promotes a MaxIterations exhaustion during a fetchAllInRange scan into countLimitReached = true, ensuring a continuation cursor is always surfaced for explicit date-range queries.
  2. logs_orchestrator.godateRangeCoverageWarning correctly guards against mistaking a narrow, possibly-stale slice for a full-range scan by comparing covered span against the requested window using the 20% threshold.
  3. logs_orchestrator_render.go — Correctly chains the new warning into the existing staleLogsWarning fallback path.

Tests cover all the important edge cases (no runs, non-partial, wide-span coverage, narrow cluster). No blocking issues found.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 22.7 AIC · ⌖ 8.82 AIC · ⊞ 5.7K

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

Ponytail review — one finding, one line.

net: -1 lines possible.

Generated by ✂️ Ponytail Reviewer for #54110 · auto · 21.3 AIC · ⌖ 4.9 AIC · ⊞ 7.3K
Comment /ponytail to run again

Comment thread pkg/cli/logs_orchestrator.go Outdated
}
}
coveredSpan := newest.Sub(oldest)
if requestedSpan > 0 && coveredSpan.Seconds()/requestedSpan.Seconds() >= dateRangeCoverageMinFraction {

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.

yagni: requestedSpan > 0 re-checked here after already returning early at L136 for <= 0. Drop the redundant clause.

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.

Dropped the redundant requestedSpan > 0 check in 302b3ee's follow-up (e1e209d).

@github-actions

Copy link
Copy Markdown
Contributor

PR #54110 Review Summary

The core fix (2 lines in logs_orchestrator_download.go) is correct and well-scoped. Three issues to address:

  1. False positive (logs_orchestrator.go:151) — dateRangeCoverageWarning fires unconditionally when exactly 1 run is returned (coveredSpan == 0). Guard with len(processedRuns) < 2 or measure coverage as newest.Sub(start) instead.
  2. Silent warning suppression (logs_orchestrator_render.go:42) — if staleLogsWarning fires, the coverage warning is dropped. At minimum document this priority, or consider surfacing both.
  3. Test gaps — no test exercises the endDate != "" branch, and no boundary test confirms the last batch is included when the iteration cap is hit.

@copilot please address the review comments above.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 48.2 AIC · ⌖ 11.6 AIC · ⊞ 7.8K ·
Comment /matt 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.

Skills-Based Review 🧠

Applied /diagnosing-bugs and /tdd — requesting changes for a false-positive risk and missing test coverage.

📋 Key Themes & Highlights

Key Themes

  • False positive in dateRangeCoverageWarning: when exactly one run is returned, coveredSpan is zero, so the warning always fires for any partial single-run result regardless of where in the window that run sits (line 151 of logs_orchestrator.go).
  • Warning suppression: if staleLogsWarning fires, the coverage warning is silently skipped. This is a reasonable priority choice but is undocumented and could mask a narrow-slice problem from callers.
  • Test coverage gaps: the endDate != "" branch in dateRangeCoverageWarning is never exercised, and there is no boundary test confirming the last batch is included when the iteration cap is hit.

Positive Highlights

  • ✅ Root cause properly addressed in collectProcessedWorkflowRuns — two-line fix is minimal and surgical
  • ✅ Good doc-comment on dateRangeCoverageMinFraction explaining the threshold rationale
  • ✅ Regression test names read as specifications (TestCollectProcessedWorkflowRunsIterationLimitSurfacesContinuation) — exactly the /diagnosing-bugs pattern of naming tests after the bug, not the fix
  • dateRangeCoverageWarning correctly short-circuits on !partial, empty startDate, and zero-length result before doing any date math

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 48.2 AIC · ⌖ 11.6 AIC · ⊞ 7.8K
Comment /matt to run again

}
coveredSpan := newest.Sub(oldest)
if requestedSpan > 0 && coveredSpan.Seconds()/requestedSpan.Seconds() >= dateRangeCoverageMinFraction {
return ""

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.

[/diagnosing-bugs] coveredSpan is zero when exactly one run is returned — newest.Sub(oldest) == 0 — so the warning always fires for any partial result with a single run, even when that run falls well within the requested window. This is a false positive.

💡 Suggested fix

Guard against the single-run case before computing coverage:

if len(processedRuns) < 2 {
    return ""
}

Alternatively, measure newest.Sub(start) (how far back into the requested window runs actually reach) instead of newest.Sub(oldest), which avoids the zero-span degenerate case and better models "how much of the window was scanned".

@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 — added a guard returning "" when fewer than 2 runs are returned, so a single in-window run no longer produces a zero-span false positive.

LogsDownloadOptions{Count: 1000, StartDate: "-90d"},
)
require.NoError(t, err)
assert.False(t, timeoutReached)

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] The regression test TestCollectProcessedWorkflowRunsIterationLimitSurfacesContinuation asserts assert.Len(t, runs, MaxIterations, ...) — but the mock returns one run per iteration, so this assertion would also pass if countLimitReached were set before the last batch is appended. The test doesn't cover the boundary: does the final batch's runs get included or excluded?

💡 Suggested addition

Add a sub-test that passes Count: MaxIterations and verifies that exactly MaxIterations runs are returned (not MaxIterations - 1), confirming that the fix doesn't accidentally discard the last batch:

t.Run("last batch is included when cap is hit", func(t *testing.T) {
    // Count == MaxIterations: all collected runs should appear.
    runs, _, countLimitReached, err := collectProcessedWorkflowRuns(...)
    require.NoError(t, err)
    assert.True(t, countLimitReached)
    assert.Len(t, runs, MaxIterations)
})

@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 the boundary sub-test with Count: MaxIterations confirming the final batch's runs aren't discarded.

Comment thread pkg/cli/logs_orchestrator_render.go Outdated
if opts.checkStaleness {
if warning := staleLogsWarning(processedRuns, opts.startDate, opts.endDate); warning != "" {
logsData.StaleWarning = warning
} else if warning := dateRangeCoverageWarning(processedRuns, opts.startDate, opts.endDate, opts.continuation != nil); warning != "" {

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.

[/diagnosing-bugs] The dateRangeCoverageWarning is only reachable when opts.checkStaleness is true and staleLogsWarning returns empty. If staleLogsWarning fires first (e.g. the results are stale and narrow), the coverage warning is silently suppressed. A caller receiving a stale-warning may still not know the result is also a narrow slice of the requested range.

💡 Suggestion

Consider emitting both warnings, or make staleLogsWarning and dateRangeCoverageWarning composable so both signals can be surfaced. At minimum, add a comment explaining the priority decision:

// staleLogsWarning takes precedence; if stale, the narrow-slice warning
// is redundant because the stale message already explains data quality.
if warning := staleLogsWarning(...); warning != "" {
    logsData.StaleWarning = warning
} else if warning := dateRangeCoverageWarning(...); warning != "" {
    logsData.StaleWarning = warning
}

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

Resolved differently: dateRangeCoverageWarning's partial param is now fed from the actual countLimitReached flag (not opts.continuation != nil), so this warning only fires for the count-limit cause it describes; a stale timeout continuation no longer suppresses or conflates with it since they're now independent conditions checked with distinct causes.

{Run: WorkflowRun{CreatedAt: now.Add(-80 * 24 * time.Hour)}},
}
assert.Empty(t, dateRangeCoverageWarning(runs, ninetyDaysAgo, "", true))
})

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] TestDateRangeCoverageWarning has no test for the endDate != "" branch — parsedEnd replaces time.Now() as the window end, but all sub-tests pass "" for endDate. A bug in parseFilterDate for the end date, or an off-by-one in how end is computed, would go undetected.

💡 Suggested addition
t.Run("warns with explicit endDate and narrow coverage", func(t *testing.T) {
    staleDay := now.Add(-88 * 24 * time.Hour)
    runs := []ProcessedRun{
        {Run: WorkflowRun{CreatedAt: staleDay}},
        {Run: WorkflowRun{CreatedAt: staleDay.Add(-time.Hour)}},
    }
    end := now.Add(-1 * 24 * time.Hour).Format(time.RFC3339)
    warning := dateRangeCoverageWarning(runs, ninetyDaysAgo, end, true)
    require.NotEmpty(t, warning)
})

@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 the explicit-endDate sub-test.

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

Fixes incomplete pagination signals for explicit logs date ranges and adds narrow-coverage warnings.

Changes:

  • Marks iteration-capped date-range scans as partial.
  • Warns when returned runs cover under 20% of the requested range.
  • Adds regression tests and workflow skill documentation routing.
Show a summary per file
File Description
pkg/cli/logs_orchestrator.go Adds date-range coverage warning logic.
pkg/cli/logs_orchestrator_download.go Detects iteration-cap truncation.
pkg/cli/logs_orchestrator_render.go Exposes coverage warnings in output.
pkg/cli/logs_orchestrator_unit_test.go Adds pagination and warning tests.
.github/skills/agentic-workflows/SKILL.md Adds jobs guidance to the skill index.

Review details

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Suppressed comments (1)

pkg/cli/logs_orchestrator_download.go:274

  • iteration >= MaxIterations does not prove that the loop exited because of the cap: the twentieth fetch can return the final short batch and break at shouldStopAfterWorkflowRunBatch, meaning the requested range was fully scanned. This condition still marks that complete result as partial and emits a bogus continuation. Track whether pagination ended naturally versus via an exhaustion break, and set this flag only for the former.
	if runtime.fetchAllInRange && !timeoutReached && iteration >= MaxIterations {
		countLimitReached = true
  • Files reviewed: 5/5 changed files
  • Comments generated: 2
  • Review effort level: Balanced

Comment on lines +273 to +274
if runtime.fetchAllInRange && !timeoutReached && iteration >= MaxIterations {
countLimitReached = true

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: collectProcessedWorkflowRuns now returns the actual pagination date cursor it advanced to (including zero-match scans), and buildContinuationIfNeeded uses it to set the continuation's end_date, bounding the resumed query server-side instead of relying solely on before_run_id. Added a regression test (lastFetchedBeforeDate overrides end_date...) covering this.

Comment on lines +153 to +157
return fmt.Sprintf(
"An explicit date range was requested (%s), but the count limit was reached after collecting runs spanning only %s "+
"(from %s to %s). This is a narrow slice of the requested range and may not represent overall trends. "+
"Use the continuation cursor to fetch the remaining time range, or increase 'count' to cover the full window.",
humanizeDuration(requestedSpan), humanizeDuration(coveredSpan), oldest.Format(time.RFC3339), newest.Format(time.RFC3339))

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: dateRangeCoverageWarning is now passed the actual countLimitReached flag through a new renderLogsOutputOptions.countLimitReached field instead of opts.continuation != nil, so it no longer fires with the count-limit message for timeout-driven continuations.

…teration cap

ADR for the decision in PR #54110 to set countLimitReached=true when
MaxIterations is hit during explicit date-range scans, plus the
dateRangeCoverageWarning for narrow-slice partial results.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (167 new lines in pkg/cli/) but does not have a linked Architecture Decision Record (ADR).

📄 Draft ADR committed: docs/adr/54110-surface-continuation-cursor-on-iteration-cap-for-date-range-scans.md — review and complete it before merging.

🔒 This PR cannot merge until an ADR is linked in the PR body.

📋 What to do next
  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete the missing sections — add context the AI couldn't infer, refine the decision rationale, and list real alternatives you considered
  3. Commit the finalized ADR to docs/adr/ on your branch
  4. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-54110: Surface Continuation Cursor on Iteration Cap for Date-Range Scans

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

❓ Why ADRs Matter

"AI made me procrastinate on key design decisions. Because refactoring was cheap, I could always say 'I'll deal with this later.' Deferring decisions corroded my ability to think clearly."

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.

📋 Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 0042-use-postgresql.md for PR #42).

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · sonnet46 · 67.7 AIC · ⌖ 31.8 AIC · ⊞ 9.1K ·
Comment /review to run again

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot This PR still needs a forward-progress pass.

  • Please refresh the branch if GitHub offers one, address the remaining maintainer-visible blockers, and then run the pr-finisher skill with a concise maintainer-facing handoff.

Generated by 👨🍳 PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 10.4 AIC · ⌖ 8.15 AIC · ⊞ 6.9K ·
Comment /souschef to run again

…essage, and continuation cursor replay

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Copilot AI requested a review from gh-aw-bot August 20, 2026 02:14
@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Sous-chef triage: please investigate this PR and move it toward merge readiness. Refresh the branch if needed, review any unresolved feedback, and run the pr-finisher skill before your next update.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 11.9 AIC · ⌖ 8.15 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Copilot AI commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@copilot quick triage for this PR:

Unresolved review threads:...

All 7 listed threads already have fixes applied and replies posted in commit ff272af (verified again at current HEAD a7250d2, which is even with origin/main): the redundant requestedSpan > 0 check is removed, dateRangeCoverageWarning guards the single-run zero-span false positive, the iteration-cap boundary and explicit-endDate regression sub-tests are present and passing, the continuation cursor persists the real pagination date instead of only before_run_id, and the count-limit warning is gated by the actual countLimitReached flag rather than opts.continuation != nil. No further code changes are needed on my end; these threads just need to be marked resolved (I don't have a tool to do that directly).

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

Copilot AI commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@copilot quick triage for this PR:

Unresolved review threads (newest first):...

I don't have a tool available in this session that can mark GitHub review threads as resolved (no GraphQL thread-resolution mutation, and gh isn't authenticated here). All 7 threads' underlying code concerns are already fixed and verified at current HEAD a7250d2 (even with origin/main) — nothing further to change on my end. Resolving the threads themselves needs to be done by a maintainer or a tool with that capability.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot this PR still needs a maintainer-facing finish pass.

Open review threads already have author follow-up on the current head, but they remain unresolved for reviewers:

  • github-actions / reviewer follow-up around the date-range coverage warning and iteration-cap handling
  • copilot review threads linked from the unresolved discussion list on the PR

Please do one pass now:

  • resolve or answer each remaining unresolved review thread directly,
  • refresh the branch if GitHub offers one,
  • then run the pr-finisher skill and leave a concise maintainer-facing handoff with validation and residual risk.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 27.9 AIC · ⌖ 8.81 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Copilot AI commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@copilot this PR still needs a maintainer-facing finish pass.

Open review threads already have author follow-up on the current head, but they remain unresolved for reviewers:...

Same limitation as before: this session has no tool to resolve GitHub review threads (no thread-resolution mutation, gh not authenticated). All code concerns from the linked threads remain fixed and verified at current HEAD e0fd2b2 (up to date with origin/main, including the unrelated Ubuntu runner-image bump merged in since). Thread resolution needs a maintainer or a tool with that capability — no further action possible from me here.

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

Category: bug | Risk: medium | Priority: medium (score 52/100)
Score breakdown: impact 25 + urgency 15 + quality 12
Recommended action: batch_review
Fixes logs MCP tool silently truncating wide date-range queries. CI green, but there are unresolved CHANGES_REQUESTED comments from automated reviewers to address first.

Generated by 🔧 PR Triage Agent · auto · 62.9 AIC · ⌖ 7.05 AIC · ⊞ 8.3K ·

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

Category: bug · Risk: medium · Score: 57/100 · Action: batch_review

copilot check passing, but mixed review states (APPROVED + CHANGES_REQUESTED) and mergeable_state blocked. Needs reconciliation.

Automated triage — see the [triage report issue] for full context.

Generated by 🔧 PR Triage Agent · auto · 67 AIC · ⌖ 10.2 AIC · ⊞ 8.3K ·

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.

[deep-report] logs MCP tool still returns single stale day of data with explicit 90-day start_date window

4 participants