Skip to content

Migrate set_issue_type safe output from GraphQL to single REST issues.update call#41241

Merged
pelikhan merged 10 commits into
mainfrom
copilot/migrate-set-issue-type-handler
Jun 24, 2026
Merged

Migrate set_issue_type safe output from GraphQL to single REST issues.update call#41241
pelikhan merged 10 commits into
mainfrom
copilot/migrate-set-issue-type-handler

Conversation

Copilot AI commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

set_issue_type previously required a 3-call GraphQL flow (issue node lookup, type discovery, mutation). This change moves the handler to REST PATCH /repos/:owner/:repo/issues/:number, reducing call count to one while preserving existing handler behavior and error semantics.

  • Handler API path migration

    • Removed GraphQL-based node/type resolution and mutation path in actions/setup/js/set_issue_type.cjs.
    • Replaced with a single githubClient.rest.issues.update({ owner, repo, issue_number, type }) call.
  • Behavior parity retained

    • Kept client-side allowed-type validation.
    • Kept required-labels / required-title-prefix filtering.
    • Kept staged preview mode, temporary ID resolution, max-count enforcement, and repo validation unchanged.
  • Intent metadata passthrough (runtime feature)

    • When issue_intents is enabled, handler now sends REST hash form:
      • type: { value, rationale, confidence, suggest }
    • Added explicit confidence normalization for REST (LOW|MEDIUM|HIGHlow|medium|high).
  • 422 invalid-type mapping

    • Added REST error parsing for type validation failures and mapped to existing not-found style:
      • Issue type "<name>" not found. Available types: ...
    • Includes extraction of available-type lists from common server message formats.
  • Tests updated for REST flow

    • actions/setup/js/set_issue_type.test.cjs now asserts REST issues.update payloads for set/clear/intents paths.
    • Added coverage for 422 mapping behavior and removed GraphQL-specific expectations.
await githubClient.rest.issues.update({
  owner,
  repo,
  issue_number,
  type: hasIssueIntentsRuntimeFeature()
    ? { value: issueTypeName, rationale, confidence, suggest }
    : issueTypeName,
});


✨ PR Review Safe Output Test - Run 28119469685

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · 75.8 AIC · ⌖ 38.2 AIC · ⊞ 8.7K ·

Copilot AI and others added 2 commits June 24, 2026 15:42
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Migrate set-issue-type to PATCH endpoint for safe output Migrate set_issue_type safe output from GraphQL to single REST issues.update call Jun 24, 2026
Copilot AI requested a review from pelikhan June 24, 2026 15:56
@pelikhan pelikhan marked this pull request as ready for review June 24, 2026 16:24
Copilot AI review requested due to automatic review settings June 24, 2026 16:24
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

@github-actions github-actions Bot mentioned this pull request Jun 24, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the set_issue_type safe-output handler from a multi-call GraphQL flow to a single REST issues.update call, while adding REST-specific handling for issue-intent metadata and 422 validation errors.

Changes:

  • Replaced the GraphQL lookup/mutation path with githubClient.rest.issues.update({ ..., type }).
  • Added REST intent-metadata formatting (including confidence normalization to low|medium|high).
  • Updated tests to assert REST payloads and added coverage for 422 invalid-type mapping.
Show a summary per file
File Description
actions/setup/js/set_issue_type.cjs Switches handler implementation to REST issues.update, adds intent metadata formatting, and introduces 422 parsing/mapping.
actions/setup/js/set_issue_type.test.cjs Reworks mocks/assertions for REST, adds a 422 mapping test, and removes GraphQL expectations.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 4

Comment thread actions/setup/js/set_issue_type.cjs Outdated
Comment on lines +91 to +95
// REST validation errors vary across endpoints and deployments; extract the list from
// either "... one of: A, B" or "... available types: A, B" when present.
const matchedPattern = AVAILABLE_TYPES_PATTERNS.find(pattern => pattern.test(errorDetails));
const availableTypes = (matchedPattern ? matchedPattern.exec(errorDetails)?.[1] : undefined)?.trim() || errorDetails;
return `${baseMessage} Available types: ${availableTypes}`;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e90bb42. mapInvalidIssueTypeError now appends Available types: only when a list is extracted from a recognized pattern; otherwise it returns the base not-found message (or the preserved no-issue-types-available mapping).

