Skip to content

[ssi] Fix missing event categorization for packages - #20276

Open
brijesh-elastic wants to merge 11 commits into
elastic:mainfrom
brijesh-elastic:fix/event-category-missing-ssi-packages
Open

[ssi] Fix missing event categorization for packages#20276
brijesh-elastic wants to merge 11 commits into
elastic:mainfrom
brijesh-elastic:fix/event-category-missing-ssi-packages

Conversation

@brijesh-elastic

@brijesh-elastic brijesh-elastic commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Proposed commit message

ssi: Fix missing event categorization for packages

This PR includes the changes for below data streams:
- azure.graphactivitylogs
- jamf_pro.events
- sublime_security.audit
- github.issues
- google_workspace.gcp
- google_workspace.rules
- google_workspace.calendar
- google_workspace.group_enterprise
- google_workspace.context_aware_access
- google_workspace.meet
- google_workspace.chat
- google_workspace.chrome
- google_workspace.login
- google_workspace.device
- google_workspace.keep
- google_workspace.vault

This PR also fixes the flaky system tests in `google_workspace`. A race condition caused `google_workspace`
to fail when reading `credentials.json` before the `creds` container finished creating it. This was
resolved by adding a healthcheck to `creds` that checks for `credentials.json`, and
updating `google_workspace` to depend on `service_healthy`. This guarantees
the credentials file exists before the agent starts reading it.

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.
  • I have verified that any added dashboard complies with Kibana's Dashboard good practices

Related issues

@brijesh-elastic brijesh-elastic self-assigned this Jul 22, 2026
@brijesh-elastic
brijesh-elastic requested review from a team as code owners July 22, 2026 08:16
@brijesh-elastic brijesh-elastic added the documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. label Jul 22, 2026
@brijesh-elastic
brijesh-elastic requested a review from a team as a code owner July 22, 2026 08:16
@brijesh-elastic brijesh-elastic added Integration:azure Azure Logs Integration:google_workspace Google Workspace bugfix Pull request that fixes a bug issue Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations] mapping/pipeline issue Integration:sublime_security Sublime Security Integration:jamf_pro Jamf Pro Team:SDE-Crest Crest developers on the Security Integrations team [elastic/sit-crest-contractors] labels Jul 22, 2026
@infra-vault-gh-plugin-prod

Copy link
Copy Markdown

Pinging @elastic/security-service-integrations (Team:Security-Service Integrations)

@github-actions

Copy link
Copy Markdown
Contributor

✅ Elastic Docs Style Checker (Vale)

No issues found on modified lines!


The Vale linter checks documentation changes against the Elastic Docs style guide. To use Vale locally or report issues, refer to Elastic style guide for Vale.

change_calendar_description: configuration
export_calendar: configuration
change_calendar_location: configuration
print_preview_calendar: configuration

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟠 High confidence: high path: packages/google_workspace/data_stream/calendar/elasticsearch/ingest_pipeline/default.yml:115

YAML syntax error in default.yml

Details

packages/google_workspace/data_stream/calendar/elasticsearch/ingest_pipeline/default.yml does not parse as valid YAML. This will break elastic-package and ingestion.

Recommendation:

Fix the YAML syntax so the file parses:

# correct the indentation / quoting at the flagged line

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

@elastic-vault-github-plugin-prod

elastic-vault-github-plugin-prod Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

🚀 Benchmarks report

Package azure 👍(2) 💚(6) 💔(5)

Expand to view
Data stream Previous EPS New EPS Diff (%) Result
signinlogs 2347.42 1919.39 -428.03 (-18.23%) 💔
aadgraphactivitylogs 1912.05 1428.57 -483.48 (-25.29%) 💔
activitylogs 2544.53 1692.05 -852.48 (-33.5%) 💔
eventhub 1e+06 500000 -500000 (-50%) 💔
identity_protection 9523.81 6134.97 -3388.84 (-35.58%) 💔

Package github 👍(1) 💚(4) 💔(1)

Expand to view
Data stream Previous EPS New EPS Diff (%) Result
issues 5555.56 3076.92 -2478.64 (-44.62%) 💔

Package google_workspace 👍(10) 💚(6) 💔(6)

Expand to view
Data stream Previous EPS New EPS Diff (%) Result
gcp 9803.92 6329.11 -3474.81 (-35.44%) 💔
gmail 1351.35 1010.1 -341.25 (-25.25%) 💔
groups 11494.25 9259.26 -2234.99 (-19.44%) 💔
keep 13513.51 9523.81 -3989.7 (-29.52%) 💔
token 3436.43 2873.56 -562.87 (-16.38%) 💔
context_aware_access 5102.04 4115.23 -986.81 (-19.34%) 💔

