Skip to content

Pipe threat-detection kill-switch frontmatter into compiled threat-detect invocation - #55532

Merged
pelikhan merged 7 commits into
mainfrom
copilot/gh-aw-threat-detection-pipe-engine-timeout-max-tur
Aug 24, 2026
Merged

Pipe threat-detection kill-switch frontmatter into compiled threat-detect invocation#55532
pelikhan merged 7 commits into
mainfrom
copilot/gh-aw-threat-detection-pipe-engine-timeout-max-tur

Conversation

Copilot AI commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

gh-aw-threat-detection added per-attempt controls (--engine-timeout, --max-turns, --retries), but gh-aw could not configure them per workflow. This PR adds detector-specific frontmatter support and emits these flags only when explicitly set, preserving detector-default behavior for unset fields.

  • Frontmatter surface for detector controls

    • Added safe-outputs.threat-detection keys:
      • engine-timeout (Go duration string, 0 allowed)
      • max-turns (non-negative integer)
      • retries (non-negative integer)
    • Extended threat-detection config parsing to carry these values into compiler data structures.
  • Schema-level validation

    • Updated main_workflow_schema.json to validate the new fields at compile time.
    • Rejects negative values for max-turns and retries.
    • Constrains engine-timeout to valid duration-like input (plus 0), preventing invalid numeric forms from being treated as valid config.
  • Command generation behavior (key contract)

    • Refactored external detector command construction to append:
      • --engine-timeout <value>
      • --max-turns <value>
      • --retries <value>
        only when each field is explicitly configured.
    • Unset fields produce no flag/env emission, so detector compiled-in defaults continue to apply automatically.
  • Example emitted invocation

    - name: Execute threat detection with AWF
      run: |
        threat-detect --engine copilot \
          --engine-timeout 10m \
          --max-turns 100 \
          --retries 1 \
          --output /tmp/gh-aw/threat-detection/detection_result.json \
          /tmp/gh-aw/threat-detection

pr-sous-chef run: https://github.com/github/gh-aw/actions/runs/32787277683

Generated by 👨‍🍳 PR Sous Chef · pi · gpt54 · 20.4 AIC · ⌖ 9.41 AIC · ⊞ 8.7K ·
Comment /souschef to run again

Copilot AI and others added 2 commits August 24, 2026 22:26
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] Add engine timeout, max turns, and retries to workflow Pipe threat-detection kill-switch frontmatter into compiled threat-detect invocation Aug 24, 2026
Copilot AI requested a review from pelikhan August 24, 2026 22:33
@pelikhan
pelikhan marked this pull request as ready for review August 24, 2026 22:36
Copilot AI balanced review requested due to automatic review settings August 24, 2026 22:36
@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #55532

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

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

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@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.

The refactor is clean and the implementation is correct.

  • buildThreatDetectCommand correctly handles nil config and omits optional flags when unset — good defensive design.
  • shellEscapeArg is applied to the duration string (user-supplied) but not to integer values from strconv.Itoa — consistent and correct.
  • Negative engine-timeout rejection delegates to the JSON schema regex; the TestThreatDetectionKillSwitchValidation test validates this through CompileWorkflow.
  • Test coverage is solid with both unit and integration-style compilation tests.

LGTM.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · copilot · sonnet46 · 23.5 AIC · ⌖ 11.8 AIC · ⊞ 6.2K

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

reviewed_at: 2026-08-24T22:40:00Z
review_event: REQUEST_CHANGES
top_themes:
  - shell escaping regression in generated threat-detect command
files_reviewed:
  - pkg/parser/schemas/main_workflow_schema.json
  - pkg/workflow/threat_detection_config.go
  - pkg/workflow/threat_detection_config_test.go
  - pkg/workflow/threat_detection_external.go
  - pkg/workflow/threat_detection_external_detector_execution_test.go
comment_count: 1

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

🔎 Code quality review by PR Code Quality Reviewer · pi · gpt54 · 8.02 AIC · ⌖ 8.27 AIC · ⊞ 7K ·
Comment /review to run again

@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.

Requesting changes

This refactor introduces a shell-safety regression in the generated threat-detect command: engineID is now concatenated into the run: line without escaping, so the workflow can break or execute the wrong command as soon as an engine name stops being a single shell-safe token.

