Conversation
…182) * docs: initial restructuring * wip: initial draft of IWA for sharphound * wip: IWA edits * wip: edits for IWA requirements * wip: edits for create collector client * refactor: create snippet for scan options and delete redundant page * wip: edits for adfs config * wip: edits for switching collector client auth * docs: apply suggestions from CR review * docs: apply suggestions from tech review
* docs: add Meta node information BED-4760 * fix: Three > Two; rabbit feedback * fix: update docs json for sidebar vis * docs: detail and link traversable edges for meta node
WalkthroughDocumentation updates across multiple areas including table layout guidance, new API endpoint specification for analysis requests, Meta node documentation, release notes for versions 8.7.0/2.10.0, and updates to navigation structure and API schema validation rules. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
* wip: added stub files for march release * wip: added v8.7.0 release notes * wip: added v8.7.0 release summary * style: replace badges w/ logo image * docs: added additional enhancements and fixed issues * docs: refresh announcements * docs: bump v8.7.0 release date * fix: links to release notes
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
docs/openapi.json (2)
13719-13719: Clarify DELETE description text.Line [13719] is hard to parse; simpler phrasing improves API docs readability.
✏️ Suggested wording
- "description": "Flags the API to request the cancellation of analyzing ingest data.", + "description": "Requests cancellation of the current ingest-data analysis.",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/openapi.json` at line 13719, Update the ambiguous DELETE operation description string "Flags the API to request the cancellation of analyzing ingest data." to a clearer, simpler sentence; locate the JSON "description" value that currently contains that exact text and replace it with a concise alternative such as "Requests cancellation of ongoing ingest data analysis." so the API docs are easier to read and unambiguous.
13634-13634: Use retrieval wording for the GET description.Line [13634] implies mutation (“Flags the API”), which is confusing for a GET endpoint.
✏️ Suggested wording
- "description": "Flags the API to request the information of an analysis request.", + "description": "Retrieves information about the current analysis request.",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/openapi.json` at line 13634, The GET operation's description string currently reads as a mutation ("Flags the API to request the information of an analysis request."); update the "description" value for that GET endpoint to use retrieval wording (e.g., "Retrieves information for an analysis request" or similar) so it clearly communicates a read-only operation; locate and replace the JSON "description" property for that GET operation in openapi.json (the string shown in the diff) with the new retrieval-focused text.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/openapi.json`:
- Around line 21046-21049: The top-level "type": "object" on the "value"
property conflicts with the following anyOf branches (which are
primitives/array); remove the top-level "type": "object" constraint and instead
place an object branch as the first entry inside the existing anyOf (e.g., add {
"type": "object", ... } as the first anyOf element), so that "value" is valid if
it matches any branch rather than being forced to be an object and a primitive
simultaneously.
---
Nitpick comments:
In `@docs/openapi.json`:
- Line 13719: Update the ambiguous DELETE operation description string "Flags
the API to request the cancellation of analyzing ingest data." to a clearer,
simpler sentence; locate the JSON "description" value that currently contains
that exact text and replace it with a concise alternative such as "Requests
cancellation of ongoing ingest data analysis." so the API docs are easier to
read and unambiguous.
- Line 13634: The GET operation's description string currently reads as a
mutation ("Flags the API to request the information of an analysis request.");
update the "description" value for that GET endpoint to use retrieval wording
(e.g., "Retrieves information for an analysis request" or similar) so it clearly
communicates a read-only operation; locate and replace the JSON "description"
property for that GET operation in openapi.json (the string shown in the diff)
with the new retrieval-focused text.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 58cff14f-b1aa-4948-b6ac-7077a1fe4c23
⛔ Files ignored due to path filters (3)
docs/images/release_notes/8_7_0/meta-nodes.pngis excluded by!**/*.pngdocs/images/release_notes/8_7_0/resize-columns.gifis excluded by!**/*.gifdocs/images/release_notes/8_7_0/zone-membership.gifis excluded by!**/*.gif
📒 Files selected for processing (8)
docs/analyze-data/explore/search.mdxdocs/docs.jsondocs/openapi.jsondocs/reference/datapipe/cancels-an-analysis-request.mdxdocs/reference/datapipe/gets-analysis-request-information.mdxdocs/resources/nodes/meta.mdxdocs/resources/release-notes/2026-03-04.mdxdocs/resources/release-notes/summary.mdx
| "type": "object", | ||
| "nullable": true, | ||
| "anyOf": [ | ||
| { |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Check if the file exists and get line count
if [ -f docs/openapi.json ]; then
wc -l docs/openapi.json
# Show the relevant lines
sed -n '21040,21060p' docs/openapi.json
else
echo "File not found"
fiRepository: SpecterOps/bloodhound-docs
Length of output: 698
🏁 Script executed:
#!/bin/bash
# Verify schemas where top-level "type":"object" is combined with anyOf containing non-object types.
python3 - <<'PY'
import json
from pathlib import Path
p = Path("docs/openapi.json")
doc = json.loads(p.read_text())
issues = []
def walk(node, path="$"):
if isinstance(node, dict):
if node.get("type") == "object" and isinstance(node.get("anyOf"), list):
anyof_types = sorted({
s.get("type")
for s in node["anyOf"]
if isinstance(s, dict) and "type" in s
})
non_object = [t for t in anyof_types if t not in (None, "object")]
if non_object:
issues.append((path, anyof_types, non_object))
for k, v in node.items():
walk(v, f"{path}.{k}")
elif isinstance(node, list):
for i, v in enumerate(node):
walk(v, f"{path}[{i}]")
walk(doc)
if not issues:
print("No conflicting schemas found.")
else:
print(f"Found {len(issues)} potentially conflicting schema(s):")
for path, all_types, non_obj_types in issues:
print(f"\nPath: {path}")
print(f" anyOf contains types: {all_types}")
print(f" Non-object types: {non_obj_types}")
PYRepository: SpecterOps/bloodhound-docs
Length of output: 361
Remove top-level type: "object" to resolve conflicting schema constraint.
The value property at line 21046 has "type": "object" combined with anyOf containing primitive types (string, number, boolean, array). In JSON Schema, both constraints apply simultaneously, making the schema logically impossible to satisfy—an instance cannot be both an object and a primitive type.
Move the object type into the anyOf branches as the first option:
Fix
"value": {
- "type": "object",
"nullable": true,
"anyOf": [
+ { "type": "object" },
{ "type": "string" },
{ "type": "number" },
{ "type": "boolean" },
{ "type": "array" }
]
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "type": "object", | |
| "nullable": true, | |
| "anyOf": [ | |
| { | |
| "value": { | |
| "nullable": true, | |
| "anyOf": [ | |
| { "type": "object" }, | |
| { "type": "string" }, | |
| { "type": "number" }, | |
| { "type": "boolean" }, | |
| { "type": "array" } | |
| ] | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/openapi.json` around lines 21046 - 21049, The top-level "type": "object"
on the "value" property conflicts with the following anyOf branches (which are
primitives/array); remove the top-level "type": "object" constraint and instead
place an object branch as the first entry inside the existing anyOf (e.g., add {
"type": "object", ... } as the first anyOf element), so that "value" is valid if
it matches any branch rather than being forced to be an object and a primitive
simultaneously.
Purpose
This pull request (PR) publishes docs for the March 4, 2026 release across the following versions:
Note
Confirm the release date before merging!
This includes individual PRs that have been reviewed and approved separately:
Staging
https://specterops-release-v8-7-0.mintlify.app/home
Summary by CodeRabbit
New Features
Bug Fixes
Documentation