Package sublime_security 👍(0) 💚(0) 💔(3)

Expand to view
Data stream Previous EPS New EPS Diff (%) Result
audit 2557.54 2079 -478.54 (-18.71%) 💔
email_message 1033.06 747.94 -285.12 (-27.6%) 💔
message_event 13157.89 6369.43 -6788.46 (-51.59%) 💔

To see the full report comment with /test benchmark fullreport

remove_event_guest: configuration
change_event_guest_response: configuration
change_event: configuration
print_preview_event: configuration

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟠 High confidence: high path: packages/google_workspace/data_stream/calendar/elasticsearch/ingest_pipeline/default.yml:125

YAML syntax error in default.yml

Details

packages/google_workspace/data_stream/calendar/elasticsearch/ingest_pipeline/default.yml does not parse as valid YAML. This will break elastic-package and ingestion.

Recommendation:

Fix the YAML syntax so the file parses:

# correct the indentation / quoting at the flagged line

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

Comment thread packages/github/data_stream/issues/elasticsearch/ingest_pipeline/default.yml Outdated
Comment thread packages/github/data_stream/issues/elasticsearch/ingest_pipeline/default.yml Outdated
Comment thread packages/github/data_stream/issues/elasticsearch/ingest_pipeline/default.yml Outdated
Comment thread packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml Outdated
@ShourieG

Copy link
Copy Markdown
Contributor

@vera-review-bot review

Comment thread packages/azure/data_stream/graphactivitylogs/sample_event.json Outdated
Comment thread packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml Outdated
@brijesh-elastic
brijesh-elastic requested a review from efd6 July 29, 2026 04:33
field: event.type
value: creation
if: ctx.github?.issues?.created_at == ctx.github?.issues?.updated_at
# A closed issue or a merged pull request has reached the end of its lifecycle.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🔵 Low confidence: medium path: packages/github/data_stream/issues/elasticsearch/ingest_pipeline/default.yml:36

The new comment documents mapping a closed issue to event.type deletion; end is the ECS value for a lifecycle ending, deletion means the object was removed.

Details

The comment added here states that a closed issue or merged pull request "has reached the end of its lifecycle", and the processor below maps that to event.type: deletion. In ECS, deletion means the entity was deleted, while end is the value for something that has ended. A closed issue still exists and is still returned by the API, so deletion mis-labels it. Since the PR is explicitly documenting and revisiting this mapping, it is worth correcting rather than codifying.

Recommendation:

Use end for the closed/merged terminal state:

  # A closed issue or a merged pull request has reached the end of its lifecycle.
  - append:
      field: event.type
      tag: append_end_into_event_type
      value: end
      allow_duplicates: false
      if: ctx.github?.issues?.closed_at != null || ctx.github?.issues?.pull_request?.merged_at != null

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

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.

end makes sense, but changing deletion to end alters pre-existing behavior for users and would result in a breaking change.

if (params.email_resources.contains(res)) {
cats.add('email');
types.add('info');
} else if (res == 'auth') {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟡 Medium confidence: high path: packages/sublime_security/data_stream/audit/elasticsearch/ingest_pipeline/default.yml:434

The new ~90-line categorization script has only one pipeline test event, so the auth, iam and configuration branches are entirely untested; add fixtures covering them.

Details

_dev/test/pipeline/test-audit.log contains exactly one line, message_group.search, which only exercises the email_resources branch at default.yml:431-433. The auth branch (start/end/info split on auth.login* / auth.logout), the iam_resources branch (user/group plus the create/connect/upload vs delete vs change split) and the configuration_resources branch, including the inline_signed_headers_retrieved special case and the configuration_types list, all have zero coverage. The substring matching in those branches (t.contains('create') against the full type string) is the kind of logic that needs fixtures to stay correct.

Recommendation:

Add representative lines to _dev/test/pipeline/test-audit.log covering each branch, for example:

{"id":"...","type":"auth.login_success","created_at":"2024-08-12T06:04:03.714126Z","data":{}}
{"id":"...","type":"auth.logout","created_at":"2024-08-12T06:05:03.714126Z","data":{}}
{"id":"...","type":"user.create","created_at":"2024-08-12T06:06:03.714126Z","data":{}}
{"id":"...","type":"rbac.delete","created_at":"2024-08-12T06:07:03.714126Z","data":{}}
{"id":"...","type":"rules.update","created_at":"2024-08-12T06:08:03.714126Z","data":{}}
{"id":"...","type":"inline_signed_headers_retrieved","created_at":"2024-08-12T06:09:03.714126Z","data":{}}

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

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.

We don't have live logs to add to pipeline coverage.

field: event.kind
tag: set_event_kind_to_alert
value: alert
if: ctx.event?.action != null && ["DEVICE_COMPROMISED_EVENT", "SUSPICIOUS_ACTIVITY_EVENT"].contains(ctx.event.action)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟡 Medium confidence: high path: packages/google_workspace/data_stream/device/elasticsearch/ingest_pipeline/default.yml:545

Twelve new conditional branches were added to the device pipeline but the test fixture still has only two events; add fixtures for the alert, outcome and register/unregister paths.

Details

_dev/test/pipeline/test-device.log contains two events, APPLICATION_EVENT and DEVICE_SYNC_EVENT. None of the following new branches are covered: event.kind: alert for DEVICE_COMPROMISED_EVENT / SUSPICIOUS_ACTIVITY_EVENT (default.yml:541-545), the malware/threat/authentication categories (546-560), the start/end split on DEVICE_REGISTER_UNREGISTER_EVENT via account_state (581-590), and the policy-sync and compliance event.outcome rules (609-645). The failure-outcome rule at 627-630 uses case-sensitive contains('REJECT')/contains('FAIL') while its success counterpart uses equalsIgnoreCase, which is exactly the kind of asymmetry a fixture would pin down.

Recommendation:

Add events to _dev/test/pipeline/test-device.log covering the untested branches, e.g.:

{"kind":"admin#reports#activity","id":{"time":"2020-10-02T15:00:00Z","uniqueQualifier":1,"applicationName":"mobile","customerId":"1"},"events":{"type":"device_updates","name":"DEVICE_COMPROMISED_EVENT","parameters":[{"name":"DEVICE_COMPROMISED_STATE","value":"COMPROMISED"}]}}
{"kind":"admin#reports#activity","id":{"time":"2020-10-02T15:01:00Z","uniqueQualifier":2,"applicationName":"mobile","customerId":"1"},"events":{"type":"device_updates","name":"DEVICE_REGISTER_UNREGISTER_EVENT","parameters":[{"name":"ACCOUNT_STATE","value":"UNREGISTERED"}]}}
{"kind":"admin#reports#activity","id":{"time":"2020-10-02T15:02:00Z","uniqueQualifier":3,"applicationName":"mobile","customerId":"1"},"events":{"type":"device_updates","name":"ADVANCED_POLICY_SYNC_EVENT","parameters":[{"name":"POLICY_SYNC_RESULT","value":"POLICY_SYNC_SUCCEEDED"}]}}

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

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.

We don't have live logs to add to pipeline coverage.

tag: append_network_into_event_category
value: network
if: ctx.google_workspace?.meet?.name != null && ctx.google_workspace.meet.name == "call_ended"
if: ctx.google_workspace?.meet?.name != null

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟡 Medium confidence: medium path: packages/google_workspace/data_stream/meet/elasticsearch/ingest_pipeline/default.yml:100

Widening event.category: network to every Meet event mislabels non-network activity such as poll_created, hand_raised and send_chat_everyone; restrict it to the call/stream events.

Details

The condition changed from ctx.google_workspace.meet.name == "call_ended" to ctx.google_workspace?.meet?.name != null, so network is now appended for every event in the stream. The event.type map expanded in the same hunk includes names like poll_answered, hand_raised, reaction_sent, room_check_in, send_chat_everyone and smart_notes_session_started, none of which report network state or traffic. ECS defines network as events reporting the state or events of a network connection, so these events are now indexed under a category that does not describe them.

Recommendation:

Keep network for the call/stream lifecycle events and give the rest a category that matches, for example:

  - append:
      field: event.category
      tag: append_network_into_event_category
      value: network
      allow_duplicates: false
      if: ctx.google_workspace?.meet?.name != null && ["call_ended", "dialed_out", "ring_sent", "ring_answered", "ring_missed", "broadcast_activity", "in_meet_broadcast_activity", "livestream_watched"].contains(ctx.google_workspace.meet.name)

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

field: event.type
tag: append_creation_into_event_type_for_passkey_enrolled
value: creation
if: '["passkey_enrolled"].contains(ctx?.event?.action)'

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.

Suggested change
if: '["passkey_enrolled"].contains(ctx?.event?.action)'
if: ctx.event?.action == 'passkey_enrolled'

field: event.type
tag: append_deletion_into_event_type_for_passkey_removed
value: deletion
if: '["passkey_removed"].contains(ctx?.event?.action)'

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.

Suggested change
if: '["passkey_removed"].contains(ctx?.event?.action)'
if: ctx.event?.action == 'passkey_removed'

field: event.category
value: iam
if: '["account_disabled_password_leak","2sv_disable","2sv_enroll","account_disabled_generic","account_disabled_spamming_through_relay","account_disabled_spamming","account_disabled_hijacked","titanium_enroll","titanium_unenroll","gov_attack_warning"].contains(ctx?.event?.action)'
if: '["account_disabled_password_leak","2sv_disable","2sv_enroll","account_disabled_generic","account_disabled_spamming_through_relay","account_disabled_spamming","account_disabled_hijacked","titanium_enroll","titanium_unenroll","gov_attack_warning","passkey_enrolled","passkey_removed"].contains(ctx?.event?.action)'

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.

Suggested change
if: '["account_disabled_password_leak","2sv_disable","2sv_enroll","account_disabled_generic","account_disabled_spamming_through_relay","account_disabled_spamming","account_disabled_hijacked","titanium_enroll","titanium_unenroll","gov_attack_warning","passkey_enrolled","passkey_removed"].contains(ctx?.event?.action)'
if: '["account_disabled_password_leak","2sv_disable","2sv_enroll","account_disabled_generic","account_disabled_spamming_through_relay","account_disabled_spamming","account_disabled_hijacked","titanium_enroll","titanium_unenroll","gov_attack_warning","passkey_enrolled","passkey_removed"].contains(ctx.event?.action)'

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

✅ All changelog entries have the correct PR link.

@brijesh-elastic
brijesh-elastic requested a review from efd6 July 29, 2026 06:16
tag: append_network_into_event_category
value: network
if: ctx.google_workspace?.meet?.name != null && ctx.google_workspace.meet.name == "call_ended"
if: '["call_ended","dialed_out","ring_sent","ring_answered","ring_missed"].contains(ctx.google_workspace?.meet?.name)'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Severity: 🟡 Medium confidence: medium path: packages/google_workspace/data_stream/meet/elasticsearch/ingest_pipeline/default.yml:100

Narrowing the network category to five ring/call events leaves the stream and presentation events with an event.type but no event.category; extend the list to the conference/stream events as well.

Details

The condition now matches only call_ended, dialed_out, ring_sent, ring_answered and ring_missed, but the set_event_type_from_meet_name script directly below (lines 107-146) assigns an event.type to roughly forty event names. Everything outside those five now emits an event.type with no event.category at all: the regenerated test-meet.log-expected.json shows presentation-started and invitation-sent with "type": ["info"] and no category, and sample_event.json lost its category block entirely. poll_created and question_created are the sharpest case - they emit event.type: ["creation"] with nothing to group under, and in ECS event.type is a sub-bucket of event.category, so a type without a category cannot be filtered or aggregated in Security. The earlier feedback on this line asked for the category to be restricted to the call/stream events; the stream and presentation events (presentation_started, presentation_stopped, livestream_watched, broadcast_activity, in_meet_broadcast_activity, recording_activity, transcription_activity, streaming_session_explicit_consent) are part of that set but were left out of the new list.

Recommendation:

Extend the network list to the conference and streaming events so they keep a category alongside their type:

  - append:
      field: event.category
      tag: append_network_into_event_category
      value: network
      if: >-
        ["call_ended","dialed_out","ring_sent","ring_answered","ring_missed",
         "presentation_started","presentation_stopped","livestream_watched",
         "broadcast_activity","in_meet_broadcast_activity","recording_activity",
         "transcription_activity","streaming_session_explicit_consent"].contains(ctx.google_workspace?.meet?.name)

For the remaining in-meeting activity that has an event.type but no natural network semantics (poll_created, question_created, hand_raised, send_chat_everyone, ...), add a configuration fallback so no event ships a type without a category:

  - append:
      field: event.category
      tag: append_configuration_into_event_category
      value: configuration
      if: ctx.event?.category == null && ctx.google_workspace?.meet?.name != null

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

@vera-review-bot

Copy link
Copy Markdown

Review summary

Issues found across the latest commits fb9cc32 — 1 medium
  • 🟡 Narrowing the network category to five ring/call events leaves the stream and presentation events with an event.type but no event.category (link) (Unresolved)
Issues found across earlier commits fed75d7 — 6 medium, 2 low
  • 🟡 The vault event.category script still writes [null] for unmapped event names (link) (Unresolved)
  • 🟡 The event.type lookup scripts were not given the same null-guard as the event.category scripts, so unmapped event names still produce event.type: [null]. (link) (Unresolved)
  • 🔵 password_breach was added to the event.type map but not the event.category map, so those events get an event.type with no event.category. (link) (Unresolved)
  • 🟡 The issues pipeline sets event.type and now event.action but never sets event.category (link) (Unresolved)
  • 🔵 The new comment documents mapping a closed issue to event.type deletion (link) (Unresolved)
  • 🟡 The new ~90-line categorization script has only one pipeline test event, so the auth, iam and configuration branches are entirely untested (link) (Unresolved)
  • 🟡 Twelve new conditional branches were added to the device pipeline but the test fixture still has only two events (link) (Unresolved)
  • 🟡 Widening event.category: network to every Meet event mislabels non-network activity such as poll_created, hand_raised and send_chat_everyone (link) (Unresolved)
Issues found across earlier commits a3a239d63d97a1 (41 commits) — 3 high, 6 medium, 2 low
  • 🟠 The chat event.category lookup map is missing 9 event names that the event.type map already handles, so common Chat events (message_posted, message_edited, reaction_added, ...) still ship with no event.category. Add the missing keys to the category params map. (link) (Resolved)
  • 🟠 Removing the unconditional event.type: info append while the replacement script only fires for mapped resources is a regression: audit records whose type is not in the new lookup now ship with no event.type and no event.category. Add a fallback for unmapped types. (link) (Resolved)
  • 🟡 The vault event.category map omits search, search_count and get_count_operation, which the event.type map does handle, so those records ship with no event.category. Add the three keys to the category map. (link) (Resolved)
  • 🟡 notification_triggered is handled by the calendar event.type map but is absent from the event.category map, so those events still ship with no event.category. Add it to the category params map. (link) (Resolved)
  • 🟡 The new file category append covers only attachment events, leaving created_note, deleted_note and edited_note_content with an event.type but no event.category. Extend the condition to the note events. (link) (Resolved)
  • 🟡 context_aware_access only categorizes the three ACCESS_DENY actions, so every other action — including the one in the data stream's own sample_event.json — still has no event.category or event.type. Add a fallback for unmatched actions. (link) (Unresolved)
  • 🟡 sample_event.json adds an event.id field that the graphactivitylogs pipeline never sets, so the documented example event does not match real output. Remove event.id and regenerate the sample from a system test. (link) (Resolved)
  • 🟡 types.add('info') runs unconditionally, so every Jamf event gets info alongside its real type — e.g. ["change","end","info"]. Only add info when the lookup produced no type. (link) (Resolved)
  • 🔵 passkey_enrolled and passkey_removed are added to both the creation/deletion appends and the info list, producing contradictory event.type values. Remove them from the info list. (link) (Resolved)
  • 🔵 ComputerAdded, MobileDeviceEnrolled and DeviceAddedToDEP are typed change, but each represents a record being created for the first time. Type them creation so they pair with the end used for un-enrolment. (link) (Resolved)
  • 🟠 YAML syntax error in default.yml (link) (Resolved)
Issues found across earlier commits 6c76d69 — 1 high
  • 🟠 YAML syntax error in default.yml (link) (Unresolved)
Issues found across earlier commits 91db7fe — 1 high
  • 🟠 YAML syntax error in default.yml (link) (Unresolved)

A new commit triggers another review — at most once every 15 minutes. I skip the PR while it's approved or has merge conflicts.

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

@infra-vault-gh-plugin-prod

Copy link
Copy Markdown

💚 Build Succeeded

History

cc @brijesh-elastic

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

LGTM but please wait for @kcreddy

@mergify

mergify Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

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

Nit only. LGTM.

Comment on lines +56 to +60
- set:
field: event.action
value: closed
tag: set_event_action_closed
if: ctx.github?.issues?.state == 'closed'

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.

Could also add event.reason based on state_reason.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Pull request that fixes a bug issue documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. Integration:azure Azure Logs Integration:github GitHub Integration:google_workspace Google Workspace Integration:jamf_pro Jamf Pro Integration:sublime_security Sublime Security mapping/pipeline issue Team:SDE-Crest Crest developers on the Security Integrations team [elastic/sit-crest-contractors] Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations]

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants