You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
API addition only: accept features.enable_software_inventory on PATCH /api/v1/fleet/fleets/{id} with PATCH-merge semantics (omitted key keeps the stored value), following the features.historical_data pattern (TeamPayloadFeatures in server/fleet/teams.go + apply block in ee/server/service/teams.goModifyTeam).
Same effect as the existing GitOps path: no gating of software functionality and no cleanup of already-collected software when inventory is disabled.
No new activity for this field.
POST /fleets and PATCH /fleets/0 (Unassigned) keep ignoring features (pre-existing behavior, consistent with historical_data); Unassigned hosts follow the global config setting.
Test plan is finalized
Contributor API changes: No changes
Feature guide changes: No changes
Database schema migrations: No changes (fleet features live in the teams.config JSON column and already round-trip via GitOps)
This is a premium only feature: Yes (fleets endpoints are Premium-only; the global features.enable_software_inventory setting remains available in Fleet Free)
ℹ️ Please read this issue carefully and understand it. Pay special attention to UI wireframes, especially "dev notes".
Risk assessment
Risk level: Low
Test plan
Make sure to go through the list and consider all events that might be related to this story, so we catch edge cases earlier.
Core flow
Disable software inventory for a fleet via PATCH /api/v1/fleet/fleets/{id} with {"features": {"enable_software_inventory": false}} and verify the fleet's hosts stop receiving software_* detail queries on next check-in. Already-collected software remains visible until it goes stale — expected; matches existing GitOps behavior.
Re-enable via the same endpoint and verify software queries resume and inventory refreshes.
Modify other fleet settings (e.g. name, features.historical_data) without the enable_software_inventory key and verify the setting is unchanged (PATCH-merge semantics).
With global features.enable_software_inventory disabled, enable it on a fleet and verify that fleet's hosts still report software (fleet setting overrides global for the fleet's hosts).
API
Test all API endpoints added or modified in the API changes section of this issue
Verify any new API endpoints appear in the list when adding an API-only user. The API endpoints display name, method, and path is the same as listed in the API reference docs
Verify error handling for invalid inputs where applicable
Permissions
Verify role restrictions are applied correctly for global roles
Verify role restrictions are applied correctly for fleet-level roles
Edge cases
Invalid value (e.g. {"features": {"enable_software_inventory": "yes"}}) returns a 4xx error and does not change the setting.
PATCH /api/v1/fleet/fleets/0 (Unassigned) ignores features (pre-existing behavior, consistent with historical_data); Unassigned hosts follow the global config setting.
POST /api/v1/fleet/fleets ignores features in the payload; new fleets snapshot the global features (pre-existing behavior).
Toggling via fleetctl gitops after toggling via the API round-trips correctly: fleetctl generate-gitops reflects the API-set value.
Supplemental testing
Testing notes
Confirmation
Engineer: Added comment to user story confirming successful completion of test plan (include any special setup, test data, or configuration used during development/testing if applicable).
QA: Added comment to user story confirming successful completion of test plan.
QA: Determined whether this story needs Playwright automation.
Needs automation: Yes / No
If yes, filed a follow-up issue in the :help-qa project with status "Needs automation": TODO
Goal
Changes
Product
Engineering
Scope decisions (Slack thread):
API addition only: accept
features.enable_software_inventoryonPATCH /api/v1/fleet/fleets/{id}with PATCH-merge semantics (omitted key keeps the stored value), following thefeatures.historical_datapattern (TeamPayloadFeaturesinserver/fleet/teams.go+ apply block inee/server/service/teams.goModifyTeam).Same effect as the existing GitOps path: no gating of software functionality and no cleanup of already-collected software when inventory is disabled.
No new activity for this field.
POST /fleetsandPATCH /fleets/0(Unassigned) keep ignoringfeatures(pre-existing behavior, consistent withhistorical_data); Unassigned hosts follow the global config setting.Test plan is finalized
Contributor API changes: No changes
Feature guide changes: No changes
Database schema migrations: No changes (fleet features live in the
teams.configJSON column and already round-trip via GitOps)This is a premium only feature: Yes (fleets endpoints are Premium-only; the global
features.enable_software_inventorysetting remains available in Fleet Free)Risk assessment
Test plan
Core flow
PATCH /api/v1/fleet/fleets/{id}with{"features": {"enable_software_inventory": false}}and verify the fleet's hosts stop receivingsoftware_*detail queries on next check-in. Already-collected software remains visible until it goes stale — expected; matches existing GitOps behavior.name,features.historical_data) without theenable_software_inventorykey and verify the setting is unchanged (PATCH-merge semantics).features.enable_software_inventorydisabled, enable it on a fleet and verify that fleet's hosts still report software (fleet setting overrides global for the fleet's hosts).API
Permissions
Edge cases
{"features": {"enable_software_inventory": "yes"}}) returns a 4xx error and does not change the setting.PATCH /api/v1/fleet/fleets/0(Unassigned) ignoresfeatures(pre-existing behavior, consistent withhistorical_data); Unassigned hosts follow the global config setting.POST /api/v1/fleet/fleetsignoresfeaturesin the payload; new fleets snapshot the global features (pre-existing behavior).fleetctl gitopsafter toggling via the API round-trips correctly:fleetctl generate-gitopsreflects the API-set value.Supplemental testing
Testing notes
Confirmation