)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39344,"name":"Gihong Lee","display_name":"gamio","email":"gh9231@gmail.com","username":"gamio"},"change_message_id":"9eea5ca75c1b5a885749c7cbff2b4288fe4e60cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"470b2646_844f18f0","updated":"2026-08-21 14:22:09.000000000","message":"lgtm, the [nvme] group and opts read cleanly and match the existing conf modules.","commit_id":"ec37a31872327c14562e5f16434cc504544633ce"}],"cyborg/conf/nvme.py":[{"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":"128c7f15573aa2935a1af1a4700bbf4620aa2bcc","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"nvme_opts \u003d ["},{"line_number":24,"context_line":"    cfg.MultiStrOpt("},{"line_number":25,"context_line":"        \u0027device_spec\u0027,"},{"line_number":26,"context_line":"        default\u003d[],"},{"line_number":27,"context_line":"        help\u003d\"\"\""},{"line_number":28,"context_line":"Specifications for NVMe devices to manage."}],"source_content_type":"text/x-python","patch_set":11,"id":"3d73ee54_60f19160","line":25,"updated":"2026-08-14 14:52:45.000000000","message":"The device_spec option defaults to []. For operators, an empty spec in the final NVMe driver series most likely means no NVMe devices are discovered/managed. Neither the help text nor the commit message documents this consequence or that discovery is entirely opt-in.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators deploying the NVMe support enabled in this series may expect devices to be discovered automatically and see none, with no warning pointing at [nvme]/device_spec as the cause.\n\n**Suggestion**:\nAdd a sentence to the device_spec help text stating that with no device_spec set the NVMe driver discovers no devices (empty spec \u003d discovery disabled), and that multiple device_spec lines may be supplied to match several device classes.","commit_id":"2be9e9d58612fbcd65c1c8b33de260a314851dd0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7b15744d9ded5b4d267bb9330f850b578ba757ed","unresolved":true,"context_lines":[{"line_number":27,"context_line":"        help\u003d\"\"\""},{"line_number":28,"context_line":"Specifications for NVMe devices to manage."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Each value is a JSON object with optional keys: vendor_id"},{"line_number":31,"context_line":"(PCI vendor, e.g. \"8086\"), product_id (PCI product, e.g."},{"line_number":32,"context_line":"\"0001\"), address (PCI address glob or regex, e.g."},{"line_number":33,"context_line":"\"0000:0a:00.*\"), clear_action (auto, sanitize, or zero;"},{"line_number":34,"context_line":"default auto), clear_strategy (auto, crypto, or block;"},{"line_number":35,"context_line":"default auto). At least one of vendor_id, product_id, or"},{"line_number":36,"context_line":"address is required."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Example: device_spec \u003d {\"vendor_id\": \"8086\"}"},{"line_number":39,"context_line":"\"\"\","}],"source_content_type":"text/x-python","patch_set":13,"id":"539b996b_b3c0034c","line":36,"range":{"start_line":30,"start_character":0,"end_line":36,"end_character":20},"updated":"2026-08-18 11:46:52.000000000","message":"this is over wrapped","commit_id":"92eca6527369990b9d82365c0e723419d69a9263"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a33ea403e4996f9fae399f7a30cfc81f3f7f244c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        help\u003d\"\"\""},{"line_number":28,"context_line":"Specifications for NVMe devices to manage."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Each value is a JSON object with optional keys: vendor_id"},{"line_number":31,"context_line":"(PCI vendor, e.g. \"8086\"), product_id (PCI product, e.g."},{"line_number":32,"context_line":"\"0001\"), address (PCI address glob or regex, e.g."},{"line_number":33,"context_line":"\"0000:0a:00.*\"), clear_action (auto, sanitize, or zero;"},{"line_number":34,"context_line":"default auto), clear_strategy (auto, crypto, or block;"},{"line_number":35,"context_line":"default auto). At least one of vendor_id, product_id, or"},{"line_number":36,"context_line":"address is required."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Example: device_spec \u003d {\"vendor_id\": \"8086\"}"},{"line_number":39,"context_line":"\"\"\","}],"source_content_type":"text/x-python","patch_set":13,"id":"7647a6e1_ab2d9216","line":36,"range":{"start_line":30,"start_character":0,"end_line":36,"end_character":20},"in_reply_to":"539b996b_b3c0034c","updated":"2026-08-20 07:09:34.000000000","message":"Done","commit_id":"92eca6527369990b9d82365c0e723419d69a9263"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7b15744d9ded5b4d267bb9330f850b578ba757ed","unresolved":true,"context_lines":[{"line_number":35,"context_line":"default auto). At least one of vendor_id, product_id, or"},{"line_number":36,"context_line":"address is required."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Example: device_spec \u003d {\"vendor_id\": \"8086\"}"},{"line_number":39,"context_line":"\"\"\","},{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.IntOpt("}],"source_content_type":"text/x-python","patch_set":13,"id":"412a07d6_6e756446","line":38,"range":{"start_line":38,"start_character":1,"end_line":38,"end_character":44},"updated":"2026-08-18 11:46:52.000000000","message":"it would be nice ot include some other examples","commit_id":"92eca6527369990b9d82365c0e723419d69a9263"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"355cd1d92ef9a48c01ebf80cf28a8af37ba0d4d2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"default auto). At least one of vendor_id, product_id, or"},{"line_number":36,"context_line":"address is required."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Example: device_spec \u003d {\"vendor_id\": \"8086\"}"},{"line_number":39,"context_line":"\"\"\","},{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.IntOpt("}],"source_content_type":"text/x-python","patch_set":13,"id":"79b9addd_d07f565f","line":38,"range":{"start_line":38,"start_character":1,"end_line":38,"end_character":44},"in_reply_to":"0eefade4_5f7042e4","updated":"2026-08-21 15:12:47.000000000","message":"Done","commit_id":"92eca6527369990b9d82365c0e723419d69a9263"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a33ea403e4996f9fae399f7a30cfc81f3f7f244c","unresolved":true,"context_lines":[{"line_number":35,"context_line":"default auto). At least one of vendor_id, product_id, or"},{"line_number":36,"context_line":"address is required."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Example: device_spec \u003d {\"vendor_id\": \"8086\"}"},{"line_number":39,"context_line":"\"\"\","},{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.IntOpt("}],"source_content_type":"text/x-python","patch_set":13,"id":"0eefade4_5f7042e4","line":38,"range":{"start_line":38,"start_character":1,"end_line":38,"end_character":44},"in_reply_to":"412a07d6_6e756446","updated":"2026-08-20 07:09:34.000000000","message":"I have added detailed examples. Now it almost all the format which is supported by PCI driver.","commit_id":"92eca6527369990b9d82365c0e723419d69a9263"},{"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":"2a29507afbb203060c752d2d8ff092b4dc3abca6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  device_spec \u003d {\"address\": \"0000:0a:00.*\", \"clear_strategy\": \"crypto\"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  # Explicit sanitize command with crypto-erase strategy"},{"line_number":57,"context_line":"  device_spec \u003d {\"vendor_id\": \"1c5f\", \"clear_action\": \"sanitize\", \"clear_strategy\": \"crypto\"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  # Match by per-field regex address"},{"line_number":60,"context_line":"  device_spec \u003d {\"address\": {\"bus\": \"0a\", \"slot\": \"00\", \"function\": \"[0-3]\"}}"}],"source_content_type":"text/x-python","patch_set":14,"id":"940c200e_cbc6f7e3","line":57,"updated":"2026-08-20 07:19:53.000000000","message":"The MultiStrOpt help string in cyborg/conf/nvme.py contains an example line that is 93 characters long: \u0027  device_spec \u003d {\"vendor_id\": \"1c5f\", \"clear_action\": \"sanitize\", \"clear_strategy\": \"crypto\"}\u0027. The project sets \u0027line-length \u003d 79\u0027 in [tool.ruff] (pyproject.toml) and HACKING.rst defers to OpenStack style commandments, which use a 79-character limit. This line escapes mechanical enforcement because tox.ini\u0027s flake8 selects only H,C checks and ruff\u0027s lint select (E4, E7, E9, F, ...) omits E501, while the ruff formatter does not reflow string literals.\n\n**Severity**: SUGGESTION | **Confidence**: 0.85\n\n**Impact**: Inconsistent with the project\u0027s declared 79-character limit in operator-facing text that is rendered into the generated cyborg.conf.sample, and it sets a precedent of over-length lines that the project\u0027s deliberately narrowed lint config will not flag.\n\n**Recommendation**:\nWrap the example onto two lines, e.g. keep the JSON on one shorter line: \u0027  device_spec \u003d {\"vendor_id\": \"1c5f\", \"clear_action\": \"sanitize\",\\n                  \"clear_strategy\": \"crypto\"}\u0027 — JSON tolerates the whitespace, so the rendered example stays copy-pasteable from the sample config.","commit_id":"f07c74581921e3a1a92220cbff9d239bba3243d0"},{"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":"f5e17499a353ec84fbca6a729ac4bb42307d539e","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  vendor_id      -- PCI vendor ID (e.g. \"1c5f\")"},{"line_number":36,"context_line":"  product_id     -- PCI product/model ID (e.g. \"0540\")"},{"line_number":37,"context_line":"  address        -- PCI address glob (e.g. \"0000:0a:00.*\") or per-field regex dict"},{"line_number":38,"context_line":"  clear_action   -- what to do when cleaning up: auto, sanitize, or zero"},{"line_number":39,"context_line":"  clear_strategy -- how to erase: auto, crypto, or block"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"0dba666a_779283e1","line":37,"updated":"2026-08-24 08:16:28.000000000","message":"The help text for [nvme]/device_spec describes the \u0027address\u0027 key as a \u0027PCI address glob (e.g. \"0000:0a:00.*\")\u0027 while the example uses \u0027.*\u0027, which is regex metacharacter syntax, not glob syntax (a glob wildcard is \u0027*\u0027). The same help block then says the address may be a \u0027per-field regex dict\u0027, reinforcing regex semantics. An operator cannot tell from the documentation whether to write a glob (\u00270000:0a:*\u0027) or a regex (\u00270000:0a:00.*\u0027).\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: An operator writing a true glob such as \u00270000:0a:*\u0027 or expecting glob semantics could produce a filter that silently matches no devices, so NVMe devices are not discovered (or, once a matcher lands, are matched differently than documented). Since the option is described as gating all NVMe discovery (\u0027If this option is not set, no NVMe devices are discovered\u0027), a miswritten filter has a direct operational effect with no error to point at the cause.\n\n**Suggestion**:\nPick one matching semantics and state it explicitly: either say \u0027PCI address regular expression\u0027 and keep \u0027.*\u0027 and the per-field regex examples, or keep \u0027glob\u0027 and change the example to glob syntax (\u00270000:0a:00*\u0027). Do this now while no consuming driver exists so the later matcher implementation inherits an unambiguous contract.","commit_id":"f4967250f215bf18f69fafae32f67c4606369bd6"}]}