Blocking theme
  • The new helper correctly treats the newly added optional flags carefully, but it also centralizes command assembly and now inserts engineID unescaped before strings.Join(args, " ").
  • That makes the generated shell command depend on an implicit invariant about engine identifiers that is not enforced here.
  • This is a correctness and security-adjacent bug in workflow generation, so it should be fixed before merge.

🔎 Code quality review by PR Code Quality Reviewer · pi · gpt54 · 8.02 AIC · ⌖ 8.27 AIC · ⊞ 7K
Comment /review to run again

func buildThreatDetectCommand(npmPathSetup, engineID string, config *ThreatDetectionConfig) string {
args := []string{
"threat-detect",
"--engine", engineID,

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.

The new command builder stops shell-escaping engineID, so an engine name containing whitespace or shell metacharacters will compile into a broken or injectable run: command instead of a single CLI argument.

💡 Why this blocks merge

Before this refactor, the whole threat-detect invocation was assembled with fmt.Sprintf, and every user-derived positional value except engineID stayed localized in one place. This helper now appends engineID directly into args and joins with spaces:

args := []string{"threat-detect", "--engine", engineID}
return fmt.Sprintf("%s && %s", npmPathSetup, strings.Join(args, " "))

That is only safe if engineID is permanently restricted to shell-safe tokens everywhere upstream. If an engine id ever becomes configurable as an arbitrary string (or even just contains a space), the generated workflow will execute the wrong command. This is exactly the sort of regression that hides until a new engine/provider is added.

Please shell-escape engineID at the point it is inserted, and add a test that covers an engine id with whitespace or quoting-sensitive characters.

args := []string{
    "threat-detect",
    "--engine", shellEscapeArg(engineID),
}

@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 /codebase-design and /tdd — approving with two minor suggestions.

📋 Key Themes & Highlights

Key Themes

  • Minor escaping inconsistency: shellEscapeArg is used for --engine-timeout but not for the integer flags; worth clarifying the intent.
  • Test helper gap: intPtr is missing alongside strPtr, leading to verbose anonymous closures in tests.

Positive Highlights

  • ✅ Clean pointer-based opt-in design — unset fields emit no flags, preserving detector defaults
  • ✅ Solid type-switch parsing for parseThreatDetectionEngineTimeout covering int, int64, and float64 edge cases
  • ✅ Good schema validation with the duration-pattern regex plus const: 0 special case
  • ✅ Tests cover both the "omit when unset" and "emit when set" contracts in threat_detection_external_detector_execution_test.go
  • ✅ Validation tests in TestThreatDetectionKillSwitchValidation exercise the compile-time schema path

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet46 · 32.6 AIC · ⌖ 10.9 AIC · ⊞ 7.6K
Comment /matt to run again

if config.EngineTimeout != nil {
args = append(args, "--engine-timeout", shellEscapeArg(*config.EngineTimeout))
}
if config.MaxTurns != nil {

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.

[/codebase-design] shellEscapeArg is applied to EngineTimeout but not to the integer flags — a minor inconsistency that could confuse future contributors about when escaping is needed.

💡 Suggestion

The schema regex already validates the duration format, so shell-special characters should not appear. Either drop the escaping for consistency with the integer flags, or add a comment explaining the intent:

// shellEscapeArg guards against unexpected chars in user-supplied duration strings
args = append(args, "--engine-timeout", shellEscapeArg(*config.EngineTimeout))

@copilot please address this.

expectedConfig: &ThreatDetectionConfig{
EngineTimeout: strPtr("10m"),
MaxTurns: func() *int {
v := 100

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.

[/tdd] The anonymous func() *int { v := 100; return &v }() pattern is repeated across both test files — an intPtr helper (matching the existing strPtr) would improve readability.

💡 Suggestion

Add alongside strPtr in the test helpers file:

func intPtr(v int) *int { return &v }

Then tests become:

MaxTurns: intPtr(100),
Retries:  intPtr(1),

@copilot please address this.

@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.

One simplification stands out in the new config parsing path: the dedicated helpers are carrying more branchy type handling than the schema and call sites need. net: -38 lines possible.

Generated by ✂️ Ponytail Reviewer for #55532 · codex · mai10 · 6.41 AIC · ⌖ 1.92 AIC · ⊞ 16.7K
Comment /ponytail to run again

return strings.TrimSpace(s)
}

func parseThreatDetectionEngineTimeout(raw any) *string {

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.

pkg/workflow/threat_detection_config.go:226-294: shrink: two bespoke parser helpers for three new fields and a handful of type branches. Inline the tiny conversions at the call sites and delete the helpers.

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

Adds workflow-level threat-detection kill-switch configuration and conditionally emits the corresponding detector flags.

Changes:

  • Adds frontmatter schema and parsing for timeout, turn, and retry limits.
  • Builds optional threat-detect arguments while preserving defaults.
  • Adds parsing, validation, and command-generation tests.
Show a summary per file
File Description
pkg/workflow/threat_detection_external.go Generates detector flags.
pkg/workflow/threat_detection_external_detector_execution_test.go Tests command generation.
pkg/workflow/threat_detection_config.go Parses new settings.
pkg/workflow/threat_detection_config_test.go Tests parsing and validation.
pkg/parser/schemas/main_workflow_schema.json Defines the frontmatter schema.

Review details

Suppressed comments (1)

pkg/workflow/threat_detection_config.go:273

  • Normal positive YAML integers are decoded as uint64, but this helper has no uint64 case. Consequently authored values such as max-turns: 100 and retries: 1 validate successfully yet are silently discarded, so neither flag reaches the compiled command.
	case int64:
		if v < 0 {
			return nil
		}
		value := int(v)
		return &value
  • Files reviewed: 5/5 changed files
  • Comments generated: 4
  • Review effort level: Balanced

Comment on lines +507 to +511
if config.EngineTimeout != nil {
args = append(args, "--engine-timeout", shellEscapeArg(*config.EngineTimeout))
}
if config.MaxTurns != nil {
args = append(args, "--max-turns", strconv.Itoa(*config.MaxTurns))
Comment on lines +241 to +247
case int64:
if v != 0 {
threatLog.Printf("Ignoring invalid numeric threat-detection.engine-timeout value %d; use a Go duration string such as '10m' or 0", v)
return nil
}
zero := "0"
return &zero
"oneOf": [
{
"type": "string",
"pattern": "^(0|([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))+)$"
],
"description": "Per-attempt timeout for threat detection engine execution as a Go duration (for example '90s', '10m', '1h30m'). Set to 0 to disable timeout enforcement in threat-detect."
},
"max-turns": {
@github-actions

Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (298 new lines in pkg/) but does not have a linked Architecture Decision Record (ADR).

📄 Draft ADR committed: docs/adr/55532-expose-threat-detect-per-attempt-controls-via-frontmatter.md — review and complete it before merging.

🔒 This PR cannot merge until an ADR is linked in the PR body.

📋 What to do next
  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete the missing sections — add context the AI couldn't infer, refine the decision rationale, and list real alternatives you considered
  3. Commit the finalized ADR to docs/adr/ on your branch
  4. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-55532: Expose Threat-Detect Per-Attempt Controls via Frontmatter

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

❓ Why ADRs Matter

"AI made me procrastinate on key design decisions. Because refactoring was cheap, I could always say 'I'll deal with this later.' Deferring decisions corroded my ability to think clearly."

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.

📋 Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 0042-use-postgresql.md for PR #42).

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · claude · sonnet46 · 87.4 AIC · ⌖ 33.3 AIC · ⊞ 8.6K ·
Comment /review to run again

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot upgrade the release and recompile

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

gh-aw-pr-sous-chef
@copilot PR Sous Chef triage: this PR still needs a forward-progress pass before maintainer investigation is likely to be productive.

Please do one focused follow-up pass:

  • address the blocking github-actions review about shell escaping for engineID and the copilot-pull-request-reviewer note about positive integer parsing being dropped
  • complete the ADR follow-up already requested by the design decision gate and keep the PR body linked to the ADR
  • refresh the branch if needed and use the pr-finisher skill before handing back for review

Run: https://github.com/github/gh-aw/actions/runs/32787277683

Generated by 👨🍳 PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · pi · gpt54 · 20.4 AIC · ⌖ 9.41 AIC · ⊞ 8.7K ·
Comment /souschef to run again

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

Copilot AI commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

@copilot upgrade the release and recompile

Upgraded the pinned threat-detect release to v0.4.12 and recompiled workflow lockfiles in commit 97a0153.

@pelikhan

Copy link
Copy Markdown
Collaborator

/smoke-copilot

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot is now investigating this issue comment. Sources say the story is developing...

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

gh-aw-pr-sous-chef
@copilot PR Sous Chef triage: this PR still needs a forward-progress pass before maintainer investigation is likely to be productive.
...

Addressed in commit fd7617e: fixed shell escaping for engineID in buildThreatDetectCommand, restored uint64 parsing for engine-timeout: 0, max-turns, and retries (with bounds guard), added targeted tests, and finalized ADR-55532 metadata (Status: Accepted, deciders set). I also attempted to link the ADR in the PR body, but this agent environment lacks GH_TOKEN for gh pr edit, so that PR-body update still needs a maintainer-side edit.

Copilot AI requested a review from gh-aw-bot August 24, 2026 23:27
@pelikhan

Copy link
Copy Markdown
Collaborator

/smoke-copilot

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot is now investigating this issue comment. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot Engine

PR: "Pipe threat-detection kill-switch frontmatter into compiled threat-detect invocation"

  • ✅ github (gh-proxy) PR review
  • ✅ mcpscripts PR query
  • ❌ Serena find_symbol (Go LSP not installed)
  • ✅ Playwright browse+screenshot
  • ✅ web-fetch
  • ✅ file+bash smoke file
  • ✅ build
  • ✅ artifact upload
  • ✅ discussion create
  • ✅ workflow dispatch (haiku)
  • ✅ PR review tools
  • ✅ comment memory
  • ❌ file-summarizer sub-agent (no response)
  • ✅ check run
  • ✅ LSP TypeScript function count

Overall: FAIL (2 checks failed, see above)

cc @pelikhan @Copilot (author: app/copilot-swe-agent)

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
  • www.google.com
  • www.gstatic.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"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · copilot · auto · 52.9 AIC · ⌖ 2.71 AIC · ⊞ 9.2K ·
Comment /smoke-copilot to run again
Add label smoke to run again

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

Caveman code check done.
Build good, no crash.
Fire burn bright tonight.

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
  • www.google.com
  • www.gstatic.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"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · copilot · auto · 52.9 AIC · ⌖ 2.71 AIC · ⊞ 9.2K ·
Comment /smoke-copilot to run again
Add label smoke to run again

@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.

Caveman review done. Code good, small nits left. Ug.

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
  • www.google.com
  • www.gstatic.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"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · copilot · auto · 52.9 AIC · ⌖ 2.71 AIC · ⊞ 9.2K
Comment /smoke-copilot to run again
Add label smoke to run again

args = append(args, "--engine-timeout", shellEscapeArg(*config.EngineTimeout))
}
if config.MaxTurns != nil {
args = append(args, "--max-turns", strconv.Itoa(*config.MaxTurns))

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.

Ugga. New func good. Small nit: consider validating negative Retries/MaxTurns before appending to args, ugh.

return strings.TrimSpace(s)
}

func parseThreatDetectionEngineTimeout(raw any) *string {

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.

Ugh, config field look ok. Maybe add comment for future cavemen readers.

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

Copilot runs deep,
Tests pass through silent commits—
Green checks bloom at dawn.

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
  • www.google.com
  • www.gstatic.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"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · copilot · auto · 31.6 AIC · ⌖ 2.35 AIC · ⊞ 9.1K ·
Comment /smoke-copilot to run again
Add label smoke to run again

@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 test review submission.

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
  • www.google.com
  • www.gstatic.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"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · copilot · auto · 31.6 AIC · ⌖ 2.35 AIC · ⊞ 9.1K
Comment /smoke-copilot to run again
Add label smoke to run again

return strings.TrimSpace(s)
}

func parseThreatDetectionEngineTimeout(raw any) *string {

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 test: inline review comment.

@pelikhan
pelikhan merged commit 0009db9 into main Aug 24, 2026
15 checks passed
@pelikhan
pelikhan deleted the copilot/gh-aw-threat-detection-pipe-engine-timeout-max-tur branch August 24, 2026 23:47
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.

[gh-aw-threat-detection] pipe --engine-timeout, --max-turns, --retries from workflow frontmatter

4 participants