Comment on lines 232 to +236
try {
const { owner, repo } = repoParts;
const intentMetadata = normalizeIssueIntentMetadata(item);

// Get the issue's node ID for GraphQL
const issueNodeId = await getIssueNodeId(githubClient, owner, repo, issueNumber);

let typeId = null;
if (!isClear) {
// Fetch available issue types and find the matching one
const issueTypes = await fetchIssueTypes(githubClient, owner, repo);

if (issueTypes.length === 0) {
const error = "No issue types are available for this repository. Issue types must be configured in the repository or organization settings.";
core.error(error);
return { success: false, error };
}

const matchedType = issueTypes.find(t => t.name.toLowerCase() === issueTypeName.toLowerCase());
if (!matchedType) {
const availableNames = issueTypes.map(t => t.name).join(", ");
const error = `Issue type ${JSON.stringify(issueTypeName)} not found. Available types: ${availableNames}`;
core.error(error);
return { success: false, error };
}

typeId = matchedType.id;
core.info(`Resolved issue type ${JSON.stringify(issueTypeName)} to node ID: ${typeId}`);
}

await setIssueTypeById(githubClient, issueNodeId, typeId, intentMetadata);
const typeValue = buildIssueTypeValue(isClear, issueTypeName, intentMetadata);
await githubClient.rest.issues.update({

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e90bb42. The handler now canonicalizes case-insensitive matches against allowed and sends the canonical configured type value in the REST issues.update payload; tests assert this behavior.

Comment on lines 263 to 278
it("should handle case-insensitive type matching", async () => {
const message = {
type: "set_issue_type",
issue_number: 42,
issue_type: "bug", // lowercase
};

const result = await handler(message, {});
expect(result.success).toBe(true);
// Should still resolve to the Bug type
expect(mockGraphql).toHaveBeenCalledWith(expect.stringContaining("updateIssue"), expect.objectContaining({ typeId: bugTypeId }));
expect(mockGithub.rest.issues.update).toHaveBeenCalledWith(
expect.objectContaining({
issue_number: 42,
type: "bug",
})
);
});

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e90bb42. Updated the case-insensitive test to use an allowed list and assert canonical type "Bug" is sent to REST and returned in handler output.

Comment on lines +253 to +257
if (!isClear && isIssueTypeValidationError(error)) {
const mappedError = mapInvalidIssueTypeError(error, issueTypeName);
core.error(`Failed to set issue type on issue #${issueNumber}: ${mappedError}`);
return { success: false, error: mappedError };
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e90bb42. Added REST 422 mapping for issue-types-unavailable cases to preserve the prior explicit error message, plus test coverage for that mapping.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /zoom-out and /improve-codebase-architecture — requesting changes on two correctness concerns in the new error-handling path, plus a few test coverage gaps.

📋 Key Themes & Highlights

Issues to address

  1. Overly broad 422 guard — any 422 from issues.update is remapped to "Issue type X not found", even if the error is unrelated to types. Narrow with a message-content check.
  2. Fallthrough message — when no regex pattern matches the error details, "Available types: [full error prose]" is emitted, which is confusing. Return baseMessage alone in the no-match case.
  3. suggest: false silently dropped — the JSDoc allows boolean; only true is forwarded. Clarify intent or forward the value as-is.
  4. Test coverage gapresponse.data.message path in mapInvalidIssueTypeError is untested; the errors[0].message path is the only exercised branch.
  5. Misleading test name'should handle case-insensitive type matching' no longer describes actual behaviour (client-side normalisation was removed).

Positive Highlights

  • ✅ Excellent complexity reduction: 3-call GraphQL flow → 1 REST call, net −44 lines
  • toRestIssueIntentMetadata is clean and well-typed; confidence normalisation is correct
  • ✅ Good defensive pattern in getErrorStatus: checks both status and response.status
  • ✅ Tests were substantially rewritten rather than just patched, and the 422 mapping test is a good addition

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · 72.8 AIC · ⌖ 8.2 AIC · ⊞ 6.5K

Comments that could not be inline-anchored

actions/setup/js/set_issue_type.cjs:69

[/zoom-out] isIssueTypeValidationError treats any 422 from issues.update as a type-not-found error. The REST endpoint can return 422 for reasons unrelated to issue types (field constraints, other validation), which would surface as a misleading &quot;Issue type X not found&quot; message.

<details>
<summary>💡 Suggested fix</summary>

Narrow the match by also checking the error message contains type-related content:

function isIssueTypeValidationError(error) {
  if (getErrorStatus(erro…

</details>

<details><summary>actions/setup/js/set_issue_type.cjs:95</summary>

**[/improve-codebase-architecture]** When none of the `AVAILABLE_TYPES_PATTERNS` match, `availableTypes` falls back to the full raw `errorDetails` string. This produces messages like `&quot;Issue type X not found. Available types: Type must be one of the configured types for this repository.&quot;`  the label `Available types:` is misleading when the value is a prose sentence rather than a list.

&lt;details&gt;
&lt;summary&gt;💡 Suggested fix&lt;/summary&gt;

Return `baseMessage` (without the Available types clause) whe…

</details>

<details><summary>actions/setup/js/set_issue_type.cjs:32</summary>

**[/zoom-out]** Only `suggest: true` is forwarded; `suggest: false` is silently dropped. The JSDoc type allows `boolean`, not just `true`. If the REST API treats an absent `suggest` field differently from `suggest: false`, this is a silent behavioral divergence from the callers&#39; intent.

&lt;details&gt;
&lt;summary&gt;💡 Suggested change&lt;/summary&gt;

```js
// Before
if (intentMetadata.suggest) {
  restMetadata.suggest = true;
}

// After — preserve explicit false
if (intentMetadata.suggest !== undefined) {
 

</details>

<details><summary>actions/setup/js/set_issue_type.test.cjs:208</summary>

**[/tdd]** The 422 mapping test only exercises the `errors[0].message` code path. The `response.data.message` fallback in `mapInvalidIssueTypeError` (line 84 of the impl) is never covered  if the server returns a bare `message` without an `errors` array, the parsing is completely untested.

&lt;details&gt;
&lt;summary&gt;💡 Add a second test case&lt;/summary&gt;

```js
it(&#39;should map 422 with bare data.message to not-found shape&#39;, async () =&gt; {
  const error = Object.assign(new Error(&#39;Validation failed&#39;), {


</details>

<details><summary>actions/setup/js/set_issue_type.test.cjs:263</summary>

**[/zoom-out]** The test name `&#39;should handle case-insensitive type matching&#39;` implies client-side normalisation, but that behaviour was removed in this PR — the raw input is now forwarded directly to the REST API. The test just confirms pass-through; server-side case handling is assumed.

Rename the test to something like `&#39;should pass issue_type string as-is to REST API&#39;` to accurately document the new behaviour and prevent future readers from believing case-folding still happens client-side.

</details>

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 85/100 — Excellent

Analyzed 6 changed test(s) across 1 JavaScript file: 6 design tests, 0 implementation tests, 0 guideline violations. Migration from GraphQL to REST is clean.

📊 Metrics & Test Classification (6 tests analyzed)
Metric Value
New/modified tests analyzed 6
✅ Design tests (behavioral contracts) 6 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 3 (50%)
Duplicate test clusters 0
Test inflation detected No (test +53 lines vs production +95 lines; ratio ≈ 0.56)
🚨 Coding-guideline violations 0
Test File Classification Issues Detected
should set issue type successfully set_issue_type.test.cjs:70 ✅ Design
should clear issue type when issue_type is empty string set_issue_type.test.cjs:90 ✅ Design
should use context issue number when issue_number not provided set_issue_type.test.cjs:109 ✅ Design
should handle API errors gracefully set_issue_type.test.cjs:194 ✅ Design
should map 422 invalid issue type errors to not-found shape ⭐ NEW set_issue_type.test.cjs:208 ✅ Design
should handle staged mode set_issue_type.test.cjs:237 ✅ Design

JavaScript: 6 (*.test.cjs). No Go test files changed.

Notes on removed tests: Two GraphQL-specific tests were deleted — should return error when issue type not found in repository and should return error when no issue types are available. The first is replaced by the new 422-error test. The second covered a scenario (empty issueTypes query result) that is no longer reachable with the REST approach, since the API validates type names directly and returns 422. Coverage is preserved.

All mocks (mockGithub.rest.issues.update, mockGithub.rest.issues.get) are for external GitHub API I/O — acceptable per guidelines.

Verdict

Check passed. 0% implementation tests (threshold: 30%). All 6 changed tests verify observable behavior (output shape, API call parameters, error-message contracts). The 422 → not-found error mapping test is a strong addition covering the key design invariant of this migration.

🧪 Test quality analysis by Test Quality Sentinel · 144.3 AIC · ⌖ 12.4 AIC · ⊞ 8.4K ·

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 85/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). All 6 changed tests verify behavioral contracts.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUEST_CHANGES — one high-severity behavioral regression and two medium-severity correctness issues must be addressed before merge.

### Blocking issues

1. [HIGH] Case-sensitivity regression (line 240)
The old GraphQL path did a case-insensitive lookup and sent the canonical type ID to the API. The new REST path sends the user's raw string unchanged. If the REST API is case-sensitive, callers using issue_type: "bug" when the server expects "Bug" will silently regress from success to 422. The client-side allowed check is also case-insensitive but still passes the original casing — this inconsistency will surface as intermittent failures.

2. [MEDIUM] Invalid JSDoc cast syntax (lines 60, 82)
Both /** @type {IssueTypeAPIError} */ error casts are missing the required parentheses around the casted expression. Under // @ts-check`` the variables remain typed as object, not `IssueTypeAPIError`, so property accesses are type-unsafe and IDEs won't offer correct completions.

### Non-blocking observations
  • Double regex execution (line 94): test() in .find() followed by exec() on the same pattern runs the regex twice. Safe now (no g flag) but fragile; a single exec() loop is cleaner.
  • Misleading test name (test line 263): "should handle case-insensitive type matching" now only asserts passthrough, not normalization — rename to reflect actual behaviour.

🔎 Code quality review by PR Code Quality Reviewer · 129 AIC · ⌖ 8.05 AIC · ⊞ 5.2K

Comments that could not be inline-anchored

actions/setup/js/set_issue_type.cjs:240

Case-sensitivity regression: user-supplied issueTypeName is passed directly to the REST API without normalization, silently breaking callers that relied on the previous case-insensitive resolution.

<details>
<summary>💡 Details and suggested fix</summary>

The old GraphQL flow did:

const matchedType = issueTypes.find(t =&gt; t.name.toLowerCase() === issueTypeName.toLowerCase());
typeId = matchedType.id; // canonical ID, not the raw user string

The new flow passes raw user input:…

actions/setup/js/set_issue_type.cjs:60

Invalid JSDoc type cast syntax: parentheses are missing around error — this annotates the variable but does not actually cast the expression, defeating // @ts-check``.

<details>
<summary>💡 Suggested fix</summary>

JSDoc type casts require parentheses around the expression being cast:

// Wrong — declaration annotation only; errorWithStatus is still typed as `object`
const errorWithStatus = /** `@type` {IssueTypeAPIError} */ error;

// Correct — actual type assertion
const errorW…

</details>

<details><summary>actions/setup/js/set_issue_type.cjs:94</summary>

**Double regex execution**: `test()` is called in the `.find()` predicate, then `exec()` is called again on the winning pattern — running the regex twice on the same string.

&lt;details&gt;
&lt;summary&gt;💡 Suggested fix&lt;/summary&gt;

Collapse into a single `exec()` pass:

```js
let match;
for (const pattern of AVAILABLE_TYPES_PATTERNS) {
  match = pattern.exec(errorDetails);
  if (match) break;
}
const availableTypes = match?.[1]?.trim() || errorDetails;

The current patterns lack the g flag so `last…

actions/setup/js/set_issue_type.test.cjs:263

Misleading test name: this test no longer verifies case-insensitive resolution — it only confirms that lowercase input is passed through unchanged to the REST API.

<details>
<summary>💡 Details</summary>

The old test asserted that issue_type: &quot;bug&quot; was resolved to the canonical Bug type ID via a case-insensitive GraphQL lookup. The new test asserts that type: &quot;bug&quot; is sent as-is.

This is a behavioral change: the old code normalized casing on the client; the new code delegates casin…

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot run pr-finisher skill

Copilot AI and others added 4 commits June 24, 2026 17:34
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Jun 24, 2026

Copy link
Copy Markdown
Contributor Author

@copilot run pr-finisher skill

Done. I ran pr-finisher actions on this PR and pushed the follow-up fixes in commits d90d57f, d12e277, and 0d8de74. Local validation is green; CI on the new HEAD is stale and needs a maintainer re-trigger before merge.

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

✅ All tools validated successfully! Agent Container Smoke Test confirms agent container is ready.

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

🚀 Smoke Gemini MISSION COMPLETE! Gemini has spoken. ✨

@github-actions

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot - AOAI (Entra) is now investigating this pull request. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot - AOAI (apikey) is now investigating this pull request. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.54.0
jq 1.7
yq v4.53.3
curl 8.5.0
gh 2.94.0
node v22.22.3
python3 3.11.15 (PyPy 7.3.23)
go 1.24.13
java 21.0.11
dotnet 10.0.301

Result: 12/12 tools available ✅
Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test · 16.8 AIC · ⌖ 7.96 AIC · ⊞ 5.5K ·

@github-actions

Copy link
Copy Markdown
Contributor

Smoke test

  • ✅ gh CLI
  • ✅ web fetch
  • ✅ file write
  • ✅ bash verify
  • ❌ build
  • Overall: FAIL

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • proxy.golang.org

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "proxy.golang.org"

See Network Configuration for more information.

🥧 Smoke Pi — Powered by Pi · 4.07 AIC · ⌖ 10.4 AIC · ⊞ 4.3K ·

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test Results

  • GitHub: ✅
  • Web Fetch: ✅
  • File Writing: ✅
  • Bash: ✅
  • Build: ❌
    Overall Status: FAIL

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • localhost

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "localhost"

See Network Configuration for more information.

Smoke Gemini — Powered by Gemini ·

@github-actions

Copy link
Copy Markdown
Contributor

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

The threat detection engine failed to produce results.

Review the workflow run logs for details.

Smoke test results for #41245 fix: normalize report formatting for daily-rendering-scripts-verifier.md and #41240 Fix false negatives in docs npm update detection.
✅ GitHub PR reads
✅ Serena symbols
✅ Playwright
❌ Web-fetch unavailable
✅ File write and bash verify
✅ Build
✅ Comment memory
✅ Cache memory
Skipped: issue field
Overall: FAIL

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex · 12.4 AIC · ⊞ 14.7K ·

@github-actions

Copy link
Copy Markdown
Contributor

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

The threat detection engine failed to produce results.

Review the workflow run logs for details.

Comment Memory

code wakes in the dawn
tests hum through the quiet shell
signals hold their shape

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex · 12.4 AIC · ⊞ 14.7K ·

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Smoke Test: Claude — Run 28119469685

Core #1-12: ✅ ✅ ✅ ✅ ❌(Tavily) ✅ ✅ ✅ ✅ ✅ ✅ ✅

PR Review #13-19: 13✅ 14✅ 15✅ 16✅ 17✅ 18✅ 19⚠️(skipped)

Overall: FAIL — Tavily tool list unavailable in this environment.

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · 75.8 AIC · ⌖ 38.2 AIC · ⊞ 8.7K ·

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💥 Automated smoke test review - all systems nominal!

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · 75.8 AIC · ⌖ 38.2 AIC · ⊞ 8.7K


/** @type {string} Safe output type handled by this module */
const HANDLER_TYPE = "set_issue_type";
const AVAILABLE_TYPES_PATTERNS = [/one of:\s*(.+)$/i, /available(?: types?)?:\s*(.+)$/i];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice — extracting the available-types regexes into a named constant improves readability.

const HANDLER_TYPE = "set_issue_type";
const AVAILABLE_TYPES_PATTERNS = [/one of:\s*(.+)$/i, /available(?: types?)?:\s*(.+)$/i];
const NO_ISSUE_TYPES_PATTERNS = [/no issue types? (?:are )?available/i, /issue types? (?:is|are) not (?:enabled|configured)/i];
const NO_ISSUE_TYPES_AVAILABLE_ERROR = "No issue types are available for this repository. Issue types must be configured in the repository or organization settings.";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clear, user-facing error string for the no-issue-types case. 👍

@github-actions

Copy link
Copy Markdown
Contributor

Migrate set_issue_type safe output from GraphQL to single REST issues.update call

  1. ❌ github tool 2. ✅ mcpscripts 3. ✅ Serena
  2. ✅ Playwright 5. ❌ web-fetch 6. ✅ file+bash
  3. ✅ discussion 8. ✅ build 9. ✅ artifact
  4. ✅ discussion create 11. ✅ dispatch 12. ✅ PR review
  5. ❌ comment memory 14. ✅ sub-agent 15. ✅ check run
    FAIL
    Author: @app/copilot-swe-agent | Assignees: @pelikhan @Copilot

Warning

Firewall blocked 5 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · 258.1 AIC · ⌖ 19.3 AIC · ⊞ 19.3K ·

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Smoke review pass. Tools barked. Comments dropped.

Warning

Firewall blocked 5 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · 258.1 AIC · ⌖ 19.3 AIC · ⊞ 19.3K

@github-actions

Copy link
Copy Markdown
Contributor

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

Potential security threats were detected in the agent output.

Review the workflow run logs for details.

Smoke Test summary:

  1. github tool: ✅
  2. mcpscripts: ✅
  3. Serena: ❌
  4. Playwright: ❌
  5. web-fetch: ❌
    Overall: FAIL
    @github-actions[bot]

📰 BREAKING: Report filed by Smoke Copilot - AOAI (Entra) · 135.5 AIC · ⌖ 21.7 AIC · ⊞ 18.3K ·

@github-actions

Copy link
Copy Markdown
Contributor

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

The threat detection engine failed to produce results.

Review the workflow run logs for details.

Pull request created: #41284

Generated by Changeset Generator

@pelikhan pelikhan merged commit 90967f1 into main Jun 24, 2026
192 of 193 checks passed
@pelikhan pelikhan deleted the copilot/migrate-set-issue-type-handler branch June 24, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants