)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0636ad3d_b419d67b","updated":"2026-11-09 14:29:38.000000000","message":"the spec is mostly ok, but it needs to be adapted to the template changes we did (title case for section names) and add and `Upgrade Impact` section even if it\u0027s None","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e9c6be2c9a4e7f6458927621d064894b5a7afb08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"32fd8588_5ae567fd","updated":"2026-11-11 18:31:49.000000000","message":"thanks for the changes, I think this is almost ready, the only thing to clarify is the mechanism for the listed `lifecycle:preempt_policy` parameter","commit_id":"8d5ce7a9e634943b937ea08bd245ceb81235ed97"}],"specs/2027.1/approved/preemptible-instances.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":"83c326c43456a75901a530fe41ab18575611f052","unresolved":false,"context_lines":[{"line_number":22,"context_line":"conditions are met—such as a lack of resources to create on-demand"},{"line_number":23,"context_line":"instances—one or more instances will have their resources released."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"One of the reasons for the success of the cloud computing model stems"}],"source_content_type":"text/x-rst","patch_set":1,"id":"cebb5524_c5c85ee6","line":25,"updated":"2026-11-05 03:44:52.000000000","message":"The new spec renames required template sections and omits one, so tests/test_titles.py::test_template fails. The spec uses \"Problem description\" (line 25) and \"Proposed change\" (line 60) while the 2027.1 template requires \"Problem Description\" and \"Proposed Change\"; subsection casing also differs (e.g. \"Data model impact\" at line 295 vs \"Data Model Impact\"), and the required \"Upgrade Impact\" subsection (specs/2027.1-template.rst:277) is missing entirely.\n\n**Severity**: CRITICAL | **Confidence**: 0.98\n\n**Impact**: tests/test_titles.py is executed by `stestr run` in the pep8 env, and openstack-tox-pep8 is the check and gate job (.zuul.yaml). With the test failing, the gate never passes and the change cannot merge.\n\n**Priority**: Immediate\n**Recommendation**:\nRename the headings to the template\u0027s exact casing (\"Problem Description\", \"Proposed Change\", \"Data Model Impact\", \"REST API Impact\", \"Security Impact\", \"Notifications Impact\", \"Other End User Impact\", \"Other Deployer Impact\", \"Developer Impact\") and add an \"Upgrade Impact\" subsection under Proposed Change (write \"None\" or describe migration/Nova-version considerations), then rerun tox -e pep8.","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":false,"context_lines":[{"line_number":22,"context_line":"conditions are met—such as a lack of resources to create on-demand"},{"line_number":23,"context_line":"instances—one or more instances will have their resources released."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"One of the reasons for the success of the cloud computing model stems"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d65c2bd6_fcfdb3bf","line":25,"in_reply_to":"b48fe9ca_b4df363d","updated":"2026-11-11 17:54:44.000000000","message":"Done","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":22,"context_line":"conditions are met—such as a lack of resources to create on-demand"},{"line_number":23,"context_line":"instances—one or more instances will have their resources released."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"One of the reasons for the success of the cloud computing model stems"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b48fe9ca_b4df363d","line":25,"in_reply_to":"cebb5524_c5c85ee6","updated":"2026-11-09 14:29:38.000000000","message":"this is all valid","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Goal"},{"line_number":64,"context_line":"--------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":67,"context_line":"feature, we will need a new goal: **Workload Optimization**."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1401841a_8343eeaa","line":64,"updated":"2026-11-09 14:29:38.000000000","message":"nit, it looks better when the section markers match the section name length","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Goal"},{"line_number":64,"context_line":"--------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":67,"context_line":"feature, we will need a new goal: **Workload Optimization**."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf28e50c_5fb9aa21","line":64,"in_reply_to":"1401841a_8343eeaa","updated":"2026-11-11 17:54:44.000000000","message":"Done","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* **disk**: The local disk in GB (``disk``), including the root disk for"},{"line_number":196,"context_line":"  image-backed instances, ephemeral disk, and swap. The root disk of a"},{"line_number":197,"context_line":"  volume-backed instance is not counted. With ``dec``, instances with"},{"line_number":198,"context_line":"  the most local disk are preempted first."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"8e4edb10_24a62253","line":197,"updated":"2026-11-09 14:29:38.000000000","message":"I believe the root disck for volume-backed instances is added to the `disk` attribute in the compute model, how will we avoid counting it?","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e9c6be2c9a4e7f6458927621d064894b5a7afb08","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* **disk**: The local disk in GB (``disk``), including the root disk for"},{"line_number":196,"context_line":"  image-backed instances, ephemeral disk, and swap. The root disk of a"},{"line_number":197,"context_line":"  volume-backed instance is not counted. With ``dec``, instances with"},{"line_number":198,"context_line":"  the most local disk are preempted first."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c935c557_6da2d174","line":197,"in_reply_to":"2ba87c30_5ec0cfa8","updated":"2026-11-11 18:31:49.000000000","message":"ok, I misunderstood the text. I thought you were proposing to actively exclude it, not reflecting the fact that is 0 in the data model.","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":true,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* **disk**: The local disk in GB (``disk``), including the root disk for"},{"line_number":196,"context_line":"  image-backed instances, ephemeral disk, and swap. The root disk of a"},{"line_number":197,"context_line":"  volume-backed instance is not counted. With ``dec``, instances with"},{"line_number":198,"context_line":"  the most local disk are preempted first."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"2ba87c30_5ec0cfa8","line":197,"in_reply_to":"8e4edb10_24a62253","updated":"2026-11-11 17:54:44.000000000","message":"Humm, actually watcher sets the root disk as zero when the instance is BFV.\n\nhttps://github.com/openstack/watcher/blob/28e511b7f6a05ea6bfa66e3cc8e65c08b1a93fe0/watcher/decision_engine/model/collector/nova.py#L494\n\nIf there is any ephemeral or swap, those will be considered when accounting. I think that should be ok.","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"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":"83c326c43456a75901a530fe41ab18575611f052","unresolved":false,"context_lines":[{"line_number":245,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":246,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":247,"context_line":"in-memory information, or it can be **deleted**, in which delete the"},{"line_number":248,"context_line":"instance and all associated resources. The way to perform this on an"},{"line_number":249,"context_line":"instance will be via Watcher\u0027s actions and communicating with the Nova"},{"line_number":250,"context_line":"API."},{"line_number":251,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"a55b80b1_1e30b9c6","line":248,"updated":"2026-11-05 03:44:52.000000000","message":"Several newly added sentences are grammatically incomplete and make the intended meaning hard to recover: line 36 \"but this can also lead to underutilization resources\" (missing \"of\"); lines 225-227 \"it is part of the solution release the necessary resources with the fewest instances as possible\" (missing words); lines 248-249 \"it can be **deleted**, in which delete the instance and all associated resources\" (broken relative clause inside the action-policy definition); line 66 \"none of the already implemented Watcher\u0027s goals look fit on this feature\".\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Impact**: The sentences defining the preemption policy and the rationale for the preempted_instances_count indicator are difficult to parse, reducing the spec\u0027s value as the agreed reference for reviewers and implementers.\n\n**Recommendation**:\nReword the affected sentences, e.g. \"...or it can be **deleted**, in which case the delete action removes the instance and all associated resources\"; \"lead to underutilization of resources\"; \"it drives the solution to release the necessary resources with as few instances as possible\".","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"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":"83c326c43456a75901a530fe41ab18575611f052","unresolved":false,"context_lines":[{"line_number":249,"context_line":"instance will be via Watcher\u0027s actions and communicating with the Nova"},{"line_number":250,"context_line":"API."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":253,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":254,"context_line":"default value of ``delete``."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"a2068f30_3af5232a","line":252,"updated":"2026-11-05 03:44:52.000000000","message":"The Actions section says the operator configures the default preemption policy via the audit input parameter ``preemption_mode`` (default ``delete``), then a bare line \"*lifecycle:preempt_policy\u003dshelve|delete*\" (line 256) follows with no prose. The spec never states where this property is set (flavor property? instance metadata?), whether it overrides ``preemption_mode``, or what happens when only one of the two is configured.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Two conforming implementations can behave differently (flavor wins vs parameter wins), so the spec fails its purpose of agreeing the approach before code lands; delete-vs-shelve per instance is a user-visible difference between destroying data and retaining it in shelved state.\n\n**Suggestion**:\nState where ``lifecycle:preempt_policy`` is set and define precedence explicitly, e.g. \"a per-flavor lifecycle:preempt_policy overrides the audit-level preemption_mode default; instances of flavors without the property use preemption_mode\".","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":259,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"},{"line_number":260,"context_line":"directory."},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"6746a043_c3d67c91","line":258,"updated":"2026-11-09 14:29:38.000000000","message":"This should be changed to reflect that the actions were merged during 2026.2","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":259,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"},{"line_number":260,"context_line":"directory."},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"0d99add3_ebea5afb","line":258,"in_reply_to":"6746a043_c3d67c91","updated":"2026-11-11 17:54:44.000000000","message":"Done. Changed to describe that those actions are already implemented. Thanks","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":347,"context_line":"Work Items"},{"line_number":348,"context_line":"----------"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"* Create two new actions under applier/actions/"},{"line_number":351,"context_line":"* Create a new goal under decision_engine/goal/goals.py"},{"line_number":352,"context_line":"* Create efficacy indicators under decision_engine/goal/efficacy/indicators.py"},{"line_number":353,"context_line":"* Create a new strategy under decision_engine/strategy/strategies/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"347e2300_5a06fe8a","line":350,"updated":"2026-11-09 14:29:38.000000000","message":"this is already done","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":true,"context_lines":[{"line_number":347,"context_line":"Work Items"},{"line_number":348,"context_line":"----------"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"* Create two new actions under applier/actions/"},{"line_number":351,"context_line":"* Create a new goal under decision_engine/goal/goals.py"},{"line_number":352,"context_line":"* Create efficacy indicators under decision_engine/goal/efficacy/indicators.py"},{"line_number":353,"context_line":"* Create a new strategy under decision_engine/strategy/strategies/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"db066a06_54bd9b8b","line":350,"in_reply_to":"347e2300_5a06fe8a","updated":"2026-11-11 17:54:44.000000000","message":"In that case, is it better remove the bullet point or reference what was done?","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e9c6be2c9a4e7f6458927621d064894b5a7afb08","unresolved":true,"context_lines":[{"line_number":347,"context_line":"Work Items"},{"line_number":348,"context_line":"----------"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"* Create two new actions under applier/actions/"},{"line_number":351,"context_line":"* Create a new goal under decision_engine/goal/goals.py"},{"line_number":352,"context_line":"* Create efficacy indicators under decision_engine/goal/efficacy/indicators.py"},{"line_number":353,"context_line":"* Create a new strategy under decision_engine/strategy/strategies/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dc73bf65_ea92602e","line":350,"in_reply_to":"db066a06_54bd9b8b","updated":"2026-11-11 18:31:49.000000000","message":"In the Propose Change section we should reference that is already done, in the Work Items we can simply remove it IMO","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"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":"83c326c43456a75901a530fe41ab18575611f052","unresolved":false,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* Unit tests will cover the **PreemptInstances** strategy logic (threshold"},{"line_number":367,"context_line":"  evaluation, candidate filtering/invariants, sorting on ``age``, ``vcpu``,"},{"line_number":368,"context_line":"  ``ram``, and ``disk`` in both directions, rejection of unsupported keys,"},{"line_number":369,"context_line":"  and efficacy indicators), as well as the ``delete`` and ``shelve`` actions"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d665a424_7e98d20c","line":366,"updated":"2026-11-05 03:44:52.000000000","message":"The Proposed Change section introduces the strategy as \"Workload Preemption\" (line 78: \"This spec adds a new strategy called **Workload Preemption**\"), but the Testing section refers to \"the **PreemptInstances** strategy logic\" (line 366). The document never reconciles the two names, and Watcher strategies are identified by one registered name used in entry points, the strategy API, and audit templates.\n\n**Severity**: WARNING | **Confidence**: 0.85\n\n**Impact**: Implementers and later code reviewers cannot tell the canonical strategy name; the name will be baked into setup.cfg entry points, the strategies API, and audit-template usage, so an inconsistent spec invites divergent naming between documentation and code.\n\n**Suggestion**:\nPick one name for the strategy and use it consistently; update the Testing bullet (and the Documentation Impact strategy-matrix item if applicable) to match the name introduced in the Strategy section.","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* Unit tests will cover the **PreemptInstances** strategy logic (threshold"},{"line_number":367,"context_line":"  evaluation, candidate filtering/invariants, sorting on ``age``, ``vcpu``,"},{"line_number":368,"context_line":"  ``ram``, and ``disk`` in both directions, rejection of unsupported keys,"},{"line_number":369,"context_line":"  and efficacy indicators), as well as the ``delete`` and ``shelve`` actions"}],"source_content_type":"text/x-rst","patch_set":1,"id":"e45adf35_6ed4f7ca","line":366,"in_reply_to":"d665a424_7e98d20c","updated":"2026-11-09 14:29:38.000000000","message":"minor change, but valid","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":false,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* Unit tests will cover the **PreemptInstances** strategy logic (threshold"},{"line_number":367,"context_line":"  evaluation, candidate filtering/invariants, sorting on ``age``, ``vcpu``,"},{"line_number":368,"context_line":"  ``ram``, and ``disk`` in both directions, rejection of unsupported keys,"},{"line_number":369,"context_line":"  and efficacy indicators), as well as the ``delete`` and ``shelve`` actions"}],"source_content_type":"text/x-rst","patch_set":1,"id":"cac7662d_2ed95824","line":366,"in_reply_to":"e45adf35_6ed4f7ca","updated":"2026-11-11 17:54:44.000000000","message":"Done","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fb96df2b5514ae3d9b8b38acdc791bfd1b3751ab","unresolved":true,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":397,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c798f26e_603310b8","line":396,"updated":"2026-11-09 14:29:38.000000000","message":"I don\u0027t think we should have downstream trackers in specs","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"wdasilva@redhat.com","username":"winiciusallan"},"change_message_id":"93f0fcf97c2d6b4e63cc3430a6eea61eb932f985","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":397,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":1,"id":"387909bd_96e7c61e","line":396,"in_reply_to":"c798f26e_603310b8","updated":"2026-11-11 17:54:44.000000000","message":"Done","commit_id":"afd7d4a3127df974740c350fafc17e3d4a516543"},{"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":"fb51a5868f3dabd697cd72802e218aff8a5de02f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":222,"context_line":"criteria:"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":225,"context_line":"  instances. This is important because it is part of the solution"},{"line_number":226,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":227,"context_line":"  possible."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5c2e2d99_a3af2639","line":224,"updated":"2026-11-11 18:06:28.000000000","message":"Three wording defects reduce the clarity of the spec: (1) lines 224-227 read \"it is part of the solution release the necessary resources with the fewest instances as possible\", missing the connecting clause (intended: \"part of the solution that releases the necessary resources using as few instances as possible\"); (2) lines 34-36 end with \"lead to underutilization resources\" (missing \"of\") and use \"ensures a project to have\"; (3) lines 66-67 read \"none of the already implemented Watcher\u0027s goals look fit on this feature\". The first is the most consequential because it garbles the definition of the preempted_instances_count efficacy indicator used to rank solutions.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Impact**: Readers of the approved spec must reconstruct the intended sentences; the preempted_instances_count description is the worst case because it defines the indicator the strategy minimizes, and ambiguity there propagates into indicator implementation and review.\n\n**Recommendation**:\nReword lines 224-227 to, e.g., \"This is important because the solution should release the necessary resources using as few instances as possible.\"; change lines 34-36 to \"...lead to underutilization of resources\" and \"ensures that a project has\"; and rephrase lines 66-67 to, e.g., \"Since none of Watcher\u0027s existing goals fit this feature\".","commit_id":"8d5ce7a9e634943b937ea08bd245ceb81235ed97"},{"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":"fb51a5868f3dabd697cd72802e218aff8a5de02f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"preserves its data while releasing compute resources. Both actions call Nova"},{"line_number":247,"context_line":"and neither supports revert."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":250,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":251,"context_line":"default value of ``delete``."},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"a09f757e_921c3e35","line":249,"updated":"2026-11-11 18:06:28.000000000","message":"The Actions section tells operators to configure the default preemption policy via the strategy input parameter ``preemption_mode`` (default ``delete``), then lists the line ``lifecycle:preempt_policy\u003dshelve|delete`` immediately below with no explanation of where that property is set or how it interacts with ``preemption_mode``. The spec never states whether a flavor-level ``lifecycle:preempt_policy`` overrides the strategy parameter, and \u0027Other Deployer Impact\u0027 documents only ``lifecycle:preemptable``. The 2026.2 version at least defined the shelve/delete policies in prose before this line; this rewrite kept the bare property line while dropping that context.\n\n**Severity**: WARNING | **Confidence**: 0.82\n\n**Impact**: An implementer of the Workload Preemption strategy cannot determine precedence between the strategy parameter and the flavor property, and operators cannot predict whether a flavor tagged ``lifecycle:preempt_policy\u003ddelete`` overrides a ``preemption_mode\u003dshelve`` audit. Future code review of the strategy has no normative reference for this decision, allowing divergent implementations.\n\n**Suggestion**:\nState explicitly that ``lifecycle:preempt_policy`` is a flavor property that overrides the strategy-level ``preemption_mode`` default when set (and its behavior when absent), or delete the property line from the Actions section if per-flavor policy selection is no longer proposed for 2027.1.","commit_id":"8d5ce7a9e634943b937ea08bd245ceb81235ed97"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e9c6be2c9a4e7f6458927621d064894b5a7afb08","unresolved":true,"context_lines":[{"line_number":246,"context_line":"preserves its data while releasing compute resources. Both actions call Nova"},{"line_number":247,"context_line":"and neither supports revert."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":250,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":251,"context_line":"default value of ``delete``."},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"2acf015c_056ae800","line":249,"in_reply_to":"a09f757e_921c3e35","updated":"2026-11-11 18:31:49.000000000","message":"this is a good point that I missed before, is `preempt_policy` a strategy inpute parameter set in the audit, or a flavor property like `preemptable`?","commit_id":"8d5ce7a9e634943b937ea08bd245ceb81235ed97"}]}
