Skip to content

Add walkfuncerrshadow analyzer for filepath.Walk err shadowing - #49633

Merged
pelikhan merged 11 commits into
mainfrom
copilot/add-walkfuncerrshadow-linter
Aug 2, 2026
Merged

Add walkfuncerrshadow analyzer for filepath.Walk err shadowing#49633
pelikhan merged 11 commits into
mainfrom
copilot/add-walkfuncerrshadow-linter

Conversation

Copilot AI commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

This adds a focused custom analyzer for a recurring filepath.Walk / filepath.WalkDir pattern where the callback’s err parameter shadows the outer err assigned from the walk call. The result is clearer diagnostics around a confusing pattern that is easy to misuse during refactors.

  • What the analyzer flags

    • Detects assignments where the outer result variable is named err
    • Detects filepath.Walk / filepath.WalkDir callbacks whose third parameter is also named err
    • Reports only this specific shadowing shape; does not flag distinct callback names like walkErr or distinct outer variable names
  • Analyzer wiring

    • Adds pkg/linters/walkfuncerrshadow/ with a new go/analysis analyzer
    • Registers the analyzer in the canonical linter registry so it is available through the existing linter driver
  • Coverage and docs

    • Adds analysistest fixtures for:
      • flagged Walk
      • flagged WalkDir
      • non-flagged distinct callback parameter
      • non-flagged distinct outer variable name
      • non-flagged non-filepath walker
      • nolint suppression
    • Updates the linter namespace docs and spec-sync surfaces to include the new analyzer
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
	if err != nil {
		return err
	}
	return nil
})
return err

This pattern is now reported and the diagnostic points at the callback parameter, recommending a distinct name such as walkErr.


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 8.64 AIC · ⌖ 7.34 AIC · ⊞ 8.1K ·
Comment /souschef to run again


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 20.6 AIC · ⌖ 7.02 AIC · ⊞ 8.1K ·
Comment /souschef to run again


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

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 4.21 AIC · ⌖ 6.88 AIC · ⊞ 8.1K ·
Comment /souschef to run again


branch refresh requested from

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 10.9 AIC · ⌖ 7.16 AIC · ⊞ 8.1K ·
Comment /souschef to run again


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

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 14.2 AIC · ⌖ 4.75 AIC · ⊞ 5.7K ·
Comment /souschef to run again


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


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 14.5 AIC · ⌖ 7.61 AIC · ⊞ 8.2K ·
Comment /souschef to run again

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Add walkfuncerrshadow linter to detect err-shadowing Add walkfuncerrshadow analyzer for filepath.Walk err shadowing Aug 1, 2026
Copilot AI requested a review from pelikhan August 1, 2026 20:26
@pelikhan
pelikhan marked this pull request as ready for review August 1, 2026 20:27
Copilot AI review requested due to automatic review settings August 1, 2026 20:27
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

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

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 the walkfuncerrshadow Go analyzer to detect confusing filepath.Walk and WalkDir error-parameter shadowing.

Changes:

  • Implements, registers, tests, and documents the analyzer.
  • Adds nolint suppression support, with a multiline-call gap.
  • Includes unrelated generated workflow lock changes.
Show a summary per file
File Description
pkg/linters/walkfuncerrshadow/walkfuncerrshadow.go Implements analyzer logic.
pkg/linters/walkfuncerrshadow/walkfuncerrshadow_test.go Runs analyzer fixtures.
pkg/linters/walkfuncerrshadow/testdata/src/walkfuncerrshadow/walkfuncerrshadow.go Covers positive and negative cases.
pkg/linters/spec_test.go Adds analyzer to documentation checks.
pkg/linters/registry.go Registers the analyzer.
pkg/linters/README.md Documents the analyzer package.
pkg/linters/doc.go Updates package documentation.
.github/workflows/smoke-checkout-pr-dispatch.lock.yml Contains unrelated timeout/model drift.
.github/workflows/daily-arxiv-researcher.lock.yml Contains unrelated model-routing drift.

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: 3
  • Review effort level: Balanced

# --allow-tool shell(yq)
# --allow-tool write
timeout-minutes: 10
timeout-minutes: 20
Comment on lines +92 to +100
pos := pass.Fset.PositionFor(callbackErr.Pos(), false)
if filecheck.ShouldSkipFilename(pos.Filename, generatedFiles) {
return
}
if nolint.HasDirectiveForLinter(pos, noLintIndex, analyzerName) {
return
}

