[Schema Consistency] Schema Consistency Audit — 2026-03-23 #22407
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Schema Consistency Checker. A newer discussion is available at Discussion #22595. |
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.
-
Overview
Schema consistency audit for 2026-03-23 (run 43, day 82 → proven strategy). Analysis focused on new changeset features (
safe-outputs.actions,safe-outputs.scripts, blocked deny-lists, label_command trigger) and cross-referencing schema definitions against Go implementation and documentation.safe-outputs.actions/scriptsSchema Completeness CheckCritical Issues
1.
update-discussionlabelsis a Dead Feature (persisting, strategy-31)Schema (
main_workflow_schema.json): defineslabels:andallowed-labels:fields undersafe-outputs.update-discussion.Docs (
safe-outputs.md): documents it with YAML examples ("Updates discussion title, body, or labels").Reality: LLM tool definition in both
pkg/workflow/js/safe_outputs_tools.jsonandactions/setup/js/safe_outputs_tools.jsonhas nolabelsparameter — the LLM can never send labels.update_discussion.cjshas zero label-handling code.safe_outputs_validation_config.gousesrequiresOneOf: title, bodywith nolabelsfield.Impact: Users configuring
update-discussionwith label management expectations will silently get no label changes.2.
proxy-argsMissing from MCP Schema (persisting, strategy-30)Code:
proxy-argsis parsed at the top level of MCP server configs viamcp_config_custom.go:661(config.GetStringArray) and tested at top level inmcp_config_comprehensive_test.go:903.Schema:
proxy-argsonly exists in the deprecatednetwork.proxy-argspath inmain_workflow_schema.json. The$defs/stdio_mcp_tooldefinition usesadditionalProperties: false, so any workflow usingproxy-argsat the top-level MCP server config will fail schema validation even though the code accepts it.Both schemas affected:
main_workflow_schema.jsonandmcp_config_schema.json.3. Wrong Codemod ID in MCP Tools and Docs (persisting, strategy-32)
mcp_tools_management.go:171andgh-aw-as-mcp-server.md:284both reference codemod IDsandbox-agent-false-removal(described as "Removessandbox.agent: false— firewall now mandatory").Reality: This codemod does not exist in
fix_codemods.goGetAllCodemods(). The actual codemod issandbox-false-to-agent-false(migrates top-levelsandbox: falsetosandbox: {agent: false}). The fake codemod has opposite semantics: the real one preserves the disabled firewall state; the documented-but-fake one would remove it.upgrading.md:84correctly referencessandbox-false-to-agent-false.LLM agents using the
gh awMCP server are told a non-existent codemod exists with wrong semantics.High-Priority Documentation Gaps
4. `close-older-key` Field Completely Undocumented (persisting, strategy-33)
The
close-older-keyfield forcreate-issueandcreate-discussionis fully implemented:main_workflow_schema.jsonlines ~4313 (create-issue), ~4855 (create-discussion)create_issue.go,create_discussion.gowithyaml:"close-older-key"tagsclose_older_issues.cjs:81,close_older_discussions.cjs:103usinggh-aw-close-keymarkersMissing from all documentation:
safe-outputs.md,frontmatter.md,frontmatter-full.md,safe-outputs-specification.md.Users cannot discover this deduplication mechanism that prevents duplicate issues/discussions across workflow runs.
5. `gh-aw-workflow-call-id` Marker Behavior Undocumented (persisting, strategy-33)
When
GH_AW_CALLER_WORKFLOW_IDis set (compiler injects this inworkflow_callcontexts only —compiler_safe_outputs_job.go:441), items receive a second marker andclose-olderfiltering uses this marker exclusively, ignoring the standard workflow-id marker.Items created before this feature was introduced will not be closed in
workflow_callcontexts. Implemented ingenerate_footer.cjs:122,close_older_issues.cjs:61,close_older_discussions.cjs:65. Not documented anywhere.6. `status-comment` Schema Description is Stale (persisting, strategy-30)
Schema (
main_workflow_schema.json:1568) says: "Must be explicitly set to true to enable status comments — there is no automatic bundling with ai-reaction".Code (
compiler_safe_outputs.go:192-197): automatically setsStatusComment=truewhenslash_commandORlabel_commandtriggers are present.Also stale:
frontmatter-full.md:706-709has identical outdated text.Caused by the
minor-enable-reaction-status-comment-by-defaultchangeset.New Findings This Run
7.
safe-outputs.actionsinputsProperty Undocumented (NEW — 2026-03-23)Schema (
main_workflow_schema.json):safe-outputs.actions.<name>.inputsis defined as:Go code (
safe_outputs_actions.go):parseActionsConfig()parses theinputsmap and populatesactionConfig.Inputs, which is used downstream for tool generation.Documentation (
custom-safe-outputs.mdAction Reference table): Only showsuses,description, andenv. Theinputsoverride field is completely absent.This is a genuinely useful escape-hatch for CI environments without network access at compile time — users compiling
gh aw compilein air-gapped or restricted environments can pre-specify action inputs to skip theaction.ymlfetch. Without docs, this feature is undiscoverable.8.
safe-outputs.scriptsnameField Has No Effect (NEW — 2026-03-23)Schema:
safe-outputs.scripts.<name>.nameexists as a valid property (mirroringsafe-outputs.jobs.<name>.name).Go code:
parseSafeScriptsConfig()insafe_scripts.go:43-45parsesnameintoSafeScriptConfig.Name.Problem:
generateCustomScriptToolDefinition()adapts the script to aSafeJobConfigpassing onlyDescriptionandInputs—Nameis never applied.Compare with
safe-outputs.jobs.<name>.name: that field maps tojob.DisplayName(used as the GitHub Actions step display name). For scripts, the analogous field does nothing.Impact: Low — no user-visible functionality is broken. But the schema implies
namedoes something (e.g., display name in logs), misleading users who set it expecting behavior similar to jobs.Existing Schema Issues (Confirmed Still Unresolved)
assign-to-user/unassign-from-userblockedfield not in docs examplesreaction: eyesdefault description misleads non-slash_command triggersstate-reasonin Go code andactions/setup/jsbut missing frompkg/workflow/jsclose_issuetoolon:string description omits<entity> labeled <label>shorthand formatRecommendations
Document
safe-outputs.actionsinputsoverride — Add a row to the Action Reference table incustom-safe-outputs.mdand add a tip/note explaining its offline-compilation use case.Fix
safe-outputs.scriptsnamefield — Either (a) implement it as a display label used in log output (consistent with jobs), or (b) remove it from the schema with a comment explaining why scripts don't use display names.Add
proxy-argsto MCP server schema — Addproxy-argsto$defs/stdio_mcp_tool.propertiesinmain_workflow_schema.json(and top-level inmcp_config_schema.json).Fix codemod ID mismatch — Change
sandbox-agent-false-removaltosandbox-false-to-agent-falseinmcp_tools_management.goandgh-aw-as-mcp-server.md.Document
close-older-key— Add a section insafe-outputs.mdunder create-issue and create-discussion explaining the deduplication key feature.Fix
update-discussionlabels — Either implement label-handling inupdate_discussion.cjs+ add LLM tool parameters, or removelabels/allowed-labelsfrom the schema and docs.Strategy Performance
safe-outputs.actions/scriptsSchema Completeness CheckReferences:
Beta Was this translation helpful? Give feedback.
All reactions