)]}'
{"specs/2026.2/approved/action-plan-transformers.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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Action Plan Transformers Framework"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/watcher/+spec/action-plan-transformers"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"f1ffc271_0e38080d","line":9,"updated":"2026-06-24 09:12:55.000000000","message":"Several RST section title underlines are 1-2 characters longer than their title text. Affected sections: line 9 (title 34 chars, underline 36), line 187 (31 vs 33), line 232 (27 vs 28), line 380 (38 vs 39), line 428 (34 vs 36).\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Matching underline lengths to title text is clean RST practice. While Sphinx tolerates over-long underlines, exact matching avoids potential warnings and is the convention used throughout the rest of this spec.\n\n**Recommendation**:\nTrim each mismatched underline to exactly match the title length above it. For example, line 9 should be 34 equals characters, line 187 should be 31 dash characters, etc.","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9b1a14ce1cf39a2616442b6072290a67c3d61d4c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Action Plan Transformers Framework"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/watcher/+spec/action-plan-transformers"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c230f4ac_3ab30cec","line":9,"in_reply_to":"f1ffc271_0e38080d","updated":"2026-06-24 09:38:28.000000000","message":"done","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"This spec also introduces the **composable planner** architecture: an"},{"line_number":88,"context_line":"abstract base class ``ComposablePlanner`` derived from ``BasePlanner``"},{"line_number":89,"context_line":"and implementa **all** the ordering and dependency setting logic to"},{"line_number":90,"context_line":"a transformer chain. Concrete subclasses define their specific transformer"},{"line_number":91,"context_line":"chain by overriding a ``transformers`` property. Each subclass is"},{"line_number":92,"context_line":"registered as a stevedore planner plugin, and different strategies can"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b8c18791_fe53c02b","line":89,"updated":"2026-06-24 09:12:55.000000000","message":"Grammar error on line 89: \u0027and implementa all the ordering and dependency setting logic to a transformer chain\u0027 contains a misspelling. \u0027implementa\u0027 should be \u0027implements\u0027, and \u0027to\u0027 should likely be \u0027via\u0027 or \u0027through\u0027 for clarity.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Spelling and grammar errors in a specification document reduce readability and professional polish, and can create ambiguity about intended meaning.\n\n**Suggestion**:\nChange to \u0027and implements all of the ordering and dependency-setting logic through a transformer chain.\u0027","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9b1a14ce1cf39a2616442b6072290a67c3d61d4c","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"This spec also introduces the **composable planner** architecture: an"},{"line_number":88,"context_line":"abstract base class ``ComposablePlanner`` derived from ``BasePlanner``"},{"line_number":89,"context_line":"and implementa **all** the ordering and dependency setting logic to"},{"line_number":90,"context_line":"a transformer chain. Concrete subclasses define their specific transformer"},{"line_number":91,"context_line":"chain by overriding a ``transformers`` property. Each subclass is"},{"line_number":92,"context_line":"registered as a stevedore planner plugin, and different strategies can"}],"source_content_type":"text/x-rst","patch_set":1,"id":"77b41348_e1f20623","line":89,"in_reply_to":"b8c18791_fe53c02b","updated":"2026-06-24 09:38:28.000000000","message":"done","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    [watcher_planner]"},{"line_number":152,"context_line":"    # Global default planner. Used for any strategy that does not have"},{"line_number":153,"context_line":"    # a specific override below."},{"line_number":154,"context_line":"    planner \u003d weight"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    # Per-strategy planner overrides."},{"line_number":157,"context_line":"    # Format: \u003cstrategy_name\u003e_planner \u003d \u003cplanner_name\u003e"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b03dad04_b65a657d","line":154,"updated":"2026-06-24 09:12:55.000000000","message":"Contradictory global planner option name. Planner Selection section (line 154) uses \u0027planner \u003d weight\u0027, but Other deployer impact (line 649) and Work Items (line 695) both call it \u0027default_planner\u0027. Same option, two different names.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: An implementer following this spec will not know which option name to use, leading to either a mismatch between documented and implemented behavior or a broken planner selection mechanism.\n\n**Priority**: Before merge\n**Why This Matters**: Configuration option names are part of the public API surface for operators. A contradictory spec will produce an implementation that does not match documentation, confusing operators and developers alike.\n\n**Recommendation**:\nPick one name and use it consistently across all sections (Planner Selection example, resolution order, Other deployer impact, Work Items). Recommend standardizing on \u0027default_planner\u0027 since it is less ambiguous, and update lines 145, 154, and 164-165 accordingly.","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9b1a14ce1cf39a2616442b6072290a67c3d61d4c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    [watcher_planner]"},{"line_number":152,"context_line":"    # Global default planner. Used for any strategy that does not have"},{"line_number":153,"context_line":"    # a specific override below."},{"line_number":154,"context_line":"    planner \u003d weight"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    # Per-strategy planner overrides."},{"line_number":157,"context_line":"    # Format: \u003cstrategy_name\u003e_planner \u003d \u003cplanner_name\u003e"}],"source_content_type":"text/x-rst","patch_set":1,"id":"820e6e68_80403aaf","line":154,"in_reply_to":"b03dad04_b65a657d","updated":"2026-06-24 09:38:28.000000000","message":"done","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    # Per-strategy planner overrides."},{"line_number":157,"context_line":"    # Format: \u003cstrategy_name\u003e_planner \u003d \u003cplanner_name\u003e"},{"line_number":158,"context_line":"    zone_migration_planner \u003d composable"},{"line_number":159,"context_line":"    workload_stabilization_planner \u003d composable"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The resolution order for which planner to use is:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"4276fc32_cf6432dd","line":158,"updated":"2026-06-24 09:12:55.000000000","message":"Example config uses \u0027composable\u0027 as planner name (lines 158-159) but no planner with that name is registered. Stevedore entry points (lines 183-184) only register \u0027weight_composable\u0027 and \u0027interleave_composable\u0027.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: An operator following this example would configure a planner name that does not exist, causing planner loading to fail at runtime. The example is technically incorrect as written.\n\n**Priority**: Before merge\n**Why This Matters**: The example configuration in the Planner Selection section is the primary reference operators will use. If it references a non-existent planner name, it undermines trust in the entire spec and will cause deployment failures.\n\n**Recommendation**:\nReplace \u0027composable\u0027 in lines 158-159 and lines 171-172 with a real registered planner name (e.g., \u0027weight_composable\u0027 or \u0027interleave_composable\u0027), or add a \u0027composable\u0027 entry point to the registration listing at lines 178-184 if a generic composable planner is intended.","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9b1a14ce1cf39a2616442b6072290a67c3d61d4c","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    # Per-strategy planner overrides."},{"line_number":157,"context_line":"    # Format: \u003cstrategy_name\u003e_planner \u003d \u003cplanner_name\u003e"},{"line_number":158,"context_line":"    zone_migration_planner \u003d composable"},{"line_number":159,"context_line":"    workload_stabilization_planner \u003d composable"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The resolution order for which planner to use is:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3abd83fb_9cc20dcd","line":158,"in_reply_to":"4276fc32_cf6432dd","updated":"2026-06-24 09:38:28.000000000","message":"done","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":524,"context_line":"``nova_service_state_lifecycle``"},{"line_number":525,"context_line":"  Inspects ``change_nova_service_state`` actions and, based on a"},{"line_number":526,"context_line":"  configurable target state parameter, adds parent dependencies to"},{"line_number":527,"context_line":"  ensure that those actions run after migrations affecting the same"},{"line_number":528,"context_line":"  host have completed. This allows expressing ordering constraints"},{"line_number":529,"context_line":"  within a single action type based on action parameters, which cannot"},{"line_number":530,"context_line":"  be achieved by ``weight_order`` alone since it groups by action type."}],"source_content_type":"text/x-rst","patch_set":1,"id":"045a5182_700e6abb","line":527,"updated":"2026-06-24 09:12:55.000000000","message":"The nova_service_state_lifecycle transformer description (lines 524-534) references a \u0027configurable target state parameter\u0027 but, unlike all three other built-in transformers, lacks a \u0027Configuration options:\u0027 subsection listing its options.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: The spec is incomplete for this transformer. Developers and operators will not know what configuration parameters it accepts or their defaults, making it inconsistent with the other transformer descriptions.\n\n**Suggestion**:\nAdd a \u0027Configuration options:\u0027 subsection after the nova_service_state_lifecycle description, documenting the target state parameter (e.g., \u0027target_state: the Nova service state that triggers the lifecycle ordering, such as disabled or enabled\u0027).","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"3c2bf50efcc0879610ec3451c47dc09e8bbe43d3","unresolved":false,"context_lines":[{"line_number":524,"context_line":"``nova_service_state_lifecycle``"},{"line_number":525,"context_line":"  Inspects ``change_nova_service_state`` actions and, based on a"},{"line_number":526,"context_line":"  configurable target state parameter, adds parent dependencies to"},{"line_number":527,"context_line":"  ensure that those actions run after migrations affecting the same"},{"line_number":528,"context_line":"  host have completed. This allows expressing ordering constraints"},{"line_number":529,"context_line":"  within a single action type based on action parameters, which cannot"},{"line_number":530,"context_line":"  be achieved by ``weight_order`` alone since it groups by action type."}],"source_content_type":"text/x-rst","patch_set":1,"id":"05440293_9fcaade1","line":527,"in_reply_to":"045a5182_700e6abb","updated":"2026-06-24 09:27:57.000000000","message":"Parameters of execution of nova_service_state_lifecycle would not depend on system-config parameters from file but on parameters used  when calling it from the planner. i.e. nova_service_state_lifecycle could be called with an option to move all the actions whose target state is enabled after all the migrate actions (that\u0027s what current node_resource_consolidation planner does). In other cases we may want to put at the end the disabled... Those be parameters in call-time, not static config file options.","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"e08a82f0444ffaa337b02fcc8e296faba7d4963a","unresolved":false,"context_lines":[{"line_number":551,"context_line":"in the workload stabilization and node resource consolidation planners"},{"line_number":552,"context_line":"can be reimplemented as transformers (e.g., a ``resource_serialization``"},{"line_number":553,"context_line":"transformer that serializes actions affecting the same resource). However"},{"line_number":554,"context_line":"this logic is currently not used as the workload_stabilization strategy"},{"line_number":555,"context_line":"is only creation ``migrate`` actions, and not ``resize`` ones."},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fe050ae1_67fde979","line":554,"updated":"2026-06-24 09:12:55.000000000","message":"Grammar error on line 554: \u0027is only creation migrate actions\u0027 should be \u0027is only creating migrate actions\u0027. The word \u0027creation\u0027 is used as a verb but is a noun.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Grammatical error reduces clarity of the explanation about why the resource_serialization transformer is not needed for workload_stabilization.\n\n**Suggestion**:\nChange \u0027is only creation\u0027 to \u0027is only creating\u0027. Full sentence: \u0027this logic is currently not used as the workload_stabilization strategy is only creating migrate actions, and not resize ones.\u0027","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9b1a14ce1cf39a2616442b6072290a67c3d61d4c","unresolved":false,"context_lines":[{"line_number":551,"context_line":"in the workload stabilization and node resource consolidation planners"},{"line_number":552,"context_line":"can be reimplemented as transformers (e.g., a ``resource_serialization``"},{"line_number":553,"context_line":"transformer that serializes actions affecting the same resource). However"},{"line_number":554,"context_line":"this logic is currently not used as the workload_stabilization strategy"},{"line_number":555,"context_line":"is only creation ``migrate`` actions, and not ``resize`` ones."},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":1,"id":"68c8e278_4dd748f5","line":554,"in_reply_to":"fe050ae1_67fde979","updated":"2026-06-24 09:38:28.000000000","message":"done","commit_id":"16df524c50eb8701776cda9b6673d8475b5c0f26"},{"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":"34441f25f94db10820ad6a39138b872546ff838c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    class ComposablePlanner(BasePlanner):"},{"line_number":202,"context_line":"        \"\"\"Abstract base for transformer-based planners.\"\"\""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        @abc.abstractproperty"},{"line_number":205,"context_line":"        def transformers(self):"},{"line_number":206,"context_line":"            \"\"\"Return ordered list of transformer plugin names.\"\"\""},{"line_number":207,"context_line":"            raise NotImplementedError()"}],"source_content_type":"text/x-rst","patch_set":2,"id":"d833a9a0_1b2ea45e","line":204,"updated":"2026-06-24 09:59:31.000000000","message":"abc.abstractproperty is deprecated since Python 3.3 and will be removed. The proposed ComposablePlanner code sample uses it for the \u0027transformers\u0027 property. Implementation should use @property combined with @abc.abstractmethod instead.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Using deprecated API in a spec\u0027s reference code sample sets a poor precedent for implementers. If copied verbatim, it may emit DeprecationWarnings and break on future Python versions where abstractproperty is removed.\n\n**Suggestion**:\nReplace \u0027@abc.abstractproperty\u0027 with stacked decorators \u0027@property\u0027 and \u0027@abc.abstractmethod\u0027 in the code sample to model current Python best practices.","commit_id":"49db5f8940c297fec7af47612746428d71d2a843"},{"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":"34441f25f94db10820ad6a39138b872546ff838c","unresolved":false,"context_lines":[{"line_number":536,"context_line":"  * ``max_parallel``: comma-separated ``type:count`` pairs specifying"},{"line_number":537,"context_line":"    the maximum number of concurrent actions per type."},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"``nova_service_state_lifecycle``"},{"line_number":540,"context_line":"  Inspects ``change_nova_service_state`` actions and, based on a"},{"line_number":541,"context_line":"  configurable target state parameter, adds parent dependencies to"},{"line_number":542,"context_line":"  ensure that those actions run after migrations affecting the same"}],"source_content_type":"text/x-rst","patch_set":2,"id":"e41c40ec_94dabc1b","line":539,"updated":"2026-06-24 09:59:31.000000000","message":"nova_service_state_lifecycle is one of four built-in transformers but is not used by either proposed composable planner subclass. It reproduces node resource consolidation logic, yet no corresponding composable planner subclass is defined, leaving its use case without a delivery path.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The transformer is implemented and registered but has no planner chain that uses it. This creates dead infrastructure on landing and leaves the stated goal of reproducing the node resource consolidation planner as composable transformers unfulfilled.\n\n**Suggestion**:\nEither add a third composable planner subclass whose chain includes nova_service_state_lifecycle, or explicitly state that this transformer is provided for out-of-tree planner subclasses and defer its built-in chain to a follow-up.","commit_id":"49db5f8940c297fec7af47612746428d71d2a843"},{"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":"34441f25f94db10820ad6a39138b872546ff838c","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    the maximum number of concurrent actions per type."},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"``nova_service_state_lifecycle``"},{"line_number":540,"context_line":"  Inspects ``change_nova_service_state`` actions and, based on a"},{"line_number":541,"context_line":"  configurable target state parameter, adds parent dependencies to"},{"line_number":542,"context_line":"  ensure that those actions run after migrations affecting the same"},{"line_number":543,"context_line":"  host have completed. This allows expressing ordering constraints"}],"source_content_type":"text/x-rst","patch_set":2,"id":"8c2a4dd4_d9b605b4","line":540,"updated":"2026-06-24 09:59:31.000000000","message":"nova_service_state_lifecycle mentions \u0027a configurable target state parameter\u0027 but omits the \u0027Configuration options\u0027 sub-section that all three sibling transformers include. The option name, format, and default value are undocumented.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Implementers and operators lack the information needed to configure or test this transformer\u0027s parameter. The inconsistency with sibling transformer descriptions makes the spec ambiguous at the point a developer would write the code.\n\n**Suggestion**:\nAdd a \u0027Configuration options\u0027 block for nova_service_state_lifecycle documenting the target state option name, accepted values, and default, matching the format used by the other three built-in transformers.","commit_id":"49db5f8940c297fec7af47612746428d71d2a843"},{"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":"34441f25f94db10820ad6a39138b872546ff838c","unresolved":false,"context_lines":[{"line_number":698,"context_line":"-----------"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":"Primary assignee:"},{"line_number":701,"context_line":"  \u003ctbd\u003e"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"Other contributors:"},{"line_number":704,"context_line":"  None"}],"source_content_type":"text/x-rst","patch_set":2,"id":"936c7ca1_d5c2bc9d","line":701,"updated":"2026-06-24 09:59:31.000000000","message":"The Assignee field is \u0027\u003ctbd\u003e\u0027. While acceptable for early spec review, an approved spec in the 2026.2 cycle should identify at least a primary assignee to signal implementation ownership and improve accountability.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A named assignee clarifies who drives implementation, helps reviewers track progress, and aligns with the template\u0027s intent that a primary author or contact be designated.\n\n**Recommendation**:\nReplace \u0027\u003ctbd\u003e\u0027 with the launchpad ID of the primary implementer before or at final approval.","commit_id":"49db5f8940c297fec7af47612746428d71d2a843"}]}
