)]}'
{"api-ref/source/devices.inc":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cfb0e7579eff1514b6b6c47032d33c46003be061","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  - vendor_board_info: device_vendor_board_info_resp"},{"line_number":43,"context_line":"  - hostname: hostname_resp"},{"line_number":44,"context_line":"  - status: device_status_resp"},{"line_number":45,"context_line":"  - device_state: device_state_resp"},{"line_number":46,"context_line":"  - created_at: created"},{"line_number":47,"context_line":"  - updated_at: updated"},{"line_number":48,"context_line":"  - links: links"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"cbea3e0a_1edc201f","line":45,"updated":"2026-08-06 11:49:17.000000000","message":"The API reference for the List Devices endpoint was updated to include device_state in the response parameters, but the corresponding example JSON sample (devices-list-resp.json) was not updated to include the new field, creating an inconsistency between documented response schema and example out...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: The API reference and example output are inconsistent for the List Devices endpoint, which may confuse API consumers. The get-one example was correctly updated but the list example was overlooked.\n\n**Recommendation**:\nAdd \u0027\"device_state\": \"available\"\u0027 to the device object in doc/api_samples/devices/devices-list-resp.json, matching the format used in devices-getone-resp.json.","commit_id":"57bb4b8bd69d542850f795a49fe4cd4fb10e2b78"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cfb0e7579eff1514b6b6c47032d33c46003be061","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":".. rest_method:: POST /v2/devices/{device_uuid}/clean"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Trigger data cleanup on a device. The device must support cleaning"},{"line_number":142,"context_line":"(currently NVMe devices only) and must be in ``error`` or"},{"line_number":143,"context_line":"``pending_cleaning`` state. Returns ``202 Accepted`` and cleanup"},{"line_number":144,"context_line":"proceeds asynchronously."}],"source_content_type":"text/x-c++src","patch_set":2,"id":"3c1ad216_c2600df9","line":141,"updated":"2026-08-06 11:49:17.000000000","message":"The POST /v2/devices/{device_uuid}/clean API reference states the device must be in \u0027error\u0027 or \u0027pending_cleaning\u0027 state, but the actual implementation rejects pending_cleaning with a 409 Conflict response. Only devices in \u0027error\u0027 state are accepted.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Operators following the API reference will attempt to trigger cleanup on devices in pending_cleaning state and receive an unexpected 409 Conflict error. This creates confusion and erodes trust in the documentation.\n\n**Priority**: Before merge\n**Why This Matters**: Operators following the API reference will attempt to trigger cleanup on devices in pending_cleaning state and receive an unexpected 409 Conflict error. This creates confusion and erodes trust in the documentation.\n\n**Recommendation**:\nChange the API reference text from \u0027must be in ``error`` or ``pending_cleaning`` state\u0027 to \u0027must be in ``error`` state\u0027. Alternatively, if pending_cleaning should be acceptable, that would require a code change, but the current code clearly rejects it.","commit_id":"57bb4b8bd69d542850f795a49fe4cd4fb10e2b78"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"96df2cc543ff8319559e86212a9c6e3972cf5bf0","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Trigger data cleanup on a device. The device must support cleaning"},{"line_number":142,"context_line":"(currently NVMe devices only) and must be in ``error`` or"},{"line_number":143,"context_line":"``pending_cleaning`` state. Returns ``202 Accepted`` and cleanup"},{"line_number":144,"context_line":"proceeds asynchronously."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":".. note::"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"cb61f830_253f31a5","line":143,"updated":"2026-08-07 08:09:54.000000000","message":"The API reference for POST /v2/devices/{device_uuid}/clean states the device \u0027must be in error or pending_cleaning state\u0027, but the actual implementation only accepts devices in the error state. A device in pending_cleaning will receive a 409 Conflict.\n\n**Severity**: HIGH | **Confidence**: 1.0\n\n**Risk**: API consumers who read the reference and attempt to call POST /clean on a device in pending_cleaning state will receive an unexpected 409 Conflict. This could cause integration failures and wasted debugging time for operators and SDK developers.\n\n**Priority**: Before merge\n**Why This Matters**: API consumers who read the reference and attempt to call POST /clean on a device in pending_cleaning state will receive an unexpected 409 Conflict. This could cause integration failures and wasted debugging time for operators and SDK developers.\n\n**Recommendation**:\nRemove \u0027or pending_cleaning\u0027 from the description so it reads: \u0027The device must support cleaning (currently NVMe devices only) and must be in error state.\u0027 Alternatively, if accepting pending_cleaning is the intended behavior, fix the controller code to also accept that state.","commit_id":"b2c5109ed500b8b76ace36b0da4594efcc74ce49"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d6708321055c84a5516741e0d986ccfdd12e6ff0","unresolved":false,"context_lines":[{"line_number":139,"context_line":".. rest_method:: POST /v2/devices/{device_uuid}/clean"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Trigger data cleanup on a device. The device must support cleaning"},{"line_number":142,"context_line":"(currently NVMe devices only) and must be in ``error`` or"},{"line_number":143,"context_line":"``pending_cleaning`` state. Returns ``202 Accepted`` and cleanup"},{"line_number":144,"context_line":"proceeds asynchronously."},{"line_number":145,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":7,"id":"7cde532c_694a4a4e","line":142,"updated":"2026-08-07 17:23:23.000000000","message":"The new POST /v2/devices/{device_uuid}/clean API reference states the device must be in \u0027error\u0027 or \u0027pending_cleaning\u0027 state, but the actual implementation only accepts the \u0027error\u0027 state and returns HTTP 409 Conflict for any other state.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: API consumers who attempt to call POST /clean on a device in \u0027pending_cleaning\u0027 state based on this documentation will receive an unexpected HTTP 409 Conflict response, causing integration failures and eroding trust in the API reference.\n\n**Priority**: Before merge\n**Why This Matters**: API consumers who attempt to call POST /clean on a device in \u0027pending_cleaning\u0027 state based on this documentation will receive an unexpected HTTP 409 Conflict response, causing integration failures and eroding trust in the API reference.\n\n**Recommendation**:\nRemove \u0027or ``pending_cleaning``\u0027 from the description in devices.inc so it reads: \u0027The device must support cleaning (currently NVMe devices only) and must be in ``error`` state.\u0027 This aligns the API reference with the implementation and the admin guide.","commit_id":"e01f8aff6f3ad59bc4ca3a1fea6b67ee864840ac"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"34ab9e60fc23dc8d1055368081614e5beb2ec574","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":".. rest_method:: POST /v2/devices/{device_uuid}/clean"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Trigger data cleanup on a device. The device must support cleaning"},{"line_number":142,"context_line":"(currently NVMe devices only) and must be in ``error`` or"},{"line_number":143,"context_line":"``pending_cleaning`` state. Returns ``202 Accepted`` and cleanup"},{"line_number":144,"context_line":"proceeds asynchronously."}],"source_content_type":"text/x-c++src","patch_set":8,"id":"503ac4b1_e63b5e1b","line":141,"updated":"2026-08-09 06:17:35.000000000","message":"The API reference states the device must be in \u0027error\u0027 or \u0027pending_cleaning\u0027 state to trigger cleanup, but the actual API controller (devices.py:250) only accepts \u0027error\u0027 state and rejects \u0027pending_cleaning\u0027 with HTTP 409 Conflict (\u0027Device is already being cleaned\u0027).\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An operator or API consumer reading the docs would expect to be able to trigger cleanup on a device in pending_cleaning state, but would receive a 409 Conflict error. This could cause confusion during troubleshooting when a device appears stuck in pending_cleaning.\n\n**Suggestion**:\nChange the description to say the device must be in \u0027error\u0027 state only, removing \u0027pending_cleaning\u0027 from the list of acceptable states. Alternatively, if accepting pending_cleaning is intended, update the controller accordingly — but rejecting it is the correct behavior since pending_cleaning means cleanup is already queued.","commit_id":"826e5547dc93a2e64b7dee5a3e53e476c0abb597"}],"doc/source/admin/nvme-driver.rst":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c305a2d3977b61da322761c98234c88707f995e0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"   enabled_drivers \u003d nvme_driver"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"   [nvme]"},{"line_number":26,"context_line":"   # JSON filter to select which NVMe devices Cyborg manages."},{"line_number":27,"context_line":"   # All fields are optional; an empty object matches all NVMe devices."},{"line_number":28,"context_line":"   device_spec \u003d {\"vendor_id\": \"8086\", \"product_id\": \"0a54\"}"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b07f2a96_c625926f","line":26,"updated":"2026-08-06 17:42:34.000000000","message":"The nvme-driver.rst admin guide states that all device_spec fields are optional and that an empty object matches all NVMe devices. This directly contradicts the implementation in devspec.py, which requires at least one of vendor_id, product_id, or address. Additionally, the address field (PCI add...\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: An operator following the documentation may set device_spec to an empty JSON object expecting it to match all NVMe devices. The agent will instead raise PciConfigInvalidWhitelist at startup, preventing device discovery. Operators also cannot use PCI address filtering because the field is undocume...\n\n**Priority**: Before merge\n**Why This Matters**: An operator following the documentation may set device_spec to an empty JSON object expecting it to match all NVMe devices. The agent will instead raise PciConfigInvalidWhitelist at startup, preventing device discovery. Operators also cannot use PCI address filtering because the field is undocume...\n\n**Recommendation**:\nUpdate the device_spec section to state that at least one of vendor_id, product_id, or address is required. Document the address field (PCI address glob or /regex/ syntax). Remove or correct the \u0027empty object matches all devices\u0027 claim. Optionally note that device_spec is a MultiStrOpt and can be specified multiple times.","commit_id":"bb70a18e8a6fb11c2ad1c1726929694612fb0f2b"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"96df2cc543ff8319559e86212a9c6e3972cf5bf0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"2. **Block Erase** (``sanitize`` + ``block``): if ``sanicap`` bit 1"},{"line_number":75,"context_line":"   (BES) is set."},{"line_number":76,"context_line":"3. **Write Zeroes** (``zero``): if ``oncs`` bit 3 (WZ) is set."},{"line_number":77,"context_line":"4. **Format NVM** with Secure Erase: if ``oacs`` bit 3 (NS_MGMT) is"},{"line_number":78,"context_line":"   set."},{"line_number":79,"context_line":"5. No cleanup available: the device is placed in ``error`` state and"},{"line_number":80,"context_line":"   an operator alert is logged."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ac036cee_471b9002","line":77,"updated":"2026-08-07 08:09:54.000000000","message":"The NVMe driver admin guide documents a 5-step cleanup action selection hierarchy that includes \u0027Format NVM with Secure Erase\u0027 (step 4) and \u0027No cleanup available: device placed in error state\u0027 (step 5). Neither matches the actual driver code, which has no Format NVM cleanup path and falls back to...\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Operators reading this guide will expect Format NVM Secure Erase to be used for devices that support NS Management but lack sanitize/write-zeroes capabilities, and will expect unsupported devices to be in error state. In reality those devices receive a full shred and unsupported-policy devices ar...\n\n**Suggestion**:\nRemove step 4 (Format NVM) from the selection hierarchy and update step 5 to describe the actual fallback behavior: \u00274. Full Shred (zero_shred): if none of the above capabilities are available, the driver falls back to a full shred. If the configured action/strategy combination cannot be satisfied (e.g. sanitize requested but device lacks sanitize support), the device is excluded from the pool during discovery and an error is logged.\u0027","commit_id":"b2c5109ed500b8b76ace36b0da4594efcc74ce49"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d6708321055c84a5516741e0d986ccfdd12e6ff0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"   discover"},{"line_number":88,"context_line":"      |"},{"line_number":89,"context_line":"      v"},{"line_number":90,"context_line":"   available ──bind──\u003e allocated ──unbind──\u003e pending_cleaning"},{"line_number":91,"context_line":"      ^                                          |"},{"line_number":92,"context_line":"      |                                          v"},{"line_number":93,"context_line":"      +────────── cleanup success ────────── cleaning"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ee7ea3f6_b56e7478","line":90,"updated":"2026-08-07 17:23:23.000000000","message":"The ASCII art device lifecycle diagram in nvme-driver.rst shows manual POST /clean transitioning directly from \u0027error\u0027 to \u0027available\u0027, but the actual implementation routes through \u0027pending_cleaning\u0027 and \u0027cleaning\u0027 states before reaching \u0027available\u0027 or returning to \u0027error\u0027.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators relying on the diagram may believe POST /clean immediately returns a device to \u0027available\u0027 state, when in fact it must pass through pending_cleaning and cleaning first. This could cause confusion about when a device becomes ready for reallocation.\n\n**Suggestion**:\nUpdate the diagram to show the manual POST /clean path routing through pending_cleaning → cleaning (like the automatic path) rather than jumping directly to available. Alternatively, add a note below the diagram clarifying that manual cleanup follows the same pending_cleaning → cleaning → available/error transition as automatic cleanup.","commit_id":"e01f8aff6f3ad59bc4ca3a1fea6b67ee864840ac"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0f4a89ca34126949bc8f144862c0ea40656efdcd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"      |                                          v"},{"line_number":146,"context_line":"      +────────── cleanup success ────────── cleaning"},{"line_number":147,"context_line":"      |                                          |"},{"line_number":148,"context_line":"      +\u003c──── manual POST /clean ──── error \u003c─────+"},{"line_number":149,"context_line":"                                   (cleanup fail)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"``device_state`` values:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4881cb56_ecd41cfc","line":148,"updated":"2026-08-11 10:36:02.000000000","message":"The device lifecycle ASCII-art diagram in the admin guide draws an arrow from \u0027error\u0027 directly to \u0027available\u0027 labeled \u0027manual POST /clean\u0027. In the actual implementation, POST /clean dispatches cleanup asynchronously (returns 202), and the device transitions through pending_cleaning and cleaning b...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: An operator reading the diagram may expect the device to be immediately available after calling POST /clean, rather than going through the async pending_cleaning and cleaning states. This could cause confusion when polling device_state after triggering cleanup.\n\n**Recommendation**:\nEither redraw the \u0027manual POST /clean\u0027 arrow to route through pending_cleaning and cleaning (as the initial path does), or add a note clarifying that POST /clean triggers the same async pipeline (pending_cleaning -\u003e cleaning -\u003e available/error) rather than a direct state reset.","commit_id":"56600fe8c0bf7e97fb0f67c1954aa456450d743d"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"791e36e6ff923fd9f79e451bf9e846622bd3f4d6","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"4. Restart services in order: conductor, API, then agent."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"The agent is compatible with N-1 conductor versions. If the conductor"},{"line_number":248,"context_line":"has not been upgraded yet, cleanup dispatch calls are silently skipped"},{"line_number":249,"context_line":"and logged as warnings."},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"f4a2f77c_bb4cb8f8","line":247,"updated":"2026-08-11 17:01:46.000000000","message":"The admin guide states that if the conductor has not been upgraded, \u0027cleanup dispatch calls are silently skipped and logged as warnings.\u0027 The actual code does not silently skip cleanup. The API layer returns HTTP 400 badRequest when the agent RPC version is too old, and the conductor\u0027s dispatch_c...\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An operator reading the upgrade guide may believe cleanup failures during rolling upgrades are benign (silently skipped), when in fact devices will be set to \u0027error\u0027 state requiring manual intervention, or cleanup requests will be rejected at the API layer. This could lead to unexpected device un...\n\n**Suggestion**:\nRewrite the paragraph to accurately describe both failure modes: (1) the API layer rejects cleanup requests with HTTP 400 if the agent does not support RPC 1.1, and (2) if the conductor dispatches cleanup to an older agent, the device transitions to \u0027error\u0027 state. Alternatively, remove the paragraph if the compatibility details are too implementation-specific for an admin guide.","commit_id":"47d84a100aad5437ba01c5a508a9d355a2701f5a"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"4262e95a038abdb883e92c17ed12bb8345f9f8d9","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":".. code-block:: bash"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"   openstack accelerator device clean \u003cdevice-uuid\u003e"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Or via the REST API:"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"66a43194_ccddbeb4","line":191,"updated":"2026-08-12 10:38:53.000000000","message":"The admin guide presents \u0027openstack accelerator device clean \u003cdevice-uuid\u003e\u0027 as a usable command, but no OSC plugin implementing this subcommand exists in the cyborg repository or as a dependency. Operators following the guide will encounter an error.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators following the documented procedure for manual cleanup will run \u0027openstack accelerator device clean\u0027 and get a command-not-found or unrecognized-argument error. They must instead use the REST API (curl) approach documented below it.\n\n**Suggestion**:\nEither (1) qualify the command with a note that the OSC plugin must support it, or (2) remove the CLI example and keep only the curl example, or (3) implement the command in the cyborg OSC plugin.","commit_id":"926fbdc9e7da51d1d0f794490a3cb6cfad57a08e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"6cdf0d9dc928b70c0e34420917ac3f2fddfa561b","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"1. Run the database migration:"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"   .. code-block:: bash"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"      cyborg-manage db sync"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3bd3b558_12b8749f","line":256,"updated":"2026-08-13 06:51:01.000000000","message":"The admin NVMe guide\u0027s Upgrade section uses `cyborg-manage db sync` and `cyborg-manage db online_data_migrations`, but no `cyborg-manage` binary exists in this project. The actual entry points are `cyborg-dbsync` (subcommand `upgrade`) and `cyborg-dbsync online_data_migrations`, as defined in pyp...\n\n**Severity**: HIGH | **Confidence**: 1.0\n\n**Risk**: Operators following the upgrade guide will encounter \u0027command not found\u0027 errors when running the documented steps, blocking upgrades that involve the NVMe driver.\n\n**Priority**: Before merge\n**Why This Matters**: Operators following the upgrade guide will encounter \u0027command not found\u0027 errors when running the documented steps, blocking upgrades that involve the NVMe driver.\n\n**Recommendation**:\nReplace `cyborg-manage db sync` with `cyborg-dbsync upgrade` and `cyborg-manage db online_data_migrations` with `cyborg-dbsync online_data_migrations`, matching the project\u0027s actual command names.","commit_id":"765b9840fd84af9b2c828d95c35d99cca6d64651"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2055390b939074e8324cc351f04201a242eed5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  driver queries the device capabilities and picks the most secure"},{"line_number":57,"context_line":"  available method."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"``clear_strategy``"},{"line_number":60,"context_line":"  Override the sanitize sub-action. One of ``auto`` (default),"},{"line_number":61,"context_line":"  ``crypto`` (Crypto Erase), or ``block`` (Block Erase). Only used"},{"line_number":62,"context_line":"  when ``clear_action`` is ``sanitize`` or resolves to ``sanitize``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"44ce48db_b65feb7c","line":59,"updated":"2026-08-13 15:30:30.000000000","message":"The admin guide describes clear_strategy as \u0027Only used when clear_action is sanitize or resolves to sanitize under auto.\u0027 However, the zero+crypto combination is explicitly rejected at startup as invalid, meaning clear_strategy does affect validation when clear_action is zero.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators reading the field description alone would not realize that specifying clear_action\u003dzero with clear_strategy\u003dcrypto will cause agent startup failure. The matrix below clarifies this, but the description text is misleading on its own.\n\n**Suggestion**:\nUpdate the clear_strategy description to note the zero+crypto rejection, e.g.: \u0027Only meaningful when clear_action is sanitize or auto; however, clear_action\u003dzero with clear_strategy\u003dcrypto is explicitly rejected at startup.\u0027","commit_id":"f4d12aec1c42ccd92cb8e8f51350a7718bee9416"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2055390b939074e8324cc351f04201a242eed5","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":".. code-block:: bash"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"   openstack accelerator device clean \u003cdevice-uuid\u003e"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Or via the REST API:"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"c383211a_04049ed3","line":191,"updated":"2026-08-13 15:30:30.000000000","message":"The admin NVMe driver guide presents \u0027openstack accelerator device clean \u003cuuid\u003e\u0027 as a working CLI command. No such command exists: the project has no OSC plugin and python-cyborgclient does not implement a device clean subcommand.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Operators following the guide will attempt \u0027openstack accelerator device clean\u0027 and get \u0027command not found\u0027 or \u0027argument device: invalid choice\u0027 errors. The guide does provide correct curl alternatives, but the CLI examples undermine trust in the documentation.\n\n**Priority**: Before merge\n**Why This Matters**: Operators following the guide will attempt \u0027openstack accelerator device clean\u0027 and get \u0027command not found\u0027 or \u0027argument device: invalid choice\u0027 errors. The guide does provide correct curl alternatives, but the CLI examples undermine trust in the documentation.\n\n**Recommendation**:\nRemove the \u0027openstack accelerator device clean\u0027 CLI example and keep only the REST API curl example, or clearly label it as a proposed command not yet implemented. For \u0027openstack accelerator device show -c device_state\u0027, note that device_state is currently only visible via the REST API with the microversion 2.4 header.","commit_id":"f4d12aec1c42ccd92cb8e8f51350a7718bee9416"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2055390b939074e8324cc351f04201a242eed5","unresolved":false,"context_lines":[{"line_number":214,"context_line":"If Nova reports ``No valid host was found`` for an NVMe device profile,"},{"line_number":215,"context_line":"confirm that the backing NVMe devices are not already stuck in ``error``"},{"line_number":216,"context_line":"state:"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. code-block:: bash"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"   mysql -u root cyborg -e \\"}],"source_content_type":"text/x-rst","patch_set":14,"id":"38bddbf2_520f8d9e","line":217,"updated":"2026-08-13 15:30:30.000000000","message":"The upgrade section of the admin NVMe driver guide uses \u0027cyborg-manage db sync\u0027 and \u0027cyborg-manage db online_data_migrations\u0027. The actual installed commands are \u0027cyborg-dbsync upgrade\u0027 and \u0027cyborg-dbsync online_data_migrations\u0027 as defined by pyproject.toml entry points and existing project docume...\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Operators running \u0027cyborg-manage db sync\u0027 will get \u0027command not found\u0027. This blocks the documented upgrade workflow and causes confusion since the correct commands are documented elsewhere in the same doc set.\n\n**Priority**: Before merge\n**Why This Matters**: Operators running \u0027cyborg-manage db sync\u0027 will get \u0027command not found\u0027. This blocks the documented upgrade workflow and causes confusion since the correct commands are documented elsewhere in the same doc set.\n\n**Recommendation**:\nReplace \u0027cyborg-manage db sync\u0027 with \u0027cyborg-dbsync upgrade\u0027 and \u0027cyborg-manage db online_data_migrations\u0027 with \u0027cyborg-dbsync online_data_migrations\u0027. The \u0027cyborg-status upgrade check\u0027 command at line 231 is correct and needs no change.","commit_id":"f4d12aec1c42ccd92cb8e8f51350a7718bee9416"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"8738f593aa32ca6cc7f0d657a4b5c60273aafe70","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    +--------------+----------------+---------------------------------------+"},{"line_number":130,"context_line":"    | zero         | auto/block     | write zeroes, else shred              |"},{"line_number":131,"context_line":"    +--------------+----------------+---------------------------------------+"},{"line_number":132,"context_line":"    | zero         | crypto         | invalid — device excluded at startup  |"},{"line_number":133,"context_line":"    +--------------+----------------+---------------------------------------+"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Device Lifecycle"}],"source_content_type":"text/x-rst","patch_set":15,"id":"1707d5c8_c1fd5641","line":132,"updated":"2026-08-14 16:57:56.000000000","message":"The clear_action x clear_strategy matrix row \u0027zero | crypto | invalid - device excluded at startup\u0027 is wrong: the code rejects this combination with PciConfigInvalidWhitelist while parsing device_spec, aborting discovery for the driver rather than excluding one device.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: An operator who sets clear_action\u003dzero with clear_strategy\u003dcrypto expects one device to be skipped; instead NVMe discovery fails at startup. Troubleshooting based on the doc will look in the wrong place (device capabilities instead of configuration validation).\n\n**Suggestion**:\nChange the row to \u0027invalid - agent startup fails with PciConfigInvalidWhitelist; fix the device_spec\u0027 to match devspec.py behavior, and keep the capability-based exclusion wording only for the unsatisfiable-caps case.","commit_id":"6fdaf7c94cc45d261a6372159740a7e68e181dfe"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"8738f593aa32ca6cc7f0d657a4b5c60273aafe70","unresolved":false,"context_lines":[{"line_number":140,"context_line":"   discover"},{"line_number":141,"context_line":"      |"},{"line_number":142,"context_line":"      v"},{"line_number":143,"context_line":"   available ──bind──\u003e allocated ──unbind──\u003e pending_cleaning"},{"line_number":144,"context_line":"      ^                                          |"},{"line_number":145,"context_line":"      |                                          v"},{"line_number":146,"context_line":"      +────────── cleanup success ────────── cleaning"}],"source_content_type":"text/x-rst","patch_set":15,"id":"cb63953d_97708f13","line":143,"updated":"2026-08-14 16:57:56.000000000","message":"The ASCII state machine in the new admin guide attaches \u0027cleanup success\u0027 to the cleaning node and shows error returning to available via POST /clean, which contradicts both the prose below it and the actual state semantics.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Operators reading the diagram will conclude that \u0027cleaning\u0027 means cleanup succeeded and that POST /clean immediately frees an error device, leading to incorrect operational decisions (e.g. expecting a device to be schedulable right after issuing POST /clean).\n\n**Suggestion**:\nRedraw the diagram so the \u0027cleanup success\u0027 label sits on the cleaning-\u003eavailable edge and \u0027cleanup fail\u0027 on the cleaning-\u003eerror edge, and draw POST /clean as error-\u003epending_cleaning (restarting cleanup), matching the prose and the device_state value descriptions.","commit_id":"6fdaf7c94cc45d261a6372159740a7e68e181dfe"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"8738f593aa32ca6cc7f0d657a4b5c60273aafe70","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"   .. code-block:: bash"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"      cyborg-manage db sync"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"2. Run online data migrations:"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"6bddee6d_06239f8c","line":258,"updated":"2026-08-14 16:57:56.000000000","message":"The new admin guide instructs operators to run \u0027cyborg-manage db sync\u0027 and \u0027cyborg-manage db online_data_migrations\u0027, but this project ships no cyborg-manage binary and no \u0027db\u0027 subcommand structure.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Operators following the NVMe upgrade steps verbatim will get \u0027command not found: cyborg-manage\u0027 and may not run the schema migration or the device_state backfill, leaving devices with NULL device_state and failing the cyborg-status upgrade check.\n\n**Suggestion**:\nReplace with the real commands used elsewhere in the docs: \u0027cyborg-dbsync upgrade\u0027 and \u0027cyborg-dbsync online_data_migrations\u0027, or link to :doc:/admin/upgrade instead of duplicating the procedure with wrong command names.","commit_id":"6fdaf7c94cc45d261a6372159740a7e68e181dfe"}],"doc/source/contributor/nvme-driver.rst":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"2d543561c1b1e70fc33e92c372e5192befa3edc0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"Overview"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"This guide provides instructions for configuring NVMe (Non-Volatile Memory"},{"line_number":9,"context_line":"Express) and virtio-rng (Random Number Generator) device emulation and setting"},{"line_number":10,"context_line":"up the NVMe driver in Cyborg for development and testing."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"436ee343_8be414c1","line":8,"updated":"2026-08-12 16:15:47.000000000","message":"The contributor NVMe guide retains sections for adding and verifying virtio-rng devices, and the overview/scope still mention virtio-rng, but the DevStack configuration section was rewritten from the generic PCI driver (which could whitelist RNG devices) to the NVMe-specific driver, which has no...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Developers following the guide will add an RNG device to their VM but find no way to configure Cyborg to manage it, creating confusion about whether the NVMe driver supports non-NVMe devices.\n\n**Recommendation**:\nEither remove the virtio-rng sections (Add RNG Device, Verify RNG Device) and update the overview/scope to drop virtio-rng mentions, or add a note explaining that the RNG device setup is for general PCI testing only and is not managed by the nvme_driver.","commit_id":"5c701c65d7a858a5fc36a84bd03a440b4223472b"}]}
