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 run used Strategy 13: Documentation Completeness Audit + Schema Structural Defects (day 55, proven strategy path). Analysis covered all four consistency dimensions: schema ↔ parser/compiler, schema ↔ documentation, schema ↔ real workflows, and parser ↔ documentation. Two parallel sub-agents ran full cross-references of FrontmatterConfig, WorkflowData, JSON schema definitions, and primary documentation. 9 new findings were identified — including two structural schema bugs that would actively reject valid user configurations.
Overly permissive schema, struct-less field, dual-write side effect
Critical Issues
1. bots Schema/Implementation Path Mismatch
The JSON schema defines bots as a top-level property (properties.bots). The implementation in pkg/workflow/role_checks.go:141 extracts it exclusively from on.bots (nested inside the trigger block). The primary documentation (docs/src/content/docs/reference/frontmatter.md:263) correctly shows on.bots — and even includes a migration note referencing gh aw fix to migrate from the old top-level form.
Impact: The schema is stale — it still documents the old top-level position that was migrated away from. Any schema validator will accept bots: [...] at the root but the compiler will silently ignore it; on.bots: [...] is the correct form but the schema will not validate it as a bots field.
Fix: Remove properties.bots from the top-level schema and instead add bots as a property inside the on: field definition.
pkg/parser/schemas/main_workflow_schema.json — move bots from top-level to on.properties.bots
2. environment Type Mismatch Between Schema and Go Struct
The schema defines environment using oneOf — accepting either a plain string ("production") or an object ({ name: "production", url: "..." }). However, FrontmatterConfig.Environment in pkg/workflow/frontmatter_types.go is typed as map[string]any, which cannot deserialize a plain string. A user writing environment: production will trigger a silent deserialization failure.
Impact: Any workflow using the GitHub Actions shorthand environment: (name) will silently fail to have the environment configured in the compiled output. No error is surfaced.
docs/src/content/docs/reference/frontmatter.md:528 — documents string shorthand as valid
Fix: Change FrontmatterConfig.Environment to any (like Plugins any) and add deserialization handling for the string case, or extract it as a raw YAML section like Container and Services.
3. jobs.(job).strategy Schema Blocks All Matrix Configurations
In the jobs schema definition, the strategy property for job objects is defined with "additionalProperties": false but no properties defined. This means every key inside strategy: — including the standard matrix:, fail-fast:, and max-parallel: — is rejected by the schema validator.
Impact: Any user (or CI tool) running schema validation against a workflow file that uses jobs.(job).strategy.matrix: will receive a validation error, even though the implementation fully supports it.
Fix: Add the standard GitHub Actions strategy properties to the schema:
Fields Missing from Primary Reference (frontmatter.md)
The following fields have full schema definitions, typed Go structs, and active compiler implementations — but are entirely absent from docs/src/content/docs/reference/frontmatter.md, the primary user-facing reference:
Field
Schema
Struct
Implementation
In frontmatter-full.md
secret-masking
Defined (steps array, additionalProperties: false)
Fully defined (max, window, events, ignored-roles)
*RateLimitConfig
compiler_activation_jobs.go
Not verified
secret-masking is particularly notable: it supports import merging (import_processor.go line 831), is included in frontmatter hashes (frontmatter_hash.go line 132), and has a dedicated redact_secrets.go implementation — yet is completely invisible to users reading the main reference.
rate-limit is marked experimental in compiler.go:222 but has a well-defined schema with four sub-fields and is actively used in the compilation pipeline.
Feature Flags Undocumented in Primary Reference
The features: field uses additionalProperties: true with no enumeration of valid keys. The following feature flag constants are defined and actively used in the compiler/workflow code but have no documentation in frontmatter.md (and limited/no coverage in other reference docs):
Has a dedicated mcp-gateway.md page but not cross-referenced from frontmatter.md
Only action-mode is documented. action-tag appears in frontmatter-full.md only. Users have no discoverable list of valid feature flags.
Schema Improvements Needed
Minor Schema Issues
steps / post-steps overly permissive: Both fields use oneOf[object, array] at the top level. The object alternative would allow a single bare step object instead of an array — which is not how the implementation processes them. In practice steps are always arrays; the object alternative is a permissive artifact that could confuse schema-aware editors.
infer deprecated field still present: The infer boolean is marked DEPRECATED in its schema description (pointing to disable-model-invocation). The field is allowlisted in include_processor.go but no Go code reads its value. The schema should either be removed or use deprecated: true and mark it as a no-op clearly.
Parser/Compiler Issues
MCP Config: `network` Field is Struct-Less
The network property in mcp_config_schema.json is parsed from the raw map in pkg/parser/mcp.go:735 but never stored on MCPServerConfig or BaseMCPServerConfig. The proxy-args value nested inside network is extracted and stored on MCPServerConfig.ProxyArgs, but the network object itself is discarded after extraction.
Any consumer that receives a parsed MCPServerConfig struct cannot inspect network configuration beyond ProxyArgs — it would need the original raw map. This creates a data loss risk if network.allowed is inspected post-parse.
MCP Config: `entrypoint` Dual-Write Side Effect
In pkg/parser/mcp.go:666-669, the entrypoint field value is both:
Stored on config.Entrypoint
Appended to config.Args as --entrypoint (value)
If any downstream consumer reconstructs a command from both config.Entrypoint and config.Args, the entrypoint would be applied twice.
Confirmed Still-Present Issues (From Prior Runs)
The following critical bugs identified in earlier strategy runs were confirmed not yet fixed:
cleanup_script parsed from engine.firewall but absent from schema
Strategy 12 (2026-02-23)
Not verified this run
permissions schema missing repository-projects and organization-projects scopes
Strategy 12 (2026-02-23)
Not verified this run
Recommendations
Fix bots schema placement — move bots from properties.bots (top-level) to inside on: definition to match both the implementation and the documentation.
Fix environment type handling — change FrontmatterConfig.Environment from map[string]any to any and add deserialization for the string shorthand case.
Fix jobs.(job).strategy schema — add matrix, fail-fast, and max-parallel as explicitly allowed properties so schema validation does not reject standard GitHub Actions matrix strategies.
Add secret-masking to frontmatter.md — document this fully-implemented field in the primary reference alongside its import merging behavior.
Add feature flag enumeration to docs — either add a dedicated feature flags reference page or add a table of supported flags to the features: section in frontmatter.md.
Add inlined-imports and rate-limit to frontmatter.md — both are active compiler features with full schema coverage.
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.
-
Overview
This run used Strategy 13: Documentation Completeness Audit + Schema Structural Defects (day 55, proven strategy path). Analysis covered all four consistency dimensions: schema ↔ parser/compiler, schema ↔ documentation, schema ↔ real workflows, and parser ↔ documentation. Two parallel sub-agents ran full cross-references of
FrontmatterConfig,WorkflowData, JSON schema definitions, and primary documentation. 9 new findings were identified — including two structural schema bugs that would actively reject valid user configurations.Run reference: §22345778423
Summary
Critical Issues
1.
botsSchema/Implementation Path MismatchThe JSON schema defines
botsas a top-level property (properties.bots). The implementation inpkg/workflow/role_checks.go:141extracts it exclusively fromon.bots(nested inside the trigger block). The primary documentation (docs/src/content/docs/reference/frontmatter.md:263) correctly showson.bots— and even includes a migration note referencinggh aw fixto migrate from the old top-level form.Impact: The schema is stale — it still documents the old top-level position that was migrated away from. Any schema validator will accept
bots: [...]at the root but the compiler will silently ignore it;on.bots: [...]is the correct form but the schema will not validate it as abotsfield.Fix: Remove
properties.botsfrom the top-level schema and instead addbotsas a property inside theon:field definition.2.
environmentType Mismatch Between Schema and Go StructThe schema defines
environmentusingoneOf— accepting either a plain string ("production") or an object ({ name: "production", url: "..." }). However,FrontmatterConfig.Environmentinpkg/workflow/frontmatter_types.gois typed asmap[string]any, which cannot deserialize a plain string. A user writingenvironment: productionwill trigger a silent deserialization failure.Impact: Any workflow using the GitHub Actions shorthand
environment: (name)will silently fail to have the environment configured in the compiled output. No error is surfaced.Relevant files:
pkg/workflow/frontmatter_types.go—Environment map[string]anypkg/parser/schemas/main_workflow_schema.json—properties.environment(oneOf string/object)docs/src/content/docs/reference/frontmatter.md:528— documents string shorthand as validFix: Change
FrontmatterConfig.Environmenttoany(likePlugins any) and add deserialization handling for the string case, or extract it as a raw YAML section likeContainerandServices.3.
jobs.(job).strategySchema Blocks All Matrix ConfigurationsIn the
jobsschema definition, thestrategyproperty for job objects is defined with"additionalProperties": falsebut nopropertiesdefined. This means every key insidestrategy:— including the standardmatrix:,fail-fast:, andmax-parallel:— is rejected by the schema validator.Impact: Any user (or CI tool) running schema validation against a workflow file that uses
jobs.(job).strategy.matrix:will receive a validation error, even though the implementation fully supports it.Fix: Add the standard GitHub Actions
strategyproperties to the schema:Documentation Gaps
Fields Missing from Primary Reference (frontmatter.md)
The following fields have full schema definitions, typed Go structs, and active compiler implementations — but are entirely absent from
docs/src/content/docs/reference/frontmatter.md, the primary user-facing reference:secret-maskingadditionalProperties: false)*SecretMaskingConfigredact_secrets.go,compiler_orchestrator_tools.godisable-model-invocationinlined-importsInlinedImports boolcompiler_orchestrator_workflow.go,compiler_yaml.gorate-limit*RateLimitConfigcompiler_activation_jobs.gosecret-maskingis particularly notable: it supports import merging (import_processor.goline 831), is included in frontmatter hashes (frontmatter_hash.goline 132), and has a dedicatedredact_secrets.goimplementation — yet is completely invisible to users reading the main reference.rate-limitis marked experimental incompiler.go:222but has a well-defined schema with four sub-fields and is actively used in the compilation pipeline.Feature Flags Undocumented in Primary Reference
The
features:field usesadditionalProperties: truewith no enumeration of valid keys. The following feature flag constants are defined and actively used in the compiler/workflow code but have no documentation infrontmatter.md(and limited/no coverage in other reference docs):copilot-requestsCopilotRequestsFeatureFlagtools.go,copilot_engine_execution.go,copilot_engine_installation.go,threat_detection.godangerous-permissions-writeDangerousPermissionsWriteFeatureFlagdangerous_permissions_validation.godisable-xpia-promptDisableXPIAPromptFeatureFlagunified_prompt_step.gosafe-inputsSafeInputsFeatureFlagclaude_engine.go,codex_engine.gomcp-gatewayMCPGatewayFeatureFlagmcp-gateway.mdpage but not cross-referenced fromfrontmatter.mdOnly
action-modeis documented.action-tagappears infrontmatter-full.mdonly. Users have no discoverable list of valid feature flags.Schema Improvements Needed
Minor Schema Issues
steps/post-stepsoverly permissive: Both fields useoneOf[object, array]at the top level. Theobjectalternative would allow a single bare step object instead of an array — which is not how the implementation processes them. In practice steps are always arrays; the object alternative is a permissive artifact that could confuse schema-aware editors.inferdeprecated field still present: Theinferboolean is markedDEPRECATEDin its schema description (pointing todisable-model-invocation). The field is allowlisted ininclude_processor.gobut no Go code reads its value. The schema should either be removed or usedeprecated: trueand mark it as a no-op clearly.Parser/Compiler Issues
MCP Config: `network` Field is Struct-Less
The
networkproperty inmcp_config_schema.jsonis parsed from the raw map inpkg/parser/mcp.go:735but never stored onMCPServerConfigorBaseMCPServerConfig. Theproxy-argsvalue nested insidenetworkis extracted and stored onMCPServerConfig.ProxyArgs, but thenetworkobject itself is discarded after extraction.Any consumer that receives a parsed
MCPServerConfigstruct cannot inspect network configuration beyondProxyArgs— it would need the original raw map. This creates a data loss risk ifnetwork.allowedis inspected post-parse.MCP Config: `entrypoint` Dual-Write Side Effect
In
pkg/parser/mcp.go:666-669, theentrypointfield value is both:config.Entrypointconfig.Argsas--entrypoint (value)If any downstream consumer reconstructs a command from both
config.Entrypointandconfig.Args, the entrypoint would be applied twice.Confirmed Still-Present Issues (From Prior Runs)
The following critical bugs identified in earlier strategy runs were confirmed not yet fixed:
hasSafeOutputType()missing 11 operations — silent import conflict pass-throughtools.serena.languagesschema restricts to 6 languages; code supports 30+network.firewalldescription incorrectly says Copilot-onlycleanup_scriptparsed fromengine.firewallbut absent from schemapermissionsschema missingrepository-projectsandorganization-projectsscopesRecommendations
botsschema placement — movebotsfromproperties.bots(top-level) to insideon:definition to match both the implementation and the documentation.environmenttype handling — changeFrontmatterConfig.Environmentfrommap[string]anytoanyand add deserialization for the string shorthand case.jobs.(job).strategyschema — addmatrix,fail-fast, andmax-parallelas explicitly allowed properties so schema validation does not reject standard GitHub Actions matrix strategies.secret-maskingtofrontmatter.md— document this fully-implemented field in the primary reference alongside its import merging behavior.features:section infrontmatter.md.inlined-importsandrate-limittofrontmatter.md— both are active compiler features with full schema coverage.Strategy Performance
References:
Beta Was this translation helpful? Give feedback.
All reactions