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
Automated cross-check of the main workflow JSON schema (pkg/parser/schemas/main_workflow_schema.json) against the parser/compiler (pkg/parser/*.go, pkg/workflow/*.go), the curated documentation (docs/src/content/docs/reference/frontmatter.md), and the 200+ real workflow files in .github/workflows/. Findings re-confirm three high-signal patterns from prior runs and surface one resolved item — infer has been removed from the parser allowlist, so that previously-reported leak is now fixed.
Resolved since last run: 1 (infer removed from include_processor.go)
Critical Issues
1. applyTo and inputs accepted by parser but absent from schema
pkg/parser/include_processor.go:182-204 defines a validFields allowlist that includes applyTo and inputs for shared/imported workflows, but neither field exists in pkg/parser/schemas/main_workflow_schema.json. IDEs configured against the schema will flag these as unknown fields even though the parser accepts them silently. Either add them to the schema (with a constraint scoping them to imported files) or rename them in the parser.
2. rate-limit legacy alias accepted with no user-facing warning
pkg/workflow/role_checks.go:219-222 accepts the legacy rate-limit key and falls back to it when user-rate-limit is absent. The only signal at line 300-302 is roleLog.Print("Extracted legacy rate-limit configuration") — a debug log, not a console warning. Users migrating to user-rate-limit get no compile-time nudge, and gh aw compile output stays silent. Recommend emitting console.FormatWarningMessage similar to the existing pattern used for unexpected fields in include_processor.go:217.
High-Priority Inconsistencies
3. Schema describes fields as deprecated but lacks structured flags
A jq scan of properties confirms zero fields in the main schema have "deprecated": true or "x-deprecation-message". Two fields self-describe as deprecated/legacy in prose only:
inline-sub-agents — description: "Deprecated switch for inline sub-agent support... Setting this to false is not supported and causes a compilation error." (Note: the compiler hard-rejects false at pkg/workflow/compiler_validators.go:60, so the schema is doubly misleading — false is documented as a valid example but rejected at compile time.)
rate-limit — description: "Legacy alias for 'user-rate-limit'. Prefer 'user-rate-limit' with 'max-runs-per-window'."
Without the structured flags, JSON-schema-aware IDEs (VS Code, IntelliJ) cannot render the strikethrough / hint UI that signals deprecation to users.
4. inline-sub-agents example value false violates compiler
From the schema:
"inline-sub-agents": {
"type": "boolean",
"description": "... Setting this to false is not supported and causes a compilation error.",
"examples": [true]
}
Good — the example is true. But the type is boolean with no const: true or enum: [true], so the schema still validates inline-sub-agents: false even though the compiler will reject it at compiler_validators.go:60. Tighten to "const": true or "enum": [true] so schema validation catches the error before the compile step.
Documentation Gaps
5. Ten schema fields have zero mentions in curated frontmatter.md
The authoritative narrative doc docs/src/content/docs/reference/frontmatter.md has 0 mentions of each of these fields, despite them being in the schema and (for most) actively used in real workflows:
Field
Used in .github/workflows/*.md?
Notes
tracker-id
89 workflows
Heaviest gap — heavily used, completely undocumented in curated docs
experiments
yes (see field_gaps)
user-rate-limit
yes
replaces legacy rate-limit
rate-limit
no (in repo)
legacy alias
check-for-updates
(boolean)
disable-model-invocation
(boolean, agent file)
run-install-scripts
(boolean)
secret-masking
(object)
security-relevant
inline-sub-agents
(boolean)
deprecated but still documented in schema
inlined-imports
(boolean)
The auto-generated frontmatter-full.md is not a substitute for narrative documentation — users discovering features grep the curated page first.
Schema ↔ Real-World Workflows
6. Heavy tracker-id usage with no curated docs entry
89 of the project's own workflow files set tracker-id — yet docs/src/content/docs/reference/frontmatter.md has zero mentions of the field. This is the single most impactful documentation gap in the audit.
Resolved Since Last Run
infer field: Previously flagged (cache strategy-8) as silently accepted by include_processor.go. A grep at pkg/parser/include_processor.go for infer now returns no matches — it has been removed from validFields. ✅
Recommendations
Schema: Add "deprecated": true and "x-deprecation-message" to both inline-sub-agents and rate-limit. Change inline-sub-agents to "const": true (or "enum": [true]) since false is a compile-time error.
Schema: Either add applyTo and inputs as top-level properties (scoped to imported workflows via if/then or allOf) or rename them in pkg/parser/include_processor.go to match an existing schema field.
Compiler: In pkg/workflow/role_checks.go around line 300, replace roleLog.Print("Extracted legacy rate-limit configuration") with a user-visible console.FormatWarningMessage recommending migration to user-rate-limit.
Docs: Add narrative sections in docs/src/content/docs/reference/frontmatter.md for the 10 missing fields, prioritising tracker-id (89 workflows depend on it).
Tooling: Consider adding a CI check that fails when a schema field is added without a corresponding entry in the curated reference doc — the auto-generated frontmatter-full.md shouldn't be the only documentation.
All four strategies produced confirmable, actionable findings. No new strategy attempted this run (day_mod=2 → proven bucket). Cache updated to reflect that infer is resolved and to bump success counts.
Next Steps
Add deprecated: true / x-deprecation-message to inline-sub-agents and rate-limit in pkg/parser/schemas/main_workflow_schema.json
Tighten inline-sub-agents schema constraint from boolean to const: true
Reconcile applyTo / inputs between parser allowlist and schema
Surface rate-limit legacy usage with a console warning in role_checks.go
Document tracker-id (and the 9 other gap fields) in docs/src/content/docs/reference/frontmatter.md
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
Automated cross-check of the main workflow JSON schema (
pkg/parser/schemas/main_workflow_schema.json) against the parser/compiler (pkg/parser/*.go,pkg/workflow/*.go), the curated documentation (docs/src/content/docs/reference/frontmatter.md), and the 200+ real workflow files in.github/workflows/. Findings re-confirm three high-signal patterns from prior runs and surface one resolved item —inferhas been removed from the parser allowlist, so that previously-reported leak is now fixed.Summary
inferremoved frominclude_processor.go)Critical Issues
1.
applyToandinputsaccepted by parser but absent from schemapkg/parser/include_processor.go:182-204defines avalidFieldsallowlist that includesapplyToandinputsfor shared/imported workflows, but neither field exists inpkg/parser/schemas/main_workflow_schema.json. IDEs configured against the schema will flag these as unknown fields even though the parser accepts them silently. Either add them to the schema (with a constraint scoping them to imported files) or rename them in the parser.2.
rate-limitlegacy alias accepted with no user-facing warningpkg/workflow/role_checks.go:219-222accepts the legacyrate-limitkey and falls back to it whenuser-rate-limitis absent. The only signal at line 300-302 isroleLog.Print("Extracted legacy rate-limit configuration")— a debug log, not a console warning. Users migrating touser-rate-limitget no compile-time nudge, andgh aw compileoutput stays silent. Recommend emittingconsole.FormatWarningMessagesimilar to the existing pattern used for unexpected fields ininclude_processor.go:217.High-Priority Inconsistencies
3. Schema describes fields as deprecated but lacks structured flags
A
jqscan ofpropertiesconfirms zero fields in the main schema have"deprecated": trueor"x-deprecation-message". Two fields self-describe as deprecated/legacy in prose only:inline-sub-agents— description: "Deprecated switch for inline sub-agent support... Setting this to false is not supported and causes a compilation error." (Note: the compiler hard-rejectsfalseatpkg/workflow/compiler_validators.go:60, so the schema is doubly misleading —falseis documented as a valid example but rejected at compile time.)rate-limit— description: "Legacy alias for 'user-rate-limit'. Prefer 'user-rate-limit' with 'max-runs-per-window'."Without the structured flags, JSON-schema-aware IDEs (VS Code, IntelliJ) cannot render the strikethrough / hint UI that signals deprecation to users.
4.
inline-sub-agentsexample valuefalseviolates compilerFrom the schema:
Good — the example is
true. But the type isbooleanwith noconst: trueorenum: [true], so the schema still validatesinline-sub-agents: falseeven though the compiler will reject it atcompiler_validators.go:60. Tighten to"const": trueor"enum": [true]so schema validation catches the error before the compile step.Documentation Gaps
5. Ten schema fields have zero mentions in curated
frontmatter.mdThe authoritative narrative doc
docs/src/content/docs/reference/frontmatter.mdhas 0 mentions of each of these fields, despite them being in the schema and (for most) actively used in real workflows:.github/workflows/*.md?tracker-idexperimentsuser-rate-limitrate-limitrate-limitcheck-for-updatesdisable-model-invocationrun-install-scriptssecret-maskinginline-sub-agentsinlined-importsThe auto-generated
frontmatter-full.mdis not a substitute for narrative documentation — users discovering features grep the curated page first.Schema ↔ Real-World Workflows
6. Heavy
tracker-idusage with no curated docs entry89 of the project's own workflow files set
tracker-id— yetdocs/src/content/docs/reference/frontmatter.mdhas zero mentions of the field. This is the single most impactful documentation gap in the audit.Resolved Since Last Run
inferfield: Previously flagged (cache strategy-8) as silently accepted byinclude_processor.go. A grep atpkg/parser/include_processor.goforinfernow returns no matches — it has been removed fromvalidFields. ✅Recommendations
"deprecated": trueand"x-deprecation-message"to bothinline-sub-agentsandrate-limit. Changeinline-sub-agentsto"const": true(or"enum": [true]) sincefalseis a compile-time error.applyToandinputsas top-level properties (scoped to imported workflows viaif/thenorallOf) or rename them inpkg/parser/include_processor.goto match an existing schema field.pkg/workflow/role_checks.goaround line 300, replaceroleLog.Print("Extracted legacy rate-limit configuration")with a user-visibleconsole.FormatWarningMessagerecommending migration touser-rate-limit.docs/src/content/docs/reference/frontmatter.mdfor the 10 missing fields, prioritisingtracker-id(89 workflows depend on it).frontmatter-full.mdshouldn't be the only documentation.Strategy Performance
All four strategies produced confirmable, actionable findings. No new strategy attempted this run (day_mod=2 → proven bucket). Cache updated to reflect that
inferis resolved and to bump success counts.Next Steps
deprecated: true/x-deprecation-messagetoinline-sub-agentsandrate-limitinpkg/parser/schemas/main_workflow_schema.jsoninline-sub-agentsschema constraint frombooleantoconst: trueapplyTo/inputsbetween parser allowlist and schemarate-limitlegacy usage with a console warning inrole_checks.gotracker-id(and the 9 other gap fields) indocs/src/content/docs/reference/frontmatter.mdReferences:
Beta Was this translation helpful? Give feedback.
All reactions