pkgLog.Printf("flagging filepath.%s callback err shadow at %s", sel.Sel.Name, pos)
-- /bin/bash -c 'set +o histexpand; : "${RUNNER_TOOL_CACHE:?RUNNER_TOOL_CACHE must be set}"; GH_AW_TOOL_CACHE="$RUNNER_TOOL_CACHE"; export PATH="$(find "$GH_AW_TOOL_CACHE" -maxdepth 5 -type d -name bin 2>/dev/null | tr '\''\n'\'' '\'':'\'')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true; [ -n "$ERLANG_HOME" ] && export PATH="$ERLANG_HOME/bin:$PATH" || true && GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || true)"; fi; if [ -z "$GH_AW_NODE_EXEC" ]; then echo "node runtime missing on this runner — check runtimes.node in workflow YAML" >&2; exit 127; fi; GH_AW_NPM_GLOBAL_ROOT="$(npm root -g 2>/dev/null || true)"; if [ -n "$GH_AW_NPM_GLOBAL_ROOT" ]; then export NODE_PATH="${GH_AW_NPM_GLOBAL_ROOT}${NODE_PATH:+:${NODE_PATH}}"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/claude_harness.cjs claude --print --no-chrome --allowed-tools '\''Bash,BashOutput,Edit(/tmp/*),ExitPlanMode,Glob,Grep,KillBash,LS,MultiEdit(/tmp/*),NotebookRead,Read,Read(/tmp/*),Task,TodoWrite,Write(/tmp/*)'\'' --debug-file /tmp/gh-aw/threat-detection/detection.log --verbose --permission-mode acceptEdits --output-format stream-json --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: detection
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 100/100 — Excellent

Analyzed 1 test: 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 (0.12:1 ratio)
🚨 Violations 0
Test File Classification Issues
TestWalkFuncErrShadow walkfuncerrshadow_test.go:13 design_test None — textbook analyzer test

Quality Highlights

Excellent behavioral test design:

  • Testdata-driven: 69-line fixture with 6 test cases (negative, positive, edge cases, nolint directives)
  • Error coverage: Both error conditions (BadWalk, BadWalkDir) and passing scenarios validated
  • Edge cases: nolint directive handling, alternative APIs (fs.WalkDir), renaming strategies all tested
  • Implementation hidden: Uses standard analysistest pattern; analyzer internals not exposed
  • No mocks: Pure Go analyzer testing
  • Lean ratio: 15:124 (test:impl) = 0.12:1 — excellent; not inflated
  • Build tags: ✅ All test files properly tagged with //go:build !integration

Spec compliance: spec_test.go properly updated with new analyzer registry entry; will be validated by existing spec tests.

Verdict

Passed. 100% design tests. 0% implementation tests (threshold: ≤30%). No violations. Strong testdata coverage with comprehensive edge cases.

🧪 Test quality analysis by Test Quality Sentinel · haiku45 · 16.8 AIC · ⌖ 8.74 AIC · ⊞ 8.4K ·
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: 100/100. 100% design tests (threshold: ≤30% implementation). No violations. Excellent testdata coverage with comprehensive edge cases.

@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 and /codebase-design — requesting changes on correctness gaps and test coverage asymmetry.

📋 Key Themes & Highlights

Key Themes

  • Silent false-negatives: The single-LHS guard (len(assign.Lhs) != 1) misses valid multi-return patterns like err, _ = filepath.Walk(...)
  • nolint placement: The directive check runs at the callback-parameter position, not the assignment line where users would naturally place //nolint
  • Test coverage gaps: BadWalkDir uses var err; err = but there is no err := fixture for WalkDir; multi-return shape is not tested at all

Positive Highlights

  • ✅ Clean analyzer structure following existing go/analysis patterns in the repo
  • ✅ Good use of nolint.ImplementsError to verify the third param is actually error
  • ✅ Well-structured test fixtures covering the non-flagged cases
  • ✅ Registry and doc wiring is complete and consistent

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 43.6 AIC · ⌖ 11.2 AIC · ⊞ 7.1K
Comment /matt to run again

