Skip to content

[aw] Linter Miner failed #49821

Description

@github-actions

Workflow Failure

Workflow: Linter Miner
Branch: main
Run: https://github.com/github/gh-aw/actions/runs/30759473080

Warning

Engine Failure: The copilot engine terminated unexpectedly.

Last agent output:

{"type":"tool.execution_complete","timestamp":"2026-08-02T17:53:26.795Z","data":{"toolName":"bash","mcpServerName":"","success":true,"result":{"content":"---\nname: go-linters\ndescription: Add and validate custom Go analysis linters in gh-aw.\n---\n\n# Go Linters\n\nUse this guide when adding a new custom Go analysis linter in this repository.\n\nFor PR-driven linter generation (derive a rule from a specific pull request pattern), use `.github/skills/pr-to-go-linter/SKILL.md`.\n\n## Where to add a new linter\n\n1. Create a new package under `pkg/linters/<linter-name>/`.\n2. Define an analyzer in that package (exported as `Analyzer`).\n3. Add tests in the same package using `analysistest` with fixtures under `testdata/src/...`.\n4. Register the analyzer in `cmd/linters/main.go` so it runs via the multichecker binary.\n\n## Build and test linters\n\n- Test only your linter package:\n  - `go test ./pkg/linters/<linter-name>/...`\n- Build the custom linter runner:\n  - `go build ./cmd/linters`\n- Run all custom linters across the repo:\n  - `make golint-custom`\n\n`make golint-custom` builds `cmd/linters` and runs it against `./cmd/...` and `./pkg/...`.\n<shellId: 38 completed with exit code 0>","detailedContent":"---\nname: go-linters\ndescription: Add and validate custom Go analysis linters in gh-aw.\n---\n\n# Go Linters\n\nUse this guide when adding a new custom Go analysis linter in this repository.\n\nFor PR-driven linter generation (derive a rule from a specific pull request pattern), use `.github/skills/pr-to-go-linter/SKILL.md`.\n\n## Where to add a new linter\n\n1. Create a new package under `pkg/linters/<linter-name>/`.\n2. Define an analyzer in that package (exported as `Analyzer`).\n3. Add tests in the same package using `analysistest` with fixtures under `testdata/src/...`.\n4. Register the analyzer in `cmd/linters/main.go` so it runs via the multichecker binary.\n\n## Build and test linters\n\n- Test only your linter package:\n  - `go test ./pkg/linters/<linter-name>/...`\n- Build the custom linter runner:\n  - `go build ./cmd/linters`\n- Run all custom linters across the repo:\n  - `make golint-custom`\n\n`make golint-custom` builds `cmd/linters` and runs it against `./cmd/...` and `./pkg/...`.\n<shellId: 38 completed with exit code 0>"}}}
{"type":"assistant.message","timestamp":"2026-08-02T17:53:33.057Z","data":{"content":""}}
{"type":"tool.execution_start","timestamp":"2026-08-02T17:53:33.059Z","data":{"toolName":"bash","mcpServerName":"","command":"cd /home/runner/work/gh-aw/gh-aw && find pkg/linters/largefunc -type f | xargs -I{} echo {}; echo ---; cat pkg/linters/largefunc/largefunc.go | head -60"}}
{"type":"tool.execution_complete","timestamp":"2026-08-02T17:53:33.144Z","data":{"toolName":"bash","mcpServerName":"","success":true,"result":{"content":"pkg/linters/largefunc/largefunc.go\npkg/linters/largefunc/largefunc_test.go\npkg/linters/largefunc/testdata/src/a/a.go\npkg/linters/largefunc/testdata/src/a/a_test.go\n---\n// Package largefunc implements a Go analysis linter that flags functions\n// whose body exceeds a configurable line threshold.\npackage largefunc\n\nimport (\n\t\"go/ast\"\n\n\t\"golang.org/x/tools/go/analysis\"\n\t\"golang.org/x/tools/go/analysis/passes/inspect\"\n\n\t\"github.com/github/gh-aw/pkg/linters/internal/astutil\"\n\t\"github.com/github/gh-aw/pkg/linters/internal/filecheck\"\n\t\"github.com/github/gh-aw/pkg/linters/internal/nolint\"\n\t\"github.com/github/gh-aw/pkg/logger\"\n)\n\nvar pkgLog = logger.New(\"linters:largefunc\")\n\n// DefaultMaxLines is the default maximum number of lines allowed in a function body.\nconst DefaultMaxLines = 60\n\n// Analyzer is the large-function analysis pass.\nvar Analyzer = &analysis.Analyzer{\n\tName:     \"largefunc\",\n\tDoc:      \"reports functions whose body exceeds the line limit (default 60 lines)\",\n\tURL:      \"https://github.com/github/gh-aw/tree/main/pkg/linters/largefunc\",\n\tRequires: []*analysis.Analyzer{inspect.Analyzer, nolint.Analyzer, filecheck.Analyzer},\n\tRun:      run,\n}\n\n// maxLines is the configurable threshold.  It is set via the -largefunc.max-lines flag.\nvar maxLines int\n\nfunc init() {\n\tAnalyzer.Flags.IntVar(&maxLines, \"max-lines\", DefaultMaxLines,\n\t\t\"maximum number of lines permitted in a function body\")\n}\n\nfunc run(pass *analysis.Pass) (any, error) {\n\tpkgLog.Printf(\"analyzing package %s (max-lines=%d)\", pass.Pkg.Path(), maxLines)\n\n\tinsp, err := astutil.Inspector(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnoLintIndex, err := nolint.Index(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgeneratedFiles, err := filecheck.Index(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnodeFilter := []ast.Node{(*ast.FuncDecl)(nil), (*ast.FuncLit)(nil)}\n\tinsp.Preorder(nodeFilter, func(n ast.Node) {\n\t\tcheckFuncBodyLength(pass, n, generatedFiles, noLintIndex)\n\t})\n\treturn nil, nil\n}\n<shellId: 39 completed with exit code 0>","detailedContent":"pkg/linters/largefunc/largefunc.go\npkg/linters/largefunc/largefunc_test.go\npkg/linters/largefunc/testdata/src/a/a.go\npkg/linters/largefunc/testdata/src/a/a_test.go\n---\n// Package largefunc implements a Go analysis linter that flags functions\n// whose body exceeds a configurable line threshold.\npackage largefunc\n\nimport (\n\t\"go/ast\"\n\n\t\"golang.org/x/tools/go/analysis\"\n\t\"golang.org/x/tools/go/analysis/passes/inspect\"\n\n\t\"github.com/github/gh-aw/pkg/linters/internal/astutil\"\n\t\"github.com/github/gh-aw/pkg/linters/internal/filecheck\"\n\t\"github.com/github/gh-aw/pkg/linters/internal/nolint\"\n\t\"github.com/github/gh-aw/pkg/logger\"\n)\n\nvar pkgLog = logger.New(\"linters:largefunc\")\n\n// DefaultMaxLines is the default maximum number of lines allowed in a function body.\nconst DefaultMaxLines = 60\n\n// Analyzer is the large-function analysis pass.\nvar Analyzer = &analysis.Analyzer{\n\tName:     \"largefunc\",\n\tDoc:      \"reports functions whose body exceeds the line limit (default 60 lines)\",\n\tURL:      \"https://github.com/github/gh-aw/tree/main/pkg/linters/largefunc\",\n\tRequires: []*analysis.Analyzer{inspect.Analyzer, nolint.Analyzer, filecheck.Analyzer},\n\tRun:      run,\n}\n\n// maxLines is the configurable threshold.  It is set via the -largefunc.max-lines flag.\nvar maxLines int\n\nfunc init() {\n\tAnalyzer.Flags.IntVar(&maxLines, \"max-lines\", DefaultMaxLines,\n\t\t\"maximum number of lines permitted in a function body\")\n}\n\nfunc run(pass *analysis.Pass) (any, error) {\n\tpkgLog.Printf(\"analyzing package %s (max-lines=%d)\", pass.Pkg.Path(), maxLines)\n\n\tinsp, err := astutil.Inspector(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnoLintIndex, err := nolint.Index(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgeneratedFiles, err := filecheck.Index(pass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnodeFilter := []ast.Node{(*ast.FuncDecl)(nil), (*ast.FuncLit)(nil)}\n\tinsp.Preorder(nodeFilter, func(n ast.Node) {\n\t\tcheckFuncBodyLength(pass, n, generatedFiles, noLintIndex)\n\t})\n\treturn nil, nil\n}\n<shellId: 39 completed with exit code 0>"}}}
{"type":"assistant.message","timestamp":"2026-08-02T17:54:07.717Z","data":{"content":"Selecting **`unchecked-flush-return`**: flags ignored error return values from `Flush()` calls (e.g. `bufio.Writer`, `tabwriter.Writer`), mirroring the existing \"ignored error\" linter family (`strconvparseignorederror`, `jsonmarshalignoredeerror`). Confirmed 2+ unchecked occurrences in `pkg/cli/logs_format_compact.go`, `errcheck` is disabled repo-wide, and no existing linter covers `Flush()`. Low false-positive risk, high signal."}}
{"type":"tool.execution_start","timestamp":"2026-08-02T17:54:07.719Z","data":{"toolName":"task","mcpServerName":""}}
{"type":"subagent.started","timestamp":"2026-08-02T17:54:07.730Z","data":{"agentName":"general-purpose","agentDisplayName":"General Purpose Agent","toolCallId":"toolu_015eRa9qFewBrDHRhLy4HX6g"}}
[copilot-sdk-driver] [sdk-driver] error: Execution failed: Error: No model available. Check policy enablement under GitHub Settings > Copilot
{"type":"subagent.completed","timestamp":"2026-08-02T17:54:07.781Z","data":{"agentName":"general-purpose","toolCallId":"toolu_015eRa9qFewBrDHRhLy4HX6g"}}
{"type":"tool.execution_complete","timestamp":"2026-08-02T17:54:07.811Z","data":{"toolName":"task","mcpServerName":"","success":false}}

Action Required

Assign this issue to an agent to debug and fix the issue.

Debug with any coding agent

Use this prompt with any coding agent (GitHub Copilot, Claude, Gemini, etc.):

Debug the agentic workflow failure using https://raw.githubusercontent.com/github/gh-aw/main/debug.md

The failed workflow run is at https://github.com/github/gh-aw/actions/runs/30759473080
Manually invoke the agent

Debug this workflow failure using your favorite Agent CLI and the agentic-workflows prompt.

Tip

Stop reporting this workflow as a failure

To stop a workflow from creating failure issues, set report-failure-as-issue: false in its frontmatter:

safe-outputs:
  report-failure-as-issue: false

Generated from Linter Miner · 118.1 AIC ·

  • expires on Aug 3, 2026, 5:56 AM UTC

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions