Skip to content

BP-2693: Release notes (2026-06-16)#312

Merged
jeff-matthews merged 32 commits into
release/v9.3.0from
BP-2693-release-notes
Jun 15, 2026
Merged

BP-2693: Release notes (2026-06-16)#312
jeff-matthews merged 32 commits into
release/v9.3.0from
BP-2693-release-notes

Conversation

@jeff-matthews

@jeff-matthews jeff-matthews commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Purpose

This pull request (PR) adds release notes for the June 16, 2026 release to the release integration branch, which includes:

  • BloodHound v9.3.0
  • AzureHound v2.12.2
  • OpenHound v0.2.0

No release for:

  • SharpHound

There are several related PRs for supporting documentation that also need to be reviewed and merged separately to ensure cross references from release notes are reliable:

Staging

Summary by CodeRabbit

  • Documentation

    • Published release notes for BloodHound v9.3.0, OpenHound v0.1.5, and AzureHound v2.12.2, including new features, enhancements, and fixed issues.
    • Updated release notes navigation and summary pages.
    • Removed outdated AzureHound collector compatibility entry.
  • Chores

    • Updated schema validation constraints for node payload processing.

@jeff-matthews jeff-matthews self-assigned this Jun 9, 2026
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 756598bb-be78-434c-86d5-d39eaac50124

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

This PR updates OpenGraph node schema validation to allow empty kinds arrays and publishes comprehensive release notes for BloodHound v9.3.0, OpenHound v0.1.5, and AzureHound v2.12.2 dated 2026-06-16. Navigation and prior release documentation are adjusted accordingly.

Changes

OpenGraph schema relaxation

Layer / File(s) Summary
Relax kinds array schema constraint
docs/assets/opengraph/opengraph-node.json, docs/opengraph/developer/nodes.mdx
The minItems constraint for the kinds array is changed from 1 to 0 in both the OpenGraph node schema definition and embedded documentation schema, allowing nodes to validate with empty kinds arrays.

Release notes for 2026-06-16

Layer / File(s) Summary
New release notes document
docs/resources/release-notes/2026-06-16.mdx
New release notes file is created documenting OpenHound Jamf Pro and GitHub Enterprise SSO support, BloodHound enhancements including OpenGraph namespace data, full-path highlighting, analysis optimizations, and fixes across BloodHound API/Cypher/Posture, OpenHound, and AzureHound.
Release notes navigation and summary updates
docs/docs.json, docs/resources/release-notes/summary.mdx
Release notes navigation and summary pages register 2026-06-16 as a top-level entry with new features, enhancements, and fixed issues; prior release 2026-05-06 is moved into the archive group.
Remove obsolete AzureHound issue entry
docs/resources/release-notes/2026-05-28.mdx
AzureHound "Fixed Issues" section is removed from 2026-05-28 release notes after that issue is documented in the new 2026-06-16 release.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • SpecterOps/bloodhound-docs#302: Both PRs modify docs/resources/release-notes/summary.mdx to add a new dated release-note entry.
  • SpecterOps/bloodhound-docs#291: Both PRs modify the OpenGraph node payload schema in docs/assets/opengraph/opengraph-node.json and docs/opengraph/developer/nodes.mdx by changing the kinds array minItems constraint.

Suggested labels

opengraph, documentation

Suggested reviewers

  • craigw-SO
  • StephenHinck

Poem

🐰 A schema grows flexible, empty lists now shine,
Release notes bloom in June with features fine,
OpenHound learns to speak GitHub's tongue,
BloodHound soars with optimizations—onward, swung!
Hop along to v9.3.0, the docs are sung 📚✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title clearly and concisely identifies the main change: adding release notes for the 2026-06-16 release, with a ticket reference for tracking.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch BP-2693-release-notes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jeff-matthews

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
docs/opengraph/developer/nodes.mdx (2)

18-18: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Update user-facing documentation to reflect the relaxed schema constraint.

Lines 18 and 22 state that nodes require a kinds array without specifying that it can now be empty. Line 51 describes kinds as required (which remains true) but doesn't clarify that the array can be empty per the updated schema.

The embedded schema on line 192 now permits minItems: 0, allowing empty kinds arrays. The user-facing documentation should explicitly state whether empty arrays are valid, and if so, when they should be used.

📝 Suggested clarification

Consider adding a note after line 52:

 <ResponseField name="kinds" type="array" required>
   An array of strings that classify the node. You can include up to three kinds per node. The first value is the primary kind, which controls the node styling in the graph.
+
+  <Note>
+    While the `kinds` array is required, it may be empty. However, nodes with empty `kinds` arrays cannot participate in structured graphs or be matched in Cypher queries by kind label.
+  </Note>

Also applies to: 22-22, 51-52

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/opengraph/developer/nodes.mdx` at line 18, Update the user-facing text
in docs/opengraph/developer/nodes.mdx to clarify that the node property "kinds"
is required but may be an empty array per the updated schema (see embedded
schema permitting minItems: 0); explicitly state that empty "kinds" arrays are
valid and add a short guidance sentence describing when to use an empty array
(e.g., for nodes without categorical kinds or when kinds are intentionally
unspecified) so readers understand both the requirement and the allowed empty
state for "kinds".

54-54: ⚠️ Potential issue | 🟠 Major

Clarify semantics for nodes with an empty kinds array (minItems: 0) in Cypher and structured graphs

nodes.mdx says kinds values are used as Cypher labels (MATCH (n:Okta_User ...)) and that a node participates in a structured graph only if at least one kinds value matches an installed node_kinds.name. However, the kinds schema permits empty arrays (minItems: 0, while kinds is still required), and opengraph-node.json mirrors the same constraint.

Document what should happen when kinds: [], specifically:

  • Whether such nodes are ingested with no Neo4j labels (and therefore cannot be matched via MATCH (n:<kind>)).
  • Whether they are excluded from structured-graph capabilities (pathfinding/findings/metrics/etc.).
  • What the graph UI does for the “primary kind”/icon when there is no first kinds element.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/opengraph/developer/nodes.mdx` at line 54, Clarify the semantics for
nodes with an empty kinds array by updating the nodes.mdx documentation and
schema notes: state that when kinds: [] the node is ingested without any Neo4j
labels (so MATCH (n:<kind>) cannot match it), that it is not considered to
participate in structured-graph features tied to node_kinds.name (so
pathfinding/findings/metrics that rely on kind membership will exclude it), and
that the graph UI should fall back to a generic/unknown primary kind/icon when
there is no first kinds element; reference the kinds property, the
node_kinds.name matching rule, and opengraph-node.json so consumers and
implementers know the expected behavior and fallback.
docs/assets/opengraph/opengraph-node.json (1)

3-3: ⚠️ Potential issue | 🟠 Major

Fix kinds documentation/schema mismatch and clarify primary-kind/icon behavior for empty arrays.

In docs/assets/opengraph/opengraph-node.json, line 3 says each node has “at least one kind…”, but the kinds schema sets "minItems": 0 (lines 37-42), allowing an empty kinds array. The kinds description (line 42) assumes a first element exists for “primary kind”/icon selection; either document the intended fallback behavior for empty arrays (or explicitly tie it to metadata.source_kind appending) or change the constraint to minItems: 1. The examples (lines 46-71) only show non-empty kinds; add an example for the empty-array case if it’s intended to be supported.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/assets/opengraph/opengraph-node.json` at line 3, The docs/schema
mismatch: either require at least one kind or document fallback behavior when
kinds is empty; update docs/assets/opengraph/opengraph-node.json so the schema
and description align by either (A) set "kinds" array to "minItems": 1 and
update the description to assert a primary kind is always present, or (B) keep
"minItems": 0 but revise the "kinds" description to state what happens when the
array is empty (e.g., primary kind/icon selection falls back to
metadata.source_kind or a default) and add an example showing an empty "kinds":
[] case; ensure references to metadata.source_kind are explicit if used as the
fallback.
🧹 Nitpick comments (1)
docs/assets/opengraph/opengraph-node.json (1)

46-71: ⚡ Quick win

Add an example demonstrating empty kinds array.

All three examples show non-empty kinds arrays. Since the schema now allows minItems: 0, consider adding an example that demonstrates a valid node with an empty kinds array to clarify when and how this constraint should be used.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/assets/opengraph/opengraph-node.json` around lines 46 - 71, Add a new
example object in the "examples" array showing a valid node with an empty
"kinds" array (e.g., an entry with a unique "id" like "node-empty-kinds" and a
minimal "properties" object such as
{"environmentid":"my-environment-001","collected":false}) to demonstrate the
schema's allowance of minItems: 0 for the "kinds" field; ensure the object
follows the same shape as the other examples (includes "id", optional
"properties", and an explicit "kinds": []) so readers can see a correct
empty-case usage.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/resources/release-notes/2026-06-16.mdx`:
- Line 88: The markdown link target for "Object interaction" is malformed with
double slashes ("/analyze-data//explore/search#object-interaction"); locate the
link text "Object interaction" in the release notes and fix the href to remove
the extra slash so it reads "/analyze-data/explore/search#object-interaction" to
restore proper navigation.

In `@docs/resources/release-notes/summary.mdx`:
- Line 45: The table row link currently points to the wrong anchor
"`#incremental-edge-updates`"; update the link target in the Post-Processing table
cell (the markdown line containing "[Analysis Performance
Improvements](/resources/release-notes/2026-06-16#incremental-edge-updates)") to
use the actual heading anchor "`#analysis-performance-improvements`" so it matches
the "Analysis Performance Improvements" heading in the 2026-06-16 release notes.

---

Outside diff comments:
In `@docs/assets/opengraph/opengraph-node.json`:
- Line 3: The docs/schema mismatch: either require at least one kind or document
fallback behavior when kinds is empty; update
docs/assets/opengraph/opengraph-node.json so the schema and description align by
either (A) set "kinds" array to "minItems": 1 and update the description to
assert a primary kind is always present, or (B) keep "minItems": 0 but revise
the "kinds" description to state what happens when the array is empty (e.g.,
primary kind/icon selection falls back to metadata.source_kind or a default) and
add an example showing an empty "kinds": [] case; ensure references to
metadata.source_kind are explicit if used as the fallback.

In `@docs/opengraph/developer/nodes.mdx`:
- Line 18: Update the user-facing text in docs/opengraph/developer/nodes.mdx to
clarify that the node property "kinds" is required but may be an empty array per
the updated schema (see embedded schema permitting minItems: 0); explicitly
state that empty "kinds" arrays are valid and add a short guidance sentence
describing when to use an empty array (e.g., for nodes without categorical kinds
or when kinds are intentionally unspecified) so readers understand both the
requirement and the allowed empty state for "kinds".
- Line 54: Clarify the semantics for nodes with an empty kinds array by updating
the nodes.mdx documentation and schema notes: state that when kinds: [] the node
is ingested without any Neo4j labels (so MATCH (n:<kind>) cannot match it), that
it is not considered to participate in structured-graph features tied to
node_kinds.name (so pathfinding/findings/metrics that rely on kind membership
will exclude it), and that the graph UI should fall back to a generic/unknown
primary kind/icon when there is no first kinds element; reference the kinds
property, the node_kinds.name matching rule, and opengraph-node.json so
consumers and implementers know the expected behavior and fallback.

---

Nitpick comments:
In `@docs/assets/opengraph/opengraph-node.json`:
- Around line 46-71: Add a new example object in the "examples" array showing a
valid node with an empty "kinds" array (e.g., an entry with a unique "id" like
"node-empty-kinds" and a minimal "properties" object such as
{"environmentid":"my-environment-001","collected":false}) to demonstrate the
schema's allowance of minItems: 0 for the "kinds" field; ensure the object
follows the same shape as the other examples (includes "id", optional
"properties", and an explicit "kinds": []) so readers can see a correct
empty-case usage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a32bc5bf-3fba-4d46-a4f4-1c400eb9c94a

📥 Commits

Reviewing files that changed from the base of the PR and between 408122e and 6bd20d4.

📒 Files selected for processing (6)
  • docs/assets/opengraph/opengraph-node.json
  • docs/docs.json
  • docs/opengraph/developer/nodes.mdx
  • docs/resources/release-notes/2026-05-28.mdx
  • docs/resources/release-notes/2026-06-16.mdx
  • docs/resources/release-notes/summary.mdx
💤 Files with no reviewable changes (1)
  • docs/resources/release-notes/2026-05-28.mdx

Comment thread docs/resources/release-notes/2026-06-16.mdx Outdated
Comment thread docs/resources/release-notes/summary.mdx Outdated

<Update label="OpenHound" description="New Feature" tags={["Data Collection"]}>
{/*BED-8357*/}
## GitHub Enterprise SSO Support

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.

@zaton-netizen

Based on my reading of BED-8357, this adds new autogenerated reference docs for GitHub nodes and edges. I haven't run through that process before, but would be happy to do so if someone can show me.

What's less clear is whether this impacts any of the manually maintained configuration docs. Can you please confirm?

| Accessibility | [Accessibility Improvements](/resources/release-notes/2026-06-16#accessibility-improvements) | Navigate data tables more effectively with improved headers, sorting behavior, keyboard support, and screen reader announcements. |
| API | [OpenGraph Extension Namespace Visibility](/resources/release-notes/2026-06-16#opengraph-extension-namespace-visibility) | View each extension's namespace in the OpenGraph extension information API response. |
| Explore | [Full-Path Highlighting](/resources/release-notes/2026-06-16#full-path-highlighting) | Highlight the full path through a selected node so you can better isolate how it participates in longer Attack Paths. |
| OpenGraph (Enterprise) | [Pre-Installed SpecterOps Extensions](/resources/release-notes/2026-06-16#pre-installed-specterops-extensions) | Use supported GitHub, Jamf, and Okta OpenGraph extensions without a separate installation step. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

BloodHound Enterprise (not opengraph enterprise) this is a function in the SaaS app

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.

That's the pattern we're using on the summary page when an update applies to BloodHound Enterprise only. There's not enough room for the image like on the detailed release notes page.

See the Posture and Zone Builder updates on the lines below this. I can add clarification in the description, but otherwise we break the pattern.

| Accessibility | [Accessibility Improvements](/resources/release-notes/2026-06-16#accessibility-improvements) | Navigate data tables more effectively with improved headers, sorting behavior, keyboard support, and screen reader announcements. |
| API | [OpenGraph Extension Namespace Visibility](/resources/release-notes/2026-06-16#opengraph-extension-namespace-visibility) | View each extension's namespace in the OpenGraph extension information API response. |
| Explore | [Full-Path Highlighting](/resources/release-notes/2026-06-16#full-path-highlighting) | Highlight the full path through a selected node so you can better isolate how it participates in longer Attack Paths. |
| OpenGraph (Enterprise) | [Pre-Installed SpecterOps Extensions](/resources/release-notes/2026-06-16#pre-installed-specterops-extensions) | Use supported GitHub, Jamf, and Okta OpenGraph extensions in BloodHound Enterprise without a separate installation step. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Update to BloodHound Enterprise OpenGraph

@slokie-so slokie-so left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bueno

@jeff-matthews jeff-matthews merged commit 65f6572 into release/v9.3.0 Jun 15, 2026
3 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 15, 2026
@jeff-matthews jeff-matthews deleted the BP-2693-release-notes branch June 15, 2026 18:02
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants