[repository-quality] Repository Quality Improvement — Engine Feature Parity (2026-04-22) #27832
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Repository Quality Improvement Agent. A newer discussion is available at Discussion #28091. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
🎯 Repository Quality Improvement Report — Engine Feature Parity
Analysis Date: 2026-04-22
Focus Area: Engine Feature Parity and Integration Completeness
Strategy Type: Custom (first run, no history)
Custom Area: Yes — gh-aw supports 6 AI engines (copilot, claude, codex, gemini, opencode, crush). As a multi-engine tool, consistency in how engines are wired into the compilation and runtime infrastructure is critical for reliability and future engine onboarding.
Executive Summary
gh-aw supports six AI coding engines, implemented through the
CodingAgentEngineinterface and aBaseEnginestruct providing defaults. The mature engines (copilot, claude, codex) are well-tested and fully integrated; the newer engines (gemini, opencode, crush) show meaningful capability and testing gaps.Key findings: (1) only copilot and claude override APM targets while four engines fall back to
"all", which may mis-pack dependencies; (2) OpenCode and Crush have only 7 test files each vs 70–252 for older engines; (3) Crush declares web search in its hardcoded config JSON butsupportsWebSearchisfalse, blocking the neutral tools system from using it; (4) no engine-capability reference table exists in the user-facing docs.Full Analysis Report
Focus Area: Engine Feature Parity
Current State Assessment
Metrics Collected:
supportsToolsAllowlist=trueFindings
Strengths
CodingAgentEngineinterface viaBaseEnginedefaults — no missing method stubssupportsMaxTurns,supportsBareMode, etc.) are documented with inline comments explaining why each is true/falseEngineOptionscatalog are well-structured inpkg/constants/engine_constants.goengine_definition_test.gocovers all 6 engines for catalog resolution and prefix matchingparse_claude_log) wired viaGetLogParserScriptId()Areas for Improvement
APM target defaulting to⚠️ —
"all"for 4 enginesBaseEngine.GetAPMTarget()returns"all". Only CopilotEngine ("copilot") and ClaudeEngine ("claude") override this. Codex, Gemini, OpenCode, and Crush all default to"all", potentially packing unnecessary apm primitives.OpenCode and Crush test coverage gap ❌ — Both have only 7 test files vs 70+ for other stable-tier engines. Core scenarios (tool expansion, network config, model env var injection, firewall generation) are under-tested.
Crush web search not surfaced⚠️ —
crush_engine.goline 226 shows the hardcoded Crush config JSON explicitly enables"websearch": "allow", yetsupportsWebSearchisfalse. This means gh-aw cannot offerweb-searchas a neutral tool capability to Crush users even though the underlying CLI supports it.No engine capability matrix in docs⚠️ — Users cannot easily compare engines to know which features (
max-turns,web-search,tools allowlist,bare-mode,max-continuations) are available per engine. This creates confusion during engine selection.Gemini ParseLogMetrics uses base no-op i️ —
gemini_engine.gocontains JSON log parsing logic in comments butParseLogMetricsfalls through to the base no-op. Metric extraction is missing at the Go level (though a JS-level parser may exist).Detailed Analysis
APM Target:
microsoft/apm-actionpacks engine-specific primitives to speed up dependency installation. Returning"all"forces all primitive types to be packed regardless of engine, inflating job time and artifact size for Codex, Gemini, OpenCode, and Crush workflows.Test Coverage: The 7-file coverage for OpenCode and Crush covers only basic engine construction and model env var injection. Missing test scenarios include: MCP config generation, firewall step generation, tool allowlist enforcement (or its absence), and log collection step generation.
Crush WebSearch: Line 226 of
crush_engine.gohard-codes"websearch":"allow"in the Crush agent config JSON. The gh-aw neutral tools system checksSupportsWebSearch()before routing aweb-searchtool request to an engine. UpdatingsupportsWebSearch: truewould allow users to enable web search for Crush workflows without any other changes.🤖 Tasks for Copilot Agent
NOTE TO PLANNER AGENT: The following tasks are designed for GitHub Copilot coding agent execution. Please split these into individual work items for Claude to process. Each task is self-contained.
Improvement Tasks
Task 1: Enable Engine-Specific APM Targets for Codex and Gemini
Priority: Medium
Estimated Effort: Small
Focus Area: Engine Feature Parity
Description:
BaseEngine.GetAPMTarget()returns"all". OnlyCopilotEngineandClaudeEngineoverride this with engine-specific values. Codex and Gemini should return values matching their toolchain identity soapm-actionpacks only necessary primitives.Acceptance Criteria:
CodexEngine.GetAPMTarget()overrides and returns"codex"(or"openai"if that matches apm-action's supported targets)GeminiEngine.GetAPMTarget()overrides and returns"gemini"(or"google")copilot_engine.goandclaude_engine.goengine_definition_test.gois updated to assert the expected APM target per enginemake test-unitpassesCode Region:
pkg/workflow/codex_engine.go,pkg/workflow/gemini_engine.go,pkg/workflow/engine_definition_test.goTask 2: Expand OpenCode Engine Test Coverage
Priority: High
Estimated Effort: Medium
Focus Area: Test Coverage — OpenCode Engine
Description:
OpenCodeEnginehas only 7 test files referencing it, covering basic construction and model env var injection. Critical scenarios like MCP config generation, firewall step generation, network config, and engine-specific compilation output are untested.Acceptance Criteria:
pkg/workflow/opencode_engine_compilation_test.gois createdsupportsToolsAllowlist=falsebehavior (no tool filtering applied)t.Run) with descriptive names//go:build !integrationis present at top of filemake lintandmake test-unitpassCode Region:
pkg/workflow/opencode_engine.go,pkg/workflow/opencode_engine_test.goTask 3: Expand Crush Engine Test Coverage
Priority: High
Estimated Effort: Medium
Focus Area: Test Coverage — Crush Engine
Description:
CrushEnginehas only 7 test files. The engine has a unique behavior: it uses a hardcodedconfigJSONwith all tool permissions enabled (bash, edit, read, glob, grep, write, webfetch, websearch) butsupportsToolsAllowlist=false. This behavior is currently untested.Acceptance Criteria:
pkg/workflow/crush_engine_compilation_test.gois createdCRUSH_MODEL),supportsToolsAllowlist=falsebehavior, firewall-related step generation//go:build !integrationat top of filemake lintandmake test-unitpassCode Region:
pkg/workflow/crush_engine.go,pkg/workflow/crush_engine_test.goTask 4: Expose Crush Web Search via Neutral Tools System
Priority: Medium
Estimated Effort: Small
Focus Area: Engine Feature Parity — Crush
Description:
crush_engine.goalready enables"websearch":"allow"in its hardcoded agent config JSON (line ~226), meaning the Crush CLI supports web search. However,supportsWebSearchis set tofalse, preventing users from declaringweb-search: truein workflow frontmatter for Crush workflows. This flag should be enabled, with any necessary wiring in the neutral tools expansion path.Acceptance Criteria:
CrushEngine.BaseEngine.supportsWebSearchis changed fromfalsetotruewith an updated commentweb-search: truein frontmatter compiles successfully forengine: crushexpandNeutralToolsToXTools), Crush's path handles it correctly (or the base behavior is sufficient)make test-unitpassesCode Region:
pkg/workflow/crush_engine.goTask 5: Add Engine Capability Matrix to Documentation
Priority: Low
Estimated Effort: Small
Focus Area: Documentation — Engine Comparison
Description:
Users choosing between engines have no single reference showing which gh-aw features each engine supports. A capability matrix table in the docs would reduce confusion and support questions.
Acceptance Criteria:
docs/src/content/docs/reference/engine-capabilities.mdis created (or an existing engine reference page is updated)BaseEnginestruct values in each engine implementationdocs/src/content/docs/reference/navigation or an existing engines reference pageCode Region:
docs/src/content/docs/reference/📊 Historical Context
Previous Focus Areas
🎯 Recommendations
Immediate Actions (This Week)
Short-term Actions (This Month)
Long-term Actions (This Quarter)
📈 Success Metrics
Track these to measure improvement in Engine Feature Parity:
Next Steps
References:
Beta Was this translation helpful? Give feedback.
All reactions