Problem
Issue intent metadata for issue types, issue fields, and labels is currently gated on the issue_intents entry in GH_AW_RUNTIME_FEATURES. With the feature moving to public preview, workflows should no longer need that client-side environment-variable opt-in.
The server-side feature flag remains authoritative. Sending the intent-capable payload before that flag is fully enabled is safe: the metadata is ignored rather than producing an error.
Current implementation
The gate was introduced in #41092 and is implemented by hasIssueIntentsRuntimeFeature() in actions/setup/js/issue_intents.cjs. It currently controls:
- the intent guidance added to
set_issue_type, set_issue_field, and add_labels tool descriptions in actions/setup/js/generate_safe_outputs_tools.cjs
- structured issue type updates and the
GraphQL-Features: update_issue_suggestions header in actions/setup/js/set_issue_type.cjs
- issue field intent metadata and the feature header in
actions/setup/js/set_issue_field.cjs
- structured label metadata sent by
actions/setup/js/add_labels.cjs
- the GraphQL label intent path used by
actions/setup/js/update_issue.cjs
Desired behavior
Remove the client-side issue_intents runtime feature check so intent-capable behavior is always used when these safe outputs run:
- Always include the intent guidance for
set_issue_type, set_issue_field, and add_labels tools.
- For non-clear
set_issue_type operations, always use the structured issue type input and feature header. Preserve the existing clear behavior.
- Always attach normalized
rationale, confidence, and suggest metadata to issue field updates and send the feature header.
- Always preserve structured label metadata in
add_labels requests.
- When
update_issue includes labels, always use the existing GraphQL label intent path and feature header.
- Remove
hasIssueIntentsRuntimeFeature() and its issue_intents constant/imports once no callers remain.
- Do not remove or otherwise change the generic
GH_AW_RUNTIME_FEATURES infrastructure; other runtime features may still depend on it.
Compatibility requirements
- Existing string-only label payloads continue to work.
- Calls that omit
rationale, confidence, and suggest continue to work without errors.
- Clearing an issue type continues to work.
- Existing sanitization, the 280-character rationale limit, confidence normalization, validation, allowed-list checks, and staged-mode behavior remain unchanged.
- Repositories or deployments where the server-side feature flag is not yet enabled do not fail; unsupported intent metadata is ignored.
Acceptance criteria
GH_AW_RUNTIME_FEATURES no longer changes issue-intent tool descriptions or runtime mutation behavior.
- Tests no longer set
GH_AW_RUNTIME_FEATURES=issue_intents to exercise issue intent behavior.
- Tests cover unconditional intent guidance and mutation paths with the environment variable absent.
- Tests cover string labels and payloads without optional intent metadata.
- No
issue_intents runtime feature checks remain in the issue type, issue field, add-labels, update-issue, or tool-generation paths.
Problem
Issue intent metadata for issue types, issue fields, and labels is currently gated on the
issue_intentsentry inGH_AW_RUNTIME_FEATURES. With the feature moving to public preview, workflows should no longer need that client-side environment-variable opt-in.The server-side feature flag remains authoritative. Sending the intent-capable payload before that flag is fully enabled is safe: the metadata is ignored rather than producing an error.
Current implementation
The gate was introduced in #41092 and is implemented by
hasIssueIntentsRuntimeFeature()inactions/setup/js/issue_intents.cjs. It currently controls:set_issue_type,set_issue_field, andadd_labelstool descriptions inactions/setup/js/generate_safe_outputs_tools.cjsGraphQL-Features: update_issue_suggestionsheader inactions/setup/js/set_issue_type.cjsactions/setup/js/set_issue_field.cjsactions/setup/js/add_labels.cjsactions/setup/js/update_issue.cjsDesired behavior
Remove the client-side
issue_intentsruntime feature check so intent-capable behavior is always used when these safe outputs run:set_issue_type,set_issue_field, andadd_labelstools.set_issue_typeoperations, always use the structured issue type input and feature header. Preserve the existing clear behavior.rationale,confidence, andsuggestmetadata to issue field updates and send the feature header.add_labelsrequests.update_issueincludes labels, always use the existing GraphQL label intent path and feature header.hasIssueIntentsRuntimeFeature()and itsissue_intentsconstant/imports once no callers remain.GH_AW_RUNTIME_FEATURESinfrastructure; other runtime features may still depend on it.Compatibility requirements
rationale,confidence, andsuggestcontinue to work without errors.Acceptance criteria
GH_AW_RUNTIME_FEATURESno longer changes issue-intent tool descriptions or runtime mutation behavior.GH_AW_RUNTIME_FEATURES=issue_intentsto exercise issue intent behavior.issue_intentsruntime feature checks remain in the issue type, issue field, add-labels, update-issue, or tool-generation paths.