)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"434245f4b3237f256eb499504fe7bf46d713aafa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4f3ba222_4d16c749","updated":"2026-07-21 08:29:52.000000000","message":"changes looks good.","commit_id":"b26c2665132b8d53401528d8238d0f244e96c3ac"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7ecf83cefd10a1898c7fbcac95ee8e4551849ac7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0333fa96_35208b0d","updated":"2026-07-21 07:06:54.000000000","message":"recheck ipv6 reboot test failure https://094176df01fe39df9079-34fcd5fb30272cfdbc43af9502f31d9b.ssl.cf2.rackcdn.com/openstack/a987470343de4d50bdc0effac6b0718e/testr_results.html","commit_id":"b26c2665132b8d53401528d8238d0f244e96c3ac"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"02d8288a9add38e36c8e513f0d0a182d45b67d9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"dfa5f4fd_c06082f3","updated":"2026-07-20 21:25:28.000000000","message":"recheck parent failed","commit_id":"b26c2665132b8d53401528d8238d0f244e96c3ac"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2aebd455cd2e7748a5b6fa2fbd2d4862ae271270","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c4dd1daf_f7384d5d","updated":"2026-07-21 19:43:04.000000000","message":"recheck parent","commit_id":"67bb428b3b788caf8ca6480bf36410d0f5246d00"}],"cyborg/policies/attributes.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":"7da716c9a9b882b2f19cf16e0f3a4bd89e03c24c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":61,"context_line":"        deprecated_rule\u003ddeprecated_get_one,"},{"line_number":62,"context_line":"    ),"},{"line_number":63,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":64,"context_line":"        name\u003d\u0027cyborg:attribute:create\u0027,"},{"line_number":65,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":66,"context_line":"        description\u003d\u0027Create an attribute record\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9dbcd129_9dbf7eb9","line":63,"updated":"2026-06-30 13:49:30.000000000","message":"Commit message rationale is thorough, but it does not name the exact invariant relied upon (base.ADMIN \u003d\u003d \u0027rule:admin_api\u0027, defined in cyborg/policies/base.py:106). The correctness of the removal hinges on that equality.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Anchors the review rationale to a concrete source-of-truth constant so reviewers can verify the no-op claim mechanically rather than by inspection.\n\n**Recommendation**:\nIn a follow-up or the change description, reference base.ADMIN and note that each removed bridge\u0027s check_str (\u0027rule:admin_api\u0027) is identical to the new default (base.ADMIN), making the OR a tautology.","commit_id":"2c5008f8b6725fc8f1a7d029e535bdb9f18053ff"}],"cyborg/policies/devices.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":"7da716c9a9b882b2f19cf16e0f3a4bd89e03c24c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":59,"context_line":"        deprecated_rule\u003ddeprecated_get_one,"},{"line_number":60,"context_line":"    ),"},{"line_number":61,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":62,"context_line":"        name\u003d\u0027cyborg:device:disable\u0027,"},{"line_number":63,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":64,"context_line":"        description\u003d\u0027Disable a device\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b0e15002_a95603b7","line":61,"updated":"2026-06-30 13:49:30.000000000","message":"The kept read bridges (get_one/get_all) and the now-un-bridged admin rules sit next to each other without a comment explaining why only reads carry a deprecated_rule. A future contributor could re-add a redundant bridge.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Prevents regression by documenting the invariant: a DeprecatedRule is only needed when the legacy check string differs from the new default (base.ADMIN equals rule:admin_api here).\n\n**Recommendation**:\nAdd a one-line NOTE comment above the admin-only DocumentedRuleDefault entries in devices.py, deployables.py, and attributes.py, e.g. \u0027# No deprecated_rule: legacy and new default are both rule:admin_api.\u0027","commit_id":"2c5008f8b6725fc8f1a7d029e535bdb9f18053ff"}],"doc/source/configuration/policy-concepts.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":"7da716c9a9b882b2f19cf16e0f3a4bd89e03c24c","unresolved":false,"context_lines":[{"line_number":257,"context_line":"  (``is_admin:True or project_id:%(project_id)s``)"},{"line_number":258,"context_line":"- ARQ create: ``rule:project_member_or_admin``"},{"line_number":259,"context_line":"- ARQ writes: ``rule:admin_or_owner``"},{"line_number":260,"context_line":"- Device, deployable, attribute reads: ``rule:admin_api``"},{"line_number":261,"context_line":"- Device profile reads: ``rule:admin_or_owner``"},{"line_number":262,"context_line":"- Device profile create/delete: ``rule:is_admin``"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"244f69ba_d7f05311","line":260,"updated":"2026-06-30 13:49:30.000000000","message":"Doc lists \u0027Device, deployable, attribute reads: rule:admin_api\u0027 as a bridge, but the read bridges are now the only ones for those resources and their new default is project_manager_or_admin, not admin_api. The label reads as the new default rather than the legacy bridge check string.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators reading the migration guide may misread which check string is the legacy bridge versus the new default, leading to incorrect policy overrides during the enforce_new_defaults transition window.\n\n**Suggestion**:\nClarify the list entry so the legacy-bridge semantics are unambiguous, e.g. \u0027Device, deployable, attribute reads: legacy bridge rule:admin_api (new default rule:project_manager_or_admin)\u0027. The create/delete/program admin-only rules intentionally have no bridge; consider stating that explicitly here too.","commit_id":"2c5008f8b6725fc8f1a7d029e535bdb9f18053ff"}]}