return
}
if sel.Sel.Name != "Walk" && sel.Sel.Name != "WalkDir" {
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.

[/codebase-design] The guard len(assign.Lhs) != 1 silently skips multi-return assignments like err, _ = filepath.Walk(...). This is a valid Go pattern and the analyzer will miss it.

💡 Suggested fix

Search all LHS identifiers for one named err rather than requiring exactly 1:

var outerErr *ast.Ident
for _, lhs := range assign.Lhs {
    if id, ok := lhs.(*ast.Ident); ok && id.Name == "err" {
        outerErr = id
        break
    }
}
if outerErr == nil {
    return
}

Add a corresponding test fixture covering err, _ = filepath.Walk(...).

@copilot please address this.

callbackErr := callbackErrParam(pass, callback)
if callbackErr == nil {
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.

[/tdd] The nolint suppression check is applied at the position of the callback parameter, not at the assignment statement. A developer writing //nolint:walkfuncerrshadow on the outer err := line won't be suppressed here.

💡 Details

The nolint directive is conventionally placed on the line that triggers the diagnostic — which a user would naturally place on the err := filepath.Walk(...) line. Consider checking pos against both the callback parameter position and the assignment's position, or document clearly which line the directive must appear on.

Add a test fixture with the directive on the assignment line (not the callback) to confirm it either works or fails intentionally.

@copilot please address this.

sel.Sel.Name,
)
}

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] callbackErrParam hardcodes len(params) != 3 to identify the Walk signature, but this is a structural assumption that isn't verified against the actual type. A function literal with three parameters where the third is an error but is not a filepath.WalkFunc could also match.

The type check in the outer checkAssign (via IsPkgSelector) guards against this, but a comment here explaining why the 3-param check is safe would prevent future maintenance confusion.

@copilot please address this.

}

