[Schema Consistency] Schema Consistency Check - 2026-04-08 #25235
Replies: 2 comments
-
|
🎉 The smoke test agent has returned with a victory lap! I ran 13 tests, built the entire If code quality were a sport, today's run would be a gold medal performance. 🏅 Now if you'll excuse me, I need to go write haiku about CI pipelines. 🎋 Run §24118240783
|
Beta Was this translation helpful? Give feedback.
-
|
This discussion has been marked as outdated by Schema Consistency Checker. A newer discussion is available at Discussion #25427. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
minimum/maximum/minLength/maxLength/patternconstraints that are accepted by the schema validator but silently bypassed by the Go parser/compilerCritical Issues — Schema Constraint Enforcement Gaps
These fields have numeric or length bounds in
main_workflow_schema.jsonthat are not enforced in the Go parser/compiler. A valid-schema workflow is rejected; an invalid-value workflow compiles and runs.View Constraint Gaps (4 issues)
1.
rate-limit.max— Upper Bound Not EnforcedSchema (
main_workflow_schema.json):minimum: 1, maximum: 10Go (
pkg/workflow/role_checks.go:56):if data.RateLimit.Max > 0 { max = data.RateLimit.Max }— only checks> 0A user writing
max: 11ormax: 100compiles successfully and executes, even though the schema caps it at 10. The minimum (1) is also not explicitly enforced —max: 0silently falls back toDefaultRateLimitMax = 5rather than returning an error.2.
rate-limit.window— Both Bounds Not EnforcedSchema:
minimum: 1, maximum: 180Go (
pkg/workflow/role_checks.go:63):if data.RateLimit.Window > 0 { window = data.RateLimit.Window }— no upper-bound checkwindow: 0→ silently uses default 60 instead of erroring (min violation)window: 999→ accepted and used as-is (max violation)3.
safe-outputs.max-patch-size— Upper Bound Not EnforcedSchema:
minimum: 1, maximum: 10240, default: 1024Go (
pkg/workflow/safe_outputs_config.go:408-430): validates>= 1(minimum) but not<= 10240(maximum)Setting
max-patch-size: 99999compiles and runs without warning. Only the minimum is validated.4.
tracker-id—maxLengthNot ValidatedSchema:
minLength: 8, maxLength: 128, pattern: "^[a-zA-Z0-9_-]+$"Go (
pkg/workflow/frontmatter_extraction_metadata.go:70-103): validatesminLength: 8✅ and character pattern ✅, but nomaxLength: 128checkA 200-character
tracker-idcompiles successfully and propagates to all created assets (issues, PRs, discussions) even though the schema rejects it.Documentation Gaps (Persistent)
These were identified in prior runs and remain unresolved.
View Documentation Gaps (3 categories)
Constraint Descriptions Missing in Docs
docs/src/content/docs/reference/frontmatter-full.mddocumentsrate-limit.windowwith "Maximum: 180 (3 hours)" in a comment (line 5935), which is good. However:rate-limit.maxmaximum of 10 is not mentioned in the docs comment (onlymax: 1example is shown, no upper bound stated)tracker-iddocs (line 38) says "at least 8 characters" but does not mention the 128-character maximummcp-serversSection Under-Documentedfrontmatter-full.mdshowsmcp-servers:\n {}with no sub-fields. The schema defines two complete tool types:stdio_mcp_tool— fields:type, command, args, container, entrypoint, entrypointArgs, mounts, env, network, registry, version, allowedhttp_mcp_tool— fields:type, url, headers, registry, auth, allowedNotably, the
authfield for HTTP MCP servers (GitHub OIDC:auth.type: github-oidc,auth.audience) is defined in schema and implemented (pkg/types/mcp.go:MCPAuthConfig) but not documented in any reference doc.Engine Fields in Schema Not Parsed from Frontmatter
$defs.engine_configin the schema defines fields:models,options,runtime-id,display-name,description,auth. These are not extracted bypkg/workflow/engine.go:ExtractEngineConfig(). These may be reserved for engine registry definitions rather than per-workflow frontmatter, but the schema allows them in workflow frontmatter without any handler in the compiler.Persistent Findings from Prior Runs
View Persistent Issues (from strategy cache)
create-code-scanning-alerts(plural) yaml tag incompiler_types.go:462vs singular in schema/mapspkg/workflow/compiler_types.goobservability.otlp(endpoint, headers) in schema butfrontmatter-full.mdonly showsobservability: {}docs/src/content/docs/reference/frontmatter-full.mdkeepalive-intervalinsandbox.mcpschema section but missing fromfrontmatter-full.mddocs/src/content/docs/reference/frontmatter-full.mdfrontmatter-full.md(actions, dispatch_repository, noop, etc.)docs/src/content/docs/reference/frontmatter-full.mdcli-proxy,copilot-requests,mcp-gateway,disable-xpia-promptnot documenteddocs/src/content/docs/reference/frontmatter*.mdRecommendations
Add upper-bound validation to
rate-limit.maxinpkg/workflow/role_checks.go:extractRateLimitConfig()— error ifmax > 10(or warn in non-strict mode, error in strict mode). Also validatemax < 1instead of silently falling back to default.Add both bounds to
rate-limit.window— error ifwindow < 1orwindow > 180. Currentlywindow: 0silently uses the default andwindow: 999runs without warning.Add
maxLength: 128check toextractTrackerID()inpkg/workflow/frontmatter_extraction_metadata.go— analogous to the existingminLength: 8check at line 90.Add
maximum: 10240check tomax-patch-sizeextraction inpkg/workflow/safe_outputs_config.go— pair with the existing>= 1check to form a complete range validation.Document
mcp-serverssub-fields infrontmatter-full.md— especially theauthfield for HTTP MCP servers (auth.type: github-oidc,auth.audience), which is fully implemented but invisible in docs.Document
rate-limit.maxupper bound (10) in thefrontmatter-full.mdrate-limit section.Strategy Performance
References:
Beta Was this translation helpful? Give feedback.
All reactions