You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This analysis focused on conditional logic and feature flag validation across the schema, parser implementation, compiler, and documentation. The strategy examined engine-specific features, strict mode requirements, and conditional field interactions.
Key Finding: Schema descriptions lack engine compatibility warnings for HTTP transport and web-search features, while the compiler correctly enforces these requirements. Users relying on IDE autocomplete or external validation tools cannot discover these limitations until runtime.
// validateHTTPTransportSupport validates that HTTP MCP servers// are only used with engines that support HTTP transportfunc (c*Compiler) validateHTTPTransportSupport(toolsmap[string]any, engineCodingAgentEngine) error {
ifengine.SupportsHTTPTransport() {
returnnil
}
// Error: HTTP transport not supported by this enginereturn fmt.Errorf("tool '%s' uses HTTP transport which is not supported by engine '%s'. Only stdio transport is supported.", ...)
}
Impact:
IDE autocomplete cannot warn users about engine compatibility
External validation tools (VSCode extensions, pre-commit hooks) will miss this
Users discover limitation only at compile time
Affects copilot and claude engines differently (copilot supports HTTP, claude does not)
Recommendation:
{
"description": "MCP connection type for HTTP. Note: HTTP transport requires engine with HTTP support (copilot, claude). Engines without HTTP support only accept stdio transport. See: (redacted)"
}
2. Web-Search Engine Compatibility Not in Schema
Problem: The schema defines web-search tool but doesn't document that it's engine-specific.
// validateWebSearchSupport validates that web-search tool// is only used with engines that support this featurefunc (c*Compiler) validateWebSearchSupport(...) error {
// Emit WARNING if engine doesn't support web-searchfmt.Fprintln(os.Stderr, console.FormatWarningMessage(
fmt.Sprintf("Engine '%s' does not support the web-search tool. See (redacted) for alternatives.",
engine.GetID())))
}
:::note
The Copilot engine does not have built-in `web-search` support.
You can add web search capabilities using third-party MCP servers.
See the [Using Web Search](/gh-aw/guides/web-search/) for available
options and setup instructions.
:::
Impact:
Users configure web-search without knowing their engine doesn't support it
Only a warning (not an error), so workflow compiles but feature doesn't work
Documentation exists but not discoverable through schema
Third-party tools like Tavily MCP are the actual solution
Recommendation:
{
"description": "Web search tool for performing internet searches and retrieving search results (subject to network permissions). Note: Built-in web-search support is engine-specific. For engines without native support (like copilot), use third-party MCP servers such as Tavily. See: (redacted)"
}
Moderate Issues
3. Action Pinning Strict Mode Behavior Unclear
Problem: Schema mentions action pinning in strict mode but doesn't explain the conditional fallback behavior.
// Version mismatch, but we can still use the hardcoded SHA// if we're not in strict modeif!data.StrictMode {
warningMsg:=fmt.Sprintf("Unable to resolve %s@%s dynamically, using hardcoded pin for %s@%s",
actionRepo, version, actionRepo, pin.Version)
fmt.Fprint(os.Stderr, console.FormatWarningMessage(warningMsg))
returnactionRepo+"@"+pin.SHA+" # "+pin.Version, nil
}
// No pin availableifdata.StrictMode {
errMsg:=fmt.Sprintf("Unable to pin action %s@%s: resolution failed", actionRepo, version)
return"", fmt.Errorf("%s", errMsg)
}
Key Insight: Strict mode REQUIRES successful dynamic SHA resolution. Non-strict mode falls back to hardcoded pins from data/action_pins.json.
Impact:
Users may not understand strict mode requires network connectivity
Offline compilation fails in strict mode but succeeds in non-strict mode
Conditional behavior not obvious from schema description
Enhancement:
{
"description": "... (3) Action Pinning - enforces actions pinned to commit SHAs instead of tags/branches (requires network connectivity for dynamic SHA resolution; non-strict mode falls back to embedded pins), ..."
}
4. Strict Mode Conditional Validations Could Use $comment Fields
{
"max-turns": {
"type": "integer",
"description": "Maximum number of chat iterations per run. Helps prevent runaway loops and control costs. Has sensible defaults and can typically be omitted. Note: Only supported by the claude engine."
}
}
func (c*Compiler) validateMaxTurnsSupport(...) error {
if!engine.SupportsMaxTurns() {
returnfmt.Errorf("max-turns not supported: engine '%s' does not support the max-turns feature. Use engine: copilot or remove max-turns from your configuration.", engine.GetID())
}
}
Status: Perfect alignment between schema, compiler, and error messages. This is the model to follow for HTTP transport and web-search.
✅ 175 oneOf Patterns Working Correctly
Count: 175 oneOf patterns across the schema for polymorphic type support
Examples:
on field: string | object
engine field: string | object
permissions field: string | object
network field: string | object | null
Safe-outputs fields: null | object
Command events: string | array
Status: All tested patterns validate correctly. Excellent type flexibility.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Schema Consistency Check - 2025-11-21
This analysis focused on conditional logic and feature flag validation across the schema, parser implementation, compiler, and documentation. The strategy examined engine-specific features, strict mode requirements, and conditional field interactions.
Key Finding: Schema descriptions lack engine compatibility warnings for HTTP transport and web-search features, while the compiler correctly enforces these requirements. Users relying on IDE autocomplete or external validation tools cannot discover these limitations until runtime.
Full Report Details
Analysis Summary
Critical Issues
1. HTTP Transport Engine Compatibility Not in Schema
Problem: The schema defines HTTP transport for MCP tools but doesn't document which engines support it.
Schema Location:
pkg/parser/schemas/main_workflow_schema.json-$defs.http_mcp_tool.properties.type.descriptionCurrent Schema Description:
Compiler Validation:
pkg/workflow/agent_validation.go:118-136Impact:
Recommendation:
{ "description": "MCP connection type for HTTP. Note: HTTP transport requires engine with HTTP support (copilot, claude). Engines without HTTP support only accept stdio transport. See: (redacted)" }2. Web-Search Engine Compatibility Not in Schema
Problem: The schema defines web-search tool but doesn't document that it's engine-specific.
Schema Location:
pkg/parser/schemas/main_workflow_schema.json-properties.tools.properties.web-search.descriptionCurrent Schema Description:
Compiler Validation:
pkg/workflow/agent_validation.go:161-176Documentation:
docs/src/content/docs/reference/engines.md:74-76Impact:
Recommendation:
{ "description": "Web search tool for performing internet searches and retrieving search results (subject to network permissions). Note: Built-in web-search support is engine-specific. For engines without native support (like copilot), use third-party MCP servers such as Tavily. See: (redacted)" }Moderate Issues
3. Action Pinning Strict Mode Behavior Unclear
Problem: Schema mentions action pinning in strict mode but doesn't explain the conditional fallback behavior.
Schema Location:
pkg/parser/schemas/main_workflow_schema.json-properties.strict.descriptionCurrent Schema Description (excerpt):
Compiler Implementation:
pkg/workflow/action_pins.go:110-128Key Insight: Strict mode REQUIRES successful dynamic SHA resolution. Non-strict mode falls back to hardcoded pins from
data/action_pins.json.Impact:
Enhancement:
{ "description": "... (3) Action Pinning - enforces actions pinned to commit SHAs instead of tags/branches (requires network connectivity for dynamic SHA resolution; non-strict mode falls back to embedded pins), ..." }4. Strict Mode Conditional Validations Could Use $comment Fields
Observation: Strict mode performs 4 validation checks with complex conditional logic.
Implementation:
pkg/workflow/strict_mode_validation.go:185-215Current State: Schema description documents all 5 checks as text, but doesn't use JSON Schema features to make this machine-readable.
Enhancement Opportunity: Add
$commentfields to document runtime behavior:contents:write→ requiressafe-outputsallowed: ["*"]→ requires explicit domains in strict modecontainer:→ requiresnetwork:configuration in strict modeImpact: Low priority - validation works correctly, just a metadata completeness improvement.
Positive Findings
✅ Max-Turns Engine Compatibility Well-Documented
Schema:
pkg/parser/schemas/main_workflow_schema.json:3486{ "max-turns": { "type": "integer", "description": "Maximum number of chat iterations per run. Helps prevent runaway loops and control costs. Has sensible defaults and can typically be omitted. Note: Only supported by the claude engine." } }Compiler Validation:
pkg/workflow/agent_validation.go:137-156Status: Perfect alignment between schema, compiler, and error messages. This is the model to follow for HTTP transport and web-search.
✅ 175 oneOf Patterns Working Correctly
Count: 175
oneOfpatterns across the schema for polymorphic type supportExamples:
onfield: string | objectenginefield: string | objectpermissionsfield: string | objectnetworkfield: string | object | nullStatus: All tested patterns validate correctly. Excellent type flexibility.
✅ 100 additionalProperties Constraints Prevent Typos
Count: 100
additionalProperties: falseconstraints across schemaBenefit: Catches field name typos at validation time
Example: If user types
engne:instead ofengine:, validation fails immediately.✅ Strict Mode Implementation Comprehensive
Validation Layers:
validateStrictPermissions()- Refuses write permissions on sensitive scopesvalidateStrictNetwork()- Requires explicit network configuration (no wildcards)validateStrictMCPNetwork()- Requires network config on custom MCP servers with containersvalidateStrictDeprecatedFields()- Refuses deprecated frontmatter fieldsCode Quality:
Documentation: Schema description accurately lists all 5 enforcement rules (4 validation + 1 zizmor integration).
Statistics
Recommendations
Priority 1: Add Engine Compatibility Warnings to Schema
Action Items:
$defs.http_mcp_tool.properties.type.descriptionto document engine requirementsproperties.tools.properties.web-search.descriptionto document engine support and alternativesdocs/reference/engines.mdfor detailed engine comparisonImpact: Improves discoverability of engine limitations at design time.
Priority 2: Consider Schema Versioning for Feature Compatibility
Idea: Add
$commentfields that track engine feature matrices:{ "$comment": "Feature support by engine: copilot (yes), claude (no), codex (no), custom (n/a)" }Benefit: Enables automated compatibility validation by external tools.
Priority 3: Document Conditional Defaults
Examples:
maxdefaults vary by type (1 for issues/discussions, 3 for labels)network.allowedspecifiedgh-aw-{engine-id}groupCurrent State: Defaults exist in code comments but not in schema
defaultfields or$commentmetadata.Enhancement: Add
$commentfields documenting conditional default behavior.Strategy Performance
Why This Strategy Works:
Next Steps
Files Analyzed
Schema:
pkg/parser/schemas/main_workflow_schema.jsonCompiler:
pkg/workflow/strict_mode_validation.gopkg/workflow/agent_validation.go(HTTP transport, max-turns, web-search)pkg/workflow/action_pins.go(strict mode pinning)Documentation:
docs/src/content/docs/reference/engines.mddocs/src/content/docs/guides/web-search.mdAnalysis Scripts:
Beta Was this translation helpful? Give feedback.
All reactions