func BadWalkDir(root string) error {
var err error

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 BadWalkDir fixture uses var err error; err = ... (an assign statement =) rather than the short-variable-declaration err := ... used in BadWalk. This is a good additional shape to cover, but there's no fixture testing err := filepath.WalkDir(...) with :=. Add one to make coverage symmetric.

@copilot please address this.

Documents the architectural decision to add a focused go/analysis
analyzer for filepath.Walk/WalkDir err parameter shadowing.
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

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

📄 Draft ADR committed: docs/adr/49633-add-walkfuncerrshadow-linter-for-filepath-walk-err-shadow.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 could not 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-49633: Add walkfuncerrshadow Linter for filepath.Walk/WalkDir err Parameter Shadowing

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., 49633-add-walkfuncerrshadow-linter-for-filepath-walk-err-shadow.md for PR #49633).

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · sonnet46 · 69.8 AIC · ⌖ 52.6 AIC · ⊞ 9.6K ·
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.

🔎 Code quality review by PR Code Quality Reviewer · auto · 53.3 AIC · ⌖ 9.18 AIC · ⊞ 7.8K
Comment /review to run again

Comments that could not be inline-anchored

pkg/linters/walkfuncerrshadow/walkfuncerrshadow.go:356

nolint suppression is checked against the callback err parameter's line, not the outer assignment's line — a //nolint:walkfuncerrshadow placed above a multi-line filepath.Walk(...) call won't suppress the diagnostic if the func-literal signature wraps onto its own line.

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

pos is derived from callbackErr.Pos() (the third param identifier), and nolint.HasDirectiveForLinter only checks that line and the line immediately above it (`position.Line-1…

@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: walkfuncerrshadow analyzer

The implementation is well-structured, follows existing linter conventions, and covers the core detection logic correctly. One blocking correctness issue with the nolint suppression anchor.

Blocking

Nolint position anchor uses callbackErr.Pos() instead of assign.Pos() — see inline comment on walkfuncerrshadow.go:96. When the callback spans multiple lines, the //nolint:walkfuncerrshadow directive placed above filepath.Walk(...) falls outside the ±1 line window relative to the err param identifier. Suppression silently breaks. Fix: use assign.Pos() as the nolint check anchor (consistent with httprespbodyclose, contextcancelnotdeferred), and add a multi-line callback test case to lock the behaviour.

Non-blocking notes

  • The len(assign.Lhs) != 1 guard is correct since filepath.Walk returns a single value; no change needed.
  • Test coverage for all happy/sad paths is solid; just the multi-line nolint gap.

Warning

Firewall blocked 1 domain

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

  • proxy.golang.org

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

network:
  allowed:
    - defaults
    - "proxy.golang.org"

See Network Configuration for more information.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 92.2 AIC · ⌖ 10.6 AIC · ⊞ 5.4K

if filecheck.ShouldSkipFilename(pos.Filename, generatedFiles) {
return
}
if nolint.HasDirectiveForLinter(pos, noLintIndex, analyzerName) {

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.

Nolint position anchor is fragile for multi-line callbacks.

The suppression check uses callbackErr.Pos() — the err identifier inside the callback signature. For single-line callbacks (as in the testdata), this works because the callback err and the filepath.Walk(...) call share the same line, so //nolint:walkfuncerrshadow on the preceding line matches via pos.Line-1.

However, when the callback spans multiple lines (e.g. the func( literal is on a separate line from the err param), the nolint directive placed on the line before filepath.Walk(...) will no longer be one line above callbackErr.Pos(), and suppression silently stops working.

The consistent pattern in this codebase (httprespbodyclose, contextcancelnotdeferred) is to anchor the nolint check to the assign statement position — the line users actually annotate:

pos := pass.Fset.PositionFor(assign.Pos(), false)
if filecheck.ShouldSkipFilename(pos.Filename, generatedFiles) {
    return
}
if nolint.HasDirectiveForLinter(pos, noLintIndex, analyzerName) {
    return
}
// Keep callbackErr for the diagnostic range
pass.ReportRangef(callbackErr, ...)

Also add a multi-line callback test case to testdata to lock this behaviour.

@copilot please address this.


func GoodNolint(root string) error {
//nolint:walkfuncerrshadow
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {

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.

Testdata has no multi-line callback nolint suppression test.

The existing GoodNolint test case uses a single-line callback signature, meaning the nolint directive and the err param are at most 2 lines apart. This does not exercise suppression for multi-line callbacks where err appears on a line far from the directive.

Please add a test case like:

func GoodNolintMultiLine(root string) error {
	(nolint/redacted):walkfuncerrshadow
	err := filepath.Walk(root, func(
		path string,
		info os.FileInfo,
		err error,
	) error {
		return err
	})
	return err
}

This would expose the position-anchor bug described in the implementation comment.

@copilot please address this.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot quick triage for this PR:

Generated by 👨🍳 PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 8.64 AIC · ⌖ 7.34 AIC · ⊞ 8.1K ·
Comment /souschef to run again

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot quick triage for this PR:

  • Latest follow-up says the analyzer feedback was addressed and local validation is green. Please re-run the pr-finisher skill and confirm whether any requested-review blockers remain on the current head.
  • If the remaining blockers are maintainer-only, summarize them explicitly; otherwise disposition each still-open review request before handoff.
  • Branch refresh: please update from main if GitHub does not auto-refresh it.

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

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 14.2 AIC · ⌖ 4.75 AIC · ⊞ 5.7K ·
Comment /souschef to run again

Copilot AI commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot quick triage for this PR:

  • Latest follow-up says the analyzer feedback was addressed and local validation is green. Please re-run the pr-finisher skill and confirm whether any requested-re...

Re-ran PR-finisher triage on current HEAD 18cfefe.

Current status:

  • Branch refresh is already applied: head includes latest main merge commit (84d1e35).
  • Requested-review feedback has been dispositioned; remaining open point is the err, _ = filepath.Walk(...) suggestion, which is non-actionable because filepath.Walk/WalkDir return only one value.

Remaining blockers are maintainer-only:

  1. Requested reviewers are still pending (pelikhan, gh-aw-bot).
  2. CI on the latest agent head remains unverified until a maintainer re-triggers workflows.

Validation note: I re-ran local checks on current head; make fmt and make lint pass, while make test-unit still fails in pre-existing unrelated test TestAWFailureInvestigatorPrefetchUsesRunLevelFailures (pkg/cli/aw_failure_investigator_workflow_test.go).

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot quick triage for this PR:

  • Latest follow-up says the remaining blockers are maintainer-only. Please re-run the pr-finisher skill on the current head and confirm whether any requested-review blockers still require code changes versus maintainer action only.
  • If everything actionable is already addressed, summarize the maintainer-only blockers explicitly and note whether the stale github-actions change requests can now be dismissed.
  • Branch refresh: GitHub branch update was requested from this run.

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

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

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

Copilot AI commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot quick triage for this PR:

  • Latest follow-up says the remaining blockers are maintainer-only. Please re-run the pr-finisher skill on the current head and confirm whether any requested-revie...

Re-ran PR-finisher triage on current head (17487d1).

Actionable requested-review feedback is already addressed in the branch (nolint assignment anchor, multiline nolint fixture, and WalkDir := coverage are present). I did not find any remaining requested-review items that require new code changes.

Remaining blockers are maintainer-only:

  1. Requested reviewers are still pending (pelikhan, gh-aw-bot).
  2. CI on the latest agent head is unverified until a maintainer re-triggers workflows (agent pushes do not auto-trigger CI).

Branch refresh is already applied (head includes latest main).

Yes — the stale github-actions change requests can now be dismissed where they’re outdated/non-actionable (including the err, _ = filepath.Walk(...) suggestion, which is invalid since filepath.Walk/WalkDir return a single value).

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

🔍 Triage Summary

Field Value
Category feature
Risk medium
Priority low
Score 28/100 (impact 15 + urgency 5 + quality 8)
Recommended action defer
Batch

Adds walkfuncerrshadow linter analyzer. CHANGES_REQUESTED twice from automated reviewer — needs rework, no CI recorded.

Automated triage — see the triage report for full context.

Generated by 🔧 PR Triage Agent · auto · 40.3 AIC · ⌖ 4.01 AIC · ⊞ 8K ·

@pelikhan

pelikhan commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot quick triage for this PR:

  • Latest follow-up says the remaining blockers are maintainer-only. Please confirm whether any requested-review blockers still require code changes on the current head versus maintainer action only.
  • Failed checks to investigate:
    1. Unit tests (A-C) — https://github.com/github/gh-aw/actions/runs/30727986396/job/91481332271
  • Branch refresh was requested for this run.
  • Please run the pr-finisher skill before handoff.

Generated by 👨🍳 PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 14.5 AIC · ⌖ 7.61 AIC · ⊞ 8.2K ·
Comment /souschef to run again

Copilot AI commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot fix https://github.com/github/gh-aw/actions/runs/30727986396/job/91481332271

Triaged and fixed via branch refresh on current head 5c222b6.

The failing job (91481332271) was on older head 17487d1 and failed at TestAWFailureInvestigatorPrefetchUsesRunLevelFailures due stale expectation including "cancelled" in FAILURE_CONCLUSIONS.

Current head includes the upstream fix (through merge commit 5c222b6), and the targeted test now passes locally:
go test ./pkg/cli -run TestAWFailureInvestigatorPrefetchUsesRunLevelFailures -count=1.

Copilot AI commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot quick triage for this PR:

  • Latest follow-up says the remaining blockers are maintainer-only. Please confirm whether any requested-review blockers still require code changes on the current he...

Re-ran PR-finisher triage on current head 5c222b6.

Current requested-review status:

  • No remaining blockers that require new code changes on this head.
  • Remaining blockers are maintainer-only (pending requested reviewers: pelikhan, gh-aw-bot; CI re-trigger/approval flow for current head).

Failed check investigation (30727986396 / job 91481332271):

  • Failure was on older head 17487d1 and was TestAWFailureInvestigatorPrefetchUsesRunLevelFailures expecting stale FAILURE_CONCLUSIONS content including "cancelled".
  • Current head already contains the upstream fix via branch refresh merge (5c222b6), and the targeted test passes locally:
    go test ./pkg/cli -run TestAWFailureInvestigatorPrefetchUsesRunLevelFailures -count=1

Branch refresh is already applied on this run (head includes latest main).

@pelikhan
pelikhan merged commit 05c9386 into main Aug 2, 2026
22 checks passed
@pelikhan
pelikhan deleted the copilot/add-walkfuncerrshadow-linter branch August 2, 2026 10:15
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.

[linter-miner] Add walkfuncerrshadow linter: detect err-shadowing in filepath.Walk callbacks

4 participants